bewest/decoding-carelink

Minimed Revel 723 compatibility

Closed this issue · 19 comments

Has anyone tried this yet with this model (MMT-723NAS) of pump? I'm trying what I can with mine, so far almost nothing works past insert.sh. The serial number on my pump isn't just an integer. It's PAR801601H, according to the sticker on the back of my pump. Is there a simple command line tool that can use my carelink to get this kind of info?

Hi,

Your serial is just the numeric portion: 801601.

Reading settings, history, and CGM values should work fine with your pump, among others. Setting boluses and basals, and key presses only work in "PC Connect" model if you have a U.S. model running firmware version 2.5 or greater.

Please share your experiences communicating with the x23 models if you find anything to be different than above.

Thanks!

On Apr 15, 2015, at 7:47 PM, HellHarvest notifications@github.com wrote:

Has anyone tried this yet with this model (MMT-723NAS) of pump? I'm trying what I can with mine, so far almost nothing works past insert.sh. The serial number on my pump isn't just an integer. It's PAR801601H, according to the sticker on the back of my pump. Is there a simple command line tool that can use my carelink to get this kind of info?


Reply to this email directly or view it on GitHub.

I'm running firmware version 2.3A (according to the screen when I remove and reinsert the battery). Anyone have any idea how to upgrade the firmware?

If not, then I'm in the market for a 722.

Sorry, what errors are you getting, and what did you try?

You probably cannot send temp basal commands, but you should be able to read data from the pump just fine.

If you've got decocare installed, you should be able to run python -m decocare.scan, and python -m decocare.stick $(python -m decocare.scan) and get something interesting. These commands talk to the stick, in order to diagnose if there's anything wrong with talking to the stick itself (this makes no attempt to communicate with the pump).

To clarify my earlier comment, version 2.3 should work fine. U.S. version
2.5 restricted changing settings to a special mode.
On Tue, Apr 21, 2015 at 3:48 PM Ben West notifications@github.com wrote:

Sorry, what errors are you getting, and what did you try?

You probably cannot send temp basal commands, but you should be able to
read data from the pump just fine.

If you've got decocare installed, you should be able to run python -m
decocare.scan, and python -m decocare.stick $(python -m decocare.scan)
and get something interesting. These commands talk to the stick, in order
to diagnose if there's anything wrong with talking to the stick itself
(this makes no attempt to communicate with the pump).


Reply to this email directly or view it on GitHub
#80 (comment)
.

So a US-bought Minimed 723 with firmware 2.3 should work, as far as closing the loop and sending basal/bolus commands?

I want my pump to be able to receive basal/bolus commands from carelink. If my pump can't do that, then I'm in the market for a 722.

Also, any 722 firmware I should watch out for while I'm in the market for one?

solderblob@ohm:~/decoding-carelink$ sudo ./remove.sh
[sudo] password for solderblob:

solderblob@ohm:~/decoding-carelink$ sudo dmesg | grep ttyUSB
[ 417.988573] usb 5-1: generic converter now attached to ttyUSB0
[593438.487347] generic ttyUSB0: generic converter now disconnected from ttyUSB0

solderblob@ohm:~/decoding-carelink$ sudo ./insert.sh

solderblob@ohm:~/decoding-carelink$ sudo dmesg | grep ttyUSB
[ 417.988573] usb 5-1: generic converter now attached to ttyUSB0
[593438.487347] generic ttyUSB0: generic converter now disconnected from ttyUSB0
[593481.445017] usb 5-1: generic converter now attached to ttyUSB0

