airkiss 文章二

一 ?AirKiss 庫文件組成

AirKiss 庫由以下文件組成:

airkiss.h:

AirKiss 庫頭文件趟妥,要使用 AirKiss 功能必須包含該頭文件愧旦,主要定義了相關(guān)參數(shù)結(jié)構(gòu)體及 AirKiss 庫函數(shù)接口奖恰,AES 加密功能啟用宏也在該文件中颅眶。libairkiss.a:

不帶 AES 加密功能的 AirKiss 靜態(tài)庫文件寥院,如果廠家不需要 AES 加密功能

則可使用本靜態(tài)庫掰盘,占用的資源比帶 AES 功能的靜態(tài)庫更少欠橘,使用本靜態(tài)庫記

得關(guān)閉airkiss.h中的 AES 加密功能宏矩肩。

libairkiss_aes.a:

支持 AES 加密功能的 AirKiss 靜態(tài)庫文件,如果廠家需要使用 AES 加密功

能則需要鏈接本靜態(tài)庫肃续,占用的資源相對libairkiss.a較多黍檩,使用本靜態(tài)庫

記得開啟airkiss.h中的 AES 加密功能宏。

libairkiss_log.a:

在libairkiss.a的基礎(chǔ)上添加了 log 打印始锚,可以用于 debug刽酱。libairkiss_aes_log.a:

在libairkiss_aes.a的基礎(chǔ)上添加了 log 打印,可以用于 debug瞧捌。

注意:airkiss.h需要添加到頭文件路徑中棵里,libairkiss.a和libairkiss_aes.a只需要使用其中一個,根據(jù)具體需要選擇姐呐,并設(shè)置好airkiss.h文件中的 AES 加密功能宏殿怜,出于安全考慮,建議使用 AES 加密功

能的 AirKiss 靜態(tài)庫曙砂。

二 ?設(shè)備平臺能力?

無法滿足以下軟件及硬件能力要求的設(shè)備或模塊將無法使用 AirKiss 功能头谜。

硬件能力要求:

1、 ?能夠切換信道;

2鸠澈、 ?具備定時器功能乔夯,能夠提供 100ms 的定時中斷;

3、 ?能夠設(shè)置為混雜模式款侵,接收 802.11 網(wǎng)絡(luò)幀;

4末荐、 ?提供一種進入 AirKiss 模式的控制方式,例如一個按鍵;

軟件能力要求:

1新锈、 ?能夠提供類似標準 memset 函數(shù)的功能函數(shù);

2甲脏、 ?能夠提供類似標準 memcpy 函數(shù)的功能函數(shù);

3、 ?能夠提供類似標準 memcmp 函數(shù)的功能函數(shù);

4、 ?能夠提供至少 232 字節(jié)的全局緩沖空間(完成 AirKiss 后用戶可

用于自己的應(yīng)用程序或進行釋放);

5块请、 帶 AES 功能的靜態(tài)庫文件大小為 32KB娜氏,不帶 AES 功能的靜態(tài)

庫文件大小為 13KB,實際鏈接以后占用資源不同墩新,以 ESP8266 平

臺為例贸弥,實現(xiàn)不帶 AES 功能的 AirKiss 要占用 2304 字節(jié),實現(xiàn)帶

有 AES 功能要占用 5456 字節(jié)海渊。以上統(tǒng)計包括實現(xiàn) AirKiss 功能外

部邏輯函數(shù)代碼绵疲。


三 airkiss庫使用說明

