不同涂鸦产品在M0上的移植
1、直接替换文件 TUYA_SDK\protocol.c 和 TUYA_SDK\protocol.h ,不同产品只是数据节点不同。
2、protocol.c 中添加包含文件 #include “APP_TuyaConfig.h” ,包含用到app业务接口函数
3、protocol.c 中 void uart_transmit_output(unsigned char value) 函数体的实现
// 声明SDK要用到的M0串口发送一字节函数extern void M0_UsartSendOutByteToTuyaZigbee(unsigned char sndByte);void uart_transmit_output(unsigned char value){M0_UsartSendOutByteToTuyaZigbee(value);//调用硬件底层串口函数}
4、当底层串口接收1字节后,调用涂鸦给的接收接口函数
// 涂鸦移植接口,将接收到的一字节传给涂鸦接收对列uart_receive_input(rcv_data);
<br />5、protocol.c 中 void all_data_update(void) 函数体的实现,<br />上报初始值,上报所有数据节点
6、在main()中调用初始化和任务处理函数
zigbee_protocol_init(); //初始化涂鸦协议栈zigbee_uart_service(); //while循环后调用
7、protocol.c 中 void zigbee_test_result(void) 函数体的实现,
模组向MCU询问测度成功与否。简单点printf()打印不同信息。
8、protocol.c 中 void zigbee_work_state_event(unsigned char zigbee_work_state) 函数内添加入网状态更新
void zigbee_work_state_event(unsigned char zigbee_work_state){unsigned short length = 0;length = set_zigbee_uart_byte(length, 0x10);zigbee_uart_write_frame(ZIGBEE_STATE_CMD, length);switch (zigbee_work_state){case ZIGBEE_NOT_JION:printf("%s(),模组未入网,入网失败,离线。\r\n", __func__);break;case ZIGBEE_JOIN_GATEWAY:printf("%s(),模组已加入网关,网络正常。\r\n", __func__);break;case ZIGBEE_JOIN_ERROR:printf("%s(),模组已加入网关,但网络异常。\r\n", __func__);break;case ZIGBEE_JOINING:printf("%s(),模组正在配网中\r\n", __func__);break;default:break;}// 用户代码,记录入网状态gTuyaData.isJoinZigbee = zigbee_work_state;}
9、根据不同节点和业务逻辑,修改app配置文件 APP_TuyaConfig.c
- LED 引角数量
- TUYA_SWITCH 数量
- app_out 与 引角输出数量的映射
- app_key 与 引角输入in 的映射
- app_key 与 TUYA_SWITCH 数量的映射
