diff --git a/examples/socketread.py b/examples/socketread.py new file mode 100644 index 0000000000000000000000000000000000000000..da0eda1770ff354a4148c13a8c41a51baf7be0c6 --- /dev/null +++ b/examples/socketread.py @@ -0,0 +1,12 @@ + +import kiss + +k = kiss.KISS(host='10.10.0.214', speed=115200, port=8001) +k.logger.LOG_LEVEL = "DEBUG" +k.start() # inits the TNC, optionally passes KISS config flags. +# k.write("testing") +# k.read() +# k.write('KB3DFZ-5>APDW10,WIDE1-1,WIDE2-1:testing') +k.read() + + diff --git a/kiss/classes.py b/kiss/classes.py index aa57de9295dea02599cb718db9888d68edf407f8..dbff06543a2e08507704af2bc36f798c0ea334ea 100644 --- a/kiss/classes.py +++ b/kiss/classes.py @@ -11,6 +11,7 @@ __license__ = 'Apache License, Version 2.0' import logging import serial +import socket import kiss.constants import kiss.util @@ -29,16 +30,19 @@ class KISS(object): logger.addHandler(console_handler) logger.propagate = False - def __init__(self, port, speed): + def __init__(self, port=None, speed=None, host=None, tcpport=None): self.port = port self.speed = speed + self.host = host self.serial_int = None def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): - if self.serial_int and self.serial_int.isOpen(): + if self.host: + self.serial_int.shutdown() + elif self.serial_int and self.serial_int.isOpen(): self.serial_int.close() def __del__(self): @@ -55,17 +59,23 @@ class KISS(object): :param **kwargs: name/value pairs to use as initial config values. """ self.logger.debug("kwargs=%s", kwargs) - self.serial_int = serial.Serial(self.port, self.speed) - self.serial_int.timeout = kiss.constants.SERIAL_TIMEOUT + if self.host: + address = (self.host, self.port) + self.serial_int = socket.create_connection(address) + else: + self.serial_int = serial.Serial(self.port, self.speed) + self.serial_int.timeout = kiss.constants.SERIAL_TIMEOUT # If no settings specified, default to config values similar # to those that ship with xastir. if not kwargs: kwargs = kiss.constants.DEFAULT_KISS_CONFIG_VALUES - for name, value in kwargs.items(): - self.write_setting(name, value) + if not self.host: + for name, value in kwargs.items(): + self.write_setting(name, value) + def write_setting(self, name, value): """ Writes KISS Command Codes to attached device. @@ -98,9 +108,14 @@ class KISS(object): read_buffer = '' while 1: - read_data = self.serial_int.read(kiss.constants.READ_BYTES) + if self.host: + read_data = self.serial_int.recv(kiss.constants.READ_BYTES) + print read_data + waiting_data = None + else: + read_data = self.serial_int.read(kiss.constants.READ_BYTES) + waiting_data = self.serial_int.inWaiting() - waiting_data = self.serial_int.inWaiting() if waiting_data: read_data = ''.join([ @@ -150,9 +165,18 @@ class KISS(object): :param frame: Frame to write. """ - return self.serial_int.write(''.join([ - kiss.constants.FEND, - kiss.constants.DATA_FRAME, - kiss.util.escape_special_codes(frame), - kiss.constants.FEND - ])) + + if self.host: + return self.serial_int.send(''.join([ + kiss.constants.FEND, + kiss.constants.DATA_FRAME, + kiss.util.escape_special_codes(frame), + kiss.constants.FEND + ])) + else: + return self.serial_int.write(''.join([ + kiss.constants.FEND, + kiss.constants.DATA_FRAME, + kiss.util.escape_special_codes(frame), + kiss.constants.FEND + ]))