藍芽 BCSP 解析 原始碼分析

2021-07-14 02:51:57 字數 2199 閱讀 4642

此系列打算做乙個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,結果...