Utility software to access the Visomat Double Comfort blood pressure meter:
http://www.visomat.de/Oberarm-Blutdruckmes.372.0.html
+The same protocol seems to be used also by the Prevention DS-2200PV.
+
The device can store measurements for two distinct users and has a USB port
that can be used to download the history of measurements or trigger a new
measurement (apparently only for user 1).
is not much of a point for this as the data is downloaded using USB bulk
communication anyways.
-A data packet starts with the STX control character, and ends with ETX.
+Each data packet starts with the STX control character, and ends with ETX.
-The payload is something like this:
+There are at least two kinds of packets: requests and responses.
- M106100101120211511021201001011208115610711610010112030103065073440601132001130680661001011311012708406610010112030106068066M20710010112031155111116100101120201170700764406011312012807107244060113170126050065440601131901140630661001011400011407007113031211450121080072
+A request can be used to send command codes to the device.
-The structure can be better visualized when split it in fields:
+EEPROM data request:
+ R00
+
+Date and time request:
+
+ R02
+
+A response can be read after a request has been sent.
+
+The payload of a response to a "R00" request is something like this:
+
+ M106100101120211511021201001011208115610711610010112030103065073440601132001130680661001011311012708406610010112030106068066M20710010112031155111116100101120201170700764406011312012807107244060113170126050065440601131901140630661001011400011407007113031211450121080072
+
+The structure can be better visualized when split in fields:
+
M # start of a Memory block
1 # memory block index, corresponding to a "User ID"
06 # number of records in this memory block
# Each records stores date, time, systolic and diastolic pressure, pulses
+ # Maybe the third field is an indication of arrhythmia?
+ # Or a flag to mark test or out of scale measurements?
- # yymmdd HHMM systolic diastolic pulses
- 100101 1202 1151 102 120
- 100101 1208 1156 107 116
- 100101 1203 0103 065 073
- 440601 1320 0113 068 066
- 100101 1311 0127 084 066
- 100101 1203 0106 068 066
+ # yymmdd HHMM ? systolic diastolic pulses
+ 100101 1202 1 151 102 120
+ 100101 1208 1 156 107 116
+ 100101 1203 0 103 065 073
+ 440601 1320 0 113 068 066
+ 100101 1311 0 127 084 066
+ 100101 1203 0 106 068 066
# Same structure for the other memory block
- M
+ M
2
07
- 100101 1203 1155 111 116
- 100101 1202 0117 070 076
- 440601 1312 0128 071 072
- 440601 1317 0126 050 065
- 440601 1319 0114 063 066
- 100101 1400 0114 070 071
- 130312 1145 0121 080 072
+ 100101 1203 1 155 111 116
+ 100101 1202 0 117 070 076
+ 440601 1312 0 128 071 072
+ 440601 1317 0 126 050 065
+ 440601 1319 0 114 063 066
+ 100101 1400 0 114 070 071
+ 130312 1145 0 121 080 072
+
+When the number of records is 0, there is a dummy byte at the end of the user
+memory block, e.g.:
+
+ M1001M20115110321300134097083
+
+The structure is:
+
+ M
+ 1
+ 00
+ 1 # dummy byte, present only when the previous field is 00
+ M
+ 2
+ 01
+ 151103 2130 0 134 097 083