/** * @file app_sr.c * @brief this file contains basic fuctions and DP data report fucntion which is base on DP type * @author * @date 2020.03.13 * @par email: * @copyright HANGZHOU TUYA INFORMATION TECHNOLOGY CO.,LTD * @par company * http://www.tuya.com */ #include #include #include #include // #include "ci130x.h" #include "app_sr_fun.h" #include "custom.h" #include "nvs_eepom.h" #include "zigbee_fun.h" #include "zigbee.h" //#define LOG_TAG "app_sr" // 该模块对应的标签。不定义时,默认:NO_TAG #define LOG_LVL LOG_LVL_DBG // 该模块对应的日志输出级别。不定义时,默认:调试级别 #include // 必须在 LOG_TAG与LOG_LVL下面 rt_thread_t speech_thread=NULL; void app_sr_task(void *pvParameter); //struct srserial_configure uart_config=RT_SERIAL_CONFIG_DEFAULT; static rt_device_t srserial; int speech_uart_int(void) { //串口初始化 char uart_name[]="uart2"; LOG_D("Try to open(%s)",uart_name); srserial = rt_device_find(uart_name); if (!srserial) { LOG_D("find %s failed!\n", uart_name); return -RT_ERROR; } rt_err_t ret = rt_device_open(srserial, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX); // ASSERT(ret != RT_EOK, "open %s failed : %d !\n", uart_name, ret); if (ret != RT_EOK) { LOG_D("open %s failed : %d !\n", uart_name, ret); return -RT_ERROR; } //uart_config. //配置串口 //rt_device_control(srserial,RT_DEVICE_CTRL_CONFIG,(void*)&uart_config); // //创建动态消息队列 返回消息队列对象的句柄 // sr_rx_evt_queue= rt_mq_create("zigbee_mq", //消息队列的名称 // sizeof(ZIGEvent), //消息队列中一条消息的最大长度,单位字节 // 10, //消息队列的最大个数 // RT_IPC_FLAG_PRIO ); //消息队列采用的阻塞线程的等待方式,它可以取如下数值:RT_IPC_FLAG_FIFO //按照先进先出排序或RT_IPC_FLAG_PRIO //按照优先级排序 // if(!sr_rx_evt_queue) // { // LOG_E("RT-Thread sr_rx_evt_queue create mq fail"); // } //创建任务 speech_thread = rt_thread_create("app_sr", //名称 app_sr_task, //线程代码 RT_NULL, //参数 4096, //栈大小 15, //优先级 12); //时间片 if (speech_thread != RT_NULL) { rt_thread_startup(speech_thread); //线程进入就绪态 } else { LOG_D("dynamic_thread create failure\n"); } return RT_EOK; } //串口发送 void speech_uart_sendByte(unsigned char value) { rt_device_write(srserial, 0, &value, 1); } void speech_uart_sendBytes(unsigned char *in, unsigned short len) { //LOG_D("zigbee_uart_sendBytes\n"); ulog_hex(LOG_TAG,8,(const char *)in,len);//一行 32byte内容 rt_device_write(srserial, 0, in, len); } #define SR_RX_BUF_SIZE (128) #define SR_TX_BUF_SIZE (128) void app_sr_task(void *pvParameter) { // ZIGEvent evt; // evt.length=0; // evt.buffStr=NULL; //char ch; char ci130x_recbuff[64]; memset(ci130x_recbuff,0,sizeof(ci130x_recbuff)); // ZIGEvent evt; // evt.event=SR_STATE_IDLE; // evt.length=0; // evt.buffStr=NULL; // rt_thread_mdelay(1000); // Configure a temporary buffer for the incoming data uint8_t *rxdata = (uint8_t *) malloc(SR_RX_BUF_SIZE); LOG_D("app_sr_task running"); //ci130x_protocol_init(); for(;;) { // // rt_thread_mdelay(1000); // // LOG_D("app_sr_task"); // if(evt.buffStr)//接收到的是指针 用完释放内存 // { // LOG_D("free receData.buffStr:%x",(uint32_t)evt.buffStr); // free(evt.buffStr); // evt.buffStr=NULL; // } // //rt_thread_mdelay(10); // if(rt_mq_recv(sr_rx_evt_queue,&evt,sizeof(ZIGEvent),10)==RT_EOK) // {//上报 // switch(evt.event) // { // default: // { // LOG_D( "event error!!!"); // } // break; // } // } // else { rt_thread_mdelay(100); int rxBytes = rt_device_read(srserial, -1, rxdata, SR_RX_BUF_SIZE); if (rxBytes > 7) { // //rxdata[rxBytes] = 0;//在串口接收的数据增加结束符 // //LOG_D( "rx:%s", (char *)rxdata); // LOG_D("rxBytes:%X\r\n",rxBytes); // LOG_HEX(LOG_TAG,8,rxdata,rxBytes); // memset(ci130x_recbuff,0,sizeof(ci130x_recbuff)); // for(int rxBytesindex=0;rxBytesindex