@@ -131,6 +131,7 @@ type MMDVMModem struct {
131131 // protected by mutex
132132 exit bool
133133 lastStatusCheck time.Time
134+ lastTXData time.Time
134135 space int
135136 // end protected by mutex
136137
@@ -183,7 +184,8 @@ func NewMMDVMModem(
183184 }
184185
185186 m := & MMDVMModem {
186- sendCmds : make (chan []byte , 20 ),
187+ sendCmds : make (chan []byte , 100 ), // 4 seconds
188+ lastTXData : time .Now (),
187189 config : MMDVMConfig {
188190 duplex : duplex ,
189191 rxInvert : rxInvert ,
@@ -363,7 +365,7 @@ func (m *MMDVMModem) modemReceive() {
363365func (m * MMDVMModem ) modemSend () {
364366 log .Printf ("[DEBUG] modemSend starting" )
365367 for ! m .isExit () {
366- if m .getSpace () > 1 /*|| m.protocolVersion == 1*/ {
368+ if m .getSpace () > 1 {
367369 _ , err := m .port .Write (<- m .sendCmds )
368370 if err != nil {
369371 log .Printf ("[WARN] modemSend: Error writing to modem: %v" , err )
@@ -1007,14 +1009,30 @@ func (m *MMDVMModem) writeBits(typ byte, bits []Bit) {
10071009 cmd = append (cmd , buf ... )
10081010 m .sendToModem (cmd )
10091011}
1012+
10101013func (m * MMDVMModem ) writeEOT () {
10111014 // log.Printf("[DEBUG] writeEOT")
1012- cmd := []byte {mmdvmFrameStart , 3 , mmdvmM17EOT }
1015+ var buf []byte
1016+ for i := 0 ; i < BytesPerFrame / len (EOTMarkerBytes ); i ++ {
1017+ buf = append (buf , EOTMarkerBytes ... )
1018+ }
1019+ cmd := []byte {mmdvmFrameStart , byte (4 + len (buf )), mmdvmM17EOT , 0 }
1020+ cmd = append (cmd , buf ... )
10131021 m .sendToModem (cmd )
10141022}
10151023
10161024func (m * MMDVMModem ) sendToModem (cmd []byte ) {
1017- m .sendCmds <- cmd
1025+ select {
1026+ case m .sendCmds <- cmd :
1027+ // okay
1028+ since := time .Since (m .lastTXData )
1029+ if since > 100 * time .Millisecond {
1030+ log .Printf ("[DEBUG] Last TX data sent %v ago" , since .Round (time .Millisecond ))
1031+ }
1032+ m .lastTXData = time .Now ()
1033+ default :
1034+ fmt .Println ("[DEBUG] sendToModem message send failed" )
1035+ }
10181036}
10191037
10201038func (m * MMDVMModem ) getSpace () int {
0 commit comments