diff --git a/data_handler.py b/data_handler.py index fd048bcb..8196571c 100644 --- a/data_handler.py +++ b/data_handler.py @@ -689,10 +689,23 @@ def received_ping_ack(data_in): async def transmit_cq(): logging.info("CQ CQ CQ") - frame_type = bytes([200]) - cq_frame = frame_type + static.MYCALLSIGN - modem.transmit_signalling(cq_frame) + cq_frame = bytearray(14) + cq_frame[:1] = bytes([200]) + cq_frame[1:2] = bytes(1) #b'\x00' + cq_frame[2:3] = static.MYCALLSIGN_CRC8 + cq_frame[3:9] = static.MYCALLSIGN + + for i in range(0,3): + + modem.transmit_signalling(cq_frame) + + while static.ARQ_STATE == 'SENDING_SIGNALLING': + time.sleep(0.1) + +def received_cq(data_in): + + logging.info("CQ [" + str(bytes(data_in[3:9]), 'utf-8') + "] [BER."+str(static.BER)+"]") async def transmit_beacon(): logging.info("BEACON") diff --git a/modem.py b/modem.py index 64b99511..2bc2aa39 100644 --- a/modem.py +++ b/modem.py @@ -146,6 +146,7 @@ class RF(): static.CHANNEL_STATE = state_before_transmit #static.CHANNEL_STATE = 'RECEIVING_SIGNALLING' #static.ARQ_STATE = 'RECEIVING_DATA' + time.sleep(0.5) #-------------------------------------------------------------------------------------------------------- # GET ARQ BURST FRAME VOM BUFFER AND MODULATE IT async def transmit_arq_burst(self): @@ -253,7 +254,6 @@ class RF(): # -------------- transmit audio self.stream_tx.write(bytes(txbuffer)) #static.ARQ_STATE = 'IDLE' - #static.CHANNEL_STATE = state_before_transmit static.CHANNEL_STATE = 'RECEIVING_SIGNALLING' static.PTT_STATE = False self.my_rig.set_ptt(self.hamlib_ptt_type,0) @@ -294,6 +294,9 @@ class RF(): stuck_in_sync_10_counter = 0 # + # here we do an unsync to be sure, the modem is in idle state and ready for new data + self.c_lib.freedv_set_sync(freedv, 0) + # here we do a buffer cleanup before returning to demod loop dummy_mod = bytes(self.c_lib.freedv_nin(freedv)) self.c_lib.freedv_rawdatarx(freedv, bytes_out, dummy_mod) @@ -318,16 +321,17 @@ class RF(): stuck_in_sync_counter += 1 if self.c_lib.freedv_get_rx_status(freedv) == 10: stuck_in_sync_10_counter += 1 - + self.c_lib.freedv_set_sync(freedv, 0) + logging.warning("MODEM | SYNC 10 TRIGGER | M:" + str(mode)) if stuck_in_sync_counter == 33 and self.c_lib.freedv_get_rx_status(freedv) == 10: - logging.critical("stuck in sync #1") + logging.critical("MODEM | stuck in sync #1") self.c_lib.freedv_set_sync(freedv, 0) #FORCE UNSYNC stuck_in_sync_counter = 0 stuck_in_sync_10_counter = 0 if stuck_in_sync_counter >= 66 and stuck_in_sync_10_counter >= 2: - logging.critical("stuck in sync #2") + logging.critical("MODEM | stuck in sync #2") self.c_lib.freedv_set_sync(freedv, 0) #FORCE UNSYNC stuck_in_sync_counter = 0 stuck_in_sync_10_counter = 0 @@ -380,7 +384,8 @@ class RF(): # CQ FRAME elif frametype == 200: - logging.info("CQ RECEIVED....") + logging.debug("CQ RECEIVED....") + data_handler.received_cq(bytes_out[:-2]) # PING FRAME elif frametype == 210: @@ -430,14 +435,7 @@ class RF(): logging.debug("LAST FRAME ---> UNSYNC") self.c_lib.freedv_set_sync(freedv, 0) #FORCE UNSYNC - rxstatus = self.c_lib.freedv_get_rx_status(freedv) - #logging.info("DATA-" + str(mode) + " " +str(rxstatus)) - if rxstatus == 10: - self.c_lib.freedv_set_sync(freedv, 0) #FORCE UNSYNC - logging.warning("MODEM | SYNC 10 TRIGGER | M:" + str(mode)) - self.calculate_ber(freedv) - - + def calculate_ber(self,freedv): Tbits = self.c_lib.freedv_get_total_bits(freedv) Terrs = self.c_lib.freedv_get_total_bit_errors(freedv)