diff --git a/data_handler.py b/data_handler.py index 6d6f7a49..512d320d 100644 --- a/data_handler.py +++ b/data_handler.py @@ -571,9 +571,8 @@ async def arq_open_data_channel(): while static.CHANNEL_STATE == 'SENDING_SIGNALLING': time.sleep(0.01) #print("wir warten 2 sekunden...") - await asyncio.sleep(2) - - + await asyncio.sleep(4) + connection_frame = bytearray(14) connection_frame[:1] = bytes([225]) connection_frame[1:2] = static.DXCALLSIGN_CRC8 @@ -583,6 +582,7 @@ async def arq_open_data_channel(): while static.CHANNEL_STATE == 'SENDING_SIGNALLING': time.sleep(0.01) + modem.transmit_signalling(connection_frame) @@ -639,7 +639,7 @@ async def arq_disconnect(): while static.CHANNEL_STATE == 'SENDING_SIGNALLING': time.sleep(0.01) - await asyncio.sleep(5) + await asyncio.sleep(4) modem.transmit_signalling(disc_frame) logging.info("DISC ["+ str(static.MYCALLSIGN, 'utf-8') + "]< X >["+ str(static.DXCALLSIGN, 'utf-8') + "] [BER."+str(static.BER)+"]") diff --git a/modem.py b/modem.py index 2707daee..03a114f4 100644 --- a/modem.py +++ b/modem.py @@ -55,16 +55,16 @@ class RF(): output_device_index=static.AUDIO_OUTPUT_DEVICE, #static.AUDIO_OUTPUT_DEVICE ) #--------------------------------------------START DECODER THREAD - FREEDV_DECODER_THREAD_10 = threading.Thread(target=self.receive, args=[10], name="FREEDV_DECODER_THREAD") + FREEDV_DECODER_THREAD_10 = threading.Thread(target=self.receive, args=[10], name="FREEDV_DECODER_THREAD_10") FREEDV_DECODER_THREAD_10.start() - FREEDV_DECODER_THREAD_11 = threading.Thread(target=self.receive, args=[11], name="FREEDV_DECODER_THREAD") + FREEDV_DECODER_THREAD_11 = threading.Thread(target=self.receive, args=[11], name="FREEDV_DECODER_THREAD_11") FREEDV_DECODER_THREAD_11.start() - FREEDV_DECODER_THREAD_12 = threading.Thread(target=self.receive, args=[12], name="FREEDV_DECODER_THREAD") + FREEDV_DECODER_THREAD_12 = threading.Thread(target=self.receive, args=[12], name="FREEDV_DECODER_THREAD_12") FREEDV_DECODER_THREAD_12.start() - FREEDV_DECODER_THREAD_14 = threading.Thread(target=self.receive, args=[static.FREEDV_SIGNALLING_MODE], name="FREEDV_DECODER_THREAD") + FREEDV_DECODER_THREAD_14 = threading.Thread(target=self.receive, args=[static.FREEDV_SIGNALLING_MODE], name="FREEDV_DECODER_THREAD_14") FREEDV_DECODER_THREAD_14.start() @@ -97,16 +97,12 @@ class RF(): #-------------------------------------------------------------------------------------------------------- def transmit_signalling(self,ack_buffer): - #print(ack_buffer) - #static.ARQ_STATE = 'SENDING_ACK' - + state_before_transmit = static.CHANNEL_STATE - static.CHANNEL_STATE = 'SENDING_SIGNALLING' - + static.CHANNEL_STATE = 'SENDING_SIGNALLING' static.PTT_STATE = True self.my_rig.set_ptt(self.hamlib_ptt_type,1) - - + self.c_lib.freedv_open.restype = ctypes.POINTER(ctypes.c_ubyte) freedv = self.c_lib.freedv_open(static.FREEDV_SIGNALLING_MODE) bytes_per_frame = int(self.c_lib.freedv_get_bits_per_modem_frame(freedv)/8) @@ -139,11 +135,9 @@ class RF(): self.stream_tx.write(bytes(txbuffer)) self.my_rig.set_ptt(self.hamlib_ptt_type,0) - static.PTT_STATE = False - + static.PTT_STATE = False static.CHANNEL_STATE = state_before_transmit - #static.CHANNEL_STATE = 'RECEIVING_SIGNALLING' - #static.ARQ_STATE = 'RECEIVING_DATA' + self.c_lib.freedv_close(freedv) time.sleep(0.5) #-------------------------------------------------------------------------------------------------------- @@ -156,7 +150,8 @@ class RF(): static.CHANNEL_STATE = 'SENDING_DATA' self.c_lib.freedv_open.restype = ctypes.POINTER(ctypes.c_ubyte) - freedv = self.c_lib.freedv_open(static.FREEDV_DATA_MODE) + freedv = self.c_lib.freedv_open(static.ARQ_DATA_CHANNEL_MODE) + static.FREEDV_DATA_BYTES_PER_FRAME = int(self.c_lib.freedv_get_bits_per_modem_frame(freedv)/8) static.FREEDV_DATA_PAYLOAD_PER_FRAME = static.FREEDV_DATA_BYTES_PER_FRAME -2 @@ -236,8 +231,6 @@ class RF(): static.MYCALLSIGN_CRC8 + \ payload_data - #print(arqframe) - buffer = bytearray(static.FREEDV_DATA_PAYLOAD_PER_FRAME) # create TX buffer buffer[:len(arqframe)] = arqframe # set buffersize to length of data which will be send @@ -252,10 +245,11 @@ class RF(): # -------------- transmit audio self.stream_tx.write(bytes(txbuffer)) - #static.ARQ_STATE = 'IDLE' + static.CHANNEL_STATE = 'RECEIVING_SIGNALLING' static.PTT_STATE = False self.my_rig.set_ptt(self.hamlib_ptt_type,0) + self.c_lib.freedv_close(freedv) #-------------------------------------------------------------------------------------------------------- @@ -310,7 +304,7 @@ class RF(): nin = self.c_lib.freedv_nin(freedv) #nin = int(nin*(static.AUDIO_SAMPLE_RATE_RX/static.MODEM_SAMPLE_RATE)) data_in = self.stream_rx.read(nin, exception_on_overflow = False) - #print(audioop.rms(data_in, 2)) + static.AUDIO_RMS = audioop.rms(data_in, 2) #self.c_lib.freedv_rawdatarx.argtype = [ctypes.POINTER(ctypes.c_ubyte), data_bytes_out, data_in] # check if really neccessary nbytes = self.c_lib.freedv_rawdatarx(freedv, bytes_out, data_in) # demodulate audio #logging.debug(self.c_lib.freedv_get_rx_status(freedv)) @@ -320,8 +314,9 @@ 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)) + #self.c_lib.freedv_set_sync(freedv, 0) + logging.warning("MODEM | SYNC 10 TRIGGER | M:" + str(mode) + " | " + str(static.CHANNEL_STATE)) + if stuck_in_sync_counter == 33 and self.c_lib.freedv_get_rx_status(freedv) == 10: logging.critical("MODEM | stuck in sync #1") @@ -440,6 +435,14 @@ class RF(): bytes_out = (ctypes.c_ubyte * bytes_per_frame) bytes_out = bytes_out() #get pointer to bytes_out + if mode == 14: + self.c_lib.freedv_set_sync(freedv, 0) + for i in range(0,10): + dummy_mod = bytes(self.c_lib.freedv_nin(freedv)) + self.c_lib.freedv_rawdatarx(freedv, bytes_out, dummy_mod) + + + def calculate_ber(self,freedv): Tbits = self.c_lib.freedv_get_total_bits(freedv) Terrs = self.c_lib.freedv_get_total_bit_errors(freedv) diff --git a/sock.py b/sock.py index 407a8a06..a93ad92f 100644 --- a/sock.py +++ b/sock.py @@ -45,7 +45,7 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): # CQ CQ CQ ----------------------------------------------------- if data == 'CQCQCQ': asyncio.run(data_handler.transmit_cq()) - self.request.sendall(b'CALLING CQ') + #######self.request.sendall(b'CALLING CQ') # PING ---------------------------------------------------------- @@ -73,7 +73,7 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): #ARQ_CONNECT_THREAD = threading.Thread(target=data_handler.arq_connect, name="ARQ_CONNECT") #ARQ_CONNECT_THREAD.start() asyncio.run(data_handler.arq_connect()) - self.request.sendall(bytes("CONNECTING", encoding)) + ########self.request.sendall(bytes("CONNECTING", encoding)) #data_handler.arq_connect() # ARQ DISCONNECT FROM CALLSIGN ---------------------------------------- if data == 'ARQ:DISCONNECT': @@ -81,7 +81,7 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): #ARQ_DISCONNECT_THREAD = threading.Thread(target=data_handler.arq_disconnect, name="ARQ_DISCONNECT") #ARQ_DISCONNECT_THREAD.start() asyncio.run(data_handler.arq_disconnect()) - self.request.sendall(bytes("DISCONNECTING", encoding)) + ########self.request.sendall(bytes("DISCONNECTING", encoding)) #data_handler.arq_disconnect() @@ -91,7 +91,7 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): if data.startswith('ARQ:DATA:') and static.ARQ_STATE == 'CONNECTED': static.ARQ_READY_FOR_DATA = False logging.info("CMD | NEW ARQ DATA") - self.request.sendall(b'SENDING ARQ DATA') + ########self.request.sendall(b'SENDING ARQ DATA') asyncio.run(data_handler.arq_open_data_channel()) #data_handler.arq_open_data_channel() @@ -122,16 +122,13 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): else: static.MYCALLSIGN = bytes(callsign[1], encoding) static.MYCALLSIGN_CRC8 = helpers.get_crc_8(static.MYCALLSIGN) - self.request.sendall(static.MYCALLSIGN) + ########self.request.sendall(static.MYCALLSIGN) logging.info("CMD | MYCALLSIGN: " + str(static.MYCALLSIGN)) - - + if data == 'GET:MYCALLSIGN': self.request.sendall(bytes(static.MYCALLSIGN, encoding)) - #if data == 'GET:MYCALLSIGN_CRC8': - # self.request.sendall(bytes(static.MYCALLSIGN_CRC8, encoding)) - + if data == 'GET:DXCALLSIGN': self.request.sendall(bytes(static.DXCALLSIGN, encoding)) @@ -140,7 +137,8 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): "PTT_STATE": str(static.PTT_STATE), "CHANNEL_STATE": str(static.CHANNEL_STATE), "TNC_STATE": str(static.TNC_STATE), - "ARQ_STATE": str(static.ARQ_STATE) + "ARQ_STATE": str(static.ARQ_STATE), + "AUDIO_RMS": str(static.AUDIO_RMS) } jsondata = json.dumps(output) self.request.sendall(bytes(jsondata, encoding)) @@ -159,11 +157,9 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): } jsondata = json.dumps(output) self.request.sendall(bytes(jsondata, encoding)) - - + if data.startswith('GET:RX_BUFFER:'): - data = data.split('GET:RX_BUFFER:') bufferposition = int(data[1])-1 if bufferposition == -1: @@ -177,7 +173,8 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): if data == 'DEL:RX_BUFFER': static.RX_BUFFER = [] - + #self.request.close() + diff --git a/static.py b/static.py index 5a72e26f..e4ab0467 100644 --- a/static.py +++ b/static.py @@ -62,7 +62,6 @@ PTT_STATE = False # FreeDV Defaults FREEDV_RECEIVE = True -FREEDV_DATA_MODE = 12 #check if we can delete this FREEDV_SIGNALLING_MODE = 14 FREEDV_DATA_BYTES_PER_FRAME = 0 @@ -84,6 +83,7 @@ AUDIO_OUTPUT_DEVICE = 1 MODEM_SAMPLE_RATE = 8000 #8000 AUDIO_FRAMES_PER_BUFFER = 2048 AUDIO_CHANNELS = 1 +AUDIO_RMS = 0 #--------------------------------- #ARQ DEFAULTS