Skip to content

Commit 667140d

Browse files
author
JeromeGalan
authored
Merge pull request #167 from Luos-io/rc_2.2.6
Pyluos version 2.2.6
2 parents ec4fffb + 2fdc9d2 commit 667140d

File tree

16 files changed

+92
-85
lines changed

16 files changed

+92
-85
lines changed

pyluos/device.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -251,22 +251,22 @@ def _poll_and_up(self):
251251

252252
# Update our model with the new state.
253253
def _update(self, new_state):
254-
if 'dead_service' in new_state :
254+
if 'dead_service' in new_state.keys() :
255255
#we have lost a service put a flag on this service
256256
alias = new_state['dead_service']
257257
if hasattr(self, alias):
258258
getattr(self, alias)._kill()
259-
if 'assert' in new_state :
259+
if 'assert' in new_state.keys() :
260260
# A node assert, print assert informations
261-
if (('node_id' in new_state['assert']) and ('file' in new_state['assert']) and ('line' in new_state['assert'])):
261+
if (('node_id' in new_state.keys()['assert']) and ('file' in new_state.keys()['assert']) and ('line' in new_state.keys()['assert'])):
262262
s = "************************* ASSERT *************************\n"
263263
s += "* Node " + str(new_state['assert']['node_id']) + " assert in file " + new_state['assert']['file'] + " line " + str(new_state['assert']['line'])
264264
s += "\n**********************************************************"
265265
print (s)
266-
if 'services' not in new_state:
266+
if 'services' not in new_state.keys():
267267
return
268268

269-
for alias, mod in new_state['services'].items():
269+
for alias, mod in new_state.keys()['services'].items():
270270
if hasattr(self, alias):
271271
getattr(self, alias)._update(mod)
272272

pyluos/io/serial_io.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
class Serial(IOHandler):
2828
poll_frequency = 200
29+
period = 1 / poll_frequency
30+
message_rate = 12000 # Max messages per seconds
2931

3032
@classmethod
3133
def available_hosts(cls):
@@ -44,7 +46,7 @@ def __init__(self, host, baudrate=None):
4446
self._serial = _serial.Serial(host, baudrate)
4547
self._serial.flush()
4648

47-
self._msg = queue.Queue(500)
49+
self._msg = queue.Queue(int((self.message_rate / self.period) / 1000))
4850
self._running = True
4951

5052
self._poll_loop = Thread(target=self._poll)
@@ -112,22 +114,22 @@ def extract_line(s):
112114
return extract_line(s[H+1:])
113115
else:
114116
# Footer is ok
115-
data = s[data_start:data_end]
116-
if data == b'{}\n':
117-
# Datas are void
118-
return b'', s[data_end + 1:]
119-
else:
120-
# Datas are not void
121-
return data, s[data_end + 1:]
122-
123-
period = 1 / self.poll_frequency
117+
for _, search_void in enumerate(s[data_start:6]):
118+
if search_void == b'{}\n':
119+
# Drop void datas
120+
for index, search_header in enumerate(data):
121+
if search_header == b'\x7E':
122+
return extract_line(s[(data_start + index + 1):])
123+
# Return the data
124+
return s[data_start:data_end], s[data_end + 1:]
125+
124126
buff = b''
125127

126128
while self._running:
127129
to_read = self._serial.in_waiting
128130

129-
if to_read == 0:
130-
time.sleep(period)
131+
if (to_read == 0) and (len(buff) == 0):
132+
time.sleep(self.period)
131133
continue
132134

133135
s = self._serial.read(to_read)

pyluos/services/angle.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def rot_position(self, new_val):
2121

2222
def _update(self, new_state):
2323
Service._update(self, new_state)
24-
if 'rot_position' in new_state:
24+
if 'rot_position' in new_state.keys():
2525
new_val = new_state['rot_position']
2626
if new_val != self._value:
2727
self._pub_event('changed', self._value, new_val)

