對心臟率測量特性字節順序:蘋果公司的心臟速率監測例如與藍牙心臟率測量特性
我想確保我正確地閱讀它。這實際上是說5個領域?強制性的C1,C2,C3和C4?第一個字節是強制性的,C4是最後兩個字節,C1和C2是8位字段,C3到C4每個都是16位。這總共是8個字節。我正確閱讀本文檔嗎?
編輯:
我獲悉,強制性標誌字段表示東西是0,這意味着它只是不存在。例如,如果第一位是0,則C1是下一個字段,如果是1,則C2代替。
編輯完
在蘋果的OSX heart rate monitor example:
- (void) updateWithHRMData:(NSData *)data
{
const uint8_t *reportData = [data bytes];
uint16_t bpm = 0;
if ((reportData[0] & 0x01) == 0)
{
/* uint8 bpm */
bpm = reportData[1];
}
else
{
/* uint16 bpm */
bpm = CFSwapInt16LittleToHost(*(uint16_t *)(&reportData[1]));
}
... // I ignore rest of the code for simplicity
}
它檢查第一位爲零,如果它不是,它改變了小字節序到任何主機字節順序,由將CFSwapInt16LittleToHost應用於reportData[1]
。
該位檢查如何工作?我並不完全確定自己的內疚。難道說它是小還是大,第一個字節總是強制字段,第二個字節是C1等?由於reportData是一個8位指針(typedef到unsigned char
),它將檢查必填字段的位0或位8。
如果該位是位8,該位保留供將來使用,爲什麼它在那裏讀取?
如果該位爲0,它是小端,不需要轉換?但是,如果它是小尾數,根據規格,第一位可以是1,意思是「心率數值格式設置爲UINT16。單位:每分鐘跳動次數(bpm)」,是不是可能會被誤讀?
我不明白它是如何做檢查。
編輯: 我一直在說有C5,這是一個錯誤。這隻適用於C4,我在上面進行了編輯。
有兩個問題:1.你寫的結構在那裏有標誌,但是我沒有在表格中看到它?所有標誌似乎都在第一個字節中。 2.我確實知道按位運算符,但這不是我要求的,但我認爲它正在檢查錯誤的字段。根據蘋果公司的代碼,它看起來像我檢查一下是否存在不良現象(如CFSwapInt16LittleToHost所示)。你能澄清一下它爲什麼要檢查第一點嗎? – huggie