def run(self): while self.keep_running: try: serialData = read_value_from_serial() if serialData is not None: self.disQueue.put(serialData) if isinstance(serialData, LogPhyRes): if self.pcap_file != None: self.pcap_file.write(PCAPFormatter.build_record_data(serialData.get_raw_data())) self.pcap_file.flush() if self.is_pipe_enabled: if self.is_pipe_connected is False: try: self.pipe = os.open(PIPE_FILENAME, os.O_WRONLY | os.O_NONBLOCK) os.write(self.pipe, PCAPFormatter.build_global_header_data()) self.is_pipe_connected = True except OSError as e: if e.errno == errno.ENXIO: print("Wireshark not listening yet ...") else: try: os.write(self.pipe, PCAPFormatter.build_record_data(serialData.get_raw_data())) except OSError as e: if e.errno == errno.EPIPE: print("Wireshark stopped listening, waiting for reconnection ...") self.is_pipe_connected = False except Exception as inst: printError(inst)
def run(self): while self.keep_running: try: serialData = read_value_from_serial() if serialData is not None: self.disQueue.put(serialData) if isinstance(serialData, LogPhyRes): if self.pcap_file != None: self.pcap_file.write( PCAPFormatter.build_record_data( serialData.get_raw_data())) self.pcap_file.flush() if self.is_pipe_enabled: if self.is_pipe_connected is False: try: self.pipe = os.open( PIPE_FILENAME, os.O_WRONLY | os.O_NONBLOCK) os.write( self.pipe, PCAPFormatter.build_global_header_data( )) self.is_pipe_connected = True except OSError as e: if e.errno == errno.ENXIO: print( "Wireshark not listening yet ...") else: try: os.write( self.pipe, PCAPFormatter.build_record_data( serialData.get_raw_data())) except OSError as e: if e.errno == errno.EPIPE: print( "Wireshark stopped listening, waiting for reconnection ..." ) self.is_pipe_connected = False except Exception as inst: printError(inst)
def main(): global serial_port, settings keep_running = True # Some variables we need init() dateTime = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # Setup the console parser parser = argparse.ArgumentParser(description = "DASH7 logger for the OSS-7 stack. You can exit the logger using Ctrl-c, it takes some time.") parser.add_argument('serial', default="COM12", metavar="serial port", help="serial port (eg COM7 or /dev/ttyUSB0)", nargs='?') parser.add_argument('-b', '--baud' , default=115200, metavar="baudrate", type=int, help="set the baud rate (default: 9600)") parser.add_argument('-v', '--version', action='version', version='DASH7 Logger 0.5', help="show the current version") parser.add_argument('-f', '--file', metavar="file", help="write to a pcap file", nargs='?', default=None, const=dateTime) parser.add_argument('-p', '--pipe', help="stream live pcap data to a named pipe", action="store_true", default=False) # TODO print filename parser.add_argument('-l', '--list', help="Lists available serial ports", action="store_true", default=False) general_options = parser.add_argument_group('general logging') general_options.add_argument('--string', help="Disable string logs", action="store_false", default=True) general_options.add_argument('--data', help="Disable data logs", action="store_false", default=True) general_options.add_argument('--trace', help="Disable trace logs", action="store_false", default=True) stack_options = parser.add_argument_group('stack logging') stack_options.add_argument('--phy', help="Disable logs for phy", action="store_false", default=True) stack_options.add_argument('--dll', help="Disable logs for dll", action="store_false", default=True) stack_options.add_argument('--mac', help="Disable logs for mac", action="store_false", default=True) stack_options.add_argument('--nwl', help="Disable logs for nwl", action="store_false", default=True) stack_options.add_argument('--trans', help="Disable logs for trans", action="store_false", default=True) stack_options.add_argument('--fwk', help="Disable logs for fwk", action="store_false", default=True) stack_options.add_argument('--stack', help="Disable all stack logs", action="store_false", default=True) special_options = parser.add_argument_group('special logging') special_options.add_argument('--dllres', help="Disable DLL RES logs", action="store_false", default=True) special_options.add_argument('--phyres', help="Disable PHY RES Logs", action="store_false", default=True) special_options.add_argument('--display', help="Format the data of PHY RES", choices=['hex', 'bin', 'txt', 'dec'], default='hex') settings = vars(parser.parse_args()) # We only want to list the serial ports, then exit if settings["list"]: list_serial_ports() sys.exit() # Setup the serial port if settings["serial"] is None: printError("You didn't specify a serial port!") sys.exit() serial_port = serial.Serial(settings['serial'], settings['baud']) empty_serial_buffer() # Array containing all the threads threads = [] # Only write a file if we have a file defined pcap_file = None if settings["file"] != None: # TODO check if file already exists pcap_file = open(settings["file"], 'w') pcap_file.write(PCAPFormatter.build_global_header_data()) pcap_file.flush() if settings["pipe"]: if not os.path.exists(PIPE_FILENAME): os.mkfifo(PIPE_FILENAME) threads.append(parse_d7(pcap_file, settings["pipe"], displayQueue)) threads.append(display_d7(displayQueue)) try: for t in threads: t.start() except Exception as inst: printError("Error unable to start thread") printError(inst) while keep_running: try: # Sleep a very short time, we are just waiting for a keyboard intterupt really time.sleep(0.0001) except KeyboardInterrupt: print("\nCtrl-c received! Sending Kill to the threads...") for t in threads: t.keep_running = False keep_running = False print("The logger is stopping, please wait") sys.exit()
def main(): global serial_port, settings keep_running = True # Some variables we need init() dateTime = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # Setup the console parser parser = argparse.ArgumentParser( description= "DASH7 logger for the OSS-7 stack. You can exit the logger using Ctrl-c, it takes some time." ) parser.add_argument('serial', default="COM12", metavar="serial port", help="serial port (eg COM7 or /dev/ttyUSB0)", nargs='?') parser.add_argument('-b', '--baud', default=115200, metavar="baudrate", type=int, help="set the baud rate (default: 9600)") parser.add_argument('-v', '--version', action='version', version='DASH7 Logger 0.5', help="show the current version") parser.add_argument('-f', '--file', metavar="file", help="write to a pcap file", nargs='?', default=None, const=dateTime) parser.add_argument('-p', '--pipe', help="stream live pcap data to a named pipe", action="store_true", default=False) # TODO print filename parser.add_argument('-l', '--list', help="Lists available serial ports", action="store_true", default=False) general_options = parser.add_argument_group('general logging') general_options.add_argument('--string', help="Disable string logs", action="store_false", default=True) general_options.add_argument('--data', help="Disable data logs", action="store_false", default=True) general_options.add_argument('--trace', help="Disable trace logs", action="store_false", default=True) stack_options = parser.add_argument_group('stack logging') stack_options.add_argument('--phy', help="Disable logs for phy", action="store_false", default=True) stack_options.add_argument('--dll', help="Disable logs for dll", action="store_false", default=True) stack_options.add_argument('--mac', help="Disable logs for mac", action="store_false", default=True) stack_options.add_argument('--nwl', help="Disable logs for nwl", action="store_false", default=True) stack_options.add_argument('--trans', help="Disable logs for trans", action="store_false", default=True) stack_options.add_argument('--fwk', help="Disable logs for fwk", action="store_false", default=True) stack_options.add_argument('--stack', help="Disable all stack logs", action="store_false", default=True) special_options = parser.add_argument_group('special logging') special_options.add_argument('--dllres', help="Disable DLL RES logs", action="store_false", default=True) special_options.add_argument('--phyres', help="Disable PHY RES Logs", action="store_false", default=True) special_options.add_argument('--display', help="Format the data of PHY RES", choices=['hex', 'bin', 'txt', 'dec'], default='hex') settings = vars(parser.parse_args()) # We only want to list the serial ports, then exit if settings["list"]: list_serial_ports() sys.exit() # Setup the serial port if settings["serial"] is None: printError("You didn't specify a serial port!") sys.exit() serial_port = serial.Serial(settings['serial'], settings['baud']) empty_serial_buffer() # Array containing all the threads threads = [] # Only write a file if we have a file defined pcap_file = None if settings["file"] != None: # TODO check if file already exists pcap_file = open(settings["file"], 'w') pcap_file.write(PCAPFormatter.build_global_header_data()) pcap_file.flush() if settings["pipe"]: if not os.path.exists(PIPE_FILENAME): os.mkfifo(PIPE_FILENAME) threads.append(parse_d7(pcap_file, settings["pipe"], displayQueue)) threads.append(display_d7(displayQueue)) try: for t in threads: t.start() except Exception as inst: printError("Error unable to start thread") printError(inst) while keep_running: try: # Sleep a very short time, we are just waiting for a keyboard intterupt really time.sleep(0.0001) except KeyboardInterrupt: print("\nCtrl-c received! Sending Kill to the threads...") for t in threads: t.keep_running = False keep_running = False print("The logger is stopping, please wait") sys.exit()