solderblob@ohm:~/decoding-carelink$ python decocare/stick.py /dev/ttyUSB0
INFO:main:howdy! I'm going to take a look at your carelink usb stick.
Traceback (most recent call last):
File "decocare/stick.py", line 901, in
stick = Stick(link.Link(port))
File "/home/solderblob/decoding-carelink/decocare/link.py", line 18, in init
self.open( port )
File "/home/solderblob/decoding-carelink/decocare/link.py", line 27, in open
self.serial = serial.Serial( self.port, **kwds )
File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 261, in init
self.open()
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 278, in open
raise SerialException("could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'

solderblob@ohm:~/decoding-carelink$ sudo python decocare/stick.py /dev/ttyUSB0
INFO:main:howdy! I'm going to take a look at your carelink usb stick.
INFO:link:Link opened serial port: Serial<id=0x7f7822db8910, open=True>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=0.5, xonxoff=False, rtscts=False, dsrdtr=False)
INFO:main:PROCESS:OPEN:0.017
INFO:main:PROCESS:START:0.094:ProductInfo:0x04
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)] processing ProductInfo:0x04)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)] sending ProductInfo:0x04)
INFO:root:usb.write.len: 3
0000 0x04 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x0a 0x14 0x00 0x00 0x00 .U......
0008 0x00 0x43 0x6f 0x6d 0x4c 0x69 0x6e 0x6b .ComLink
0010 0x20 0x49 0x49 0x01 0x10 0x02 0x00 0x01 II.....
0018 0x01 0x03 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing ProductInfo:0x04, {'description': 'ComLink II', 'software.version': '1.16', 'interfaces': [(0, 'Paradigm RF'), (1, 'USB')], 'product.version': '0.0', 'rf.freq': '916.5Mhz', 'serial': '0a1400'}
INFO:main:PROCESS:END:3.279:ProductInfo:0x04
INFO:main:{'description': 'ComLink II', 'software.version': '1.16', 'interfaces': [(0, 'Paradigm RF'), (1, 'USB')], 'product.version': '0.0', 'rf.freq': '916.5Mhz', 'serial': '0a1400'}
INFO:main:PROCESS:START:3.407:ProductInfo:0x04
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)] processing ProductInfo:0x04)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)] sending ProductInfo:0x04)
INFO:root:usb.write.len: 3
0000 0x04 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x0a 0x14 0x00 0x00 0x00 .U......
0008 0x00 0x43 0x6f 0x6d 0x4c 0x69 0x6e 0x6b .ComLink
0010 0x20 0x49 0x49 0x01 0x10 0x02 0x00 0x01 II.....
0018 0x01 0x03 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing ProductInfo:0x04, {'description': 'ComLink II', 'software.version': '1.16', 'interfaces': [(0, 'Paradigm RF'), (1, 'USB')], 'product.version': '0.0', 'rf.freq': '916.5Mhz', 'serial': '0a1400'}
INFO:main:PROCESS:END:6.1:ProductInfo:0x04
INFO:main:{'description': 'ComLink II', 'software.version': '1.16', 'interfaces': [(0, 'Paradigm RF'), (1, 'USB')], 'product.version': '0.0', 'rf.freq': '916.5Mhz', 'serial': '0a1400'}
INFO:main:get signal strength of Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)]
INFO:main:PROCESS:START:6.326:SignalStrength:0x06 0x00
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<SignalStrength:0x06 0x00:size(64)>] processing SignalStrength:0x06 0x00)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<SignalStrength:0x06 0x00:size(64)>] sending SignalStrength:0x06 0x00)
INFO:root:usb.write.len: 3
0000 0x06 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0xb1 0x14 0x00 0x00 0x00 .U......
0008 0x00 0x43 0x6f 0x6d 0x4c 0x69 0x6e 0x6b .ComLink
0010 0x20 0x49 0x49 0x01 0x10 0x02 0x00 0x01 II.....
0018 0x01 0x03 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:<SignalStrength:0x06 0x00:size(64)>:readSignalStrength:177
INFO:main:finished processing SignalStrength:0x06 0x00, 177
INFO:main:PROCESS:END:9.155:SignalStrength:0x06 0x00
INFO:main:we seem to have found a nice signal strength of: 177
INFO:main:test fetching product info Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<SignalStrength:0x06 0x00:size(64)>]
INFO:main:PROCESS:START:9.391:ProductInfo:0x04
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)] processing ProductInfo:0x04)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)] sending ProductInfo:0x04)
INFO:root:usb.write.len: 3
0000 0x04 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x0a 0x14 0x00 0x00 0x00 .U......
0008 0x00 0x43 0x6f 0x6d 0x4c 0x69 0x6e 0x6b .ComLink
0010 0x20 0x49 0x49 0x01 0x10 0x02 0x00 0x01 II.....
0018 0x01 0x03 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing ProductInfo:0x04, {'description': 'ComLink II', 'software.version': '1.16', 'interfaces': [(0, 'Paradigm RF'), (1, 'USB')], 'product.version': '0.0', 'rf.freq': '916.5Mhz', 'serial': '0a1400'}
INFO:main:PROCESS:END:12.157:ProductInfo:0x04
INFO:main:{'description': 'ComLink II',
'interfaces': [(0, 'Paradigm RF'), (1, 'USB')],
'product.version': '0.0',
'rf.freq': '916.5Mhz',
'serial': '0a1400',
'software.version': '1.16'}
INFO:main:get signal strength of Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[ProductInfo:0x04:size(64)]
INFO:main:PROCESS:START:13.113:SignalStrength:0x06 0x00
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<SignalStrength:0x06 0x00:size(64)>] processing SignalStrength:0x06 0x00)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<SignalStrength:0x06 0x00:size(64)>] sending SignalStrength:0x06 0x00)
INFO:root:usb.write.len: 3
0000 0x06 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0xb1 0x14 0x00 0x00 0x00 .U......
0008 0x00 0x43 0x6f 0x6d 0x4c 0x69 0x6e 0x6b .ComLink
0010 0x20 0x49 0x49 0x01 0x10 0x02 0x00 0x01 II.....
0018 0x01 0x03 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:<SignalStrength:0x06 0x00:size(64)>:readSignalStrength:177
INFO:main:finished processing SignalStrength:0x06 0x00, 177
INFO:main:PROCESS:END:16.207:SignalStrength:0x06 0x00
INFO:main:we seem to have found a nice signal strength of: 177
INFO:main:at this point, we could issue remote commands to a medical
device, let's inspect the interfaces
INFO:main:PROCESS:START:16.44:UsbStats:0x05 0x01
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<UsbStats:0x05 0x01:size(64)>] processing UsbStats:0x05 0x01)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<UsbStats:0x05 0x01:size(64)>] sending UsbStats:0x05 0x01)
INFO:root:usb.write.len: 3
0000 0x05 0x01 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x03 0x00 0x05 0x04 0x00 .U......
0008 0x00 0x01 0x69 0x00 0x00 0x01 0x71 0x01 ..i...q.
0010 0xa7 0x01 0x83 0x01 0x71 0x04 0x00 0x00 ....q...
0018 0x05 0x03 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing UsbStats:0x05 0x01, {'errors.timeouts': 4, 'packets.transmit': 369L, 'errors.naks': 5, 'errors.sequence': 0, 'packets.received': 361L, 'errors.crc': 3}
INFO:main:PROCESS:END:19.221:UsbStats:0x05 0x01
INFO:main:PROCESS:START:19.334:RadioStats:0x05 0x00
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<RadioStats:0x05 0x00:size(64)>] processing RadioStats:0x05 0x00)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<RadioStats:0x05 0x00:size(64)>] sending RadioStats:0x05 0x00)
INFO:root:usb.write.len: 3
0000 0x05 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x00 0x00 0x00 0x00 .U......
0008 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing RadioStats:0x05 0x00, {'errors.timeouts': 0, 'packets.transmit': 0L, 'errors.naks': 0, 'errors.sequence': 0, 'packets.received': 0L, 'errors.crc': 0}
INFO:main:PROCESS:END:22.203:RadioStats:0x05 0x00
INFO:main:{'radio': {'errors.crc': 0,
'errors.naks': 0,
'errors.sequence': 0,
'errors.timeouts': 0,
'packets.received': 0L,
'packets.transmit': 0L},
'usb': {'errors.crc': 3,
'errors.naks': 5,
'errors.sequence': 0,
'errors.timeouts': 4,
'packets.received': 361L,
'packets.transmit': 369L}}
INFO:main:CLEAR BUFFERS
INFO:main:PROCESS:START:23.474:UsbStats:0x05 0x01
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<UsbStats:0x05 0x01:size(64)>] processing UsbStats:0x05 0x01)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<UsbStats:0x05 0x01:size(64)>] sending UsbStats:0x05 0x01)
INFO:root:usb.write.len: 3
0000 0x05 0x01 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x03 0x00 0x05 0x04 0x00 .U......
0008 0x00 0x01 0x6b 0x00 0x00 0x01 0x73 0x01 ..k...s.
0010 0xa9 0x01 0x85 0x01 0x73 0x04 0x00 0x00 ....s...
0018 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing UsbStats:0x05 0x01, {'errors.timeouts': 4, 'packets.transmit': 371L, 'errors.naks': 5, 'errors.sequence': 0, 'packets.received': 363L, 'errors.crc': 3}
INFO:main:PROCESS:END:26.208:UsbStats:0x05 0x01
INFO:main:PROCESS:START:26.322:RadioStats:0x05 0x00
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<RadioStats:0x05 0x00:size(64)>] processing RadioStats:0x05 0x00)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<RadioStats:0x05 0x00:size(64)>] sending RadioStats:0x05 0x00)
INFO:root:usb.write.len: 3
0000 0x05 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x00 0x00 0x00 0x00 .U......
0008 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing RadioStats:0x05 0x00, {'errors.timeouts': 0, 'packets.transmit': 0L, 'errors.naks': 0, 'errors.sequence': 0, 'packets.received': 0L, 'errors.crc': 0}
INFO:main:PROCESS:END:29.223:RadioStats:0x05 0x00
DEBUG:main:INTERFACE STATS:
{'radio': {'errors.crc': 0,
'errors.naks': 0,
'errors.sequence': 0,
'errors.timeouts': 0,
'packets.received': 0L,
'packets.transmit': 0L},
'usb': {'errors.crc': 3,
'errors.naks': 5,
'errors.sequence': 0,
'errors.timeouts': 4,
'packets.received': 363L,
'packets.transmit': 371L}}
INFO:main:XXX:clear_buffer[attempt][0]:segments[0],total_segments[0]:raw[0]:BEGIN :first poll
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[None] poll_size[None] poll_i[None] command[<RadioStats:0x05 0x00:size(64)>]>:STARTING POLL PHASE:attempt:0
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[None] poll_size[0] poll_i[0] command[<RadioStats:0x05 0x00:size(64)>]>:poll:attempt:0
INFO:main:PROCESS:START:30.697:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[0] poll_i[0] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[None] poll_size[0] poll_i[0] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:33.264:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[1] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:1
INFO:main:PROCESS:START:133.737:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[1] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[1] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:136.275:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[2] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:2
INFO:main:PROCESS:START:236.778:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[2] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[2] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:240.357:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[3] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:3
INFO:main:PROCESS:START:340.868:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[3] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[3] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:344.354:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[4] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:4
INFO:main:PROCESS:START:444.864:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[4] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[4] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:448.346:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[5] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:5
INFO:main:PROCESS:START:548.851:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[5] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[5] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:552.352:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[6] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:6
INFO:main:PROCESS:START:652.877:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[6] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[6] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:656.22:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[7] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:7
INFO:main:PROCESS:START:756.663:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[7] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[7] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:759.216:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[8] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:8
INFO:main:PROCESS:START:859.715:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[8] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[8] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:862.367:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
DEBUG:main:<Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[9] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]>:poll:attempt:9
INFO:main:PROCESS:START:962.852:LinkStatus:0x03:status:size=64
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[9] command[LinkStatus:0x03:status:size=64:size(64)] processing LinkStatus:0x03:status:size=64)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[9] command[LinkStatus:0x03:status:size=64:size(64)] sending LinkStatus:0x03:status:size=64)
INFO:root:usb.write.len: 3
0000 0x03 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x02 0x00 0x00 0x00 .U......
0008 0x05 0x04 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:['OK']

