def wod_listener(): sock = Udpsocket(('127.0.0.1', settings.WOD_UDP_PORT)) while 1: try: conn, addr = sock.recv() except IOError: logger.info('WOD listerner is terminated or something bad happened to accept') return logger.debug("WOD received %s", conn) # Write to disk the binary packet timestr = time.strftime("%Y%m%d-%H%M%S") fwname = log_path + "WOD_RX/wod_" + timestr + ".hex" myfile = open(fwname, 'w') myfile.write(conn) myfile.close() data = wod_decode(conn) # Write to disk the decoded packet timestr = time.strftime("%Y%m%d-%H%M%S") fwname = log_path + "WOD_RX_DEC/wod_" + timestr + ".json" myfile = open(fwname, 'w') myfile.write(str(data['content'])) myfile.close() # Data must be sent to socket.io here socketio.emit('backend_msg', data, namespace='/control_rx', callback=success_message_to_frontend())
def comms_on(): sock = Udpsocket([]) data = ctypes.create_string_buffer(13) data[0:9] = 'RF SW CMD' struct.pack_into("<I", data, 9, settings.RF_SW_CMD_ON_INT) d = bytearray(data) sock.sendto(d, (packet_settings.FRAME_RECEIVER_IP, packet_settings.FRAME_RECEIVER_PORT))
def comms_off(): sock = Udpsocket([]) data = ctypes.create_string_buffer(45) data[0:9] = 'RF SW CMD' struct.pack_into("<I", data, 9, settings.RF_SW_CMD_OFF_INT) print len(settings.RF_SW_CMD_OFF_CHAR_SEQ) print settings.RF_SW_CMD_OFF_CHAR_SEQ data[13:45] = settings.RF_SW_CMD_OFF_CHAR_SEQ d = bytearray(data) sock.sendto(d, (packet_settings.FRAME_RECEIVER_IP, packet_settings.FRAME_RECEIVER_PORT))
def ecss_feeder(port): sleep(1) logger.info('Started ecss feeder') sock = Udpsocket(('127.0.0.1', port)) while 1: try: conn = sock.recv() except IOError: logger.info('Ecss feeder is terminated or something bad happened to accept') return data = ecss_logic_utils.ecss_logic(cPickle.loads(conn[0])) # Data must be sent to socket.io here socketio.emit('backend_msg', data, namespace='/control_rx', callback=success_message_to_frontend())
def init(): global port global ecss_feeder_sock global ui_listener_sock global ld_socket try: port = serial.Serial(client_settings.SATNOGS_SERIAL_PORT, baudrate=9600, timeout=1.0) except serial.SerialException as e: logger.error('Could not open serial port. Error occured') logger.error(e) return ecss_feeder_sock = Udpsocket( []) # The socket with which we communicate with the ecss feeder thread ui_listener_sock = Udpsocket( ('127.0.0.1', client_settings.BACKEND_FEEDER_PORT)) ld_socket = Udpsocket([])
from satnogsclient.web.weblogger import WebLogger import logging import cPickle import subprocess from satnogsclient.upsat import packet_settings from satnogsclient import settings as client_settings from satnogsclient.observer.udpsocket import Udpsocket from satnogsclient.upsat import packet logging.setLoggerClass(WebLogger) logger = logging.getLogger('default') assert isinstance(logger, WebLogger) backend_listener_sock = Udpsocket( ('0.0.0.0', client_settings.BACKEND_LISTENER_PORT )) # Port in which client listens for frames from gnuradio ui_listener_sock = Udpsocket( ('127.0.0.1', client_settings.BACKEND_FEEDER_PORT)) ecss_feeder_sock = Udpsocket( []) # The socket with which we communicate with the ecss feeder thread backend_feeder_sock = Udpsocket([]) ld_socket = Udpsocket([]) ld_uplink_socket = Udpsocket([]) ld_downlink_socket = Udpsocket([]) def write_to_gnuradio(buf): backend_feeder_sock.sendto( buf, (client_settings.GNURADIO_IP, client_settings.GNURADIO_UDP_PORT))
def status_listener(): logger.info('Started upsat status listener') logger.info('Starting scheduler...') scheduler.start() scheduler.remove_all_jobs() interval = settings.SATNOGS_NETWORK_API_QUERY_INTERVAL scheduler.add_job(get_jobs, 'interval', minutes=interval) msg = 'Registering `get_jobs` periodic task ({0} min. interval)'.format(interval) logger.info(msg) interval = settings.SATNOGS_NETWORK_API_POST_INTERVAL msg = 'Registering `post_data` periodic task ({0} min. interval)'.format(interval) logger.info(msg) scheduler.add_job(post_data, 'interval', minutes=interval) tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() d = Process(target=downlink, args=()) d.daemon = True d.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) sock = Udpsocket(('127.0.0.1', settings.STATUS_LISTENER_PORT)) os.environ['BACKEND_TX_PID'] = '0' os.environ['BACKEND_RX_PID'] = '0' os.environ['BACKEND'] = "" os.environ['MODE'] = "network" os.environ['ECSS_FEEDER_PID'] = '0' os.environ['GNURADIO_SCRIPT_PID'] = '0' os.environ['SCHEDULER'] = 'ON' while 1: conn = sock.recv() dictionary = json.loads(conn[0]) if 'backend' in dictionary.keys(): if dictionary['backend'] == os.environ['BACKEND']: continue kill_cmd_ctrl_proc() if dictionary['backend'] == 'gnuradio': if os.environ['BACKEND'] == 'serial': serial_handler.close() os.environ['BACKEND'] = 'gnuradio' rx = Process(target=read_from_gnuradio, args=()) rx.daemon = True rx.start() logger.info('Started gnuradio rx process %d', rx.pid) os.environ['BACKEND_RX_PID'] = str(rx.pid) elif dictionary['backend'] == 'serial': os.environ['BACKEND'] = 'serial' serial_handler.init() rx = Process(target=serial_handler.read_from_serial, args=()) rx.daemon = True rx.start() os.environ['BACKEND_RX_PID'] = str(rx.pid) if 'mode' in dictionary.keys(): if dictionary['mode'] == os.environ['MODE']: continue logger.info('Changing mode') if dictionary['mode'] == 'cmd_ctrl': logger.info('Starting ecss feeder thread...') os.environ['MODE'] = 'cmd_ctrl' kill_netw_proc() ef = Process(target=ecss_feeder, args=(settings.ECSS_FEEDER_UDP_PORT,)) start_wod_thread() ef.start() os.environ['ECSS_FEEDER_PID'] = str(ef.pid) logger.info('Started ecss_feeder process %d', ef.pid) elif dictionary['mode'] == 'network': os.environ['MODE'] = 'network' kill_cmd_ctrl_proc() kill_wod_thread() if int(os.environ['ECSS_FEEDER_PID']) != 0: os.kill(int(os.environ['ECSS_FEEDER_PID']), signal.SIGTERM) os.environ['ECSS_FEEDER_PID'] = '0' os.environ['SCHEDULER'] = 'ON' scheduler.start() tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) logger.info('Started task feeder process %d', tf.pid)
def custom_cmd_to_backend(data): sock = Udpsocket([]) packet = json.dumps(data) sock.sendto(packet, ('127.0.0.1', settings.STATUS_LISTENER_PORT))
from satnogsclient import settings as client_settings from satnogsclient.observer.udpsocket import Udpsocket from satnogsclient.upsat import packet from time import sleep from _socket import htons from satnogsclient.upsat import ecss_logic_utils import time import binascii from flask_socketio import SocketIO socketio = SocketIO(message_queue='redis://') logger = logging.getLogger('satnogsclient') large_data_id = 0 total_downlink_packets = 0 uplink_socket = Udpsocket(('0.0.0.0', client_settings.LD_UPLINK_LISTEN_PORT)) downlink_socket = Udpsocket( ('0.0.0.0', client_settings.LD_DOWNLINK_LISTEN_PORT)) gnuradio_sock = Udpsocket([]) # Gnuradio's udp listen port def uplink(buf_in): buf = bytearray(0) available_data_len = packet_settings.MAX_COMMS_PKT_SIZE - packet_settings.ECSS_HEADER_SIZE - packet_settings.ECSS_DATA_HEADER_SIZE - packet_settings.ECSS_CRC_SIZE - 3 buffer_size = len(buf_in) remaining_bytes = buffer_size total_packets = buffer_size / available_data_len if buffer_size % available_data_len > 0: total_packets = total_packets + 1 packet_count = 0 data_size = 0
def status_listener(): logger.info('Started upsat status listener') logger.info('Starting scheduler...') scheduler.start() scheduler.remove_all_jobs() interval = settings.NETWORK_API_QUERY_INTERVAL scheduler.add_job(get_jobs, 'interval', minutes=interval) msg = 'Registering `get_jobs` periodic task ({0} min. interval)'.format(interval) logger.info(msg) interval = settings.NETWORK_API_POST_INTERVAL msg = 'Registering `post_data` periodic task ({0} min. interval)'.format(interval) logger.info(msg) scheduler.add_job(post_data, 'interval', minutes=interval) tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() d = Process(target=downlink, args=()) d.daemon = True d.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) sock = Udpsocket(('127.0.0.1', settings.STATUS_LISTENER_PORT)) os.environ['BACKEND_TX_PID'] = '0' os.environ['BACKEND_RX_PID'] = '0' os.environ['BACKEND'] = "" os.environ['MODE'] = "network" os.environ['ECSS_FEEDER_PID'] = '0' os.environ['GNURADIO_SCRIPT_PID'] = '0' os.environ['SCHEDULER'] = 'ON' while 1: conn = sock.recv() dictionary = json.loads(conn[0]) if 'backend' in dictionary.keys(): if dictionary['backend'] == os.environ['BACKEND']: continue kill_cmd_ctrl_proc() if dictionary['backend'] == 'gnuradio': if os.environ['BACKEND'] == 'serial': serial_handler.close() os.environ['BACKEND'] = 'gnuradio' rx = Process(target=read_from_gnuradio, args=()) rx.daemon = True rx.start() logger.info('Started gnuradio rx process %d', rx.pid) os.environ['BACKEND_RX_PID'] = str(rx.pid) elif dictionary['backend'] == 'serial': os.environ['BACKEND'] = 'serial' serial_handler.init() rx = Process(target=serial_handler.read_from_serial, args=()) rx.daemon = True rx.start() os.environ['BACKEND_RX_PID'] = str(rx.pid) if 'mode' in dictionary.keys(): if dictionary['mode'] == os.environ['MODE']: continue logger.info('Changing mode') if dictionary['mode'] == 'cmd_ctrl': logger.info('Starting ecss feeder thread...') os.environ['MODE'] = 'cmd_ctrl' kill_netw_proc() ef = Process(target=ecss_feeder, args=(settings.ECSS_FEEDER_UDP_PORT,)) start_wod_thread() ef.start() os.environ['ECSS_FEEDER_PID'] = str(ef.pid) logger.info('Started ecss_feeder process %d', ef.pid) elif dictionary['mode'] == 'network': os.environ['MODE'] = 'network' kill_cmd_ctrl_proc() kill_wod_thread() if int(os.environ['ECSS_FEEDER_PID']) != 0: os.kill(int(os.environ['ECSS_FEEDER_PID']), signal.SIGTERM) os.environ['ECSS_FEEDER_PID'] = '0' os.environ['SCHEDULER'] = 'ON' scheduler.start() tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) logger.info('Started task feeder process %d', tf.pid)