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

发布
问题