INFO:main:finished processing LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[], 0
INFO:main:PROCESS:END:966.361:LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]
DEBUG:main:poll zero, sleeping in POLL, .100
INFO:main:Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[9] command[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)]:STOP POLL after 10 attempts:size:0
INFO:main:XXX:clear_buffer[attempt][0]:segments[0],total_segments[0]:raw[0]:END first poll 0:SHOULD DOWNLOAD :False
INFO:main:PROCESS:START:1066.936:UsbStats:0x05 0x01
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<UsbStats:0x05 0x01:size(64)>] processing UsbStats:0x05 0x01)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<UsbStats:0x05 0x01:size(64)>] sending UsbStats:0x05 0x01)
INFO:root:usb.write.len: 3
0000 0x05 0x01 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x03 0x00 0x05 0x04 0x00 .U......
0008 0x00 0x01 0x77 0x00 0x00 0x01 0x7f 0x01 ..w.....
0010 0xb5 0x01 0x91 0x01 0x7f 0x04 0x00 0x00 ........
0018 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing UsbStats:0x05 0x01, {'errors.timeouts': 4, 'packets.transmit': 383L, 'errors.naks': 5, 'errors.sequence': 0, 'packets.received': 375L, 'errors.crc': 3}
INFO:main:PROCESS:END:1070.245:UsbStats:0x05 0x01
INFO:main:PROCESS:START:1070.362:RadioStats:0x05 0x00
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<RadioStats:0x05 0x00:size(64)>] processing RadioStats:0x05 0x00)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<RadioStats:0x05 0x00:size(64)>] sending RadioStats:0x05 0x00)
INFO:root:usb.write.len: 3
0000 0x05 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x00 0x00 0x00 0x00 .U......
0008 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing RadioStats:0x05 0x00, {'errors.timeouts': 0, 'packets.transmit': 0L, 'errors.naks': 0, 'errors.sequence': 0, 'packets.received': 0L, 'errors.crc': 0}
INFO:main:PROCESS:END:1074.968:RadioStats:0x05 0x00
INFO:main:XXX:clear_buffer[attempt][0]:END:no data:INTERFACE STATS
{'radio': {'errors.crc': 0,
'errors.naks': 0,
'errors.sequence': 0,
'errors.timeouts': 0,
'packets.received': 0L,
'packets.transmit': 0L},
'usb': {'errors.crc': 3,
'errors.naks': 5,
'errors.sequence': 0,
'errors.timeouts': 4,
'packets.received': 375L,
'packets.transmit': 383L}}
INFO:main:NO PENDING BUFFER
INFO:main:DONE CLEARING BUFFERS
INFO:main:PROCESS:START:1076.322:UsbStats:0x05 0x01
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<UsbStats:0x05 0x01:size(64)>] processing UsbStats:0x05 0x01)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<UsbStats:0x05 0x01:size(64)>] sending UsbStats:0x05 0x01)
INFO:root:usb.write.len: 3
0000 0x05 0x01 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x03 0x00 0x05 0x04 0x00 .U......
0008 0x00 0x01 0x79 0x00 0x00 0x01 0x81 0x01 ..y.....
0010 0xb7 0x01 0x93 0x01 0x81 0x04 0x00 0x00 ........
0018 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing UsbStats:0x05 0x01, {'errors.timeouts': 4, 'packets.transmit': 385L, 'errors.naks': 5, 'errors.sequence': 0, 'packets.received': 377L, 'errors.crc': 3}
INFO:main:PROCESS:END:1079.215:UsbStats:0x05 0x01
INFO:main:PROCESS:START:1079.329:RadioStats:0x05 0x00
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<RadioStats:0x05 0x00:size(64)>] processing RadioStats:0x05 0x00)
INFO:main:send_force_read: attempt 0/2 send command, read until we get something within some timeout
INFO:main:link Stick transmit[None] reader[None] download_i[False] status[LinkStatus:0x03:status:size=??LinkStatus:error:True:reason:[]:size(0)] poll_size[0] poll_i[False] command[<RadioStats:0x05 0x00:size(64)>] sending RadioStats:0x05 0x00)
INFO:root:usb.write.len: 3
0000 0x05 0x00 0x00 ...
DEBUG:main:sleeping 0.001
INFO:root:usb.read.len: 64
INFO:root:usb.read.raw:
0000 0x01 0x55 0x00 0x00 0x00 0x00 0x00 0x00 .U......
0008 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0010 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0018 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0020 0x00 0x01 0x00 0x4f 0x00 0x00 0x00 0x00 ...O....
0028 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0030 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
0038 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ........
INFO:main:quit send_force_read, found len: 64 expected 64 after 0 attempts
INFO:main:finished processing RadioStats:0x05 0x00, {'errors.timeouts': 0, 'packets.transmit': 0L, 'errors.naks': 0, 'errors.sequence': 0, 'packets.received': 0L, 'errors.crc': 0}
INFO:main:PROCESS:END:1082.251:RadioStats:0x05 0x00
INFO:main:INTERFACE STATS:
{'radio': {'errors.crc': 0,
'errors.naks': 0,
'errors.sequence': 0,
'errors.timeouts': 0,
'packets.received': 0L,
'packets.transmit': 0L},
'usb': {'errors.crc': 3,
'errors.naks': 5,
'errors.sequence': 0,
'errors.timeouts': 4,
'packets.received': 377L,
'packets.transmit': 385L}}
INFO:main:howdy! all done looking at the stick

