abcd
abcd
我只是個路過的老年人~

注冊於 2年前

回答
35
文章
6
關注者
1

w800做softap時不會去連接路由器,它的作用並不是網絡覆蓋範圍變大,而是某些情況下需要起一個熱點創造一個局域網環境來通信。

g_crypto_ctx.gpsec_lock定義的是一個互斥鎖,在SDK的初始化時有調用tls_crypto_init,在這裡創建了該信號量,初始值是1,所以在沒有其他地方用到該模塊時,調用tls_os_sem_acquire(g_crypto_ctx.gpsec_lock, 0);會立即返回接著往下執行。如果有其他地方調用了就會等待,直到能獲取到信號量才能接著往下執行,起到一個互斥鎖的功能。調用tls_os_sem_acquire獲取,信號量的個數會減一,調用tls_os_sem_release釋放,信號量的個數會加一,這兩個接口是成對使用的。在使用信號量實現互斥鎖的功能時,創建信號量時初始值會設置為1,這樣有一個地方獲取了鎖的使用權後,其他地方就需要等待這裡釋放了才能獲取,起到防止出現同一個模塊或者變量或者接口被同時操作的情況。並不是一個物理信號。

可以看下技術文檔下面的《WM_W800_SDK_DEMO使用指導_V1.5.pdf》,需要先打開聯網和mqtt的demo宏,編譯固件,然後需要先發送聯網的命令,聯網成功後再發送mqtt的命令。但是demo中的服務器是不可用的,需要換成自己的服務器地址、端口號、client id等相關的參數。或者用mqtt.isme.fun:1883試下。https://www.winnermicro.com/html/1/156/158/558.html

為什麼用w800給自己的串口發送AT指令的?AT指令是上位機通過串口控制W800工作的,如果是用代碼,那就是在W800上做二次開發,直接調用相關的接口來實現功能就可以了,不需要用到AT指令。如果用自己的APP藍牙配網,可以參考官網的APP代碼把藍牙配網的功能加到自己的APP中,這樣就不需要改動W800的代碼了。也可以開發自己的配網協議,只是需要在W800端配套實現對應的協議。

旋轉編碼器就是2~3個普通的IO口,用W800的GPIO設置為輸入模式連接就可以。剩下的就是讀GPIO的狀態,然後根據旋轉編碼器的時序來判斷旋轉方向。

聯網成功後,調用gethostbyname接口來獲取域名對應的IP地址。

SDK的doc目錄下有w800_apis.chm文件,裡面有各個模塊的接口。具體使用demo目錄下都有相關的demo參考。

DNS server是W801做softap模式時用到的,而且只是把dnsname和自己的IP地址對應,對於應用層來說,一般不會用到這裡的接口。

WIFI協議這部分是封在庫裡面的,沒有對外開放。按你的描述應該是需要改動庫裡面的代碼才能實現的。目前是沒有支持私有協商協議的方式的。

新建文件夾.rar
更新下這兩個文件的改動試下,然後初始化的時候hpmu.ClkSource選PMU_CR_32KRCBYPASS,這種情況下32K時鐘是從40M分出來的,會比較準確,在sleep模式下可以用作時鐘源,而PMU_CLKSOURCE_32RC是用的32K震蕩產生的,會有誤差。

我現在手頭沒有工程了,就改那幾個地方就行,你目前的問題是卡在哪一步了,具體描述下

從左到右確實是按OPT1-4、OPT6來排序的,OPT5是GPIO功能,這裡代碼裡寫的是OPT2也沒錯,MMC那一組就是對應的SDIO MASTER功能,OPT4的SDIO功能這裡沒表達清楚,對應的是SDIO SLAVE功能。

固件加密用的是key.txt裡的秘鑰,也就是30~66,這個是需要用戶自己設定的值,改的時候需要改三個地方,1.把key.txt文件裡改了;2.在aft_build_project.sh替換用到的地方;3.在燒錄工具裡的文件夾裡有個AvoidCopyTestCases.xml裡也有用到這個值,需要修改替換掉。
capub_1.pem和capub_1_N.dat這兩個文件是用來加密key.txt的,不需要修改,目前固定使用這組值。
cakey.pem和capub.pem是用來做簽名和解簽名用的,也是需要用戶自己修改的值,直接改這兩個文件的內容就可以,aft_build_project.sh裡不用改,因為是直接引用的文件名。燒錄工具文件夾下的capub.pem需要同步修改。同事,如果燒錄工具文件夾下的文件修改後,需要關閉燒錄工具重新打開。

fields這個變量的結構體定義struct ble_hs_adv_fields裡除了uuids16外也有name,直接替換成name比較就可以,要注意的是,有些server的name是直接放在廣播裡的,這種用被動掃描就可以, 有些是放在response裡的,這種就需要主動掃描來獲取,tls_ble_gap_scan的第一參數來設置主動還是被動掃描。發送可以用ble_gattc_write_flat這個接口,在wm_ble_client_api_multi_conn_demo.c裡就是一個client連接多個server的demo,可以參考。

發布
問題