主控平台开发指南

[English]

本章节主要介绍BK7239N主控平台软件开发指南,参考本章节相关接口和demo APP,开发者可完成主控平台软件开发。

主控与Controller消息交互流程

主控和Controller之间的消息交互主要分为如下Command和Event。相关流程如下图所示

主控与Controller消息交换示意图

Command消息

Command消息是Host主动向Controller发送的消息,使用这类消息的API接口是 同步接口,即调用Command消息接口封装API的进程会被挂起,直到命令发送超时或者收到Confirm后才会恢复执行。 发送Command同时也可以通过Confirm机制向Controller获取数据。如下是几个典型的Command消息说明

发送数据类型接口

通过 int bk_ioctl_set_sta(char *ssid, char *key) 接口,可以将需要连接路由器的SSID和PASSWORD信息发送给Controller。

获取数据类型接口

通过 int bk_ioctl_get_wlan_status(bk_ioctl_wlan_status_t *status) 接口,可以查询Controller侧WLAN的信息,并将结果更新到status指针执行的地址,WLAN的信息是通过confirm消息中传递给Host的。

Event通知

Event消息是Controller主动向Host发送的单向消息,不需要确认。 目前Host软件提供了Event消息处理的Callback注册接口,通过 void bk_ioctl_register_callback(bk_ioctl_callback_t callback) 接口可以将注册event消息的处理函数, 具体实现可以参考bk_rx_evt.c中注册函数处理和event处理函数实现。

 1 int main(int argc, char *argv[])
 2 {
 3     //printf("beken enter fasync user function.\n");
 4     bk_ioctl_register_callback(bk_rx_msg_cb);
 5     bk_ioctl_init();
 6
 7     while(1) {
 8         sleep(5);
 9     }
10
11     //printf("beken exit fasync user function.\n");
12     return 0;
13 }

bk_ioctl API详解

为了提高开发者效率,BK Controller方案在主控侧提供了必要的API接口,基于这些API开发者可轻松实现配网、低功耗管理和Wi-Fi/蓝牙控制等功能。 相关API接口说明如下表所示

函数名

简介

bk_ioctl_scan_wifi

执行Wi-Fi网络扫描,返回可用的网络列表。

bk_ioctl_set_sta

连接到指定SSID和密码的Wi-Fi网络。

bk_ioctl_disc_sta

断开当前连接的Wi-Fi网络。

bk_ioctl_start_softap

启用SoftAP模式,创建一个热点。

bk_ioctl_stop_softap

停止SoftAP模式,关闭热点功能。

bk_ioctl_get_wlan_status

获取Wi-Fi连接状态信息。

bk_ioctl_wifi_multimedia_config

启用或禁用Wi-Fi多媒体功能。

bk_ioctl_set_net_info

设置网络配置参数。

bk_ioctl_get_net_info

获取当前网络配置信息。

bk_ioctl_get_rssi

获取当前信号强度指示(RSSI)。

bk_ioctl_get_wifi_info

获取Wi-Fi相关信息,如连接状态和信号强度。

bk_ioctl_set_auto_reconnect

设置自动重连功能。

bk_ioctl_open_ble

初始化并启用BLE功能。

bk_ioctl_close_ble

禁用BLE功能并释放资源。

bk_ioctl_set_mac

设置设备的MAC地址。

bk_ioctl_get_mac

获取设备的MAC地址。

bk_ioctl_enter_sleep

进入低功耗睡眠模式。

bk_ioctl_exit_sleep

退出睡眠模式,恢复正常工作。

bk_ioctl_send_at

发送AT命令到设备。

bk_ioctl_keepalive_cfg

配置保持连接的参数。

bk_ioctl_set_time

设置系统当前时间。

bk_ioctl_get_time

获取系统当前时间。

bk_ioctl_send_customer_data

发送自定义数据并接收响应。

bk_ioctl_start_ota

启动固件OTA升级过程。

bk_ioctl_send_ota_pkt

发送OTA数据包进行固件更新。

bk_ioctl_stop_ota

停止当前的OTA升级过程。

bk_ioctl_register_callback

注册回调函数,处理特定的事件。

bk_ioctl_init

初始化Ioctl模块,完成必要的设置。

bk_ioctl_deinit

反初始化Ioctl模块,释放资源。

自定义消息接口

为了方便开发者传递自定义消息,BK Controller方案提自定义发送Command接口和接收自定义Event接口

自定义Command消息接口

通过 int bk_ioctl_send_customer_data(uint8_t *data, uint16_t len, uint8_t *rsp_data, uint16_t rsp_len) 接口, 开发者可传递自定义消息,比如如下图所示,可将BK Controller方案未定义的消息以customer消息发送,实现自定义消息发送。

自定义消息示意图

需要注意的是,Controller侧需要通过 ctrl_if_register_customer_msg_handler(cif_customer_msg_cb_t func) 接口注册对customer消息的处理函数, 同时在消息处理函数中需要对该消息进行确认处理。 bk_ioctl_send_customer_data 接口使用方法。 Controller侧可参考 /bk_idk_controller/project/wifi/controller/customer_msg.c 文件中 cifd_cust_msg_handler 函数实现; 主控侧可参考 /bk_idk_controller/host/demo_app/bk_ioctrl/bk_ioctl_customer_msg.c 文件中 bk_ioctl_customer_transfer 函数实现。

自定义Event消息接口

开发者可在Controller侧通过 ctrl_if_send_customer_event(uint8_t *data, uint16_t len) 。 主控侧可通过 bk_rx_handle_customer_event(void *data, uint16_t len) 接口接收相应的Event消息。