使用 AirKiss 庫實現(xiàn) AirKiss 功能的流程如下(#include "airkiss.h"):

1、 創(chuàng)建 AirKiss 全局緩沖區(qū):airkiss_context_t akcontex;如果平臺支

持malloc等動態(tài)內(nèi)存申請臣疑,也可以通過動態(tài)申請的方式申請空間盔憨,完成

AirKiss 流程或超時(超時時長用戶可以自定,建議 30~40s)以后進行釋放;

2讯沈、 為 AirKiss 庫配置與平臺相關(guān)的接口函數(shù)結(jié)構(gòu)體郁岩,可以為靜態(tài)const類型,

下面示例中的函數(shù)都為標準 C 庫中對應(yīng)的函數(shù)名缺狠,如果平臺沒有該函數(shù)需要

把平臺實現(xiàn)相同功能的函數(shù)名填上问慎,其中最后一項為打印函數(shù),可以填 0挤茄,

其他為必填項如叼,否則調(diào)用airkiss_init()接口會返回失敗:const airkiss_config_t akconf = {

(airkiss_memset_fn)&memset,

(airkiss_memcpy_fn)&memcpy,

(airkiss_memcmp_fn)&memcmp,

(airkiss_printf_fn)&printf };

3、 調(diào)用 AirKiss 初始化接口驮樊,接口參數(shù)為前兩步創(chuàng)建的變量地址:

ret = airkiss_init(&akcontex, &akconf);

如果 ret 返回值小于 0 則表示初始化失敗,通常為參數(shù)錯誤片酝,等于 0 為成功囚衔,

如果用戶在一次 AirKiss 的流程中想重新開始新流程,需要通過調(diào)用該接口

實現(xiàn)雕沿。

4练湿、 如果airkiss.h文件中開啟了 AES 的宏并且鏈接了libairkiss_aes.a靜態(tài)庫,則需要調(diào)用設(shè)置密鑰接口审轮,? key 可以為局部變量:airkiss_set_key(&akcontex, key, strlen(key));

5肥哎、 完成以上初始化流程以后就可以開啟 100ms 定時器,在定時中斷函數(shù)中依

次切換信道;

6疾渣、 設(shè)置模塊為混雜模式篡诽,接收 802.11 網(wǎng)絡(luò)幀,每收到一幀數(shù)據(jù)榴捡,將數(shù)據(jù)起始

指針和數(shù)據(jù)長度傳遞給airkiss_recv()接口杈女,并判斷該接口的返回值,如果返回AIRKISS_STATUS_CHANNEL_LOCKED則表示信道已經(jīng)鎖定了,需要關(guān)閉定時器停止切換信道达椰,如果返回AIRKISS_STATUS_COMPLETE,則表示 AirKiss 完成可以調(diào)用airkiss_get_result()接口讀取參數(shù)翰蠢,其他值可以不用進行處理

四 ?設(shè)備端調(diào)用airkiss 庫的整體流程?

四? Airkiss 庫內(nèi)網(wǎng)發(fā)現(xiàn)功能使用說明

微信內(nèi)網(wǎng)發(fā)現(xiàn)功能與 AirKiss 是兩個相對獨立的模塊,兩者沒有依賴關(guān)系啰劲,使用AirKiss 庫實現(xiàn)微信內(nèi)網(wǎng)發(fā)現(xiàn)功能的流程如下(#include "airkiss.h"):

1梁沧、 為 AirKiss 庫創(chuàng)建與平臺相關(guān)的接口函數(shù)結(jié)構(gòu)體,可以為靜態(tài) const 類型蝇裤,

下面示例中的函數(shù)都為標準 C 庫中對應(yīng)的函數(shù)名廷支,如果平臺沒有該函數(shù)需要

把平臺實現(xiàn)相同功能的函數(shù)名填上,其中最后一項為打印函數(shù)猖辫,可以填 0酥泞,

其他為必填項,也可以復用在 AirKiss 流程中創(chuàng)建的變量:

const airkiss_config_t akconf = {

(airkiss_memset_fn)&memset,

(airkiss_memcpy_fn)&memcpy,

(airkiss_memcmp_fn)&memcmp,

(airkiss_printf_fn)&printf };

2啃憎、 根據(jù)使用的平臺自行創(chuàng)建 UDP芝囤,對 12476 端口進行監(jiān)聽,ip 地址不限制;

3辛萍、 將從 12476 端口接收到的數(shù)據(jù)包傳給 airkiss_lan_recv(const? void*? body,

unsigned? short? length,? const? airkiss_config_t*? config)函數(shù)悯姊,body 為

UDP 消息體數(shù)據(jù)的起始指針,length 為數(shù)據(jù)的有效長度贩毕,config 為第 1 步

創(chuàng)建的變量悯许,函數(shù)的返回值在頭文件中進行了定義,這里暫時只需要處理返

回 AIRKISS_LAN_SSDP_REQ 的情況辉阶,對于其他值用戶可以選擇打印出來方

便調(diào)試;

4先壕、 在上一步接收到 AIRKISS_LAN_SSDP_REQ 結(jié)果后,設(shè)備需要向數(shù)據(jù)包的發(fā)

送發(fā)回復響應(yīng)包谆甜,即以數(shù)據(jù)包的源 IP 和源端口為目的 IP 和目的端口垃僚,響應(yīng)

包可以通過調(diào)用 airkiss_lan_pack(airkiss_lan_cmdid_t ak_lan_cmdid,

void*? appid,? void*? deviceid,? void*? _datain,? unsigned? short? inlength,

void*? _dataout,? unsigned? short*? outlength,? const? airkiss_config_t*

config);函數(shù)實現(xiàn)打包,ak_lan_cmdid 為要打包的類型规辱,appid 為廠商公眾

號 ID谆棺,deviceid 為設(shè)備 ID,_datain 為要發(fā)送的數(shù)據(jù)罕袋,inlength 為發(fā)送數(shù)

據(jù)的長度改淑,_dataout 為打包后的數(shù)據(jù)緩沖區(qū),outlength 為緩沖區(qū)的空間浴讯,

函數(shù)成功返回后將賦值為數(shù)據(jù)包的實際長度朵夏,config 為第 1 步創(chuàng)建的變量,

示 例 : airkiss_lan_pack(AIRKISS_LAN_SSDP_RESP_CMD,

"gh_27098xx","BD5D7xx", 0, 0, lan_buf, &lan_buf_len, &akconf);因為響

應(yīng)包不需要其他數(shù)據(jù)榆纽,所以輸入數(shù)據(jù)和長度都設(shè)置為 0;

5侍郭、 airkiss_lan_pack 返回 AIRKISS_LAN_PAKE_READY 后表明數(shù)據(jù)包打包完成

了询吴,數(shù)據(jù)存放在第 4 步示例中的 lan_buf 中,有效數(shù)據(jù)長度為 lan_buf_len亮元,

接下來用戶根據(jù)使用的平臺將數(shù)據(jù)通過 UDP 的方式發(fā)送給對方即可猛计。

6、 通過前面的步驟實現(xiàn)的是一問一答的服務(wù)發(fā)現(xiàn)模式爆捞,設(shè)備也可以直接向網(wǎng)絡(luò)

發(fā)送上線通知數(shù)據(jù)包奉瘤,無需等待前面提到的請求包。上線通知包的目的 IP 為

255.255.255.255煮甥,目的端口為 12476盗温,消息包可以通過調(diào)用

airkiss_lan_pack() 函 數(shù) 生 成 , 示 例 :

airkiss_lan_pack(AIRKISS_LAN_SSDP_NOTIFY_CMD,

"gh_27098xx","BD5D7xx", 0, 0, lan_buf, &lan_buf_len, &akconf);函數(shù)返

回 AIRKISS_LAN_PAKE_READY 后將數(shù)據(jù)通過 UDP 的方式發(fā)送到網(wǎng)絡(luò)上即

可成肘。

五? AirKiss 庫內(nèi)網(wǎng)發(fā)現(xiàn)功能調(diào)用流程圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卖局,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子双霍,更是在濱河造成了極大的恐慌砚偶,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洒闸,死亡現(xiàn)場離奇詭異染坯,居然都是意外死亡,警方通過查閱死者的電腦和手機丘逸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門单鹿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人深纲,你說我怎么就攤上這事仲锄。” “怎么了湃鹊?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵儒喊,是天一觀的道長。 經(jīng)常有香客問我涛舍,道長澄惊,這世上最難降的妖魔是什么唆途? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任富雅,我火速辦了婚禮,結(jié)果婚禮上肛搬,老公的妹妹穿的比我還像新娘没佑。我一直安慰自己,他們只是感情好温赔,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布蛤奢。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啤贩。 梳的紋絲不亂的頭發(fā)上待秃,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音痹屹,去河邊找鬼章郁。 笑死,一個胖子當著我的面吹牛志衍,可吹牛的內(nèi)容都是我干的暖庄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼楼肪,長吁一口氣:“原來是場噩夢啊……” “哼培廓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起春叫,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肩钠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后象缀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬将,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年央星,在試婚紗的時候發(fā)現(xiàn)自己被綠了霞怀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡莉给,死狀恐怖毙石,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颓遏,我是刑警寧澤徐矩,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站叁幢,受9級特大地震影響滤灯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜曼玩,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一鳞骤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧黍判,春花似錦豫尽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渤滞。三九已至,卻和暖如春榴嗅,著一層夾襖步出監(jiān)牢的瞬間妄呕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工嗽测, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趴腋,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓论咏,卻偏偏與公主長得像优炬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厅贪,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容