不同涂鸦产品在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) 函数体的实现

    1. // 声明SDK要用到的M0串口发送一字节函数
    2. extern void M0_UsartSendOutByteToTuyaZigbee(unsigned char sndByte);
    3. void uart_transmit_output(unsigned char value)
    4. {
    5. M0_UsartSendOutByteToTuyaZigbee(value);//调用硬件底层串口函数
    6. }

    4、当底层串口接收1字节后,调用涂鸦给的接收接口函数

    1. // 涂鸦移植接口,将接收到的一字节传给涂鸦接收对列
    2. uart_receive_input(rcv_data);
    1. <br />5、protocol.c 中 void all_data_update(void) 函数体的实现,<br />上报初始值,上报所有数据节点

    6、在main()中调用初始化和任务处理函数

    1. zigbee_protocol_init(); //初始化涂鸦协议栈
    2. 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) 函数内添加入网状态更新

    1. void zigbee_work_state_event(unsigned char zigbee_work_state)
    2. {
    3. unsigned short length = 0;
    4. length = set_zigbee_uart_byte(length, 0x10);
    5. zigbee_uart_write_frame(ZIGBEE_STATE_CMD, length);
    6. switch (zigbee_work_state)
    7. {
    8. case ZIGBEE_NOT_JION:
    9. printf("%s(),模组未入网,入网失败,离线。\r\n", __func__);
    10. break;
    11. case ZIGBEE_JOIN_GATEWAY:
    12. printf("%s(),模组已加入网关,网络正常。\r\n", __func__);
    13. break;
    14. case ZIGBEE_JOIN_ERROR:
    15. printf("%s(),模组已加入网关,但网络异常。\r\n", __func__);
    16. break;
    17. case ZIGBEE_JOINING:
    18. printf("%s(),模组正在配网中\r\n", __func__);
    19. break;
    20. default:
    21. break;
    22. }
    23. // 用户代码,记录入网状态
    24. gTuyaData.isJoinZigbee = zigbee_work_state;
    25. }

    9、根据不同节点和业务逻辑,修改app配置文件 APP_TuyaConfig.c

    1. LED 引角数量
    2. TUYA_SWITCH 数量
    3. app_out 与 引角输出数量的映射
    4. app_key 与 引角输入in 的映射
    5. app_key 与 TUYA_SWITCH 数量的映射