The CMS-50e sets up a USB serial character device. The character device speaks a very simple protocol.
There is basically a 5 byte stream/sequence of data:
(128-???) The first byte has and interger value greater than 127, all other values seem to be 7-bit only (ignoring the most significant bit).
(0-127) The next byte is the y-axis for the wave form.
(0-10 ?) Unknown.
(0-127) This byte is the detected heart rate. What is interesting here is that human hearts can easily beat > 127 bpm. So at 128 bpm the device sends a 0, but the device (and my program) adds 128 when displaying the number. There must be a cutoff somewhere (where the 128 stops being added), but I have been unable to detect where (I can't get my heart rate to 200, or <= 40. I have assumed the cutoff is 40…
(0-99) This byte is the detected oxygen saturation.