Also, "export SERIAL=..." gives me no output.

solderblob@ohm:/decoding-carelink$ export SERIAL=801601
solderblob@ohm:
/decoding-carelink$

Looks like everything is working as expected, eg:

# this has no output, it's setting an environment variable
export SERIAL=801601
sudo mm-send-comm.py --init sleep 0 # should send power control on, and print model number
sudo mm-latest.py 30 # will get all status/activity for last 30 minutes

I don't know that the version number of the firmware matters.
More specifically, european pumps and US pumps are different, US pumps have fewer features. For sending bolus/basal commands, these were stripped out of US pumps while they were still being sold overseas, I have no idea how a version number maps to those changes.

You might have noticed the 80-medtronic-carelink.rules file.
This file allows the system to detect when the stick has been plugged in, and assigns it the "group" permission of plugdev. If your user is also a member of group plugdev, you will be able to use the tools without needing sudo access, it will just work for your user.

Here's my file:

$ cat /etc/udev/rules.d/80-medtronic-carelink.rules 


# udev
# inserting  ftdio_sio module with our vendor's parameters creates a ttyUSB0
# udev can only match one entry at a time, but this triggers additional add entries.
# 0a21 8001
ATTRS{idVendor}=="0a21", ATTRS{idProduct}=="8001", \
  ENV{ID_MM_DEVICE_IGNORE}="1"