pyluos/services/distance.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def distance(self):
1616

1717
def _update(self, new_state):
1818
Service._update(self, new_state)
19-
if 'trans_position' in new_state:
19+
if 'trans_position' in new_state.keys():
2020
new_dist = new_state['trans_position']
2121
if new_dist != self._value:
2222
self._pub_event('changed', self._value, new_dist)

pyluos/services/imu.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -184,27 +184,27 @@ def heading(self, enable):
184184

185185
def _update(self, new_state):
186186
Service._update(self, new_state)
187-
if 'quaternion' in new_state:
187+
if 'quaternion' in new_state.keys():
188188
self._quaternion = new_state['quaternion']
189-
if 'accel' in new_state:
189+
if 'accel' in new_state.keys():
190190
self._acceleration = new_state['accel']
191-
if 'gyro' in new_state:
191+
if 'gyro' in new_state.keys():
192192
self._gyro = new_state['gyro']
193-
if 'compass' in new_state:
193+
if 'compass' in new_state.keys():
194194
self._compass = new_state['compass']
195-
if 'euler' in new_state:
195+
if 'euler' in new_state.keys():
196196
self._euler = new_state['euler']
197-
if 'rotational_matrix' in new_state:
197+
if 'rotational_matrix' in new_state.keys():
198198
self._rotational_matrix = new_state['rotational_matrix']
199-
if 'pedometer' in new_state:
199+
if 'pedometer' in new_state.keys():
200200
self._pedometer = new_state['pedometer']
201-
if 'walk_time' in new_state:
201+
if 'walk_time' in new_state.keys():
202202
self._walk_time = new_state['walk_time']
203-
if 'linear_accel' in new_state:
203+
if 'linear_accel' in new_state.keys():
204204
self._linear_acceleration = new_state['linear_accel']
205-
if 'gravity_vector' in new_state:
205+
if 'gravity_vector' in new_state.keys():
206206
self._gravity_vector = new_state['gravity_vector']
207-
if 'heading' in new_state:
207+
if 'heading' in new_state.keys():
208208
self._heading = new_state['heading']
209209

210210
def control(self):

pyluos/services/light.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def lux(self):
1616

1717
def _update(self, new_state):
1818
Service._update(self, new_state)
19-
if 'lux' in new_state:
19+
if 'lux' in new_state.keys():
2020
new_light = new_state['lux']
2121
if new_light != self._value:
2222
self._pub_event('changed', self._value, new_light)

pyluos/services/load.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def scale(self, value):
4141

4242
def _update(self, new_state):
4343
Service._update(self, new_state)
44-
if 'force' in new_state:
44+
if 'force' in new_state.keys():
4545
new_force = new_state['force']
4646
if new_force != self._value:
4747
self._pub_event('changed', self._value, new_force)

pyluos/services/pressure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def pressure(self, new_val):
2121

2222
def _update(self, new_state):
2323
Service._update(self, new_state)
24-
if 'pressure' in new_state:
24+
if 'pressure' in new_state.keys():
2525
new_val = new_state['pressure']
2626
if new_val != self._value:
2727
self._pub_event('changed', self._value, new_val)

