# HG changeset patch # User matthewreed # Date 2016-08-17 22:06:44 # Node ID 4d9b047f84367d618ee06f8aacc3a3b6469a0012 # Parent 4ccedc2f8509b1ee65a90f72882fd65d3cb07795 Updated CAN code to use CanQueue for sending and receiving diff --git a/hydrobot.py b/hydrobot.py --- a/hydrobot.py +++ b/hydrobot.py @@ -8,6 +8,7 @@ from canard import can, messaging from canard.hw import socketcan from canard.hw import cantact from canard.file import jsondb +from canard.utils import queue from influxdb import InfluxDBClient from influxdb import SeriesHelper from apscheduler.schedulers.background import BackgroundScheduler @@ -98,6 +99,8 @@ class CanBus: #self.dev = cantact.CantactDev("/dev/ttyACM8") #self.dev.set_bitrate(500000) + self.queue = queue.CanQueue(self.dev) + parser = jsondb.JsonDbParser() self.msgdb = parser.parse('hydrobot_can.json') @@ -106,18 +109,17 @@ class CanBus: self.relay_send_msg = self.msgdb.RelayDriveOut def start(self): - self.dev.start() - - def start_receive(self): + self.queue.start() _thread.start_new_thread(self.process_can, ()) def process_can(self): while True: - frame = self.dev.recv() - message = self.msgdb.decode(frame) - if message: - logger.debug("Received CAN message! ID: " + hex(message.id)) - self.database.log_data(self.msgdb, message) + frame = self.queue.recv() + if frame != None: + message = self.msgdb.decode(frame) + if message: + logger.debug("Received CAN message! ID: " + hex(message.id)) + self.database.log_data(self.msgdb, message) def send_can(self): self.relay_send_msg.Nothing.value = 0 @@ -129,13 +131,13 @@ class CanBus: self.relay_send_msg.Output3.value = 1 self.relay_send_msg.Output4.value = 1 logger.debug("Send CAN message! ID: " + hex(self.relay_send_msg.id) + " Data: " + str(self.relay_send_msg.data)) - self.dev.send(self.relay_send_msg.encode()) + self.queue.send(self.relay_send_msg.encode()) def set_output(self, module, output, state): logger.info("Output! " + module + " " + output + " " + str(state)) msg = self.msgdb.lookup_message(module) msg.lookup_signal(output).value = state - self.dev.send(msg.encode()) + self.queue.send(msg.encode()) if msg.lookup_signal(output) == msg.Output1: MySeriesHelper(measurement='output_1', value=state) @@ -255,7 +257,6 @@ def main(): canbus = CanBus(database) canbus.start() - canbus.start_receive() scheduler = Scheduler(canbus) scheduler.start()