comparison service/arduinoNode/arduinoNode.py @ 185:2161c71c7b02

support for device code in the idle loop Ignore-this: 7454ba4c9bab3c5393707af7ac91547
author drewp@bigasterisk.com
date Wed, 08 Jul 2015 01:19:21 -0700
parents f81c4d3d774b
children ad20e5cb4feb
comparison
equal deleted inserted replaced
184:e052416a2290 185:2161c71c7b02
67 self._devs = devices.makeDevices(graph, self.uri) 67 self._devs = devices.makeDevices(graph, self.uri)
68 self._devCommandNum = dict((dev.uri, ACTION_BASE + devIndex) 68 self._devCommandNum = dict((dev.uri, ACTION_BASE + devIndex)
69 for devIndex, dev in enumerate(self._devs)) 69 for devIndex, dev in enumerate(self._devs))
70 self._polledDevs = [d for d in self._devs if d.generatePollCode()] 70 self._polledDevs = [d for d in self._devs if d.generatePollCode()]
71 71
72 self._statementsFromInputs = {} # input uri: latest statements 72 self._statementsFromInputs = {} # input device uri: latest statements
73 73
74 self.open() 74 self.open()
75 75
76 def description(self): 76 def description(self):
77 """for web page""" 77 """for web page"""
156 'baudrate': self.baudrate, 156 'baudrate': self.baudrate,
157 'includes': '', 157 'includes': '',
158 'global': '', 158 'global': '',
159 'setups': '', 159 'setups': '',
160 'polls': '', 160 'polls': '',
161 'idles': '',
161 'actions': '', 162 'actions': '',
162 } 163 }
163 for attr in ['includes', 'global', 'setups', 'polls', 'actions']: 164 for attr in ['includes', 'global', 'setups', 'polls', 'idles',
165 'actions']:
164 for dev in self._devs: 166 for dev in self._devs:
165 if attr == 'includes': 167 if attr == 'includes':
166 gen = '\n'.join('#include "%s"\n' % inc 168 gen = '\n'.join('#include "%s"\n' % inc
167 for inc in dev.generateIncludes()) 169 for inc in dev.generateIncludes())
168 elif attr == 'global': gen = dev.generateGlobalCode() 170 elif attr == 'global': gen = dev.generateGlobalCode()
169 elif attr == 'setups': gen = dev.generateSetupCode() 171 elif attr == 'setups': gen = dev.generateSetupCode()
170 elif attr == 'polls': gen = dev.generatePollCode() 172 elif attr == 'polls': gen = dev.generatePollCode()
173 elif attr == 'idles': gen = dev.generateIdleCode()
171 elif attr == 'actions': 174 elif attr == 'actions':
172 code = dev.generateActionCode() 175 code = dev.generateActionCode()
173 if code: 176 if code:
174 gen = '''else if (cmd == %(cmdNum)s) { 177 gen = '''else if (cmd == %(cmdNum)s) {
175 %(code)s 178 %(code)s
187 190
188 code = ''' 191 code = '''
189 %(includes)s 192 %(includes)s
190 193
191 %(global)s 194 %(global)s
192 195 byte frame=0;
196 unsigned long lastFrame=0;
197
193 void setup() { 198 void setup() {
194 Serial.begin(%(baudrate)d); 199 Serial.begin(%(baudrate)d);
195 Serial.flush(); 200 Serial.flush();
196 %(setups)s 201 %(setups)s
197 } 202 }
198 203
204 void idle() {
205 // this slowdown is to spend somewhat less time PWMing, to reduce
206 // leaking from on channels to off ones (my shift register has no
207 // latching)
208 if (micros() < lastFrame + 128) {
209 return;
210 }
211 lastFrame = micros();
212 frame++;
213 %(idles)s
214 }
215
199 void loop() { 216 void loop() {
200 byte head, cmd; 217 byte head, cmd;
218 idle();
201 if (Serial.available() >= 2) { 219 if (Serial.available() >= 2) {
202 head = Serial.read(); 220 head = Serial.read();
203 if (head != 0x60) { 221 if (head != 0x60) {
204 Serial.flush(); 222 Serial.flush();
205 return; 223 return;
342 pred = URIRef(self.get_argument('p')) 360 pred = URIRef(self.get_argument('p'))
343 361
344 turtleLiteral = self.request.body 362 turtleLiteral = self.request.body
345 try: 363 try:
346 obj = Literal(float(turtleLiteral)) 364 obj = Literal(float(turtleLiteral))
347 except TypeError: 365 except ValueError:
348 obj = Literal(turtleLiteral) 366 obj = Literal(turtleLiteral)
349 367
350 stmt = (subj, pred, obj) 368 stmt = (subj, pred, obj)
351 for b in self.settings.boards: 369 for b in self.settings.boards:
352 b.outputStatements([stmt]) 370 b.outputStatements([stmt])