#ACTION=="add", SUBSYSTEM=="usb",                  \
#  ATTR{idVendor}=="0a21", ATTR{idProduct}=="8001", \
#  RUN+="/sbin/modprobe usbserial vendor=0x0a21 product=0x8001"


# create a symlink to the ttyUSB device created automatically above
ACTION=="add",                                       \
  SUBSYSTEM=="tty", \
  ATTRS{idVendor}=="0a21", ATTRS{idProduct}=="8001", \
  GROUP="plugdev" \
  SYMLINK+="ttyUSB.Carelink%n"

#ACTION=="remove",         \
#  SUBSYSTEM=="usb",        \
#  ENV{ID_MODEL_ID}=="0a21", \
#  ENV{ID_VENDOR_ID}=="8001", \
#  RUN+="/sbin/modprobe -r usbserial"

If you uncomment the modeprobe sections, it should also eliminate the need to run ./insert.sh and ./remove.sh... generally, FWIW, ./insert.sh only needs to be run once, until the machine is rebooted, I believe.

FWIW, I strongly recommend against using these tools in sudo mode, I've seen this cause problems for people trying to update later on.

Thanks, I'll try to avoid sudo. I'll try again later when I get home.

Today I tried the following recommended actions, and got this output:

solderblob@anarchoPump ~/decoding-carelink $ python -m decocare.stick
usage:
/home/solderblob/decoding-carelink/decocare/stick.py /dev/ttyUSB0
solderblob@anarchoPump ~/decoding-carelink $ python -m decocare.scan
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/solderblob/decoding-carelink/decocare/scan.py", line 15, in
candidate = scan( )
File "/home/solderblob/decoding-carelink/decocare/scan.py", line 12, in scan
return results.pop( )
IndexError: pop from empty list

