README: mention that the Prevention DS-2200PV uses the same protocol
[visomat-utils.git] / README
1 Utility software to access the Visomat Double Comfort blood pressure meter:
2 http://www.visomat.de/Oberarm-Blutdruckmes.372.0.html
3
4 The same protocol seems to be used also by the Prevention DS-2200PV.
5
6 The device can store measurements for two distinct users and has a USB port
7 that can be used to download the history of measurements or trigger a new
8 measurement (apparently only for user 1).
9
10 The device is seen by linux as a non-standard USB CDC device:
11
12   [10217.072073] usb 2-5: new full-speed USB device number 5 using ohci_hcd
13   [10217.292067] usb 2-5: New USB device found, idVendor=1247, idProduct=00f8
14   [10217.292079] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
15   [10217.292087] usb 2-5: Product: USB COMMUNICATION BRIDGE
16   [10217.292093] usb 2-5: Manufacturer: JAPAN PRECISION INSTRUMENTS
17   [10217.301191] cdc_acm 2-5:1.0: Zero length descriptor references
18   [10217.301212] cdc_acm: probe of 2-5:1.0 failed with error -22
19
20 This could be fixed adding a quirk to the cdc_acm driver in linux, but there
21 is not much of a point for this as the data is downloaded using USB bulk
22 communication anyways.
23
24 Each data packet starts with the STX control character, and ends with ETX.
25
26 There are at least two kinds of packets: requests and responses.
27
28 A request can be used to send command codes to the device.
29
30 EEPROM data request:
31   
32   R00
33
34 Date and time request:
35
36   R02
37
38 A response can be read after a request has been sent.
39
40 The payload of a response to a "R00" request is something like this:
41
42   M106100101120211511021201001011208115610711610010112030103065073440601132001130680661001011311012708406610010112030106068066M20710010112031155111116100101120201170700764406011312012807107244060113170126050065440601131901140630661001011400011407007113031211450121080072
43
44 The structure can be better visualized when split in fields:
45
46   M  # start of a Memory block
47   1  # memory block index, corresponding to a "User ID"
48   06 # number of records in this memory block
49
50   # Each records stores date, time, systolic and diastolic pressure, pulses
51   # Maybe the third field is an indication of arrhythmia?
52   # Or a flag to mark test or out of scale measurements?
53
54   # yymmdd HHMM ? systolic diastolic pulses
55     100101 1202 1      151       102    120
56     100101 1208 1      156       107    116
57     100101 1203 0      103       065    073
58     440601 1320 0      113       068    066
59     100101 1311 0      127       084    066
60     100101 1203 0      106       068    066
61
62   # Same structure for the other memory block
63   M
64   2
65   07
66   100101 1203 1 155 111 116
67   100101 1202 0 117 070 076
68   440601 1312 0 128 071 072
69   440601 1317 0 126 050 065
70   440601 1319 0 114 063 066
71   100101 1400 0 114 070 071
72   130312 1145 0 121 080 072
73
74 When the number of records is 0, there is a dummy byte at the end of the user
75 memory block, e.g.:
76
77   M1001M20115110321300134097083
78
79 The structure is:
80
81   M
82   1
83   00
84   1   # dummy byte, present only when the previous field is 00
85   M
86   2
87   01
88   151103 2130 0 134 097 083