README: mention that the Prevention DS-2200PV uses the same protocol
[visomat-utils.git] / README
diff --git a/README b/README
index 2e14271..7021cd1 100644 (file)
--- a/README
+++ b/README
@@ -1,6 +1,8 @@
 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).
@@ -19,36 +21,68 @@ This could be fixed adding a quirk to the cdc_acm driver in linux, but there
 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