此系列打算做乙個hci解析工具,從最底層的bcsp開始
文章有不當處請指正,共同學習
bcsp( bluecore serial protoco)是csr的乙個協議,不是標準的藍芽協議,在hci層之下,通俗點講:就是hci又包了一層bcsp協議發給uart,以便做到可靠性傳輸
如圖:
hci註冊的函式指標,方便把資料交由bcsp的上層處理
typedef struct
bcsp_callback_t;
針對bcsp的header進行處理
/* bcsp flags 域解析 */
#define get_flag_ptype(x) (((x) & 0x80) >> 7)
#define get_flag_crc(x) (((x) & 0x40) >> 6)
#define get_flag_ack(x) (((x) & 0x38) >> 3)
#define get_flag_seq(x) ((x) & 0x07)
/* bcsp protocol id 解析 */
#define get_protocol_id(x) ((x) & 0x0f)
/* bcsp payload legth解析 */
#define get_payload_length(x,y) ((y * 16) + (((x) & 0xf0) >> 4))
/* 0xdb,0xdc轉換為0xc0 */和/* 0xdb,0xdd轉換為0xdb */
if(tmp_ptr[index] == slip_escape)
else if(tmp_ptr[index+1] == slip_escape_escape)/* 0xdb,0xdd轉換為0xdb */
else/* 僅僅0xdb不做轉換 */
}
#define slip_frame 0xc0
#define slip_escape 0xdb
#define slip_escape_frame 0xdc
#define slip_escape_escape 0xdd
bcsp測試api
void bcsp_test()
; uint8_t test3 = ;
uint8_t test4 = ;
uint8_t test5 = ;
/* hci reset command test */
uint8_t test2 = ;
/* acl data test */
uint8_t test6 = ;
bcsp_callback_t test_cb;
test_cb.bccmd_cb = test_bccmd_cb;
test_cb.bcsp_link_cb = test_bcsp_link_cb;
test_cb.hci_acl_cb = test_hci_acl_cb;
test_cb.hci_cmd_evt_cb = test_hci_cmd_evt_cb;
test_cb.hq_cmd_cb = test_hq_cmd_cb;
bcsp_init(&test_cb);
bcsp_pkt_parse(test1,sizeof(test1));
bcsp_pkt_parse(test3,sizeof(test3));
bcsp_pkt_parse(test4,sizeof(test4));
bcsp_pkt_parse(test5,sizeof(test5));
bcsp_pkt_parse(test2,sizeof(test2));
bcsp_pkt_parse(test6,sizeof(test6));
}
效果圖:
整份**會在完成後發出,或者有興趣的可以中途像我索要
OSGi Bundle解析原始碼分析
bundle的解析過程就是對bundle的mf檔案進行分析,根據配置的依賴關係構造依賴模型。原始碼見 resolverimpl.resolvebundles0 假設有2個bundle,import export分別是 bundlea import pkg.b export pkg.a bundleb...
ClickHouse原始碼分析 SQL解析
clickhouse的sql解析入口函式 parsequery,函式原型 astptr parsequery iparser parser,const char begin,const char end,const std string query description,size t max qu...
nginx原始碼分析 架構解析
nginx啟動流程 根據上面的手稿得知,nginx在迴圈中呼叫ngx process events and timers該函式來處理事件,在該函式中,最主要的乙個操作是呼叫了ngx process events函式,該函式是乙個巨集定義,然後我再工程裡面搜一下ngx event actions,結果...