|
33 | 33 |
|
34 | 34 | **Hardware:**
|
35 | 35 |
|
36 |
| -* BM1000C, made by Shanghai Berry Electronic Tech Co.,Ltd |
| 36 | +* BM1000, made by Shanghai Berry Electronic Tech Co.,Ltd. |
| 37 | + Device labeling is not consistent. |
| 38 | + May be identified on device label, box, or in BLE advertisement as |
| 39 | + BM1000, BM1000B, BM1000C, or BM1000E. |
| 40 | +
|
| 41 | + Protocol defined here: |
| 42 | +
|
| 43 | + * https://github.com/zh2x/BCI_Protocol. |
37 | 44 |
|
38 |
| - Protocol defined here: https://github.com/zh2x/BCI_Protocol |
39 | 45 | Thanks as well to:
|
40 |
| - * https://github.com/ehborisov/BerryMed-Pulse-Oximeter-tool |
41 |
| - * https://github.com/ScheindorfHyenetics/berrymedBluetoothOxymeter |
| 46 | +
|
| 47 | + * https://github.com/ehborisov/BerryMed-Pulse-Oximeter-tool |
| 48 | + * https://github.com/ScheindorfHyenetics/berrymedBluetoothOxymeter |
42 | 49 |
|
43 | 50 | **Software and Dependencies:**
|
44 | 51 |
|
@@ -100,14 +107,23 @@ def values(self):
|
100 | 107 |
|
101 | 108 | Return ``None`` if no data available.
|
102 | 109 | """
|
103 |
| - first_byte = self.read(1) |
104 |
| - # Wait for a byte with the high bit set, which indicates the beginning |
105 |
| - # a data packet. |
106 |
| - if not first_byte: |
107 |
| - return None |
108 |
| - header = first_byte[0] |
109 |
| - if header & 0x80 == 0: |
110 |
| - # Not synchronized. |
| 110 | + # Discard stale data. |
| 111 | + self.reset_input_buffer() |
| 112 | + # Data packets are five bytes long. The first byte has its high bit set; |
| 113 | + # the rest do not. Read up to five bytes to get back in sync. |
| 114 | + have_header = False |
| 115 | + for _ in range(5): |
| 116 | + first_byte = self.read(1) |
| 117 | + if not first_byte: |
| 118 | + # Nothing read, even after stream timeout. |
| 119 | + return None |
| 120 | + header = first_byte[0] |
| 121 | + if header & 0x80: |
| 122 | + have_header = True |
| 123 | + break |
| 124 | + |
| 125 | + if not have_header: |
| 126 | + # Failed to synchronize. |
111 | 127 | return None
|
112 | 128 |
|
113 | 129 | data = self.read(4)
|
|
0 commit comments