示例#1
0
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())
示例#2
0
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())
示例#3
0
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))
示例#4
0
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))
示例#5
0
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())
示例#6
0
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())
示例#7
0
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([])
示例#8
0
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))
示例#9
0
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)
示例#10
0
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
示例#12
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)