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,可以参考。

发布
问题