Utility software to access the Visomat Double Comfort blood pressure meter: http://www.visomat.de/Oberarm-Blutdruckmes.372.0.html 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). The device is seen by linux as a non-standard USB CDC device: [10217.072073] usb 2-5: new full-speed USB device number 5 using ohci_hcd [10217.292067] usb 2-5: New USB device found, idVendor=1247, idProduct=00f8 [10217.292079] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [10217.292087] usb 2-5: Product: USB COMMUNICATION BRIDGE [10217.292093] usb 2-5: Manufacturer: JAPAN PRECISION INSTRUMENTS [10217.301191] cdc_acm 2-5:1.0: Zero length descriptor references [10217.301212] cdc_acm: probe of 2-5:1.0 failed with error -22 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. Each data packet starts with the STX control character, and ends with ETX. There are at least two kind of packets: requests and responses. A request can be used to send command codes to the device. 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 # 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 # Same structure for the other memory block 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