pyluos/services/service.py

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ def __init__(self,
4141
self._firmware_revision = "Unknown"
4242
self._luos_revision = "Unknown"
4343
self._robus_revision = "Unknown"
44-
self._uuid = [0, 0, 0]
4544
self._killed = False
4645
self._last_update = time.time()
4746
self._luos_statistics = {}
@@ -55,13 +54,11 @@ def _update(self, new_state):
5554
if ((time.time() - self._last_update) != 0):
5655
self.refresh_freq = ((200.0 * self.refresh_freq) + (1.0 / (time.time() - self._last_update))) / 201.0
5756
self._last_update = time.time()
58-
if 'revision' in new_state:
57+
if 'revision' in new_state.keys():
5958
self._firmware_revision = new_state['revision']
60-
if 'luos_revision' in new_state:
59+
if 'luos_revision' in new_state.keys():
6160
self._luos_revision = new_state['luos_revision']
62-
if 'uuid' in new_state:
63-
self._uuid = new_state['uuid']
64-
if 'luos_statistics' in new_state:
61+
if 'luos_statistics' in new_state.keys():
6562
self._luos_statistics = new_state['luos_statistics']
6663
self._luos_statistics['alias'] = self.alias
6764

@@ -107,16 +104,6 @@ def luos_revision(self):
107104
return self._luos_revision
108105

109106
@property
110-
def uuid(self):
111-
self._uuid = None
112-
self._push_value('uuid', "")
113-
114-
tick_start = time.time()
115-
while time.time() - tick_start < READ_TIMEOUT and self._uuid is None:
116-
time.sleep(0.01)
117-
118-
return self._uuid
119-
120107
@property
121108
def luos_statistics(self):
122109
"""Get service statistics with a timeout of 1 second."""

pyluos/services/servoMotor.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -499,17 +499,17 @@ def dxl_register(self, register, val):
499499

500500
def _update(self, new_state):
501501
Service._update(self, new_state)
502-
if 'rot_position' in new_state:
502+
if 'rot_position' in new_state.keys():
503503
self._rot_position = new_state['rot_position']
504-
if 'rot_speed' in new_state:
504+
if 'rot_speed' in new_state.keys():
505505
self._rot_speed = new_state['rot_speed']
506-
if 'trans_position' in new_state:
506+
if 'trans_position' in new_state.keys():
507507
self._trans_position = new_state['trans_position']
508-
if 'trans_speed' in new_state:
508+
if 'trans_speed' in new_state.keys():
509509
self._trans_speed = new_state['trans_speed']
510-
if 'current' in new_state:
510+
if 'current' in new_state.keys():
511511
self._current = new_state['current']
512-
if 'temperature' in new_state:
512+
if 'temperature' in new_state.keys():
513513
self._temperature = new_state['temperature']
514514

515515
def control(self):

pyluos/services/state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def state(self, new_val):
1919

2020
def _update(self, new_state):
2121
Service._update(self, new_state)
22-
if 'io_state' in new_state:
22+
if 'io_state' in new_state.keys():
2323
new_state = new_state['io_state']
2424
if new_state != self._value:
2525
self._pub_event('changed', self._value, new_state)

pyluos/services/unknown.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def __init__(self, id, alias, device):
3232

3333
def _update(self, new_state):
3434
Service._update(self, new_state)
35-
if 'io_state' in new_state:
35+
if 'io_state' in new_state.keys():
3636
val = new_state['io_state']
3737
if val != self._state:
3838
self._pub_event('changed', self._state, val)
@@ -41,25 +41,25 @@ def _update(self, new_state):
4141
self._pub_event(evt, self._state, val)
4242

4343
self._state = val
44-
if 'rot_position' in new_state:
44+
if 'rot_position' in new_state.keys():
4545
self._angular_position = new_state['rot_position']
46-
if 'rot_speed' in new_state:
46+
if 'rot_speed' in new_state.keys():
4747
self._angular_speed = new_state['rot_speed']
48-
if 'trans_position' in new_state:
48+
if 'trans_position' in new_state.keys():
4949
self._trans_position = new_state['trans_position']
50-
if 'trans_speed' in new_state:
50+
if 'trans_speed' in new_state.keys():
5151
self._trans_speed = new_state['trans_speed']
52-
if 'current' in new_state:
52+
if 'current' in new_state.keys():
5353
self._current = new_state['current']
54-
if 'temperature' in new_state:
54+
if 'temperature' in new_state.keys():
5555
self._temperature = new_state['temperature']
56-
if 'pressure' in new_state:
56+
if 'pressure' in new_state.keys():
5757
self._pressure = new_state['pressure']
58-
if 'lux' in new_state:
58+
if 'lux' in new_state.keys():
5959
self._lux = new_state['lux']
60-
if 'force' in new_state:
60+
if 'force' in new_state.keys():
6161
self._load = new_state['force']
62-
if 'volt' in new_state:
62+
if 'volt' in new_state.keys():
6363
self._volt = new_state['volt']
6464

6565

pyluos/services/voltage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def volt(self, new_val):
2121

2222
def _update(self, new_state):
2323
Service._update(self, new_state)
24-
if 'volt' in new_state:
24+
if 'volt' in new_state.keys():
2525
new_val = new_state['volt']
2626
if new_val != self._value:
2727
self._pub_event('changed', self._value, new_val)

pyluos/tools/bootloader.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ def luos_flash(args):
445445
try:
446446
args.port= serial_discover(os.getenv('LUOS_BAUDRATE', args.baudrate))[0]
447447
except:
448-
sys.exit("Can't find any Gate interface")
448+
sys.exit()
449449
return
450450

451451
# state used to check each step
@@ -553,7 +553,7 @@ def luos_detect(args):
553553
try:
554554
args.port= serial_discover(os.getenv('LUOS_BAUDRATE', args.baudrate))[0]
555555
except:
556-
sys.exit("Can't find any Gate interface")
556+
sys.exit()
557557
return
558558

559559
# detect network
@@ -577,7 +577,7 @@ def luos_reset(args):
577577
try:
578578
args.port= serial_discover(os.getenv('LUOS_BAUDRATE', args.baudrate))[0]
579579
except:
580-
sys.exit("Can't find any Gate interface")
580+
sys.exit()
581581
return
582582

583583

pyluos/tools/discover.py

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,46 @@ def serial_discover(baudrate=1000000):
1414
available_serial = []
1515
print("Searching for a gate available")
1616
for serial_host in serial_hosts:
17-
print("Testing " + str(serial_host))
17+
print("Search a Gate on port " + str(serial_host))
1818
try:
19-
port = serial.Serial(serial_host, baudrate, timeout=0.05)
19+
port = serial.Serial(serial_host, baudrate, timeout=0.2)
20+
time.sleep(0.1)
2021
except:
2122
continue
2223

23-
s = b'{}'
24-
port.write(b'\x7E' + struct.pack('<H', len(s)) + s + b'\x81')
25-
time.sleep(0.01)
26-
s = b'{\"discover\": {}}'
27-
port.write(b'\x7E' + struct.pack('<H', len(s)) + s + b'\x81')
28-
port.flush()
29-
for x in range(10):
24+
if port is not None:
25+
s = b'{}'
26+
port.write(b'\x7E' + struct.pack('<H', len(s)) + s + b'\x81')
27+
time.sleep(0.01)
28+
port.readline()
29+
port.flush()
30+
time.sleep(0.01)
31+
s = b'{\"discover\": {}}'
32+
port.write(b'\x7E' + struct.pack('<H', len(s)) + s + b'\x81')
3033
state = port.readline()
31-
if ('gate'.encode() in state):
34+
gateResponse = False
35+
if 'gate'.encode() in state:
36+
gateResponse = True
37+
elif len(state):
38+
# if many other messages are received, drop them and retry reception
39+
for read_retry in range(1000):
40+
state = port.readline()
41+
if 'gate'.encode() in state:
42+
gateResponse = True
43+
break
44+
if gateResponse:
3245
available_serial.append(serial_host)
33-
continue
46+
port.reset_output_buffer()
47+
port.close()
3448

35-
port.close()
36-
return available_serial
49+
if available_serial :
50+
return available_serial
51+
else:
52+
print("... No gate detected")
53+
return []
3754

3855
def main():
56+
parser = argparse.ArgumentParser()
3957
parser.add_argument("--baudrate", action="store",
4058
help="Choose pyluos serial baudrate default value = 1000000",
4159
default=1000000)

pyluos/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = '2.2.5'
1+
version = '2.2.6'

0 commit comments

Comments
 (0)