def send(node: Node, mod: int, message: str, offset: float, dst: int): if dst: node.cmd('gloria tx -m {} -p "{}" -t {} -d {}'.format( mod, message, int(offset * 8E6), dst)) else: node.cmd('gloria tx -m {} -p "{}" -t {}'.format( mod, message, int(offset * 8E6)))
def receive(node: Node, mod: int, message_len: int, offset: float, ack: bool): if ack: node.cmd('gloria rx -m {} -s {} -t {} -a'.format( mod, message_len, int(offset * 8E6))) else: node.cmd('gloria rx -m {} -s {} -t {}'.format( mod, message_len, int(offset * 8E6)))
def connect_nodes(self): self.nodes = [ Node(flocklab=True, id=id, test=False) for id in FLOCKLAB_TARGET_ID_LIST ] if self.local: self.serial_nodes = Node.get_serial_all() self.nodes.extend(self.serial_nodes) for node in self.nodes: node.interactive_mode(False) # Enable single-line JSON Output
def __init__(self, port): try: self.node = Node(port, test=False) if self.node: if not self.node.ser.is_open: self.node.ser.open() self.node.ser.write(b"system bootloader\r\n") self.node.close() time.sleep(0.2) self.port = port except serial.SerialException as e: print(e) raise ValueError("Port {} is NOT a valid COM Port.".format(port.device))
def connect_nodes(self): if not self.local: self.nodes: List[Node] = [ Node(flocklab=True, id=id, test=True) for id in FLOCKLAB_TARGET_ID_LIST ] else: self.nodes: List[Node] = [] self.serial_nodes = Node.get_serial_all() self.nodes.extend(self.serial_nodes) for node in self.nodes: node.cmd('config set uid {:d}'.format(node.id)) node.cmd('config set role 1') node.cmd('config store') node.cmd('system reset') node.interactive_mode(False) # Enable single-line JSON Output #node.flush() time.sleep(0.2)
def __enter__(self, devkit_count=2): devkits = [] for i in range(self.devkit_count): devkit = Node(Node.get_serial_port(DEVKIT_PORTS[i])) devkit.open() devkit.reset() devkit.cmd("led blink") time.sleep(0.3) devkits.append(devkit) self.devkits = devkits self.devkit_a = devkits[0] self.devkit_b = devkits[1] self.scope = Oscilloscope() return self
class Bootloader: def __init__(self, port): try: self.node = Node(port, test=False) if self.node: if not self.node.ser.is_open: self.node.ser.open() self.node.ser.write(b"system bootloader\r\n") self.node.close() time.sleep(0.2) self.port = port except serial.SerialException as e: print(e) raise ValueError("Port {} is NOT a valid COM Port.".format(port.device)) @staticmethod def get_bootloader(port): try: bootloader = Bootloader(port) return bootloader except ValueError: return None @staticmethod def get_all(): ports = [port for port in serial.tools.list_ports.comports() if port[2] != 'n/a'] if len(ports): with Pool(len(ports)) as p: bootloaders = [bootloader for bootloader in p.map(Bootloader.get_bootloader, ports) if bootloader is not None] if bootloaders: print("Flora bootloaders detected: {}".format([bootloader.port.device for bootloader in bootloaders])) else: print("NO flora bootloaders detected!") return bootloaders else: print("NO flora bootloaders detected!")
def sync(node: Node, tx: bool): if tx: node.cmd('gloria sync') else: node.cmd('gloria rx')
def receive(node: Node): node.cmd('radio receive')
def configure_node(node: Node, tx: bool, modulation, power, preamble: int): config = RadioConfiguration(modulation, power=power, tx=tx, preamble=preamble) node.cmd(config.cmd)