def test_probe(self): fs = FakeSerial() m = SerialMux(ser=fs) fs.inp += b'\xFF' self.assertTrue(m._send_probe(0x2342, 5)) self.assertEqual(fs.out, b'\\#\xFF\xFF\x23\x42\x00\x05') self.assertFalse(m._send_probe(0x2342, 5))
def test_discovery(self): fs = FakeSerial() m = SerialMux(ser=fs) fs.inp += b'\xFF'*16 self.assertEqual(m.discover(), [0]) probepacket0 = lambda x: b'\\#\xFF\xFF\x00\x00'+x.to_bytes(2, 'big') probepacket1 = lambda x: b'\\#\xFF\xFF'+(1<<x).to_bytes(2, 'big')+x.to_bytes(2, 'big') self.assertEqual(fs.out, b''.join([probepacket0(i) for i in range(16)] + [probepacket1(15-i) for i in range(16)]))
#!/usr/bin/env python3 import time import copy import json import requests import time from threading import Thread from pylibcerebrum.serial_mux import SerialMux from http.server import HTTPServer, BaseHTTPRequestHandler PORT = "/dev/serial/by-id/usb-Arduino__www.arduino.cc__Arduino_Uno_649383232313512181A1-if00" BAUDRATE = 115200 s = SerialMux(PORT, BAUDRATE) print("discovering cerebrum devices") results = [] while not results: results = s.discover() print(results) print("opening first device") g = s.open(0) print("initializing device") print(dir(g)) for io in [g.digital3, g.digital5, g.digital6, g.digital9, g.digital10, g.digital11]: io.direction = 1 io.pwm_enabled = 1 print("starting event loop") barstatus = "closed" lastchange = time.time()
global GANGLION_ADAPTERS GANGLION_ADAPTERS[ganglion_type] = cls return cls class GanglionRestAdapter: def __init__(self, g): with exitOnSerialException(): self.name = g.config.get('name') or g.config.get('node_id') #Hardware discovery self.members = [GANGLION_ADAPTERS[m.type](self, g) for m in g] @property def base_url(self): return '/cerebrum' # === Cerebrum serial port setup === with exitOnSerialException(): s = SerialMux(PORT, BAUDRATE) time.sleep(1) print('Discovering cerebrum devices') results = [] while not results: results = s.discover() print('Opening devices') adapters = [GanglionRestAdapter(s.open(i)) for _,i in results] if __name__ == '__main__': app.debug = True app.run()