2021-01-06 12:17:17 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
|
|
Created on Fri Dec 25 21:25:14 2020
|
|
|
|
|
|
|
|
@author: DJ2LS
|
|
|
|
"""
|
|
|
|
|
|
|
|
import time
|
2021-03-12 13:14:36 +00:00
|
|
|
import crcengine
|
2021-01-06 12:17:17 +00:00
|
|
|
import static
|
2022-01-05 13:15:59 +00:00
|
|
|
|
2021-01-06 12:17:17 +00:00
|
|
|
|
2021-09-25 13:24:25 +00:00
|
|
|
|
2021-08-15 10:34:28 +00:00
|
|
|
def wait(seconds):
|
2021-08-14 18:00:32 +00:00
|
|
|
timeout = time.time() + seconds
|
2021-09-25 13:24:25 +00:00
|
|
|
|
2021-08-14 18:00:32 +00:00
|
|
|
while time.time() < timeout:
|
|
|
|
time.sleep(0.01)
|
2021-10-05 17:59:32 +00:00
|
|
|
return True
|
|
|
|
|
|
|
|
|
2021-02-10 18:43:59 +00:00
|
|
|
|
2021-01-06 12:17:17 +00:00
|
|
|
def get_crc_8(data):
|
2021-03-12 13:39:36 +00:00
|
|
|
"""
|
|
|
|
Author: DJ2LS
|
2021-03-12 15:18:41 +00:00
|
|
|
|
2021-03-12 13:39:36 +00:00
|
|
|
Get the CRC8 of a byte string
|
2021-03-12 15:18:41 +00:00
|
|
|
|
2021-03-12 13:39:36 +00:00
|
|
|
param: data = bytes()
|
|
|
|
"""
|
2021-03-12 13:14:36 +00:00
|
|
|
crc_algorithm = crcengine.new('crc8-ccitt') # load crc8 library
|
2021-01-06 12:17:17 +00:00
|
|
|
crc_data = crc_algorithm(data)
|
2021-03-12 13:14:36 +00:00
|
|
|
crc_data = crc_data.to_bytes(1, byteorder='big')
|
2021-01-06 12:17:17 +00:00
|
|
|
return crc_data
|
|
|
|
|
2021-03-12 13:14:36 +00:00
|
|
|
|
2021-01-06 12:17:17 +00:00
|
|
|
def get_crc_16(data):
|
2021-03-12 13:39:36 +00:00
|
|
|
"""
|
|
|
|
Author: DJ2LS
|
2021-03-12 15:18:41 +00:00
|
|
|
|
2021-03-12 13:39:36 +00:00
|
|
|
Get the CRC16 of a byte string
|
2021-03-12 15:18:41 +00:00
|
|
|
|
2021-03-12 13:39:36 +00:00
|
|
|
param: data = bytes()
|
|
|
|
"""
|
2021-03-12 13:14:36 +00:00
|
|
|
crc_algorithm = crcengine.new('crc16-ccitt-false') # load crc16 library
|
2021-01-06 12:17:17 +00:00
|
|
|
crc_data = crc_algorithm(data)
|
2021-03-12 13:14:36 +00:00
|
|
|
crc_data = crc_data.to_bytes(2, byteorder='big')
|
|
|
|
return crc_data
|
|
|
|
|
2022-01-24 18:42:59 +00:00
|
|
|
def get_crc_32(data):
|
|
|
|
"""
|
|
|
|
Author: DJ2LS
|
2021-09-25 13:24:25 +00:00
|
|
|
|
2022-01-24 18:42:59 +00:00
|
|
|
Get the CRC32 of a byte string
|
|
|
|
|
|
|
|
param: data = bytes()
|
|
|
|
"""
|
|
|
|
crc_algorithm = crcengine.new('crc32') # load crc16 library
|
|
|
|
crc_data = crc_algorithm(data)
|
|
|
|
crc_data = crc_data.to_bytes(4, byteorder='big')
|
|
|
|
return crc_data
|
2021-03-12 15:18:41 +00:00
|
|
|
|
2021-09-25 13:24:25 +00:00
|
|
|
|
2021-10-24 12:44:55 +00:00
|
|
|
def add_to_heard_stations(dxcallsign, dxgrid, datatype, snr, offset, frequency):
|
2021-03-16 14:21:58 +00:00
|
|
|
# check if buffer empty
|
|
|
|
if len(static.HEARD_STATIONS) == 0:
|
2021-10-24 12:44:55 +00:00
|
|
|
static.HEARD_STATIONS.append([dxcallsign, dxgrid, int(time.time()), datatype, snr, offset, frequency])
|
2021-03-16 14:21:58 +00:00
|
|
|
# if not, we search and update
|
|
|
|
else:
|
|
|
|
for i in range(0, len(static.HEARD_STATIONS)):
|
|
|
|
# update callsign with new timestamp
|
|
|
|
if static.HEARD_STATIONS[i].count(dxcallsign) > 0:
|
2021-10-24 12:44:55 +00:00
|
|
|
static.HEARD_STATIONS[i] = [dxcallsign, dxgrid, int(time.time()), datatype, snr, offset, frequency]
|
2021-03-16 14:21:58 +00:00
|
|
|
break
|
|
|
|
# insert if nothing found
|
|
|
|
if i == len(static.HEARD_STATIONS) - 1:
|
2021-10-24 12:44:55 +00:00
|
|
|
static.HEARD_STATIONS.append([dxcallsign, dxgrid, int(time.time()), datatype, snr, offset, frequency])
|
2021-03-16 14:21:58 +00:00
|
|
|
break
|
2021-09-25 13:24:25 +00:00
|
|
|
|
|
|
|
|
2021-03-16 14:21:58 +00:00
|
|
|
# for idx, item in enumerate(static.HEARD_STATIONS):
|
|
|
|
# if dxcallsign in item:
|
|
|
|
# item = [dxcallsign, int(time.time())]
|
2021-09-25 13:24:25 +00:00
|
|
|
# static.HEARD_STATIONS[idx] = item
|
|
|
|
|
2021-11-18 18:40:22 +00:00
|
|
|
'''
|
2021-02-16 13:23:57 +00:00
|
|
|
def setup_logging():
|
2021-03-12 13:39:36 +00:00
|
|
|
"""
|
|
|
|
Author: DJ2LS
|
2021-03-12 15:18:41 +00:00
|
|
|
|
2021-03-12 13:39:36 +00:00
|
|
|
Set the custom logging format so we can use colors
|
2021-09-25 13:24:25 +00:00
|
|
|
|
2021-03-16 09:55:48 +00:00
|
|
|
# https://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output
|
|
|
|
# 'DEBUG' : 37, # white
|
|
|
|
# 'INFO' : 36, # cyan
|
|
|
|
# 'WARNING' : 33, # yellow
|
|
|
|
# 'ERROR' : 31, # red
|
|
|
|
# 'CRITICAL': 41, # white on red bg
|
2021-03-12 13:14:36 +00:00
|
|
|
|
2021-09-25 13:24:25 +00:00
|
|
|
"""
|
2021-02-16 13:23:57 +00:00
|
|
|
|
2021-11-07 11:17:23 +00:00
|
|
|
logging.basicConfig(level=logging.INFO,encoding='utf-8',format='%(asctime)s.%(msecs)03d %(levelname)s:\t%(message)s',datefmt='%H:%M:%S',handlers=[logging.FileHandler("FreeDATA-TNC.log"), logging.StreamHandler()])
|
2021-09-25 13:24:25 +00:00
|
|
|
|
2021-09-26 15:51:11 +00:00
|
|
|
logging.addLevelName(logging.DEBUG, "\033[1;36m%s\033[1;0m" % logging.getLevelName(logging.DEBUG))
|
|
|
|
logging.addLevelName(logging.INFO, "\033[1;37m%s\033[1;0m" % logging.getLevelName(logging.INFO))
|
|
|
|
logging.addLevelName(logging.WARNING, "\033[1;33m%s\033[1;0m" % logging.getLevelName(logging.WARNING))
|
2021-03-12 13:14:36 +00:00
|
|
|
logging.addLevelName(logging.ERROR, "\033[1;31m%s\033[1;0m" % "FAILED")
|
2021-02-16 13:23:57 +00:00
|
|
|
#logging.addLevelName( logging.ERROR, "\033[1;31m%s\033[1;0m" % logging.getLevelName(logging.ERROR))
|
2021-09-26 15:51:11 +00:00
|
|
|
logging.addLevelName(logging.CRITICAL, "\033[1;41m%s\033[1;0m" % logging.getLevelName(logging.CRITICAL))
|
2021-02-16 13:23:57 +00:00
|
|
|
|
2021-03-12 13:14:36 +00:00
|
|
|
logging.addLevelName(25, "\033[1;32m%s\033[1;0m" % "SUCCESS")
|
|
|
|
logging.addLevelName(24, "\033[1;34m%s\033[1;0m" % "DATA")
|
2021-11-18 18:40:22 +00:00
|
|
|
'''
|