I could be wrong, but I feel like this kind of output is trying to tell me that something definitely went sideways.

Setting your system up to talk to the usb stick is itself a challenge.

It's likely you don't have permission. In order to get permission, try:

sudo cp 80-medtronic-carelink.rules /etc/udev/rules.d/80-medtronic-carelink.rules

Then sudo udevadm control --reload.
Now, when you [re]-insert the usb stick, you should be able to run the ./insert.sh script (which also requires sudo), but hopefully the python -m decocare.scan will go well.

Should I call ./remove.sh before doing ./insert.sh?

solderblob@anarchoPump ~/decoding-carelink $ sudo cp 80-medtronic-carelink.rules /etc/udev/rules.d/80-medtronic-carelink.rules
solderblob@anarchoPump ~/decoding-carelink $ sudo udevadm control --reload

**I then physically removed carelink, then physically reinserted it *

solderblob@anarchoPump ~/decoding-carelink $ ./insert.sh
ERROR: could not insert 'usbserial': Module already in kernel
solderblob@anarchoPump ~/decoding-carelink $ sudo ./insert.sh
ERROR: could not insert 'usbserial': Module already in kernel
solderblob@anarchoPump ~/decoding-carelink $ python -m decocare.scan
/dev/serial/by-id/usb-0a21_8001-if00-port0

Great, it's working.

You only need insert once per boot.

Try: python -m decocare.stick $(python -m decocare.scan) all in one line.

Or set your environment variable with something like export SERIAL=112233 using your serial number, and try something like mm-send-comm.py --init sleep 0, you should see lots of stuff and your model number printed. After that you can try mm-latest.py 30 or similar.

You can join https://gitter.im/nightscout/intend-to-bolus for chatting about using decocare and openaps.

FWIW, if you are mainly interested in getting data out, you might prefer using https://github.com/openaps/openaps as a "frontend" app for decocare.

I'm interested in completely closing the loop once I'm confident.

Thanks for the pointers. I'm not new to linux, but I am new to github and python. Thanks for your tenacity in keeping up with the forum posts on your repo.

No problem, it's my pleasure. I highly recommend using @openaps now, it's more of an SDK, not an all-in-one thing. Much like decocare, it only does exactly what you tell it, but the output is nicer. The command line tools are definitely better and easier to use. @openaps does everything decocare does, but also has support for dexcom. It'll be easier for me to track what people want to do with decocare and make sure there's a nice tool to do it there. This repo is mainly for decoding the protocol itself.

Closing, but please re-open with more questions/updates. :-)