CMS50X

Uit Kenniscentrum
Naar navigatie springen Naar zoeken springen

I just copied and pasted this from a CPAPTalk post I made a while ago, it's not entirely accurate, and still needs editing cleaned up.

Serial Port Settings[bewerken | brontekst bewerken]

19200 baud, 8 data bits, 1 stop bit, odd parity.

Live Mode[bewerken | brontekst bewerken]

In default "live" mode it spews a stream of data out, in a repeating 5 byte pattern (split into 2 packets.) Use an event driven handler to process this properly.. Polling code is possible but is a PITA (my original python one was used polling and sucked and had to resync all the time, but I didn't know about odd parity at the time..)

Code: Select all
    [xx xx xx] [xx xx]
    00 01 02   03 04
00 contains "flow control" and error information bitfield (bit 8 is always set, can be used to sync if using polling mode)
01 simple heartbeat plethysomogram (lower 7 bit)
02 even simpler pulse beat "thingy" (bit 0x40 is apparently the upper bit of the Pulse rate)
03 Pulse (lower 7 bits)
04 SpO2 (lower 7 bits)

Pay attention to the sequence as sometimes it can group packets together. (eg 5 byte packets, in either order, occasionally larger packet groups, but always in correct sequence)

To get at the stored recordings:[bewerken | brontekst bewerken]

write a 2 byte sequence containing the codes "0xf5, 0xf5"
read in 0x20 byte chunks until no more data, putting it all aside for later.
write a 3 byte sequence containing "0xf6, 0xf6, 0xf6" to switch back to live mode.

Processing the recording data[bewerken | brontekst bewerken]

data begins with the remainder of any live data packet, followed by sequence "0xf2 0x80 0x00" three times, followed by 3 or 4 bytes, followed by "0xf0 80 00" 5 or so times, followed by the actual data in 3 byte triplets

Example:[bewerken | brontekst bewerken]

>F5 F5
[cruft] [recording data selected] [can be short] [can be short this may just be normal empty data]
<[90 28 35 00] [F2 80 00 F2 80 00 F2 80 00] [80 81 72 00] [F0 80 00 F0 80 00 F0 80 00 F0 80 00 F0 80 00 F0 80 00]
< F0 C4 5F F0 C3 5F F0 C8 5F F0 D4 5F... All data Triplets start with 0xf0, second byte's high bit is set.
< lots more of the actual data... till it runs out.
>F6 F6 F6

EDIT: the 3 or 4 byte sequence after the "recording data selected" sequence is the length in bytes.. 7 bit values following the first 0x80.. flip the second bytes msb. high byte first. I'm still not sure why there sometimes is 4 bytes.. it could simply be more bits of the length (the last 7bit byte would be the high byte, as the data sequence begins with F0 anyway.)

Recorded Data is stored 1 pulse+spo2 pair per second. ie 1Hz.

That's all I got for now..