From 0ef073439e9048062123c251e74e35a5ab976bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Thu, 9 Jan 2025 15:29:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .mrs/launch.json | 6 +- JT-DT-YD4N02A_RTT_MRS-4G.wvproj | 2 +- applications/main.c | 12 +- applications/user_sys.h | 2 +- bsp/inc/bsp_nt26k.h | 3 +- bsp/src/at_device_nt26k.c | 1308 +++++++++++++++++-------------- bsp/src/bsp_flash.c | 14 +- bsp/src/bsp_h308.c | 20 +- bsp/src/bsp_nt26k.c | 1283 +++++++++++++++--------------- bsp/src/bsp_rtc.c | 5 +- 10 files changed, 1411 insertions(+), 1244 deletions(-) diff --git a/.mrs/launch.json b/.mrs/launch.json index e193649..be75f06 100644 --- a/.mrs/launch.json +++ b/.mrs/launch.json @@ -5,7 +5,7 @@ "type": "mrs-debugger", "request": "launch", "name": "JT-DT-YD4N02A_RTT_MRS-4G", - "cwd": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-4G", + "cwd": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K", "openOCDCfg": { "useLocalOpenOCD": true, "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe", @@ -39,8 +39,8 @@ "additionalCommands": [] }, "loadedFiles": { - "executableFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-4G\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", - "symbolFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-4G\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", + "executableFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", + "symbolFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", "executableFileOffset": 0, "symbolFileOffset": 0 }, diff --git a/JT-DT-YD4N02A_RTT_MRS-4G.wvproj b/JT-DT-YD4N02A_RTT_MRS-4G.wvproj index 0e92a81..7ac147f 100644 --- a/JT-DT-YD4N02A_RTT_MRS-4G.wvproj +++ b/JT-DT-YD4N02A_RTT_MRS-4G.wvproj @@ -773,7 +773,7 @@ "address": "0x08000000", "target_path": "obj\\JT-DT-YD4N02A_RTT_MRS-4G.hex", "clkSpeed": "High", - "debug_interface_mode": "1-wire serial", + "debug_interface_mode": "", "erase": true, "program": true, "verify": true, diff --git a/applications/main.c b/applications/main.c index b2ac983..f0835af 100644 --- a/applications/main.c +++ b/applications/main.c @@ -2,8 +2,8 @@ * @Author: mbw * @Date: 2024-10-23 17:14:16 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-08 10:21:25 - * @FilePath: \JT-DT-YD4N02A_RTT_MRS-4G\applications\main.c + * @LastEditTime: 2025-01-09 14:50:14 + * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\applications\main.c * @Descrt_thread_ * * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. @@ -184,7 +184,6 @@ void Work_Cnt_Timer_Callback(void *parameter) } int main(void) { - #define WORK_TIMER_CNT (1000 * 60 * 60 * 24) rt_err_t result = RT_EINVAL; @@ -201,6 +200,7 @@ int main(void) Flash_GetTotalRecord(&TotalRecords); work_duration = Flash_Get_WorkDuration(); + LOG_D("工作天数:%d", work_duration); rt_timer_init(&work_cnt_timer, "work_cnt_timer", Work_Cnt_Timer_Callback, @@ -225,7 +225,6 @@ int main(void) LOG_D("欠压复位\r\n"); RCC_ClearFlag(); NVIC_SystemReset(); // 直接重启系统 - } while (1) { @@ -291,10 +290,6 @@ int main(void) rt_thread_mdelay(500); Send_Laser_Alarm_Event(kAlarmEvent); } - if (H308.end_of_life == 1) - { - Send_Laser_Alarm_Event(kSensorFailureEvent); - } else if (H308.detection_flag == kH308Fault) { LED_G_NORMAL; @@ -344,7 +339,6 @@ int main(void) relay_state_flag = 0; BEEP_STOP; - #if (IOT_MODULE_SWITCH == 1) Nt26k_Send_Event(kNt26kAlarmRcyEvent); #endif diff --git a/applications/user_sys.h b/applications/user_sys.h index 1125062..5a84b57 100644 --- a/applications/user_sys.h +++ b/applications/user_sys.h @@ -19,7 +19,7 @@ #define SYS_HW_VERSION 0X10 #define SYS_SW_VERSION 0X13 -#define SYS_IOT_UPLOAD_CYCLE_MIN (0X0A00) // 高位在前,低位在后 +#define SYS_IOT_UPLOAD_CYCLE_MIN (0X3C00) // 高位在前,低位在后 #define SYS_ALARM_VALVE 0X0A #define SYS_IOT_URL "8.130.117.149" #define SYS_IOT_PORT "7137" diff --git a/bsp/inc/bsp_nt26k.h b/bsp/inc/bsp_nt26k.h index 3dc332f..110cd22 100644 --- a/bsp/inc/bsp_nt26k.h +++ b/bsp/inc/bsp_nt26k.h @@ -13,7 +13,7 @@ #define NT26K_PWR_EN_PIN GET_PIN(B, 3) #define NT26K_RST_PIN GET_PIN(A, 11) -#define NT26K_PWR_KEY_PIN GET_PIN(C, 7) +#define NT26K_PWR_KEY_PIN GET_PIN(C, 7) #define NT26K_SAMPLE_DEIVCE_NAME "nt26k" @@ -204,6 +204,7 @@ extern struct Nt26k_Ops nt26k_ops; extern rt_sem_t nt26k_recv_sem; extern rt_sem_t nt26k_disconnect_sem; extern rt_uint8_t nt26k_conncet_tcp_flag; +extern rt_uint8_t nt26k_disconnect_pdp_flag; extern rt_uint8_t power_on_send_flag; int nt26k_device_register(void); int BSP_Nt26k_Thread_Init(void); diff --git a/bsp/src/at_device_nt26k.c b/bsp/src/at_device_nt26k.c index 2b80e49..c067dc1 100644 --- a/bsp/src/at_device_nt26k.c +++ b/bsp/src/at_device_nt26k.c @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-09-04 13:33:49 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-07 15:39:42 + * @LastEditTime: 2025-01-08 17:33:11 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-4G\bsp\src\at_device_nt26k.c * @Description : * @@ -33,427 +33,445 @@ #if IOT_MODULE_SWITCH == 1 -#define NT26K_POWER_OFF RT_FALSE -#define NT26K_POWER_ON RT_TRUE -#define NT26K_POWER_ON_TIME 3 -#define NT26K_POWER_OFF_TIME 4 +#define NT26K_POWER_OFF RT_FALSE +#define NT26K_POWER_ON RT_TRUE +#define NT26K_POWER_ON_TIME 3 +#define NT26K_POWER_OFF_TIME 4 #define AT_CLIENT_RECV_BUFF_LEN 512 -#define AT_DEFAULT_TIMEOUT 5000 +#define AT_DEFAULT_TIMEOUT 5000 #ifdef AT_DEVICE_USING_NT26K #define NT26K_WAIT_CONNECT_TIME 5000 #define NT26K_THREAD_STACK_SIZE 4096 -#define NT26K_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 2) +#define NT26K_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 2) char data_buf[AT_CLIENT_RECV_BUFF_LEN] = {0}; - nt26k_sys_info nt26k = {0}; struct rt_completion nt26k_init_complate; volatile rt_uint8_t socket_id = 0; // 将本地时间转换为对应时区时间 -void Time_Zone_Conversion (TsRtcDateTime *timeInfo) { +void Time_Zone_Conversion(TsRtcDateTime *timeInfo) +{ // 根据时区差异进行转换,这里时区差为8小时,没有分钟差异。 - timeInfo->hour += RT_LIBC_DEFAULT_TIMEZONE; // 小时部分加8小时 - if (timeInfo->hour >= 24) { // 如果超过24小时,则天数加1,小时数减24。 + timeInfo->hour += RT_LIBC_DEFAULT_TIMEZONE; // 小时部分加8小时 + if (timeInfo->hour >= 24) + { // 如果超过24小时,则天数加1,小时数减24。 timeInfo->day++; timeInfo->hour -= 24; - if (timeInfo->day > 365) { + if (timeInfo->day > 365) + { timeInfo->year += 1; } } } -rt_err_t Nt26k_Reset (struct at_device *device) { - LOG_I ("NT26K Reset"); - rt_pin_mode (NT26K_RST_PIN, PIN_MODE_OUTPUT); - rt_pin_write (NT26K_RST_PIN, PIN_LOW); - rt_thread_mdelay (10); - rt_pin_write (NT26K_RST_PIN, PIN_HIGH); - rt_thread_mdelay (50); - rt_pin_write (NT26K_RST_PIN, PIN_LOW); +rt_err_t Nt26k_Reset(struct at_device *device) +{ + LOG_I("NT26K Reset"); + rt_pin_mode(NT26K_RST_PIN, PIN_MODE_OUTPUT); + rt_pin_write(NT26K_RST_PIN, PIN_LOW); + rt_thread_mdelay(10); + rt_pin_write(NT26K_RST_PIN, PIN_HIGH); + rt_thread_mdelay(50); + rt_pin_write(NT26K_RST_PIN, PIN_LOW); return RT_EOK; } -static int nt26k_power_on (struct at_device *device) { +static int nt26k_power_on(struct at_device *device) +{ struct at_device_nt26k *nt26k = RT_NULL; - nt26k = (struct at_device_nt26k *)device->user_data; + nt26k = (struct at_device_nt26k *)device->user_data; nt26k->power_status = RT_TRUE; /* not nead to set pin configuration for nt26k device power on */ - if (nt26k->pwr_en_pin == -1) { + if (nt26k->pwr_en_pin == -1) + { return (RT_EOK); } - rt_pin_write (nt26k->pwr_en_pin, PIN_LOW); - rt_thread_mdelay (10); - rt_pin_write (nt26k->pwr_en_pin, PIN_HIGH); + rt_pin_write(nt26k->pwr_en_pin, PIN_LOW); + rt_thread_mdelay(10); + rt_pin_write(nt26k->pwr_en_pin, PIN_HIGH); return (RT_EOK); } -static rt_err_t nt26k_power_off (struct at_device *device) { +static rt_err_t nt26k_power_off(struct at_device *device) +{ struct at_device_nt26k *nt26k = RT_NULL; nt26k = (struct at_device_nt26k *)device->user_data; - if (nt26k->power_status != RT_FALSE) { - rt_pin_mode (nt26k->pwr_en_pin, PIN_MODE_OUTPUT); - rt_pin_write (nt26k->pwr_en_pin, PIN_HIGH); + if (nt26k->power_status != RT_FALSE) + { + rt_pin_mode(nt26k->pwr_en_pin, PIN_MODE_OUTPUT); + rt_pin_write(nt26k->pwr_en_pin, PIN_LOW); } return RT_EOK; } #ifdef TEST_ENABLE -void TEST_Nt26k_Reset() { - Nt26k_Reset (RT_NULL); +void TEST_Nt26k_Reset() +{ + Nt26k_Reset(RT_NULL); } -MSH_CMD_EXPORT (TEST_Nt26k_Reset, "test_nt26k_reset"); +MSH_CMD_EXPORT(TEST_Nt26k_Reset, "test_nt26k_reset"); #endif -static int nt26k_sleep (struct at_device *device) { - at_response_t resp = RT_NULL; +static int nt26k_sleep(struct at_device *device) +{ + at_response_t resp = RT_NULL; struct at_device_nt26k *nt26k = RT_NULL; nt26k = (struct at_device_nt26k *)device->user_data; - if (!nt26k->power_status) // power off + if (!nt26k->power_status) // power off { return (RT_EOK); } - if (nt26k->sleep_status) // is sleep status + if (nt26k->sleep_status) // is sleep status { return (RT_EOK); } - resp = at_create_resp (64, 0, rt_tick_from_millisecond (300)); - if (resp == RT_NULL) { - LOG_D ("no memory for resp create."); - at_delete_resp (resp); + resp = at_create_resp(64, 0, rt_tick_from_millisecond(300)); + if (resp == RT_NULL) + { + LOG_D("no memory for resp create."); + at_delete_resp(resp); return (-RT_ERROR); } /* enable sleep mode */ // Sleep1 - if (at_obj_exec_cmd (device->client, resp, "AT+ECPMUCFG=1,2") != RT_EOK) + if (at_obj_exec_cmd(device->client, resp, "AT+ECPMUCFG=1,2") != RT_EOK) { - LOG_D ("enable sleep fail.\"AT+ECPMUCFG=1,2\" execute fail."); - at_delete_resp (resp); + LOG_D("enable sleep fail.\"AT+ECPMUCFG=1,2\" execute fail."); + at_delete_resp(resp); return (-RT_ERROR); } /* enable PSM mode */ - if (at_obj_exec_cmd (device->client, resp, "AT+CPSMS=1,,,,\"00100010\"") != RT_EOK) + if (at_obj_exec_cmd(device->client, resp, "AT+CPSMS=1,,,,\"00100010\"") != RT_EOK) { - LOG_D ("enable sleep fail.\"AT+CPSMS=1,,,,\"00100010\" execute fail."); - at_delete_resp (resp); + LOG_D("enable sleep fail.\"AT+CPSMS=1,,,,\"00100010\" execute fail."); + at_delete_resp(resp); return (-RT_ERROR); } nt26k->sleep_status = RT_TRUE; - at_delete_resp (resp); + at_delete_resp(resp); return (RT_EOK); } -static int nt26k_wakeup (struct at_device *device) { +static int nt26k_wakeup(struct at_device *device) +{ struct at_device_nt26k *nt26k = RT_NULL; nt26k = (struct at_device_nt26k *)device->user_data; - if (nt26k->pwr_key_pin != -1) { - rt_pin_write (nt26k->pwr_key_pin, PIN_LOW); - rt_thread_mdelay (100); - rt_pin_write (nt26k->pwr_key_pin, PIN_HIGH); + if (nt26k->pwr_key_pin != -1) + { + rt_pin_write(nt26k->pwr_key_pin, PIN_LOW); + rt_thread_mdelay(100); + rt_pin_write(nt26k->pwr_key_pin, PIN_HIGH); nt26k->sleep_status = RT_TRUE; } return (RT_EOK); } -static void urc_tcp_recv (struct at_client *client, const char *data, rt_size_t size) { - int len = 0; - rt_uint16_t crc16 = 0; - rt_uint16_t rec_crc16 = 0; - char crc16_buf[6] = {0}; +static void urc_tcp_recv(struct at_client *client, const char *data, rt_size_t size) +{ + int len = 0; + rt_uint16_t crc16 = 0; + rt_uint16_t rec_crc16 = 0; + char crc16_buf[6] = {0}; rt_uint8_t recv_byte_buf[AT_CLIENT_RECV_BUFF_LEN] = {0}; - rt_memset (data_buf, 0, sizeof (data_buf)); + rt_memset(data_buf, 0, sizeof(data_buf)); - if (sscanf (data, "+QIURC: \"recv\",%*d,%d,%s", &len, data_buf) == 2) { - HexStrToBytes (data_buf, recv_byte_buf, len * 2); - LOG_D ("nt26k recv data: %s", data_buf); - crc16 = crc1021 (data_buf, len * 2 - 10); // 去掉帧尾三个字节和2个字节的校验值,字符长度为10 + if (sscanf(data, "+QIURC: \"recv\",%*d,%d,%s", &len, data_buf) == 2) + { + HexStrToBytes(data_buf, recv_byte_buf, len * 2); + LOG_D("nt26k recv data: %s", data_buf); + crc16 = crc1021(data_buf, len * 2 - 10); // 去掉帧尾三个字节和2个字节的校验值,字符长度为10 - rt_strncpy (crc16_buf, data_buf + len * 2 - 10, 4); - LOG_D ("nt26k crc16: %04s", crc16_buf); - rec_crc16 = strtol (crc16_buf, NULL, 16); - if (crc16 != rec_crc16) // 看下数据接收的是否正确 + rt_strncpy(crc16_buf, data_buf + len * 2 - 10, 4); + LOG_D("nt26k crc16: %04s", crc16_buf); + rec_crc16 = strtol(crc16_buf, NULL, 16); + if (crc16 != rec_crc16) // 看下数据接收的是否正确 + { + LOG_E("nt26k recv data error {crc16 [%x]!= rec_crc16[%x]}", crc16, rec_crc16); + } + else { - LOG_E ("nt26k recv data error {crc16 [%x]!= rec_crc16[%x]}", crc16, rec_crc16); - } else { /*比较数组的长度和结构体的长度是否一致,如果不一致则数据解析错误,如果一致复制数组值到结构体中*/ - if (len == sizeof (struct Nt26kRecvData)) { - rt_memset (nt26k_ops.recv, 0, sizeof (struct Nt26kRecvData)); // 清空结构体 - rt_memcpy (nt26k_ops.recv, recv_byte_buf, sizeof (struct Nt26kRecvData)); - if (nt26k_ops.recv->recv_data.event_type != INSTRUCTION_HEART_BEAT) // 加这个的原因就是如果有指令下发,会出现两个信号量,指令会执行两次,所以排除心跳包才释放信号量 + if (len == sizeof(struct Nt26kRecvData)) + { + rt_memset(nt26k_ops.recv, 0, sizeof(struct Nt26kRecvData)); // 清空结构体 + rt_memcpy(nt26k_ops.recv, recv_byte_buf, sizeof(struct Nt26kRecvData)); + if (nt26k_ops.recv->recv_data.event_type != INSTRUCTION_HEART_BEAT) // 加这个的原因就是如果有指令下发,会出现两个信号量,指令会执行两次,所以排除心跳包才释放信号量 { - rt_sem_release (nt26k_recv_sem); + rt_sem_release(nt26k_recv_sem); } - } else { - LOG_E ("nt26k recv data error {len [%d]!= sizeof(struct Nt26kRecvData)[%d]}", len, sizeof (struct Nt26kRecvData)); + } + else + { + LOG_E("nt26k recv data error {len [%d]!= sizeof(struct Nt26kRecvData)[%d]}", len, sizeof(struct Nt26kRecvData)); } } } - rt_memset (recv_byte_buf, 0, sizeof (recv_byte_buf)); + rt_memset(recv_byte_buf, 0, sizeof(recv_byte_buf)); } -static void urc_device_reset (struct at_client *client, const char *data, rt_size_t size) { - LOG_D ("device reset"); +static void urc_device_reset(struct at_client *client, const char *data, rt_size_t size) +{ + LOG_D("device reset"); nt26k_conncet_tcp_flag = 0; - rt_sem_release (nt26k_disconnect_sem); } -static void urc_tcp_disconnect (struct at_client *client, const char *data, rt_size_t size) { +static void urc_tcp_disconnect(struct at_client *client, const char *data, rt_size_t size) +{ size_t id; - if (sscanf (data, "+QIURC: \"closed\",%d", &id) == 1) { - if (id == socket_id) { - LOG_W ("socket %d disconnect", id); + if (sscanf(data, "+QIURC: \"closed\",%d", &id) == 1) + { + if (id == socket_id) + { + LOG_W("socket %d disconnect", id); nt26k_conncet_tcp_flag = 0; - rt_sem_release (nt26k_disconnect_sem); + rt_sem_release(nt26k_disconnect_sem); } } } static const struct at_urc urc_table[] = { - {"+QIURC: \"recv\"", "\r\n", urc_tcp_recv }, - {"boot.rom", "\r\n", urc_device_reset }, // 这个是软件复位时, - {"Lierda", "\r\n", urc_device_reset }, // 这个时硬件复位时回复 + {"+QIURC: \"recv\"", "\r\n", urc_tcp_recv}, + {"boot.rom", "\r\n", urc_device_reset}, // 这个是软件复位时, + {"Lierda", "\r\n", urc_device_reset}, // 这个时硬件复位时回复 {"+QIURC: \"closed\"", "\r\n", urc_tcp_disconnect}, // tcp连接断开 }; -void show_resp_info (at_response_t resp) { - RT_ASSERT (resp); +void show_resp_info(at_response_t resp) +{ + RT_ASSERT(resp); /* Print response line buffer */ const char *line_buffer = RT_NULL; - for (rt_size_t line_num = 1; line_num <= resp->line_counts; line_num++) { - if ((line_buffer = at_resp_get_line (resp, line_num)) != RT_NULL) - LOG_I ("line %d buffer : %s", line_num, line_buffer); + for (rt_size_t line_num = 1; line_num <= resp->line_counts; line_num++) + { + if ((line_buffer = at_resp_get_line(resp, line_num)) != RT_NULL) + LOG_I("line %d buffer : %s", line_num, line_buffer); else - LOG_I ("Parse line buffer error!"); + LOG_I("Parse line buffer error!"); } return; } -int at_device_nt26k_disconnect_tcp (struct at_device *device) { +int at_device_nt26k_disconnect_tcp(struct at_device *device) +{ #define NT26K_CLOSE_REP_TIME (5 * AT_DEFAULT_TIMEOUT) - if (nt26k_conncet_tcp_flag) { - at_response_t resp = at_create_resp (AT_CLIENT_RECV_BUFF_LEN, 0, NT26K_CLOSE_REP_TIME); - if (resp == RT_NULL) { - LOG_E ("No memory for response structure!"); - at_delete_resp (resp); - return -RT_ENOMEM; - } - if (at_obj_exec_cmd (device->client, resp, TCP_CLOSE_SOCKET, socket_id) != RT_EOK) { - at_delete_resp (resp); - return -RT_ERROR; - } - nt26k_conncet_tcp_flag = 0; - rt_sem_release (nt26k_disconnect_sem); - at_delete_resp (resp); + at_response_t resp = at_create_resp(AT_CLIENT_RECV_BUFF_LEN, 0, NT26K_CLOSE_REP_TIME); + if (resp == RT_NULL) + { + LOG_E("No memory for response structure!"); + at_delete_resp(resp); + return -RT_ENOMEM; } + if (at_obj_exec_cmd(device->client, resp, TCP_CLOSE_SOCKET, socket_id) != RT_EOK) + { + at_delete_resp(resp); + return -RT_ERROR; + } + nt26k_conncet_tcp_flag = 0; + at_delete_resp(resp); return RT_EOK; } -static int at_device_nt26k_connect_tcp (struct at_device *device) { - int err_code = 0; +static int at_device_nt26k_connect_tcp(struct at_device *device) +{ + if (nt26k_conncet_tcp_flag) return RT_EOK; - ASSERT (device); - rt_uint8_t retry = (rt_uint8_t)Flash_Get_SysCfg (kIotRetryId); - at_response_t resp = at_create_resp (64, 4, AT_DEFAULT_TIMEOUT); - if (resp == RT_NULL) { - LOG_E ("No memory for response structure!"); - at_delete_resp (resp); + ASSERT(device); + int err_code = 0; + at_response_t resp = at_create_resp(64, 4, AT_DEFAULT_TIMEOUT); + if (resp == RT_NULL) + { + LOG_E("No memory for response structure!"); + at_delete_resp(resp); return -RT_ENOMEM; } - if (Flash_Get_Sever_Data (&sever_info) != RT_EOK) { - LOG_E ("Get Sever Data Failed"); - at_delete_resp (resp); + if (Flash_Get_Sever_Data(&sever_info) != RT_EOK) + { + LOG_E("Get Sever Data Failed"); + at_delete_resp(resp); return RT_ERROR; } - for (size_t i = 0; i < retry; i++) { - if (at_obj_exec_cmd (device->client, resp, TCP_CONNECT_CMD, sever_info.server_url, sever_info.server_port) == RT_EOK) { - if (at_resp_parse_line_args_by_kw (resp, "+QIOPEN:", "+QIOPEN:%d,%d", &socket_id, &err_code) > 0) { - if (err_code == 0) { - LOG_D ("nt26k connect to tcp server success"); - nt26k_conncet_tcp_flag = 1; - at_delete_resp (resp); - return RT_EOK; - } else { - LOG_E ("nt26k connect to tcp server failed. error code: %d", err_code); + if (at_obj_exec_cmd(device->client, resp, TCP_CONNECT_CMD, sever_info.server_url, sever_info.server_port) == RT_EOK) + { + if (at_resp_parse_line_args_by_kw(resp, "+QIOPEN:", "+QIOPEN:%d,%d", &socket_id, &err_code) > 0) + { + if (err_code == 0) + { + LOG_D("nt26k connect to tcp server success"); + nt26k_conncet_tcp_flag = 1; + at_delete_resp(resp); + return RT_EOK; + } + else + { + LOG_E("nt26k connect to tcp server failed. error code: %d", err_code); + if (err_code == 570) + { + nt26k_disconnect_pdp_flag = 1; } } } - rt_thread_mdelay (5000); } - at_device_nt26k_disconnect_tcp (device); - rt_sem_release (nt26k_disconnect_sem); - at_delete_resp (resp); + at_delete_resp(resp); return RT_ERROR; } -int at_send_data (struct at_device *device, const char *data, rt_size_t size) { +int at_send_data(struct at_device *device, const char *data, rt_size_t size) +{ #define NT26K_SEND_RESP_TIME (3000) - const char *line_buffer = RT_NULL; - rt_uint8_t retry = 0; - at_response_t resp = at_create_resp (AT_CLIENT_RECV_BUFF_LEN / 4, 2, NT26K_SEND_RESP_TIME); - rt_uint8_t max_retry_count = (rt_uint8_t)Flash_Get_SysCfg (kIotRetryId); - if (resp == RT_NULL) { - LOG_E ("no memory for nt26k device(%s) response structure.", device->name); - at_delete_resp (resp); + const char *line_buffer = RT_NULL; + rt_uint8_t retry = 0; + at_response_t resp = at_create_resp(AT_CLIENT_RECV_BUFF_LEN / 4, 2, NT26K_SEND_RESP_TIME); + rt_uint8_t max_retry_count = (rt_uint8_t)Flash_Get_SysCfg(kIotRetryId); + if (resp == RT_NULL) + { + LOG_E("no memory for nt26k device(%s) response structure.", device->name); + at_delete_resp(resp); return -RT_ERROR; } - while (retry < max_retry_count) { - rt_thread_mdelay (IMEI_Delay()); // 获取一个随机延时 - if (at_obj_exec_cmd (device->client, resp, TCP_SEND_DATA, socket_id, data) == RT_EOK) { - if ((line_buffer = at_resp_get_line (resp, 2)) != RT_NULL) { - if (rt_strstr (line_buffer, "SEND OK") != RT_NULL) { - LOG_D ("send data success, socket_id: %d", socket_id); - at_delete_resp (resp); + while (retry < max_retry_count) + { + rt_thread_mdelay(IMEI_Delay()); // 获取一个随机延时 + if (at_obj_exec_cmd(device->client, resp, TCP_SEND_DATA, socket_id, data) == RT_EOK) + { + if ((line_buffer = at_resp_get_line(resp, 2)) != RT_NULL) + { + if (rt_strstr(line_buffer, "SEND OK") != RT_NULL) + { + LOG_D("send data success, socket_id: %d", socket_id); + at_delete_resp(resp); return RT_EOK; } } } retry++; - rt_thread_mdelay (1000); + rt_thread_mdelay(1000); } - at_delete_resp (resp); + at_delete_resp(resp); return -RT_ERROR; } -int nt26k_check_link_status (struct at_device *device) { - at_response_t resp = RT_NULL; +int nt26k_check_link_status(struct at_device *device) +{ + at_response_t resp = RT_NULL; struct at_device_nt26k *nt26k = RT_NULL; - int result = -RT_ERROR; + int result = -RT_ERROR; nt26k = (struct at_device_nt26k *)device->user_data; - if (!nt26k->power_status) // power off + if (!nt26k->power_status) // power off { - LOG_D ("the power is off,power on device"); - device->class->device_ops->control (device, AT_DEVICE_CTRL_POWER_ON, RT_NULL); // 开启设备 + LOG_D("the power is off,power on device"); + device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL); // 开启设备 } - if (nt26k->sleep_status) // is sleep status + if (nt26k->sleep_status) // is sleep status { - if (nt26k->pwr_key_pin != -1) { - rt_pin_write (nt26k->pwr_key_pin, PIN_LOW); - rt_thread_mdelay (100); - rt_pin_write (nt26k->pwr_key_pin, PIN_HIGH); - rt_thread_mdelay (100); + if (nt26k->pwr_key_pin != -1) + { + rt_pin_write(nt26k->pwr_key_pin, PIN_LOW); + rt_thread_mdelay(100); + rt_pin_write(nt26k->pwr_key_pin, PIN_HIGH); + rt_thread_mdelay(100); - rt_pin_write (nt26k->pwr_key_pin, PIN_LOW); + rt_pin_write(nt26k->pwr_key_pin, PIN_LOW); } } - resp = at_create_resp (64, 0, rt_tick_from_millisecond (300)); - if (resp == RT_NULL) { - LOG_D ("no memory for resp create."); - at_delete_resp (resp); + resp = at_create_resp(64, 0, rt_tick_from_millisecond(300)); + if (resp == RT_NULL) + { + LOG_D("no memory for resp create."); + at_delete_resp(resp); return (-RT_ERROR); } result = -RT_ERROR; - if (at_obj_exec_cmd (device->client, resp, "AT+CEREG?") == RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CEREG?") == RT_EOK) + { int link_stat = 0; - if (at_resp_parse_line_args_by_kw (resp, "+CEREG:", "+CEREG: %*d,%d", &link_stat) > 0) { - if (link_stat == 1 || link_stat == 5) { + if (at_resp_parse_line_args_by_kw(resp, "+CEREG:", "+CEREG: %*d,%d", &link_stat) > 0) + { + if (link_stat == 1 || link_stat == 5) + { result = RT_EOK; } } } - if (nt26k->sleep_status) // is sleep status + if (nt26k->sleep_status) // is sleep status { - if (at_obj_exec_cmd (device->client, resp, "AT+CPSMS=1,,,,\"00100010\"") != RT_EOK) { - LOG_D ("startup entry into sleep fail."); + if (at_obj_exec_cmd(device->client, resp, "AT+CPSMS=1,,,,\"00100010\"") != RT_EOK) + { + LOG_D("startup entry into sleep fail."); } } - at_delete_resp (resp); + at_delete_resp(resp); return (result); } /* ============================= nt26k network interface operations ============================= */ /* set nt26k network interface device status and address information */ -int nt26k_netdev_set_info (struct netdev *netdev) { +int nt26k_netdev_set_info(struct netdev *netdev) +{ #define NT26K_INFO_RESP_SIZE 128 -#define NT26K_INFO_RESP_TIMO rt_tick_from_millisecond (1000) +#define NT26K_INFO_RESP_TIMO rt_tick_from_millisecond(1000) - int result = RT_EOK; - ip_addr_t addr; - at_response_t resp = RT_NULL; + int result = RT_EOK; + at_response_t resp = RT_NULL; struct at_device *device = RT_NULL; - RT_ASSERT (netdev); + RT_ASSERT(netdev); - device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, netdev->name); - if (device == RT_NULL) { - LOG_E ("get device(%s) failed.", netdev->name); + device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, netdev->name); + if (device == RT_NULL) + { + LOG_E("get device(%s) failed.", netdev->name); return -RT_ERROR; } /* set network interface device status */ - netdev_low_level_set_status (netdev, RT_TRUE); - netdev_low_level_set_link_status (netdev, RT_TRUE); - netdev_low_level_set_dhcp_status (netdev, RT_TRUE); + netdev_low_level_set_status(netdev, RT_TRUE); + netdev_low_level_set_link_status(netdev, RT_TRUE); + netdev_low_level_set_dhcp_status(netdev, RT_TRUE); - resp = at_create_resp (NT26K_INFO_RESP_SIZE, 0, NT26K_INFO_RESP_TIMO); - if (resp == RT_NULL) { - LOG_E ("no memory for resp create."); - at_delete_resp (resp); + resp = at_create_resp(NT26K_INFO_RESP_SIZE, 0, NT26K_INFO_RESP_TIMO); + if (resp == RT_NULL) + { + LOG_E("no memory for resp create."); + at_delete_resp(resp); result = -RT_ENOMEM; goto __exit; } - /* set network interface device dns server */ - { -#define DNS_ADDR_SIZE_MAX 16 - char dns_server1[DNS_ADDR_SIZE_MAX] = {0}, dns_server2[DNS_ADDR_SIZE_MAX] = {0}; - - /* send "AT+DNSSERVER?" commond to get DNS servers address */ - if (at_obj_exec_cmd (device->client, resp, "AT+DNSSERVER?") != RT_EOK) { - result = -RT_ERROR; - goto __exit; - } - // LOG_HEX("resp", 16, resp->buf, resp->buf_len); - int a1 = at_resp_parse_line_args (resp, 2, "PrimaryIpv4Dns:%s", dns_server1); - int a2 = at_resp_parse_line_args (resp, 3, "SecondaryIpv4Dns:%s", dns_server2); - - /* parse response data "+QIDNSCFG: ,," */ - if (a1 <= 0 || a2 <= 0) { - LOG_E ("%s device prase \"AT+DNSSERVER?\" cmd error.", device->name); - result = -RT_ERROR; - goto __exit; - } - - LOG_D ("%s device primary DNS server address: %s", device->name, dns_server1); - LOG_D ("%s device secondary DNS server address: %s", device->name, dns_server2); - - inet_aton (dns_server1, &addr); - netdev_low_level_set_dns_server (netdev, 0, &addr); - - inet_aton (dns_server2, &addr); - netdev_low_level_set_dns_server (netdev, 1, &addr); - } + device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL); // 打开连接 __exit: - if (resp) { - at_delete_resp (resp); + if (resp) + { + at_delete_resp(resp); } return result; @@ -464,216 +482,242 @@ __exit: * * @param netdev: nt26k network interface device */ -static void nt26k_check_link_status_entry (void *parameter) { +static void nt26k_check_link_status_entry(void *parameter) +{ #define NT26K_LINK_DELAY_TIME (60 * RT_TICK_PER_SECOND) -#define NT26K_LINK_STATUS_OK 1 +#define NT26K_LINK_STATUS_OK 1 int link_status; struct at_device *device = RT_NULL; - struct netdev *netdev = (struct netdev *)parameter; + struct netdev *netdev = (struct netdev *)parameter; - device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, netdev->name); - if (device == RT_NULL) { - LOG_E ("get device(%s) failed.", netdev->name); + device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, netdev->name); + if (device == RT_NULL) + { + LOG_E("get device(%s) failed.", netdev->name); return; } - while (1) { - link_status = nt26k_check_link_status (device); - if (link_status < 0) { - rt_thread_mdelay (NT26K_LINK_DELAY_TIME); + while (1) + { + link_status = nt26k_check_link_status(device); + if (link_status < 0) + { + rt_thread_mdelay(NT26K_LINK_DELAY_TIME); continue; } /* check the network interface device link status */ - if ((NT26K_LINK_STATUS_OK == link_status) != netdev_is_link_up (netdev)) { - netdev_low_level_set_link_status (netdev, (NT26K_LINK_STATUS_OK == link_status)); + if ((NT26K_LINK_STATUS_OK == link_status) != netdev_is_link_up(netdev)) + { + netdev_low_level_set_link_status(netdev, (NT26K_LINK_STATUS_OK == link_status)); } - rt_thread_delay (NT26K_LINK_DELAY_TIME); + rt_thread_delay(NT26K_LINK_DELAY_TIME); } } -int nt26k_netdev_check_link_status (struct netdev *netdev) { -#define NT26K_LINK_THREAD_TICK 20 +int nt26k_netdev_check_link_status(struct netdev *netdev) +{ +#define NT26K_LINK_THREAD_TICK 20 #define NT26K_LINK_THREAD_STACK_SIZE (1024 + 512) -#define NT26K_LINK_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX - 2) +#define NT26K_LINK_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX - 2) rt_thread_t tid; char tname[RT_NAME_MAX] = {0}; - RT_ASSERT (netdev); + RT_ASSERT(netdev); - rt_snprintf (tname, RT_NAME_MAX, "%s", netdev->name); + rt_snprintf(tname, RT_NAME_MAX, "%s", netdev->name); /* create nt26k link status polling thread */ - tid = rt_thread_create (tname, nt26k_check_link_status_entry, (void *)netdev, - NT26K_LINK_THREAD_STACK_SIZE, NT26K_LINK_THREAD_PRIORITY, NT26K_LINK_THREAD_TICK); - if (tid != RT_NULL) { - rt_thread_startup (tid); + tid = rt_thread_create(tname, nt26k_check_link_status_entry, (void *)netdev, + NT26K_LINK_THREAD_STACK_SIZE, NT26K_LINK_THREAD_PRIORITY, NT26K_LINK_THREAD_TICK); + if (tid != RT_NULL) + { + rt_thread_startup(tid); } return RT_EOK; } -static int nt26k_net_init (struct at_device *device); +static int nt26k_net_init(struct at_device *device); -static int nt26k_netdev_set_up (struct netdev *netdev) { +static int nt26k_netdev_set_up(struct netdev *netdev) +{ struct at_device *device = RT_NULL; - device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, netdev->name); - if (device == RT_NULL) { - LOG_E ("get device(%s) failed.", netdev->name); + device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, netdev->name); + if (device == RT_NULL) + { + LOG_E("get device(%s) failed.", netdev->name); return -RT_ERROR; } - if (device->is_init == RT_FALSE) { - nt26k_net_init (device); + if (device->is_init == RT_FALSE) + { + nt26k_net_init(device); device->is_init = RT_TRUE; - netdev_low_level_set_status (netdev, RT_TRUE); - LOG_D ("network interface device(%s) set up status.", netdev->name); + netdev_low_level_set_status(netdev, RT_TRUE); + LOG_D("network interface device(%s) set up status.", netdev->name); } return RT_EOK; } -static int nt26k_netdev_set_down (struct netdev *netdev) { +static int nt26k_netdev_set_down(struct netdev *netdev) +{ struct at_device *device = RT_NULL; - device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, netdev->name); - if (device == RT_NULL) { - LOG_E ("get device(%s) failed.", netdev->name); + device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, netdev->name); + if (device == RT_NULL) + { + LOG_E("get device(%s) failed.", netdev->name); return -RT_ERROR; } - if (device->is_init == RT_TRUE) { - nt26k_power_off (device); + if (device->is_init == RT_TRUE) + { + nt26k_power_off(device); device->is_init = RT_FALSE; - netdev_low_level_set_status (netdev, RT_FALSE); - LOG_D ("network interface device(%s) set down status.", netdev->name); + netdev_low_level_set_status(netdev, RT_FALSE); + LOG_D("network interface device(%s) set down status.", netdev->name); } return RT_EOK; } -static int nt26k_netdev_set_dns_server (struct netdev *netdev, uint8_t dns_num, ip_addr_t *dns_server) { -#define NT26K_DNS_RESP_LEN 64 -#define NT26K_DNS_RESP_TIMEO rt_tick_from_millisecond (300) +static int nt26k_netdev_set_dns_server(struct netdev *netdev, uint8_t dns_num, ip_addr_t *dns_server) +{ +#define NT26K_DNS_RESP_LEN 64 +#define NT26K_DNS_RESP_TIMEO rt_tick_from_millisecond(300) - int result = RT_EOK; - at_response_t resp = RT_NULL; + int result = RT_EOK; + at_response_t resp = RT_NULL; struct at_device *device = RT_NULL; - RT_ASSERT (netdev); - RT_ASSERT (dns_server); + RT_ASSERT(netdev); + RT_ASSERT(dns_server); - device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, netdev->name); - if (device == RT_NULL) { - LOG_E ("get device(%s) failed.", netdev->name); + device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, netdev->name); + if (device == RT_NULL) + { + LOG_E("get device(%s) failed.", netdev->name); return -RT_ERROR; } - resp = at_create_resp (NT26K_DNS_RESP_LEN, 0, NT26K_DNS_RESP_TIMEO); - if (resp == RT_NULL) { - LOG_D ("no memory for resp create."); - at_delete_resp (resp); + resp = at_create_resp(NT26K_DNS_RESP_LEN, 0, NT26K_DNS_RESP_TIMEO); + if (resp == RT_NULL) + { + LOG_D("no memory for resp create."); + at_delete_resp(resp); result = -RT_ENOMEM; goto __exit; } /* send "AT+QIDNSCFG=[,]" commond to set dns servers */ - if (at_obj_exec_cmd (device->client, resp, "AT+QIDNSCFG=%d,%s", - dns_num, inet_ntoa (*dns_server)) != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+QIDNSCFG=%d,%s", + dns_num, inet_ntoa(*dns_server)) != RT_EOK) + { result = -RT_ERROR; goto __exit; } - netdev_low_level_set_dns_server (netdev, dns_num, dns_server); + netdev_low_level_set_dns_server(netdev, dns_num, dns_server); __exit: - if (resp) { - at_delete_resp (resp); + if (resp) + { + at_delete_resp(resp); } return result; } #ifdef NETDEV_USING_PING -static int nt26k_netdev_ping (struct netdev *netdev, const char *host, size_t data_len, - uint32_t timeout, struct netdev_ping_resp *ping_resp +static int nt26k_netdev_ping(struct netdev *netdev, const char *host, size_t data_len, + uint32_t timeout, struct netdev_ping_resp *ping_resp #if RT_VER_NUM >= 0x50100 - , - rt_bool_t is_bind + , + rt_bool_t is_bind #endif -) { +) +{ #define NT26K_PING_RESP_SIZE 128 -#define NT26K_PING_IP_SIZE 16 -#define NT26K_PING_TIMEO (NT26K_CON_REP_TIME) +#define NT26K_PING_IP_SIZE 16 +#define NT26K_PING_TIMEO (NT26K_CON_REP_TIME) - rt_err_t result = RT_EOK; - int response = -1, recv_data_len, ping_time, ttl; + rt_err_t result = RT_EOK; + int response = -1, recv_data_len, ping_time, ttl; char ip_addr[NT26K_PING_IP_SIZE] = {0}; - at_response_t resp = RT_NULL; - struct at_device *device = RT_NULL; + at_response_t resp = RT_NULL; + struct at_device *device = RT_NULL; #if RT_VER_NUM >= 0x50100 - RT_UNUSED (is_bind); + RT_UNUSED(is_bind); #endif - RT_ASSERT (netdev); - RT_ASSERT (host); - RT_ASSERT (ping_resp); + RT_ASSERT(netdev); + RT_ASSERT(host); + RT_ASSERT(ping_resp); - device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, netdev->name); - if (device == RT_NULL) { - LOG_E ("get device(%s) failed.", netdev->name); + device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, netdev->name); + if (device == RT_NULL) + { + LOG_E("get device(%s) failed.", netdev->name); return -RT_ERROR; } - resp = at_create_resp (NT26K_PING_RESP_SIZE, 4, NT26K_PING_TIMEO); - if (resp == RT_NULL) { - LOG_E ("no memory for resp create"); - at_delete_resp (resp); + resp = at_create_resp(NT26K_PING_RESP_SIZE, 4, NT26K_PING_TIMEO); + if (resp == RT_NULL) + { + LOG_E("no memory for resp create"); + at_delete_resp(resp); return -RT_ENOMEM; } /* send "AT+QPING=""[,[][,]]" commond to send ping request */ - if (at_obj_exec_cmd (device->client, resp, "AT+QPING=1,\"%s\",%d,1", host, timeout / RT_TICK_PER_SECOND) < 0) { + if (at_obj_exec_cmd(device->client, resp, "AT+QPING=1,\"%s\",%d,1", host, timeout / RT_TICK_PER_SECOND) < 0) + { result = -RT_ERROR; goto __exit; } - at_resp_parse_line_args_by_kw (resp, "+QPING:", "+QPING:%d", &response); + at_resp_parse_line_args_by_kw(resp, "+QPING:", "+QPING:%d", &response); /* Received the ping response from the server */ - if (response == 0) { - if (at_resp_parse_line_args_by_kw (resp, "+QPING:", "+QPING:%d,\"%[^\"]\",%d,%d,%d", - &response, ip_addr, &recv_data_len, &ping_time, &ttl) <= 0) { + if (response == 0) + { + if (at_resp_parse_line_args_by_kw(resp, "+QPING:", "+QPING:%d,\"%[^\"]\",%d,%d,%d", + &response, ip_addr, &recv_data_len, &ping_time, &ttl) <= 0) + { result = -RT_ERROR; goto __exit; } } /* prase response number */ - switch (response) { - case 0: - inet_aton (ip_addr, &(ping_resp->ip_addr)); - ping_resp->data_len = recv_data_len; - ping_resp->ticks = ping_time; - ping_resp->ttl = ttl; - result = RT_EOK; - break; - case 569: - result = -RT_ETIMEOUT; - break; - default: - result = -RT_ERROR; - break; + switch (response) + { + case 0: + inet_aton(ip_addr, &(ping_resp->ip_addr)); + ping_resp->data_len = recv_data_len; + ping_resp->ticks = ping_time; + ping_resp->ttl = ttl; + result = RT_EOK; + break; + case 569: + result = -RT_ETIMEOUT; + break; + default: + result = -RT_ERROR; + break; } __exit: - if (resp) { - at_delete_resp (resp); + if (resp) + { + at_delete_resp(resp); } return result; @@ -695,33 +739,36 @@ const struct netdev_ops nt26k_netdev_ops = RT_NULL, }; -static struct netdev *nt26k_netdev_add (const char *netdev_name) { +static struct netdev *nt26k_netdev_add(const char *netdev_name) +{ #define ETHERNET_MTU 1380 -#define HWADDR_LEN 8 +#define HWADDR_LEN 8 struct netdev *netdev = RT_NULL; - netdev = netdev_get_by_name (netdev_name); - if (netdev != RT_NULL) { + netdev = netdev_get_by_name(netdev_name); + if (netdev != RT_NULL) + { return (netdev); } - netdev = (struct netdev *)rt_calloc (1, sizeof (struct netdev)); - if (netdev == RT_NULL) { - LOG_E ("no memory for netdev create."); + netdev = (struct netdev *)rt_calloc(1, sizeof(struct netdev)); + if (netdev == RT_NULL) + { + LOG_E("no memory for netdev create."); return RT_NULL; } - netdev->mtu = ETHERNET_MTU; - netdev->ops = &nt26k_netdev_ops; + netdev->mtu = ETHERNET_MTU; + netdev->ops = &nt26k_netdev_ops; netdev->hwaddr_len = HWADDR_LEN; #ifdef SAL_USING_AT - extern int sal_at_netdev_set_pf_info (struct netdev * netdev); + extern int sal_at_netdev_set_pf_info(struct netdev * netdev); /* set the network interface socket/netdb operations */ - sal_at_netdev_set_pf_info (netdev); + sal_at_netdev_set_pf_info(netdev); #endif - netdev_register (netdev, netdev_name, RT_NULL); + netdev_register(netdev, netdev_name, RT_NULL); return netdev; } @@ -729,40 +776,60 @@ static struct netdev *nt26k_netdev_add (const char *netdev_name) { /* ============================= nt26k device operations ============================= */ /* initialize for nt26k */ -static void nt26k_init_thread_entry (void *parameter) { -#define INIT_RETRY 5 -#define CPIN_RETRY 5 -#define CSQ_RETRY 20 -#define CEREG_RETRY 50 +static void nt26k_init_thread_entry(void *parameter) +{ +#define INIT_RETRY 5 +#define CPIN_RETRY 5 +#define CSQ_RETRY 20 +#define CEREG_RETRY 50 #define IPADDR_RETRY 10 int i; - rt_err_t result = RT_EOK; - at_response_t resp = RT_NULL; + rt_err_t result = RT_EOK; + at_response_t resp = RT_NULL; struct at_device *device = (struct at_device *)parameter; struct at_client *client = device->client; - resp = at_create_resp (128, 0, rt_tick_from_millisecond (300)); - if (resp == RT_NULL) { - LOG_E ("no memory for resp create."); - at_delete_resp (resp); + resp = at_create_resp(128, 0, rt_tick_from_millisecond(300)); + if (resp == RT_NULL) + { + LOG_E("no memory for resp create."); + at_delete_resp(resp); return; } - LOG_D ("start init %s device.", device->name); - nt26k_power_off (device); - rt_thread_mdelay (100); - while (1) { + LOG_D("start init %s device.", device->name); + + while (1) + { /* power on the nt26k device */ - nt26k_power_on (device); - rt_thread_mdelay (1000); + nt26k_power_off(device); + rt_thread_mdelay(100); + nt26k_power_on(device); + rt_thread_mdelay(1000); /* wait nt26k startup finish, send AT every 500ms, if receive OK, SYNC success*/ - if (at_client_obj_wait_connect (client, NT26K_WAIT_CONNECT_TIME)) { + if (at_client_obj_wait_connect(client, NT26K_WAIT_CONNECT_TIME)) + { result = -RT_ETIMEOUT; goto __exit; } - + /* disable echo */ + if (at_obj_exec_cmd(device->client, resp, "ATE0") != RT_EOK) + { + result = -RT_ERROR; + goto __exit; + } + /* get module version */ + if (at_obj_exec_cmd(device->client, resp, "AT+CGMR") != RT_EOK) + { + result = -RT_ERROR; + goto __exit; + } + for (i = 0; i < (int)resp->line_counts - 1; i++) + { + LOG_D("%s", at_resp_get_line(resp, i + 1)); + } // // AT+QSIMDET=0,1 // if (at_obj_exec_cmd(device->client, resp, "AT+QSIMDET=0,1") != RT_EOK) // { @@ -770,98 +837,98 @@ static void nt26k_init_thread_entry (void *parameter) { // goto __exit; // } - /* disable echo */ - if (at_obj_exec_cmd (device->client, resp, "ATE0") != RT_EOK) { - result = -RT_ERROR; - goto __exit; - } - /* disable sleep mode */ - if (at_obj_exec_cmd (device->client, resp, "AT+ECPMUCFG=1,0") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+ECPMUCFG=1,0") != RT_EOK) + { result = -RT_ERROR; goto __exit; } /* disable PSM mode */ - if (at_obj_exec_cmd (device->client, resp, "AT+CPSMS=0") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CPSMS=0") != RT_EOK) + { result = -RT_ERROR; goto __exit; } /*AT+QICFG="dataformat" 设置收发模式*/ - if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"dataformat\",%d,%d", AT_NSONMI_MODE_DEFAULT, AT_NSONMI_MODE_DEFAULT) != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"dataformat\",%d,%d", AT_NSONMI_MODE_DEFAULT, AT_NSONMI_MODE_DEFAULT) != RT_EOK) + { result = -RT_ERROR; goto __exit; } /*设置显示模式*/ - if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"viewmode\",1") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"viewmode\",1") != RT_EOK) + { result = -RT_ERROR; goto __exit; } /*设置保活信息*/ - if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"tcp/keepalive\",1,1800,100,3") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"tcp/keepalive\",1,1800,100,3") != RT_EOK) + { result = -RT_ERROR; goto __exit; } - /*设置保活信息*/ - if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"passiveclosed\",1") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"passiveclosed\",1") != RT_EOK) + { result = -RT_ERROR; goto __exit; } - /* get module version */ - if (at_obj_exec_cmd (device->client, resp, "AT+CGMR") != RT_EOK) { - result = -RT_ERROR; - goto __exit; - } - for (i = 0; i < (int)resp->line_counts - 1; i++) { - LOG_D ("%s", at_resp_get_line (resp, i + 1)); - } /* set network interface device hardware address(IMEI) */ { #define NT26K_NETDEV_HWADDR_LEN 8 -#define NT26K_IMEI_LEN 15 +#define NT26K_IMEI_LEN 15 char imei[NT26K_IMEI_LEN] = {0}; /* send "AT+CGSN" commond to get device IMEI */ - if (at_obj_exec_cmd (device->client, resp, "AT+CGSN") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CGSN") != RT_EOK) + { result = -RT_ERROR; goto __exit; } - if (at_resp_parse_line_args_by_kw (resp, "86", "%s", imei) <= 0) { - LOG_E ("%s device prase \"AT+CGSN=1\" cmd error.", device->name); + if (at_resp_parse_line_args_by_kw(resp, "86", "%s", imei) <= 0) + { + LOG_E("%s device prase \"AT+CGSN=1\" cmd error.", device->name); result = -RT_ERROR; goto __exit; } - LOG_D ("%s device IMEI number: %s", device->name, imei); + LOG_D("%s device IMEI number: %s", device->name, imei); - rt_memcpy (nt26k.imei, imei, NT26K_IMEI_LEN); - Flash_Sys_Cfg (kIotImeiId, nt26k.imei, NT26K_IMEI_LEN); + rt_memcpy(nt26k.imei, imei, NT26K_IMEI_LEN); + Flash_Sys_Cfg(kIotImeiId, nt26k.imei, NT26K_IMEI_LEN); } /* check SIM card */ - for (i = 0; i < CPIN_RETRY; i++) { - if (at_obj_exec_cmd (device->client, resp, "AT+CPIN?") == RT_EOK) { - if (at_resp_get_line_by_kw (resp, "+CPIN: READY") != RT_NULL) + for (i = 0; i < CPIN_RETRY; i++) + { + if (at_obj_exec_cmd(device->client, resp, "AT+CPIN?") == RT_EOK) + { + if (at_resp_get_line_by_kw(resp, "+CPIN: READY") != RT_NULL) break; } - rt_thread_mdelay (2000); + rt_thread_mdelay(2000); } - if (i == CPIN_RETRY) { - LOG_E ("%s device SIM card detection failed.", device->name); + if (i == CPIN_RETRY) + { + LOG_E("%s device SIM card detection failed.", device->name); result = -RT_ERROR; goto __exit; } /*网络注册 */ - for (i = 0; i < CSQ_RETRY; i++) { + for (i = 0; i < CSQ_RETRY; i++) + { - if (at_obj_exec_cmd (device->client, resp, "AT+CREG=2") == RT_EOK) { - if (at_resp_get_line_by_kw (resp, "OK") > 0) { - LOG_D ("%s device network registration success.", device->name); + if (at_obj_exec_cmd(device->client, resp, "AT+CREG=2") == RT_EOK) + { + if (at_resp_get_line_by_kw(resp, "OK") > 0) + { + LOG_D("%s device network registration success.", device->name); break; } } - rt_thread_mdelay (1000); + rt_thread_mdelay(1000); } - if (i == CSQ_RETRY) { - LOG_D ("%s device network registration failed.", device->name); + if (i == CSQ_RETRY) + { + LOG_D("%s device network registration failed.", device->name); result = -RT_ERROR; goto __exit; } @@ -873,20 +940,22 @@ static void nt26k_init_thread_entry (void *parameter) { char iccid[NT26K_ICCID_LEN] = {0}; /* send "AT+ECICCID" commond to get device iccid */ - if (at_obj_exec_cmd (device->client, resp, "AT+QCCID") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+QCCID") != RT_EOK) + { result = -RT_ERROR; goto __exit; } - if (at_resp_parse_line_args_by_kw (resp, "+QCCID:", "+QCCID:%s", iccid) <= 0) { - LOG_E ("%s device prase \"AT+ECICCID\" cmd error.", device->name); + if (at_resp_parse_line_args_by_kw(resp, "+QCCID:", "+QCCID:%s", iccid) <= 0) + { + LOG_E("%s device prase \"AT+ECICCID\" cmd error.", device->name); result = -RT_ERROR; goto __exit; } - LOG_D ("%s device iccid number: %s", device->name, iccid); + LOG_D("%s device iccid number: %s", device->name, iccid); - rt_memcpy (nt26k.iccid, iccid, NT26K_ICCID_LEN); - Flash_Sys_Cfg (kIotIccidId, nt26k.iccid, NT26K_ICCID_LEN); + rt_memcpy(nt26k.iccid, iccid, NT26K_ICCID_LEN); + Flash_Sys_Cfg(kIotIccidId, nt26k.iccid, NT26K_ICCID_LEN); } /* set network interface device hardware imsi */ @@ -897,206 +966,269 @@ static void nt26k_init_thread_entry (void *parameter) { char imsi[NT26K_IMSI_LEN] = {0}; /* send "AT+CIMI" commond to get device imsi */ - if (at_obj_exec_cmd (device->client, resp, "AT+CIMI") != RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CIMI") != RT_EOK) + { result = -RT_ERROR; goto __exit; } - if (at_resp_parse_line_args_by_kw (resp, "46", "%s", imsi) <= 0) { - LOG_E ("%s device prase \"AT+CIMI\" cmd error.", device->name); + if (at_resp_parse_line_args_by_kw(resp, "46", "%s", imsi) <= 0) + { + LOG_E("%s device prase \"AT+CIMI\" cmd error.", device->name); result = -RT_ERROR; goto __exit; } - LOG_D ("%s device imsi number: %s", device->name, imsi); + LOG_D("%s device imsi number: %s", device->name, imsi); - rt_memcpy (nt26k.imsi, imsi, NT26K_IMSI_LEN); - Flash_Sys_Cfg (kIotImsiId, nt26k.imsi, NT26K_IMSI_LEN); + rt_memcpy(nt26k.imsi, imsi, NT26K_IMSI_LEN); + Flash_Sys_Cfg(kIotImsiId, nt26k.imsi, NT26K_IMSI_LEN); } /* check signal strength */ - for (i = 0; i < CSQ_RETRY; i++) { + for (i = 0; i < CSQ_RETRY; i++) + { - if (at_obj_exec_cmd (device->client, resp, "AT+CSQ") == RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CSQ") == RT_EOK) + { int signal_strength = 0, err_rate = 0; - if (at_resp_parse_line_args_by_kw (resp, "+CSQ:", "+CSQ: %d,%d", &signal_strength, &err_rate) > 0) { - if ((signal_strength != 99) && (signal_strength != 0)) { - LOG_D ("%s device signal strength: %d, channel bit err_rate: %d", - device->name, signal_strength, err_rate); + if (at_resp_parse_line_args_by_kw(resp, "+CSQ:", "+CSQ: %d,%d", &signal_strength, &err_rate) > 0) + { + if ((signal_strength != 99) && (signal_strength != 0)) + { + LOG_D("%s device signal strength: %d, channel bit err_rate: %d", + device->name, signal_strength, err_rate); nt26k.rssi = signal_strength; break; } } } - rt_thread_mdelay (1000); + rt_thread_mdelay(1000); } - if (i == CSQ_RETRY) { - LOG_E ("%s device signal strength check failed", device->name); + if (i == CSQ_RETRY) + { + LOG_E("%s device signal strength check failed", device->name); result = -RT_ERROR; goto __exit; } /* check the GPRS network is registered */ - for (i = 0; i < CEREG_RETRY; i++) { + for (i = 0; i < CEREG_RETRY; i++) + { - if (at_obj_exec_cmd (device->client, resp, "AT+CEREG?") == RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CEREG?") == RT_EOK) + { int link_stat = 0; - if (at_resp_parse_line_args_by_kw (resp, "+CEREG:", "+CEREG: %*d,%d", &link_stat) > 0) { - if ((link_stat == 1) || (link_stat == 5)) { - LOG_D ("%s device GPRS is registered", device->name); + if (at_resp_parse_line_args_by_kw(resp, "+CEREG:", "+CEREG: %*d,%d", &link_stat) > 0) + { + if ((link_stat == 1) || (link_stat == 5)) + { + LOG_D("%s device GPRS is registered", device->name); break; } } } - rt_thread_mdelay (1000); + rt_thread_mdelay(1000); } - if (i == CEREG_RETRY) { - LOG_E ("%s device GPRS is register failed", device->name); + for (i = 0; i < CEREG_RETRY; i++) + { + + if (at_obj_exec_cmd(device->client, resp, "AT+QICSGP=1,1,\"cmnet\",\"\",\"\",1") == RT_EOK) + { + break; + } + rt_thread_mdelay(20000); + } + if (i == CEREG_RETRY) + { result = -RT_ERROR; goto __exit; } - if (at_obj_exec_cmd (device->client, resp, "AT+CCLK?") == RT_EOK) { + for (i = 0; i < CEREG_RETRY; i++) + { + if (at_obj_exec_cmd(device->client, resp, "AT+CGACT=1,1") == RT_EOK) + { + LOG_D("pdp激活成功"); + break; + } + rt_thread_mdelay(20000); + } + if (i == CEREG_RETRY) + { + result = -RT_ERROR; + goto __exit; + } + if (at_obj_exec_cmd(device->client, resp, "AT+CCLK?") == RT_EOK) + { TsRtcDateTime rtc_dt; int year, mounth, days, hous, min, sec; /*+CCLK:24/11/12,06:08:19+32*/ - if (at_resp_parse_line_args_by_kw (resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0) { - rtc_dt.year = (2000 + year); - rtc_dt.month = mounth; - rtc_dt.day = days; - rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区 + if (at_resp_parse_line_args_by_kw(resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0) + { + rtc_dt.year = (2000 + year); + rtc_dt.month = mounth; + rtc_dt.day = days; + rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区 rtc_dt.minute = min; rtc_dt.second = sec; - Time_Zone_Conversion (&rtc_dt); // 时区设置 - rtc_dt.week = RTC_GetWeek (rtc_dt.year, rtc_dt.month, rtc_dt.day); - RTC_SetTime (rtc_dt.year, rtc_dt.month, rtc_dt.day, - rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间 - LOG_I ("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", - rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); + Time_Zone_Conversion(&rtc_dt); // 时区设置 + rtc_dt.week = RTC_GetWeek(rtc_dt.year, rtc_dt.month, rtc_dt.day); + RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day, + rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间 + LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", + rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); result = RT_EOK; } } + /* initialize successfully */ result = RT_EOK; break; -__exit: - if (result != RT_EOK) { + __exit: + if (result != RT_EOK) + { /* power off the nt26k device */ // nt26k_power_off(device); - rt_thread_mdelay (1000); + rt_thread_mdelay(1000); - LOG_I ("%s device initialize retry...", device->name); + LOG_I("%s device initialize retry...", device->name); } } - if (resp) { - at_delete_resp (resp); + if (resp) + { + at_delete_resp(resp); } - if (result == RT_EOK) { + if (result == RT_EOK) + { /* set network interface device status and address information */ - // nt26k_netdev_set_info(device->netdev); + nt26k_netdev_set_info(device->netdev); /* check and create link staus sync thread */ // nt26k_netdev_check_link_status(device->netdev); - LOG_I ("%s device network initialize success.", device->name); - rt_completion_done (&nt26k_init_complate); // 通知初始化完成 - } else { - LOG_E ("%s device network initialize failed(%d).", device->name, result); + LOG_I("%s device network initialize success.", device->name); + rt_completion_done(&nt26k_init_complate); // 通知初始化完成 + } + else + { + LOG_E("%s device network initialize failed(%d).", device->name, result); } } /* nt26k device network initialize */ -static int nt26k_net_init (struct at_device *device) { +static int nt26k_net_init(struct at_device *device) +{ #ifdef AT_DEVICE_NT26K_INIT_ASYN rt_thread_t tid; /* 初始化完成量对象 */ - rt_completion_init (&nt26k_init_complate); + rt_completion_init(&nt26k_init_complate); - tid = rt_thread_create ("nt26k_net", nt26k_init_thread_entry, (void *)device, - NT26K_THREAD_STACK_SIZE, NT26K_THREAD_PRIORITY, 20); - if (tid) { - rt_thread_startup (tid); - } else { - LOG_E ("create %s device init thread failed.", device->name); + tid = rt_thread_create("nt26k_net", nt26k_init_thread_entry, (void *)device, + NT26K_THREAD_STACK_SIZE, NT26K_THREAD_PRIORITY, 20); + if (tid) + { + rt_thread_startup(tid); + } + else + { + LOG_E("create %s device init thread failed.", device->name); return -RT_ERROR; } #else - nt26k_init_thread_entry (device); + nt26k_init_thread_entry(device); #endif /* AT_DEVICE_NT26K_INIT_ASYN */ return RT_EOK; } // 去除字符串中的 \r 和 \n -void remove_crlf (char *str) { +void remove_crlf(char *str) +{ char *p = str; - while (*p) { - if (*p == '\r' || *p == '\n') { - memmove (p, p + 1, strlen (p)); - } else { + while (*p) + { + if (*p == '\r' || *p == '\n') + { + memmove(p, p + 1, strlen(p)); + } + else + { p++; } } } -rt_err_t Nt26k_Get_Signal_Info (struct at_device *device) { +rt_err_t Nt26k_Get_Signal_Info(struct at_device *device) +{ #define RETRY 20 - rt_err_t result = RT_EOK; + rt_err_t result = RT_EOK; at_response_t resp = RT_NULL; rt_uint8_t i; - RT_ASSERT (device); - resp = at_create_resp (1024, 4, rt_tick_from_millisecond (2000)); - if (resp == RT_NULL) { - LOG_E ("no memory for resp create."); - at_delete_resp (resp); + RT_ASSERT(device); + resp = at_create_resp(1024, 4, rt_tick_from_millisecond(2000)); + if (resp == RT_NULL) + { + LOG_E("no memory for resp create."); + at_delete_resp(resp); return RT_ERROR; } /* check signal strength */ - for (i = 0; i < RETRY; i++) { + for (i = 0; i < RETRY; i++) + { - if (at_obj_exec_cmd (device->client, resp, "AT+CSQ") == RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CSQ") == RT_EOK) + { int signal_strength = 0, err_rate = 0; - if (at_resp_parse_line_args_by_kw (resp, "+CSQ:", "+CSQ: %d,%d", &signal_strength, &err_rate) > 0) { - if ((signal_strength != 99) && (signal_strength != 0)) { - LOG_D ("%s device signal strength: %d, channel bit err_rate: %d", - device->name, signal_strength, err_rate); + if (at_resp_parse_line_args_by_kw(resp, "+CSQ:", "+CSQ: %d,%d", &signal_strength, &err_rate) > 0) + { + if ((signal_strength != 99) && (signal_strength != 0)) + { + LOG_D("%s device signal strength: %d, channel bit err_rate: %d", + device->name, signal_strength, err_rate); nt26k.rssi = signal_strength; break; } } } - rt_thread_mdelay (1000); + rt_thread_mdelay(1000); } - if (i == RETRY) { - LOG_E ("%s device signal strength check failed", device->name); + if (i == RETRY) + { + LOG_E("%s device signal strength check failed", device->name); result = -RT_ERROR; } /* check signal strength */ //+CESQ:99,99,255,255,28,44 - for (i = 0; i < RETRY; i++) { - if (at_obj_exec_cmd (device->client, resp, "AT+CESQ") == RT_EOK) { + for (i = 0; i < RETRY; i++) + { + if (at_obj_exec_cmd(device->client, resp, "AT+CESQ") == RT_EOK) + { rt_uint8_t rsrp = 0, rsrq = 0; - if (at_resp_parse_line_args_by_kw (resp, "+CESQ:", "+CESQ:%*[^,],%*[^,],%*[^,],%*[^,],%d,%d", &rsrq, &rsrp) > 0) { - if ((rsrp <= 97) && (rsrp > 0) && ((rsrq <= 34) && (rsrq > 0))) { - LOG_D ("%s device signal rsrp: %d, rsrq: %d", - device->name, rsrp, rsrq); + if (at_resp_parse_line_args_by_kw(resp, "+CESQ:", "+CESQ:%*[^,],%*[^,],%*[^,],%*[^,],%d,%d", &rsrq, &rsrp) > 0) + { + if ((rsrp <= 97) && (rsrp > 0) && ((rsrq <= 34) && (rsrq > 0))) + { + LOG_D("%s device signal rsrp: %d, rsrq: %d", + device->name, rsrp, rsrq); nt26k.rsrp = rsrp; nt26k.rsrq = rsrq; break; } } } - rt_thread_mdelay (1000); + rt_thread_mdelay(1000); } - if (i == RETRY) { - LOG_E ("%s device signal data failed", device->name); + if (i == RETRY) + { + LOG_E("%s device signal data failed", device->name); result = -RT_ERROR; } // /* get signal snr, pci */ @@ -1146,147 +1278,159 @@ rt_err_t Nt26k_Get_Signal_Info (struct at_device *device) { // result = -RT_ERROR; // } - at_delete_resp (resp); + at_delete_resp(resp); return result; } /* nt26k device network interface attach * - set network interface device link status */ -static int nt26k_init (struct at_device *device) { +static int nt26k_init(struct at_device *device) +{ struct at_device_nt26k *nt26k = RT_NULL; - RT_ASSERT (device); + RT_ASSERT(device); - nt26k = (struct at_device_nt26k *)device->user_data; - nt26k->power_status = RT_FALSE; // default power is off. - nt26k->sleep_status = RT_FALSE; // default sleep is disabled. + nt26k = (struct at_device_nt26k *)device->user_data; + nt26k->power_status = RT_FALSE; // default power is off. + nt26k->sleep_status = RT_FALSE; // default sleep is disabled. /* initialize AT client */ #if RT_VER_NUM >= 0x50100 - at_client_init (nt26k->client_name, nt26k->recv_line_num, nt26k->recv_line_num); + at_client_init(nt26k->client_name, nt26k->recv_line_num, nt26k->recv_line_num); #else - at_client_init (nt26k->client_name, nt26k->recv_line_num); + at_client_init(nt26k->client_name, nt26k->recv_line_num); #endif - device->client = at_client_get (nt26k->client_name); - if (device->client == RT_NULL) { - LOG_E ("get AT client(%s) failed.", nt26k->client_name); + device->client = at_client_get(nt26k->client_name); + if (device->client == RT_NULL) + { + LOG_E("get AT client(%s) failed.", nt26k->client_name); return -RT_ERROR; } /* register URC data execution function */ - at_obj_set_urc_table (device->client, urc_table, sizeof (urc_table) / sizeof (urc_table[0])); + at_obj_set_urc_table(device->client, urc_table, sizeof(urc_table) / sizeof(urc_table[0])); #ifdef AT_USING_SOCKET - nt26k_socket_init (device); + nt26k_socket_init(device); #endif /* add nt26k device to the netdev list */ - device->netdev = nt26k_netdev_add (nt26k->device_name); - if (device->netdev == RT_NULL) { - LOG_E ("add netdev(%s) failed.", nt26k->device_name); + device->netdev = nt26k_netdev_add(nt26k->device_name); + if (device->netdev == RT_NULL) + { + LOG_E("add netdev(%s) failed.", nt26k->device_name); return -RT_ERROR; } /* initialize nt26k pin configuration */ - if (nt26k->pwr_en_pin != -1) { - rt_pin_mode (nt26k->pwr_en_pin, PIN_MODE_OUTPUT); - // rt_pin_write(nt26k->pwr_en_pin, PIN_LOW); + if (nt26k->pwr_en_pin != -1) + { + rt_pin_mode(nt26k->pwr_en_pin, PIN_MODE_OUTPUT); } - if (nt26k->rst_pin != -1) { - rt_pin_mode (nt26k->rst_pin, PIN_MODE_OUTPUT); + if (nt26k->rst_pin != -1) + { + rt_pin_mode(nt26k->rst_pin, PIN_MODE_OUTPUT); } - if (nt26k->pwr_key_pin != -1) { - rt_pin_mode (nt26k->pwr_key_pin, PIN_MODE_OUTPUT); - device->class->device_ops->control (device, AT_DEVICE_CTRL_WAKEUP, RT_NULL); + if (nt26k->pwr_key_pin != -1) + { + rt_pin_mode(nt26k->pwr_key_pin, PIN_MODE_OUTPUT); + device->class->device_ops->control(device, AT_DEVICE_CTRL_WAKEUP, RT_NULL); } /* initialize nt26k device network */ - return nt26k_netdev_set_up (device->netdev); + return nt26k_netdev_set_up(device->netdev); } -static int nt26k_deinit (struct at_device *device) { - RT_ASSERT (device); +static int nt26k_deinit(struct at_device *device) +{ + RT_ASSERT(device); - return nt26k_netdev_set_down (device->netdev); + return nt26k_netdev_set_down(device->netdev); } -static int nt26k_control (struct at_device *device, int cmd, void *arg) { +static int nt26k_control(struct at_device *device, int cmd, void *arg) +{ int result = -RT_ERROR; - RT_ASSERT (device); + RT_ASSERT(device); - switch (cmd) { - case AT_DEVICE_CTRL_SLEEP: - result = nt26k_sleep (device); - break; - case AT_DEVICE_CTRL_WAKEUP: - result = nt26k_wakeup (device); - break; - case AT_DEVICE_CTRL_NET_CONN: - result = at_device_nt26k_connect_tcp (device); - break; - case AT_DEVICE_CTRL_NET_DISCONN: - result = at_device_nt26k_disconnect_tcp (device); // 直接删除Socket - break; - case AT_DEVICE_CTRL_GET_SIGNAL: - result = Nt26k_Get_Signal_Info (device); - break; - case AT_DEVICE_CTRL_RESET: - result = Nt26k_Reset (device); - break; - case AT_DEVICE_CTRL_POWER_ON: - result = nt26k_power_on (device); - break; - case AT_DEVICE_CTRL_POWER_OFF: - result = nt26k_power_off (device); - break; - case AT_DEVICE_CTRL_LOW_POWER: - case AT_DEVICE_CTRL_SET_WIFI_INFO: - case AT_DEVICE_CTRL_GET_GPS: - case AT_DEVICE_CTRL_GET_VER: - LOG_W ("not support the control command(%d).", cmd); - break; - default: - LOG_E ("input error control command(%d).", cmd); - break; + switch (cmd) + { + case AT_DEVICE_CTRL_SLEEP: + result = nt26k_sleep(device); + break; + case AT_DEVICE_CTRL_WAKEUP: + result = nt26k_wakeup(device); + break; + case AT_DEVICE_CTRL_NET_CONN: + result = at_device_nt26k_connect_tcp(device); + break; + case AT_DEVICE_CTRL_NET_DISCONN: + result = at_device_nt26k_disconnect_tcp(device); // 直接删除Socket + break; + case AT_DEVICE_CTRL_GET_SIGNAL: + result = Nt26k_Get_Signal_Info(device); + break; + case AT_DEVICE_CTRL_RESET: + result = Nt26k_Reset(device); + break; + case AT_DEVICE_CTRL_POWER_ON: + result = nt26k_power_on(device); + break; + case AT_DEVICE_CTRL_POWER_OFF: + result = nt26k_power_off(device); + break; + case AT_DEVICE_CTRL_LOW_POWER: + case AT_DEVICE_CTRL_SET_WIFI_INFO: + case AT_DEVICE_CTRL_GET_GPS: + case AT_DEVICE_CTRL_GET_VER: + LOG_W("not support the control command(%d).", cmd); + break; + default: + LOG_E("input error control command(%d).", cmd); + break; } return result; } -int Time_Calibration (struct at_device *device) { +int Time_Calibration(struct at_device *device) +{ at_response_t resp = RT_NULL; - RT_ASSERT (device); - resp = at_create_resp (64, 2, rt_tick_from_millisecond (2000)); - if (resp == RT_NULL) { - LOG_E ("no memory for resp create."); - at_delete_resp (resp); + RT_ASSERT(device); + resp = at_create_resp(64, 2, rt_tick_from_millisecond(2000)); + if (resp == RT_NULL) + { + LOG_E("no memory for resp create."); + at_delete_resp(resp); return RT_ERROR; } - if (at_obj_exec_cmd (device->client, resp, "AT+CCLK?") == RT_EOK) { + if (at_obj_exec_cmd(device->client, resp, "AT+CCLK?") == RT_EOK) + { TsRtcDateTime rtc_dt; - ; // 网络时间 + ; // 网络时间 int year, mounth, days, hous, min, sec; /*+CCLK:24/11/12,06:08:19+32*/ - if (at_resp_parse_line_args_by_kw (resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0) { - rtc_dt.year = (2000 + year); - rtc_dt.month = mounth; - rtc_dt.day = days; - rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区 + if (at_resp_parse_line_args_by_kw(resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0) + { + rtc_dt.year = (2000 + year); + rtc_dt.month = mounth; + rtc_dt.day = days; + rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区 rtc_dt.minute = min; rtc_dt.second = sec; - Time_Zone_Conversion (&rtc_dt); // 时区设置 - rtc_dt.week = RTC_GetWeek (rtc_dt.year, rtc_dt.month, rtc_dt.day); - RTC_SetTime (rtc_dt.year, rtc_dt.month, rtc_dt.day, - rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间 - LOG_I ("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", - rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); - at_delete_resp (resp); + Time_Zone_Conversion(&rtc_dt); // 时区设置 + rtc_dt.week = RTC_GetWeek(rtc_dt.year, rtc_dt.month, rtc_dt.day); + RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day, + rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间 + LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", + rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); + at_delete_resp(resp); return RT_EOK; } } - at_delete_resp (resp); + at_delete_resp(resp); return RT_ERROR; } @@ -1297,21 +1441,23 @@ const struct at_device_ops nt26k_device_ops = nt26k_control, }; -int nt26k_device_class_register (void) { +int nt26k_device_class_register(void) +{ struct at_device_class *class = RT_NULL; - class = (struct at_device_class *)rt_calloc (1, sizeof (struct at_device_class)); - if (class == RT_NULL) { - LOG_E ("no memory for device class create."); - rt_free (class); + class = (struct at_device_class *)rt_calloc(1, sizeof(struct at_device_class)); + if (class == RT_NULL) + { + LOG_E("no memory for device class create."); + rt_free(class); return -RT_ENOMEM; } class->device_ops = &nt26k_device_ops; - return at_device_class_register (class, AT_DEVICE_CLASS_NT26K); + return at_device_class_register(class, AT_DEVICE_CLASS_NT26K); } // INIT_DEVICE_EXPORT(nt26k_device_class_register); -#endif //! IOT_MODULE_SWITCH +#endif //! IOT_MODULE_SWITCH -#endif /* AT_DEVICE_USING_NT26K */ +#endif /* AT_DEVICE_USING_NT26K */ diff --git a/bsp/src/bsp_flash.c b/bsp/src/bsp_flash.c index 18ea713..cee68fd 100644 --- a/bsp/src/bsp_flash.c +++ b/bsp/src/bsp_flash.c @@ -277,19 +277,14 @@ int Flash_Set_WorkDuration(rt_uint16_t value) Flash_ErasePage_ReadConfigInfo(page_buf); - *(rt_uint16_t *)(page_buf + in_page_offset) = value; + rt_memcpy(page_buf + in_page_offset, &value, FLASH_WORK_TIME_LEN); return Flash_Write_ConfigInfo(page_buf); } int Flash_Get_Sever_Data(struct flash_sever_info *sever_info) { - rt_uint8_t data[FLASH_SERVER_LEN]; + rt_uint8_t data[FLASH_SERVER_LEN] = {0}; rt_memcpy(data, (rt_uint8_t *)FLASH_SERVER_ADDR_ADDR, FLASH_SERVER_LEN); - if (data == RT_NULL) - { - LOG_E("Flash_Get_Sever_Data failed"); - return -RT_ERROR; - } LOG_D("data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x", 0, data[0], 1, data[1], 2, data[2], 3, data[3], 4, data[4], 5, data[5]); rt_snprintf(sever_info->server_url, sizeof(sever_info->server_url), "%d.%d.%d.%d", data[3], data[2], data[1], data[0]); @@ -584,8 +579,9 @@ void Flash_ErasePage_ConfigInfo(void) void Flash_ErasePage_ReadConfigInfo(rt_uint8_t *page_buf) { Flash_Read(FLASH_CONFIG_INFO_START_ADDR, page_buf, FLASH_PAGE_SIZE); - + rt_thread_mdelay(10); Flash_ErasePage_ConfigInfo(); + rt_thread_mdelay(10); } int Flash_Write_ConfigInfo(rt_uint8_t *page_buf) @@ -839,7 +835,7 @@ int BSP_Flash_Init(void) sci.emagnetic_switch = sys_emagnetic_switch; sci.relay_switch = sys_relay_switch; - Flash_Set_WorkDuration(work_duration); + Flash_Set_WorkDuration(0); LOG_D("work_duration:%d", Flash_Get_WorkDuration()); Convert_To_Hex(&sever_info, sever_data); diff --git a/bsp/src/bsp_h308.c b/bsp/src/bsp_h308.c index a5c39e0..8c2d0c4 100644 --- a/bsp/src/bsp_h308.c +++ b/bsp/src/bsp_h308.c @@ -2,8 +2,8 @@ * @Author: mbw * @Date: 2024-11-14 10:21:04 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-08 11:27:49 - * @FilePath: \JT-DT-YD4N02A_RTT_MRS-4G\bsp\src\bsp_h308.c + * @LastEditTime: 2025-01-09 15:25:27 + * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c * @Description: * * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. @@ -245,7 +245,7 @@ static void h308_thread_entry(void *param) H308_PWR_OFF; rt_thread_mdelay(1000); H308_PWR_ON; - + TuFlashProductTimeLimitFrame LimitTime; if (Flash_GetProductTimeLimit(&LimitTime, kExpirationTimeId) == READY) { @@ -260,11 +260,11 @@ static void h308_thread_entry(void *param) if (Flash_GetNum_Records(kRecordSensoEndOfLife) == 1) { - H308.end_of_life = 1; - LOG_W("寿命已到期"); - TotalRecords.sensor_failure++; + H308.end_of_life = 1; } + //这里应该等下iot模组更新网络,不然可能不准确,但如果从未更新时,截至日期小于1天才会有影响,所以可不等待 + rt_thread_mdelay(5000);//这里等的原因是,等待4G更新网络,其二是传感器需要10s的启动时间 // 寿命到期检测 if (IS_H308_EndOfLife()) { @@ -272,6 +272,7 @@ static void h308_thread_entry(void *param) { Flash_Write_Record(kRecordSensoEndOfLife); } + Send_Laser_Alarm_Event(kSensorFailureEvent); } while (1) { @@ -285,7 +286,7 @@ static void h308_thread_entry(void *param) if (len >= 44) { ret = H308_GetFrameData(str, len, &H308.Data); - // LOG_I("str:[%s]", str); + LOG_I("str:[%s]", str); if (ret == 0) { H308_CheckData(); @@ -301,7 +302,6 @@ static void h308_thread_entry(void *param) LOG_E("(len = %d) < 44, error data:[%s]", len, str); if (h308_err_cnt >= 5) { - // LOG_E("h308_err_cnt:%d", h308_err_cnt); H308_RST_ON; rt_thread_mdelay(100); H308_RST_OFF; @@ -309,7 +309,7 @@ static void h308_thread_entry(void *param) h308_err_cnt = 0; } } - memset(str, 0, len); + rt_memset(str, 0, len); if (h308_rx_timout_cnt) { @@ -386,7 +386,7 @@ int BSP_H308_Init(void) rt_pin_mode(H308_RST_PIN, PIN_MODE_OUTPUT); H308_PWR_OFF; H308_RST_OFF; - // h308_mutex = rt_mutex_create("h308_mutex", RT_IPC_FLAG_PRIO); + uart4_rx_ok_sem = rt_sem_create("uart4_rx", 0, RT_IPC_FLAG_FIFO); if (uart4_rx_ok_sem == RT_NULL) { diff --git a/bsp/src/bsp_nt26k.c b/bsp/src/bsp_nt26k.c index f640043..00ea14b 100644 --- a/bsp/src/bsp_nt26k.c +++ b/bsp/src/bsp_nt26k.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-10-09 08:42:14 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-08 11:31:58 + * @LastEditTime: 2025-01-09 09:39:59 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-4G\bsp\src\bsp_nt26k.c * @Description: * @@ -34,60 +34,62 @@ #include #if IOT_MODULE_SWITCH == 1 -#define NT26K_THREAD_STACK_SIZE (4096) +#define NT26K_THREAD_STACK_SIZE (4096) #define NT26K_RECV_THREAD_STACK_SIZE (4096) -#define NT26K_LIFE_THREAD_STACK_SIZE (1024) -#define NT26K_THREAD_PRIORITY 25 -#define NT26K_THREAD_TICKS 50 -#define NT26K_RECV_THREAD_PRIORITY 24 -#define NT26K_RECV_THREAD_TICKS 10 +#define NT26K_LIFE_THREAD_STACK_SIZE (2048) +#define NT26K_THREAD_PRIORITY 25 +#define NT26K_THREAD_TICKS 50 +#define NT26K_RECV_THREAD_PRIORITY 24 +#define NT26K_RECV_THREAD_TICKS 10 -#define NT26K_LIFE_THREAD_PRIORITY 26 -#define NT26K_LIFE_THREAD_TICKS 10 +#define NT26K_LIFE_THREAD_PRIORITY 26 +#define NT26K_LIFE_THREAD_TICKS 10 // static rt_uint32_t nt26k_status = 0; -ALIGN(RT_ALIGN_SIZE) +ALIGN (RT_ALIGN_SIZE) static char nt26k_thread_stack[NT26K_THREAD_STACK_SIZE]; static struct rt_thread nt26k_thread; -ALIGN(RT_ALIGN_SIZE) +ALIGN (RT_ALIGN_SIZE) static char nt26k_recv_thread_stack[NT26K_RECV_THREAD_STACK_SIZE]; static struct rt_thread nt26k_recv_thread; -ALIGN(RT_ALIGN_SIZE) +ALIGN (RT_ALIGN_SIZE) static char nt26k_life_thread_stack[NT26K_LIFE_THREAD_STACK_SIZE]; static struct rt_thread nt26k_life_thread; struct rt_event at_device_event; rt_sem_t nt26k_recv_sem; rt_sem_t nt26k_disconnect_sem; -static rt_timer_t nt26k_timer; // 上报心跳 -static rt_timer_t nt26k_upload_timer; // 更新本地时间定时器 -static rt_timer_t nt26k_power_error_timer; // 上电失败情况下启动定时器 +static rt_timer_t nt26k_timer; // 上报心跳 +static rt_timer_t nt26k_upload_timer; // 更新本地时间定时器 +static rt_timer_t nt26k_power_error_timer; // 上电失败情况下启动定时器 rt_uint8_t nt26k_conncet_tcp_flag; +rt_uint8_t nt26k_disconnect_pdp_flag; // PDP断开连接标志 + Nt26kEventIndex nt26k_event_index; rt_uint8_t power_on_send_flag = 0; rt_mutex_t nt26k_mutex; -int BSP_Nt26k_Init(struct Nt26k_Ops *ops, rt_uint8_t version); -int BSP_Nt26k_Update(struct Nt26k_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type); -int Nt26k_Send_Data(struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type); -int Data_Resp(struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type, char *data, rt_uint8_t res); -int Nt26k_Recv_Data(struct Nt26k_Ops *ops, char *data); +int BSP_Nt26k_Init (struct Nt26k_Ops *ops, rt_uint8_t version); +int BSP_Nt26k_Update (struct Nt26k_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type); +int Nt26k_Send_Data (struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type); +int Data_Resp (struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type, char *data, rt_uint8_t res); +int Nt26k_Recv_Data (struct Nt26k_Ops *ops, char *data); static struct DataBody body; static struct Nt26kDataFrame frame; static struct Nt26kRecvData nt26k_recv; struct Nt26k_Ops nt26k_ops = { - .body = &body, - .frame = &frame, - .recv = &nt26k_recv, - .init = BSP_Nt26k_Init, + .body = &body, + .frame = &frame, + .recv = &nt26k_recv, + .init = BSP_Nt26k_Init, .update_data = BSP_Nt26k_Update, - .send = Nt26k_Send_Data, - .Resp = Data_Resp, + .send = Nt26k_Send_Data, + .Resp = Data_Resp, // .Recv = Nt26k_Recv_Data,//,没用到 }; @@ -104,15 +106,15 @@ static struct at_device_nt26k _dev = }; static rt_uint32_t nt26k_event_flags[kNt26kMaxEventcnt] = {0}; -static rt_bool_t nt26k_event_initialized = RT_FALSE; // 是否初始化完成 +static rt_bool_t nt26k_event_initialized = RT_FALSE; // 是否初始化完成 typedef enum { - NT26K_PRIORITY_LOWEST, // 4、优先级最低(定时心跳、浓度异常、报警触发、报警解除、传感器故障触发 传感器故障解除) - NT26K_PRIORITY_MEDIUM, // 2、优先级第三高 自检触发 - NT26K_PRIORITY_HIGH, // 1、优先级第二高 掉电 - NT26K_PRIORITY_HIGHEST, // 0 优先级最高(设备上电时的定时心跳) + NT26K_PRIORITY_LOWEST, // 4、优先级最低(定时心跳、浓度异常、报警触发、报警解除、传感器故障触发 传感器故障解除) + NT26K_PRIORITY_MEDIUM, // 2、优先级第三高 自检触发 + NT26K_PRIORITY_HIGH, // 1、优先级第二高 掉电 + NT26K_PRIORITY_HIGHEST, // 0 优先级最高(设备上电时的定时心跳) } Nt26kPriority; typedef struct @@ -120,10 +122,10 @@ typedef struct Nt26kEvent event_flag; Nt26kPriority priority; const char *event_name; - int (*send_func)(struct at_device *device, void *param); + int (*send_func) (struct at_device *device, void *param); } Nt26kEventInfo; -static void Nt26k_Set_Event(Nt26kEvent event_type) +static void Nt26k_Set_Event (Nt26kEvent event_type) { if (event_type < kNt26kMaxEventcnt) { @@ -131,24 +133,24 @@ static void Nt26k_Set_Event(Nt26kEvent event_type) } } -void Nt26k_Event_Init(void) +void Nt26k_Event_Init (void) { - rt_err_t ret = rt_event_init(&at_device_event, "nt26k_event", RT_IPC_FLAG_PRIO); + rt_err_t ret = rt_event_init (&at_device_event, "nt26k_event", RT_IPC_FLAG_PRIO); if (ret == RT_EOK) { nt26k_event_initialized = RT_TRUE; for (Nt26kEvent event = kNt26kHeartbeatEvent; event < kNt26kMaxEventcnt; event++) { - Nt26k_Set_Event(event); + Nt26k_Set_Event (event); } } else { - LOG_E("nt26k_event init failed!"); + LOG_E ("nt26k_event init failed!"); } } -rt_uint32_t Nt26k_Get_Event_Flag(Nt26kEvent event_type) +rt_uint32_t Nt26k_Get_Event_Flag (Nt26kEvent event_type) { if (event_type < kNt26kMaxEventcnt) { @@ -157,70 +159,69 @@ rt_uint32_t Nt26k_Get_Event_Flag(Nt26kEvent event_type) return 0; } -void Nt26k_Send_Event(Nt26kEvent event_type) +void Nt26k_Send_Event (Nt26kEvent event_type) { - LOG_D("Send_Nt26k_Event = %d", event_type); - nt26k_event_index.last_event = nt26k_event_index.current_event; + LOG_D ("Send_Nt26k_Event = %d", event_type); + nt26k_event_index.last_event = nt26k_event_index.current_event; nt26k_event_index.current_event = event_type; if (nt26k_event_initialized == RT_TRUE) { - rt_event_send(&at_device_event, Nt26k_Get_Event_Flag(event_type)); + rt_event_send (&at_device_event, Nt26k_Get_Event_Flag (event_type)); } else { - LOG_E("nt26k_event_initialized is false"); + LOG_E ("nt26k_event_initialized is false"); } } // 定义定时器回调函数 -static void Nt26k_Ht_Timer_Cb(void *parameter) +static void Nt26k_Ht_Timer_Cb (void *parameter) { - Nt26k_Send_Event(kNt26kHeartbeatEvent); + Nt26k_Send_Event (kNt26kHeartbeatEvent); } - // 定时器回调函数,当1分钟内没有数据交互时,关闭tcp连接 -static void Nt26k_Error_Timer_Cb(void *parameter) +static void Nt26k_Error_Timer_Cb (void *parameter) { - if (power_on_send_flag) // 上电成功时,停止定时器 + if (power_on_send_flag) // 上电成功时,停止定时器 { - rt_timer_stop(nt26k_power_error_timer); + rt_timer_stop (nt26k_power_error_timer); } else { - Nt26k_Send_Event(kNt26kPowerOnEvent); + Nt26k_Send_Event (kNt26kPowerOnEvent); } } -int _Pack_Send(struct Nt26k_Ops *ops, char *buf) +int _Pack_Send (struct Nt26k_Ops *ops, char *buf) { - char nt26k_send_buf[512] = {0}; // 发送缓冲区,用于存储最终发送的数据 - // char byteArr1[512]; // 转换成字节值 - unsigned short crc16 = 0; // 存储CRC16校验和 + char nt26k_send_buf[512] = {0}; // 发送缓冲区,用于存储最终发送的数据 + // char byteArr1[512]; // 转换成字节值 + unsigned short crc16 = 0; // 存储CRC16校验和 - struct at_device *device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, NT26K_SAMPLE_DEIVCE_NAME); - ASSERT(device); - crc16 = crc1021(buf, rt_strlen(buf)); - LOG_D("buf: %s", buf); - LOG_D("crc16: %X", crc16); + struct at_device *device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, NT26K_SAMPLE_DEIVCE_NAME); + ASSERT (device); + crc16 = crc1021 (buf, rt_strlen (buf)); + LOG_D ("buf: %s", buf); + LOG_D ("crc16: %X", crc16); // 将数据、校验和及尾部标识添加到发送缓冲区中 - if (rt_snprintf(nt26k_send_buf, sizeof(nt26k_send_buf), - "%s%04X%02X%02X%02X", - buf, - crc16, - ops->frame->tail[0], - ops->frame->tail[1], - ops->frame->tail[2]) >= sizeof(nt26k_send_buf)) + if (rt_snprintf (nt26k_send_buf, sizeof (nt26k_send_buf), + "%s%04X%02X%02X%02X", + buf, + crc16, + ops->frame->tail[0], + ops->frame->tail[1], + ops->frame->tail[2]) >= sizeof (nt26k_send_buf)) { // 发生缓冲区溢出 - LOG_E("Buffer overflow in nt26k_send_buf"); + LOG_E ("Buffer overflow in nt26k_send_buf"); return -RT_ERROR; } // 打印调试信息 // LOG_D("nt26k_send_buf: %s", nt26k_send_buf); - rt_uint16_t data_len = rt_strlen(nt26k_send_buf); + rt_uint16_t data_len = rt_strlen (nt26k_send_buf); // 通过AT指令发送数据给NT26K模块 - if (at_send_data(device, nt26k_send_buf, data_len / 2) != RT_EOK) + if (at_send_data (device, nt26k_send_buf, data_len / 2) != RT_EOK) { return -RT_ERROR; } @@ -240,50 +241,50 @@ int _Pack_Send(struct Nt26k_Ops *ops, char *buf) * @param cmd_num 命令编号 * @return int 返回0表示成功,非零表示失败 */ -static int _Send_Handle(struct Nt26k_Ops *ops, rt_size_t data_num, rt_size_t cmd_num, const char *data) +static int _Send_Handle (struct Nt26k_Ops *ops, rt_size_t data_num, rt_size_t cmd_num, const char *data) { // 临时缓冲区,用于格式化数据 char data_buf[512] = {0}; - rt_size_t data_len = rt_strlen(data); + rt_size_t data_len = rt_strlen (data); // 格式化数据,构建发送给NT26K模块的数据包 - rt_int32_t len = rt_snprintf(data_buf, sizeof(data_buf), - "%02X%02X%02X%02X%04X%04X%02X%04X%s", - ops->frame->header[0], - ops->frame->header[1], - ops->frame->header[2], - ops->frame->version, // 协议版本 - ops->frame->manufacture, // 制造商ID - data_num, - cmd_num, - data_len / 2, - data); - if (len < 0 || len >= sizeof(data_buf)) + rt_int32_t len = rt_snprintf (data_buf, sizeof (data_buf), + "%02X%02X%02X%02X%04X%04X%02X%04X%s", + ops->frame->header[0], + ops->frame->header[1], + ops->frame->header[2], + ops->frame->version, // 协议版本 + ops->frame->manufacture, // 制造商ID + data_num, + cmd_num, + data_len / 2, + data); + if (len < 0 || len >= sizeof (data_buf)) { - LOG_E("Send Data buffer overflow"); + LOG_E ("Send Data buffer overflow"); return -RT_ERROR; } // LOG_D("data_buf: %s", data_buf); - return _Pack_Send(ops, data_buf); + return _Pack_Send (ops, data_buf); } // 初始化函数 -int BSP_Nt26k_Init(struct Nt26k_Ops *ops, rt_uint8_t version) +int BSP_Nt26k_Init (struct Nt26k_Ops *ops, rt_uint8_t version) { if (ops->frame == RT_NULL) { - LOG_E("Memory allocation failed"); + LOG_E ("Memory allocation failed"); return -RT_ENOMEM; } - rt_memset(ops->frame, 0, sizeof(struct Nt26kDataFrame)); + rt_memset (ops->frame, 0, sizeof (struct Nt26kDataFrame)); ops->frame->header[0] = 0x4A; ops->frame->header[1] = 0x54; ops->frame->header[2] = 0x34; - ops->frame->version = version; + ops->frame->version = version; ops->frame->manufacture = DEVICE_MANUFACTURE; ops->frame->tail[0] = 0x42; @@ -292,82 +293,83 @@ int BSP_Nt26k_Init(struct Nt26k_Ops *ops, rt_uint8_t version) return RT_EOK; } + // 更新函数 -int BSP_Nt26k_Update(struct Nt26k_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type) +int BSP_Nt26k_Update (struct Nt26k_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type) { ops->body->device_type = device_type; - ops->body->event_type = event_type; - ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg(kHwVerId); - ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg(kSwVerId); - rt_memcpy(ops->body->imei, &nt26k, sizeof(nt26k_sys_info)); // 直接赋值结构体数据 - rt_memcpy(&(ops->body->lel), &H308.Data, (rt_ubase_t)offsetof(TsH308Data, checksum)); // 复制除了校验码以外的数据 - ops->body->product_work_temperature = ops->body->temp; // 暂时定为激光器测量的环境温度 - ops->body->work_duration = work_duration; - ops->body->device_status = device_state_flag; - ops->body->emv_status = emv_state_flag; - ops->body->relay_status = relay_state_flag; + ops->body->event_type = event_type; + ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg (kHwVerId); + ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg (kSwVerId); + rt_memcpy (ops->body->imei, &nt26k, sizeof (nt26k_sys_info)); // 直接赋值结构体数据 + rt_memcpy (&(ops->body->lel), &H308.Data, (rt_ubase_t)offsetof (TsH308Data, checksum)); // 复制除了校验码以外的数据 + ops->body->product_work_temperature = ops->body->temp; // 暂时定为激光器测量的环境温度 + ops->body->work_duration = work_duration; + ops->body->device_status = device_state_flag; + ops->body->emv_status = emv_state_flag; + ops->body->relay_status = relay_state_flag; return RT_EOK; } -int Nt26k_Send_Data(struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type) +int Nt26k_Send_Data (struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type) { - int ret = 0; + int ret = 0; char data_buf[512] = {0}; - char temp[3]; // 临时缓冲区,用于存储每个字节的十六进制表示 + char temp[3]; // 临时缓冲区,用于存储每个字节的十六进制表示 if (ops == NULL || ops->body == NULL) { // 处理 ops 或 ops->body 为 NULL 的情况 - return RT_ERROR; // 或者抛出异常,返回错误码等 + return RT_ERROR; // 或者抛出异常,返回错误码等 } - if (sizeof(struct DataBody) == 0) + if (sizeof (struct DataBody) == 0) { - data_buf[0] = '\0'; // 确保 data_buf 被正确初始化 + data_buf[0] = '\0'; // 确保 data_buf 被正确初始化 return RT_ERROR; } - rt_memset(ops->body, 0, sizeof(struct DataBody)); - rt_mutex_take(nt26k_mutex, RT_WAITING_FOREVER); - ret = nt26k_ops.update_data(ops, device_type, event_type); + rt_memset (ops->body, 0, sizeof (struct DataBody)); + rt_mutex_take (nt26k_mutex, RT_WAITING_FOREVER); + ret = nt26k_ops.update_data (ops, device_type, event_type); if (ret == RT_EOK) { - for (int i = 0; i < sizeof(struct DataBody); i++) + for (int i = 0; i < sizeof (struct DataBody); i++) { - rt_snprintf(temp, sizeof(temp), "%02X", ((rt_uint8_t *)ops->body)[i]); - rt_memcpy(data_buf + i * 2, temp, 2); + rt_snprintf (temp, sizeof (temp), "%02X", ((rt_uint8_t *)ops->body)[i]); + rt_memcpy (data_buf + i * 2, temp, 2); } - ret = _Send_Handle(ops, data_num, cmd, data_buf); + ret = _Send_Handle (ops, data_num, cmd, data_buf); if (ret != RT_EOK) { ret = -ret; } } - rt_mutex_release(nt26k_mutex); + rt_mutex_release (nt26k_mutex); return ret; } -int Data_Resp(struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type, char *data, rt_uint8_t res) +int Data_Resp (struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type, char *data, rt_uint8_t res) { if (nt26k_conncet_tcp_flag != 1) { - LOG_E("nt26k_conncet_tcp_flag error"); + LOG_E ("nt26k_conncet_tcp_flag error"); return -RT_ERROR; } char data_buf[512] = {0}; - rt_int32_t len = rt_snprintf(data_buf, sizeof(data_buf), "%02X%02X%30s%02X", device_type, event_type, data, res); - if (len < 0 || len >= sizeof(data_buf)) + rt_int32_t len = rt_snprintf (data_buf, sizeof (data_buf), "%02X%02X%30s%02X", device_type, event_type, data, res); + if (len < 0 || len >= sizeof (data_buf)) { - LOG_E("Resp Data buffer overflow"); + LOG_E ("Resp Data buffer overflow"); return -RT_ERROR; } // LOG_D("data_buf: %s", data_buf); - return _Send_Handle(ops, data_num, cmd, data_buf); + return _Send_Handle (ops, data_num, cmd, data_buf); } -int Nt26k_Recv_Data(struct Nt26k_Ops *ops, char *data) +int Nt26k_Recv_Data (struct Nt26k_Ops *ops, char *data) { // ops->body = (struct DataBody *)rt_malloc(sizeof(struct DataBody)); // rt_memset(ops->body, 0, sizeof(struct DataBody)); @@ -382,27 +384,27 @@ int Nt26k_Recv_Data(struct Nt26k_Ops *ops, char *data) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Heartbeat(struct at_device *device, void *param) +int Nt26k_Send_Heartbeat (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; - int ret = 0; + int ret = 0; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - ret = device->class->device_ops->control(device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL); + ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL); if (ret != RT_EOK) { - LOG_E("nt26k get signal failed\n"); + LOG_E ("nt26k get signal failed\n"); return -RT_ERROR; } - ret = nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_DATA_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_HEARTBEAT); + ret = nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_DATA_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_HEARTBEAT); if (ret != RT_EOK) { - LOG_E("nt26k send data failed\n"); + LOG_E ("nt26k send data failed\n"); return ret; } @@ -415,18 +417,18 @@ int Nt26k_Send_Heartbeat(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Time_Calibration(struct at_device *device, void *param) +int Nt26k_Send_Time_Calibration (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_TIME_CALIBRATION, DEVICE_TYPE_NT26K, EVENT_TYPE_TIME_CALIBRATION)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_TIME_CALIBRATION, DEVICE_TYPE_NT26K, EVENT_TYPE_TIME_CALIBRATION)) { - LOG_E("nt26k send cmd[%X] failed\n", CMD_TYPE_TIME_CALIBRATION); + LOG_E ("nt26k send cmd[%X] failed\n", CMD_TYPE_TIME_CALIBRATION); return -RT_ERROR; } return RT_EOK; @@ -438,18 +440,18 @@ int Nt26k_Send_Time_Calibration(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Alarm(struct at_device *device, void *param) +int Nt26k_Send_Alarm (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_ALARM)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_ALARM)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_ALARM); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_ALARM); return -RT_ERROR; } return RT_EOK; @@ -461,18 +463,18 @@ int Nt26k_Send_Alarm(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Alarm_Recover(struct at_device *device, void *param) +int Nt26k_Send_Alarm_Recover (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_ALARM_RECOVER)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_ALARM_RECOVER)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_ALARM_RECOVER); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_ALARM_RECOVER); return -RT_ERROR; } return RT_EOK; @@ -484,18 +486,18 @@ int Nt26k_Send_Alarm_Recover(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Fault(struct at_device *device, void *param) +int Nt26k_Send_Fault (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_FAULT)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_FAULT)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_FAULT); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_FAULT); return -RT_ERROR; } return RT_EOK; @@ -507,18 +509,18 @@ int Nt26k_Send_Fault(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Fault_Recover(struct at_device *device, void *param) +int Nt26k_Send_Fault_Recover (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_FAULT_RECOVER)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_FAULT_RECOVER)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_FAULT_RECOVER); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_FAULT_RECOVER); return -RT_ERROR; } return RT_EOK; @@ -530,18 +532,18 @@ int Nt26k_Send_Fault_Recover(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Self_Check(struct at_device *device, void *param) +int Nt26k_Send_Self_Check (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_SELF_CHECK)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_SELF_CHECK)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_SELF_CHECK); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_SELF_CHECK); return -RT_ERROR; } return RT_EOK; @@ -553,18 +555,18 @@ int Nt26k_Send_Self_Check(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Silence(struct at_device *device, void *param) +int Nt26k_Send_Silence (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_SILENCE)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_SILENCE)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_SILENCE); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_SILENCE); return -RT_ERROR; } return RT_EOK; @@ -576,18 +578,18 @@ int Nt26k_Send_Silence(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Exception(struct at_device *device, void *param) +int Nt26k_Send_Exception (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_EXCEPTION)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_EXCEPTION)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_EXCEPTION); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_EXCEPTION); return -RT_ERROR; } return RT_EOK; @@ -599,18 +601,18 @@ int Nt26k_Send_Exception(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Valve_Status(struct at_device *device, void *param) +int Nt26k_Send_Valve_Status (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_VALVE_STATUS)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_VALVE_STATUS)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_VALVE_STATUS); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_VALVE_STATUS); return -RT_ERROR; } return RT_EOK; @@ -622,18 +624,18 @@ int Nt26k_Send_Valve_Status(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Fan_Status(struct at_device *device, void *param) +int Nt26k_Send_Fan_Status (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_FAN_STATUS)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_FAN_STATUS)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_FAN_STATUS); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_FAN_STATUS); return -RT_ERROR; } return RT_EOK; @@ -645,18 +647,18 @@ int Nt26k_Send_Fan_Status(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Temp_Anomaly(struct at_device *device, void *param) +int Nt26k_Send_Temp_Anomaly (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_TEMP_ANOMALY)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_TEMP_ANOMALY)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_TEMP_ANOMALY); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_TEMP_ANOMALY); return -RT_ERROR; } return RT_EOK; @@ -668,18 +670,18 @@ int Nt26k_Send_Temp_Anomaly(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Power_Off(struct at_device *device, void *param) +int Nt26k_Send_Power_Off (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_POWER_OFF)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_POWER_OFF)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_POWER_OFF); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_POWER_OFF); return -RT_ERROR; } return RT_EOK; @@ -691,18 +693,18 @@ int Nt26k_Send_Power_Off(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Power_On(struct at_device *device, void *param) +int Nt26k_Send_Power_On (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_POWER_ON)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_POWER_ON)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_POWER_ON); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_POWER_ON); return -RT_ERROR; } return RT_EOK; @@ -714,55 +716,57 @@ int Nt26k_Send_Power_On(struct at_device *device, void *param) * @param param 操作结构体指针 * @return 操作结果 */ -int Nt26k_Send_Device_Failure(struct at_device *device, void *param) +int Nt26k_Send_Device_Failure (struct at_device *device, void *param) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; if ((device == RT_NULL) || (nt26k_ops == RT_NULL)) { - LOG_E("nt26k param error\n"); + LOG_E ("nt26k param error\n"); return RT_ERROR; } - if (nt26k_ops->send(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_DEVICE_FAILURE)) + if (nt26k_ops->send (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_NT26K, EVENT_TYPE_DEVICE_FAILURE)) { - LOG_E("nt26k send cmd[%X] failed\n", EVENT_TYPE_DEVICE_FAILURE); + LOG_E ("nt26k send cmd[%X] failed\n", EVENT_TYPE_DEVICE_FAILURE); return -RT_ERROR; } return RT_EOK; } + /*这个【4、优先级最低当同时触发后,相同服务直接合并】暂时还没想好怎么做, 思路感觉就是得重新开一个线程,然后再开一个任务队列,将所有的事件,发送到任务队列 在线程中,对任务队列进行查看并处理,看目前都有哪些事件,是处于那个优先级得,如果是最低优先级,就只发送一帧数据就行了, 如果是不同优先级,按照优先级顺序发送事件,但感觉这样会使得程序更复杂,本来发送就很快,感觉没必要这样搞*/ const Nt26kEventInfo nt26k_event_info[] = { - {kNt26kPowerOnEvent, NT26K_PRIORITY_HIGHEST, "上电心跳事件", Nt26k_Send_Power_On}, - {kNt26kPowerDownEvent, NT26K_PRIORITY_HIGH, "掉电事件", Nt26k_Send_Power_Off}, - {kNt26kSelfCheckEvent, NT26K_PRIORITY_MEDIUM, "自检事件", Nt26k_Send_Self_Check}, - {kNt26kHeartbeatEvent, NT26K_PRIORITY_LOWEST, "定时心跳事件", Nt26k_Send_Heartbeat}, - {kNt26kTempAnomalyEvent, NT26K_PRIORITY_LOWEST, "温度异常事件", Nt26k_Send_Temp_Anomaly}, - {kNt26kAlarmEvent, NT26K_PRIORITY_LOWEST, "报警触发事件", Nt26k_Send_Alarm}, - {kNt26kAlarmRcyEvent, NT26K_PRIORITY_LOWEST, "报警解除事件", Nt26k_Send_Alarm_Recover}, - {kNt26kFaultEvent, NT26K_PRIORITY_LOWEST, "传感器故障事件", Nt26k_Send_Fault}, - {kNt26kFaultRcyEvent, NT26K_PRIORITY_LOWEST, "传感器故障解除事件", Nt26k_Send_Fault_Recover}, - {kNt26kTimeCalibrationEvent, NT26K_PRIORITY_LOWEST, "时间校准事件", Nt26k_Send_Time_Calibration}, - {kNt26kSilenceEvent, NT26K_PRIORITY_LOWEST, "消音事件", Nt26k_Send_Silence}, - {kNt26kExceptionEvent, NT26K_PRIORITY_LOWEST, "异常事件", Nt26k_Send_Exception}, - {kNt26kValveStatusEvent, NT26K_PRIORITY_LOWEST, "电磁阀状态改变事件", Nt26k_Send_Valve_Status}, - {kNt26kFanStatusEvent, NT26K_PRIORITY_LOWEST, "风机状态改变事件", Nt26k_Send_Fan_Status}, - {kNt26kDeviceFailureEvent, NT26K_PRIORITY_LOWEST, "设备失效事件", Nt26k_Send_Device_Failure}}; + {kNt26kPowerOnEvent, NT26K_PRIORITY_HIGHEST, "上电心跳事件", Nt26k_Send_Power_On }, + {kNt26kPowerDownEvent, NT26K_PRIORITY_HIGH, "掉电事件", Nt26k_Send_Power_Off }, + {kNt26kSelfCheckEvent, NT26K_PRIORITY_MEDIUM, "自检事件", Nt26k_Send_Self_Check }, + {kNt26kHeartbeatEvent, NT26K_PRIORITY_LOWEST, "定时心跳事件", Nt26k_Send_Heartbeat }, + {kNt26kTempAnomalyEvent, NT26K_PRIORITY_LOWEST, "温度异常事件", Nt26k_Send_Temp_Anomaly }, + {kNt26kAlarmEvent, NT26K_PRIORITY_LOWEST, "报警触发事件", Nt26k_Send_Alarm }, + {kNt26kAlarmRcyEvent, NT26K_PRIORITY_LOWEST, "报警解除事件", Nt26k_Send_Alarm_Recover }, + {kNt26kFaultEvent, NT26K_PRIORITY_LOWEST, "传感器故障事件", Nt26k_Send_Fault }, + {kNt26kFaultRcyEvent, NT26K_PRIORITY_LOWEST, "传感器故障解除事件", Nt26k_Send_Fault_Recover }, + {kNt26kTimeCalibrationEvent, NT26K_PRIORITY_LOWEST, "时间校准事件", Nt26k_Send_Time_Calibration}, + {kNt26kSilenceEvent, NT26K_PRIORITY_LOWEST, "消音事件", Nt26k_Send_Silence }, + {kNt26kExceptionEvent, NT26K_PRIORITY_LOWEST, "异常事件", Nt26k_Send_Exception }, + {kNt26kValveStatusEvent, NT26K_PRIORITY_LOWEST, "电磁阀状态改变事件", Nt26k_Send_Valve_Status }, + {kNt26kFanStatusEvent, NT26K_PRIORITY_LOWEST, "风机状态改变事件", Nt26k_Send_Fan_Status }, + {kNt26kDeviceFailureEvent, NT26K_PRIORITY_LOWEST, "设备失效事件", Nt26k_Send_Device_Failure } +}; /** * 处理NT26K设备的事件 * @param nt26k_recv_event 接收到的NT26K事件标志 * @return */ -int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, void *param) +int Nt26k_Process_Events (Nt26kEvent nt26k_recv_event, struct at_device *device, void *param) { - rt_uint8_t max_retry_count = (rt_uint8_t)Flash_Get_SysCfg(kIotRetryId); - struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; + rt_uint8_t max_retry_count = (rt_uint8_t)Flash_Get_SysCfg (kIotRetryId); + struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; const Nt26kEventInfo *event = RT_NULL; - for (size_t i = 0; i < sizeof(nt26k_event_info) / sizeof(Nt26kEventInfo); ++i) + for (size_t i = 0; i < sizeof (nt26k_event_info) / sizeof (Nt26kEventInfo); ++i) { // 检查当前事件是否在接收到的事件标志中 if (nt26k_recv_event == nt26k_event_info[i].event_flag) @@ -772,34 +776,34 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, } } - if (event) // 处理该事件 + if (event) // 处理该事件 { // 打印事件的名称 - LOG_D("%s上报\n", event->event_name); + LOG_D ("%s上报\n", event->event_name); for (size_t i = 0; i < max_retry_count; i++) { if (nt26k_conncet_tcp_flag) { // 如果事件有关联的发送函数,则调用该发送函数 - rt_thread_mdelay(IMEI_Delay()); + rt_thread_mdelay (IMEI_Delay()); if (event->send_func) { - RTC_ShowTime();//每次发送打印下时间,容易定位问题 - int result = event->send_func(device, nt26k_ops); + RTC_ShowTime(); // 每次发送打印下时间,容易定位问题 + int result = event->send_func (device, nt26k_ops); if (result != RT_EOK) { - LOG_E("nt26k send cmd failed\n"); + LOG_E ("nt26k send cmd failed\n"); } else - return RT_EOK; // 函数执行完毕,返回0 + return RT_EOK; // 函数执行完毕,返回0 } } else { - LOG_D("断网\n"); - rt_sem_release(nt26k_disconnect_sem); + LOG_D ("断网\n"); + rt_sem_release (nt26k_disconnect_sem); } - rt_thread_mdelay(5000); + rt_thread_mdelay (5000); } } // 函数执行完毕,返回0 @@ -807,14 +811,14 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, } // 比较帧头和帧尾 -int Compare_HeaderToTail(struct Nt26k_Ops *ops) +int Compare_HeaderToTail (struct Nt26k_Ops *ops) { // 比较帧头 for (int i = 0; i < 3; i++) { if (ops->frame->header[i] != ops->recv->header[i]) { - LOG_E("ops->frame->header[%x] != ops->recv->header[%x]\n", ops->frame->header[i], ops->recv->header[i]); + LOG_E ("ops->frame->header[%x] != ops->recv->header[%x]\n", ops->frame->header[i], ops->recv->header[i]); return -1; } @@ -825,72 +829,72 @@ int Compare_HeaderToTail(struct Nt26k_Ops *ops) { if (ops->frame->tail[i] != ops->recv->tail[i]) { - LOG_E("ops->frame->tail[%x] != ops->recv->tail[%x]\n", ops->frame->tail[i], ops->recv->tail[i]); + LOG_E ("ops->frame->tail[%x] != ops->recv->tail[%x]\n", ops->frame->tail[i], ops->recv->tail[i]); return -2; } } - if (ops->recv->recv_data.res_num != RESPONSE_CODE_SUCCESS) // 判断是否为成功响应 + if (ops->recv->recv_data.res_num != RESPONSE_CODE_SUCCESS) // 判断是否为成功响应 { - LOG_E("ops->recv->recv_data.res_num[%x] != RESPONSE_CODE_SUCCESS\n", ops->recv->recv_data.res_num); + LOG_E ("ops->recv->recv_data.res_num[%x] != RESPONSE_CODE_SUCCESS\n", ops->recv->recv_data.res_num); return -3; } return RT_EOK; } -void Handle_Server_Reply(struct Nt26k_Ops *ops) +void Handle_Server_Reply (struct Nt26k_Ops *ops) { - if ((ops->recv->recv_data.event_type == INSTRUCTION_HEART_BEAT)|| (ops->recv->recv_data.event_type == EVENT_TYPE_POWER_ON)) + if ((ops->recv->recv_data.event_type == INSTRUCTION_HEART_BEAT) || (ops->recv->recv_data.event_type == EVENT_TYPE_POWER_ON)) { - LOG_D("nt26k send data success\n"); + LOG_D ("nt26k send data success\n"); } } -void Handle_Self_Check(struct Nt26k_Ops *ops) +void Handle_Self_Check (struct Nt26k_Ops *ops) { - LOG_D("服务器下发自检指令\n"); + LOG_D ("服务器下发自检指令\n"); char imei[16] = {0}; - Get_IotImei(imei, FLASH_NB_IMEI_LEN); - LOG_D("imei:%s\n", imei); + Get_IotImei (imei, FLASH_NB_IMEI_LEN); + LOG_D ("imei:%s\n", imei); char temp[32] = "0"; - String2Hex(temp, imei); // 将字符串转为十六进制字符串 - LOG_D("temp: %s", temp); - Send_Laser_Alarm_Event(kSelfCheckEvent); - rt_thread_mdelay(100); - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_SELF_CHECK, temp, RESPONSE_CODE_SUCCESS); + String2Hex (temp, imei); // 将字符串转为十六进制字符串 + LOG_D ("temp: %s", temp); + Send_Laser_Alarm_Event (kSelfCheckEvent); + rt_thread_mdelay (100); + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_SELF_CHECK, temp, RESPONSE_CODE_SUCCESS); } -void Handle_Mute(struct Nt26k_Ops *ops) +void Handle_Mute (struct Nt26k_Ops *ops) { - LOG_D("服务器下发消音指令\n"); + LOG_D ("服务器下发消音指令\n"); char imei[16] = {0}; - Get_IotImei(imei, FLASH_NB_IMEI_LEN); + Get_IotImei (imei, FLASH_NB_IMEI_LEN); char temp[32] = "0"; - String2Hex(temp, imei); // 将字符串转为十六进制字符串 + String2Hex (temp, imei); // 将字符串转为十六进制字符串 - Send_Laser_Alarm_Event(KMuteEvent); - rt_thread_mdelay(100); - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_MUTE, temp, RESPONSE_CODE_SUCCESS); + Send_Laser_Alarm_Event (KMuteEvent); + rt_thread_mdelay (100); + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_MUTE, temp, RESPONSE_CODE_SUCCESS); } -void Handle_Close_Valve(struct Nt26k_Ops *ops) +void Handle_Close_Valve (struct Nt26k_Ops *ops) { - LOG_D("服务器下发关闭阀门指令\n"); + LOG_D ("服务器下发关闭阀门指令\n"); char imei[16] = {0}; - Get_IotImei(imei, FLASH_NB_IMEI_LEN); + Get_IotImei (imei, FLASH_NB_IMEI_LEN); char temp[32] = "0"; - String2Hex(temp, imei); // 将字符串转为十六进制字符串 + String2Hex (temp, imei); // 将字符串转为十六进制字符串 EMV_CLOSE_VALVE; - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_SUCCESS); + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_SUCCESS); } -void Handle_Open_Valve(struct Nt26k_Ops *ops) +void Handle_Open_Valve (struct Nt26k_Ops *ops) { - LOG_D("服务器下发打开阀门指令\n"); + LOG_D ("服务器下发打开阀门指令\n"); // char imei[16] = {0}; // Get_IotImei(imei, FLASH_NB_IMEI_LEN); @@ -905,275 +909,275 @@ void Handle_Open_Valve(struct Nt26k_Ops *ops) // ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_OPEN_VALVE, temp, RESPONSE_CODE_SUCCESS); } -void Handle_Open_Relay(struct Nt26k_Ops *ops) +void Handle_Open_Relay (struct Nt26k_Ops *ops) { - LOG_D("服务器下发打开继电器指令\n"); + LOG_D ("服务器下发打开继电器指令\n"); char imei[16] = {0}; - Get_IotImei(imei, FLASH_NB_IMEI_LEN); + Get_IotImei (imei, FLASH_NB_IMEI_LEN); char temp[32] = "0"; - String2Hex(temp, imei); // 将字符串转为十六进制字符串 + String2Hex (temp, imei); // 将字符串转为十六进制字符串 relay_state_flag = 1; - rt_thread_mdelay(10); + rt_thread_mdelay (10); // rt_uint8_t ret = BSP_Set_Relay_Status(0); - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_OPEN_RELAY, temp, RESPONSE_CODE_SUCCESS); + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_OPEN_RELAY, temp, RESPONSE_CODE_SUCCESS); } -void Handle_Close_Relay(struct Nt26k_Ops *ops) +void Handle_Close_Relay (struct Nt26k_Ops *ops) { - LOG_D("服务器下发关闭继电器指令\n"); + LOG_D ("服务器下发关闭继电器指令\n"); char imei[16] = {0}; char temp[32] = "0"; - Get_IotImei(imei, FLASH_NB_IMEI_LEN); - String2Hex(temp, imei); // 将字符串转为十六进制字符串 + Get_IotImei (imei, FLASH_NB_IMEI_LEN); + String2Hex (temp, imei); // 将字符串转为十六进制字符串 relay_state_flag = 0; - rt_thread_mdelay(100); - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CLOSE_RELAY, temp, RESPONSE_CODE_SUCCESS); + rt_thread_mdelay (100); + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CLOSE_RELAY, temp, RESPONSE_CODE_SUCCESS); } -void Handle_Query_Params(struct Nt26k_Ops *ops) +void Handle_Query_Params (struct Nt26k_Ops *ops) { rt_uint8_t data[10] = {0}; - char str[64] = {0}; - LOG_D("服务器下发查询系统参数\n"); + char str[64] = {0}; + LOG_D ("服务器下发查询系统参数\n"); - rt_memcpy(data, (rt_uint8_t *)FLASH_HW_VER_ADDR, sizeof(sys_config_info) - 50); - LOG_D("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x iot_upload_cycle:%dmin retry:%02x emagnetic:%02X relay_switch:%02X\n", - data[0], data[1], data[2], data[3], data[4], ((data[5]) | (data[6] << 8)), data[7], data[8], data[9]); + rt_memcpy (data, (rt_uint8_t *)FLASH_HW_VER_ADDR, sizeof (sys_config_info) - 50); + LOG_D ("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x iot_upload_cycle:%dmin retry:%02x emagnetic:%02X relay_switch:%02X\n", + data[0], data[1], data[2], data[3], data[4], ((data[5]) | (data[6] << 8)), data[7], data[8], data[9]); - rt_sprintf(str, "0000000000%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", - data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9]); - rt_thread_mdelay(100); // 释放下线程 - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_QUERY_PARAMS, str, RESPONSE_CODE_SUCCESS); + rt_sprintf (str, "0000000000%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", + data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9]); + rt_thread_mdelay (100); // 释放下线程 + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_QUERY_PARAMS, str, RESPONSE_CODE_SUCCESS); } -int Handle_Config_Params(struct Nt26k_Ops *ops) +int Handle_Config_Params (struct Nt26k_Ops *ops) { - char data_buf[32] = {0}; - rt_uint8_t recv_data[16] = {0}; + char data_buf[32] = {0}; + rt_uint8_t recv_data[16] = {0}; rt_uint8_t flash_info[16] = {0}; - char imei[16] = {0}; - char temp[32] = "0"; + char imei[16] = {0}; + char temp[32] = "0"; - LOG_D("服务器下发配置参数\n"); + LOG_D ("服务器下发配置参数\n"); - Get_IotImei(imei, FLASH_NB_IMEI_LEN); - String2Hex(temp, imei); // 将字符串转为十六进制字符串 + Get_IotImei (imei, FLASH_NB_IMEI_LEN); + String2Hex (temp, imei); // 将字符串转为十六进制字符串 - rt_memset(data_buf, '0', 32); - rt_memcpy(recv_data, (ops->recv->recv_data.res_data + 5), sizeof(sys_config_info) - 50); - rt_memcpy(flash_info, (rt_uint8_t *)FLASH_HW_VER_ADDR, sizeof(sys_config_info) - 50); + rt_memset (data_buf, '0', 32); + rt_memcpy (recv_data, (ops->recv->recv_data.res_data + 5), sizeof (sys_config_info) - 50); + rt_memcpy (flash_info, (rt_uint8_t *)FLASH_HW_VER_ADDR, sizeof (sys_config_info) - 50); - LOG_D("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x iot_upload_cycle:%d min retry:%02x emagnetic:%02X relay_switch:%02X\n", - flash_info[0], flash_info[1], flash_info[2], flash_info[3], flash_info[4], (flash_info[5] | (flash_info[6] << 8)), flash_info[7], flash_info[8], recv_data[9]); - LOG_D("recv_data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x \n", - recv_data[0], recv_data[1], recv_data[2], recv_data[3], recv_data[4], - recv_data[5], recv_data[6], recv_data[7], recv_data[8], recv_data[9], - recv_data[10], recv_data[11], recv_data[12], recv_data[13], recv_data[14], recv_data[15]); - LOG_D("data:%s\n", data_buf); + LOG_D ("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x iot_upload_cycle:%d min retry:%02x emagnetic:%02X relay_switch:%02X\n", + flash_info[0], flash_info[1], flash_info[2], flash_info[3], flash_info[4], (flash_info[5] | (flash_info[6] << 8)), flash_info[7], flash_info[8], recv_data[9]); + LOG_D ("recv_data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x \n", + recv_data[0], recv_data[1], recv_data[2], recv_data[3], recv_data[4], + recv_data[5], recv_data[6], recv_data[7], recv_data[8], recv_data[9], + recv_data[10], recv_data[11], recv_data[12], recv_data[13], recv_data[14], recv_data[15]); + LOG_D ("data:%s\n", data_buf); - for (rt_uint8_t i = 0; i < (sizeof(sys_config_info) - 50); i++) + for (rt_uint8_t i = 0; i < (sizeof (sys_config_info) - 50); i++) { - LOG_D("recv_data[%d] = %d", i, recv_data[i]); + LOG_D ("recv_data[%d] = %d", i, recv_data[i]); if (recv_data[i] != flash_info[i]) { if ((recv_data[2] > 25) || (recv_data[2] < 5)) /*家报的报警设定值应在5%~25%之间*/ { - if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_ACTION_FAILURE) == RT_EOK) + if (ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_ACTION_FAILURE) == RT_EOK) { - LOG_W("recv_data[3] :%d", recv_data[3]); - LOG_W("配置参数超出范围,请核实后重试\n"); + LOG_W ("recv_data[3] :%d", recv_data[3]); + LOG_W ("配置参数超出范围,请核实后重试\n"); } return RT_EOK; } - else // 如果没有超出,再写入信息 + else // 如果没有超出,再写入信息 { - if (BSP_Flash_Write_Info(recv_data, sizeof(sys_config_info) - 50) != 0) + if (BSP_Flash_Write_Info (recv_data, sizeof (sys_config_info) - 50) != 0) { - rt_uint16_t iot_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId); - unsigned long timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; + rt_uint16_t iot_upload_time = (uint16_t)Flash_Get_SysCfg (kIotUploadCycleId); + unsigned long timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; // rt_timer_stop(nt26k_timer); - rt_timer_control(nt26k_timer, RT_TIMER_CTRL_SET_TIME, (void *)&timeout); // 更新上报周期 + rt_timer_control (nt26k_timer, RT_TIMER_CTRL_SET_TIME, (void *)&timeout); // 更新上报周期 // rt_timer_control(nt26k_timer, RT_TIMER_CTRL_GET_TIME, &timeout); // LOG_D("timeout:%d", timeout/1000/60); - rt_timer_start(nt26k_timer); - LOG_D("上报周期由%dmin更新为%dmin", ((flash_info[5] << 8) | flash_info[6]), iot_upload_time); - if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_SUCCESS) == RT_EOK) + rt_timer_start (nt26k_timer); + LOG_D ("上报周期由%dmin更新为%dmin", ((flash_info[5] << 8) | flash_info[6]), iot_upload_time); + if (ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_SUCCESS) == RT_EOK) { - LOG_D("配置参数写入成功\n"); + LOG_D ("配置参数写入成功\n"); } return RT_EOK; } else { - LOG_D("配置参数写入失败\n"); - if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_ACTION_FAILURE) == RT_EOK) + LOG_D ("配置参数写入失败\n"); + if (ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_ACTION_FAILURE) == RT_EOK) { - LOG_D("写入失败响应成功\n"); + LOG_D ("写入失败响应成功\n"); } return RT_ERROR; } } } } - if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_SUCCESS) == RT_EOK) + if (ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_SUCCESS) == RT_EOK) { - LOG_D("配置参数没有变化\n"); + LOG_D ("配置参数没有变化\n"); } return RT_EOK; } -void Handle_Time_Calibration_Data(struct Nt26k_Ops *ops) +void Handle_Time_Calibration_Data (struct Nt26k_Ops *ops) { rt_uint8_t data[10] = {0}; TsRtcDateTime rtc_dt; char imei[16] = {0}; char temp[32] = "0"; - LOG_D("时间校准数据\n"); + LOG_D ("时间校准数据\n"); - Get_IotImei(imei, FLASH_NB_IMEI_LEN); - String2Hex(temp, imei); // 将字符串转为十六进制字符串 + Get_IotImei (imei, FLASH_NB_IMEI_LEN); + String2Hex (temp, imei); // 将字符串转为十六进制字符串 - rt_memcpy(data, ops->recv->recv_data.res_data, sizeof(data)); + rt_memcpy (data, ops->recv->recv_data.res_data, sizeof (data)); // 提取后4个字节作为时间戳 time_t timestamp = (data[6] << 24) | (data[7] << 16) | (data[8] << 8) | data[9]; - Timestamp_To_Rtc_DateTime(timestamp, &rtc_dt); + Timestamp_To_Rtc_DateTime (timestamp, &rtc_dt); // 打印结果 - LOG_I("时间: %04d-%02d-%02d %02d:%02d:%02d (星期%d)\n", - rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second, rtc_dt.week); - RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, 0); /* Setup Time */ - rt_thread_mdelay(100); // 释放下线程 - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_TIME_CALIBRATION, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_TIME_CALIBRATION, temp, RESPONSE_CODE_SUCCESS); + LOG_I ("时间: %04d-%02d-%02d %02d:%02d:%02d (星期%d)\n", + rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second, rtc_dt.week); + RTC_SetTime (rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, 0); /* Setup Time */ + rt_thread_mdelay (100); // 释放下线程 + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_TIME_CALIBRATION, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_TIME_CALIBRATION, temp, RESPONSE_CODE_SUCCESS); } // 下发修改服务器地址指令 -void Handle_Sever_Addr_Set(struct Nt26k_Ops *ops) +void Handle_Sever_Addr_Set (struct Nt26k_Ops *ops) { rt_uint8_t data[6] = {0}; - char imei[16] = {0}; - char temp[32] = "0"; + char imei[16] = {0}; + char temp[32] = "0"; - Get_IotImei(imei, FLASH_NB_IMEI_LEN); - String2Hex(temp, imei); // 将字符串转为十六进制字符串 - rt_memcpy(data, (ops->recv->recv_data.res_data + 9), FLASH_SERVER_LEN); - LOG_D("data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x", 0, data[0], 1, data[1], 2, data[2], 3, data[3], 4, data[4], 5, data[5]); - Flash_Set_Sever_Data(data); - if (Flash_Get_Sever_Data(&sever_info) != RT_EOK) + Get_IotImei (imei, FLASH_NB_IMEI_LEN); + String2Hex (temp, imei); // 将字符串转为十六进制字符串 + rt_memcpy (data, (ops->recv->recv_data.res_data + 9), FLASH_SERVER_LEN); + LOG_D ("data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x", 0, data[0], 1, data[1], 2, data[2], 3, data[3], 4, data[4], 5, data[5]); + Flash_Set_Sever_Data (data); + if (Flash_Get_Sever_Data (&sever_info) != RT_EOK) { - LOG_E("服务器地址修改失败\n"); + LOG_E ("服务器地址修改失败\n"); } else { - LOG_D("服务器地址修改成功\n"); - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_SEVER_ADDR, temp, RESPONSE_CODE_SUCCESS); + LOG_D ("服务器地址修改成功\n"); + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_SEVER_ADDR, temp, RESPONSE_CODE_SUCCESS); } } -void Handle_Error(struct Nt26k_Ops *ops, rt_err_t ret) +void Handle_Error (struct Nt26k_Ops *ops, rt_err_t ret) { - LOG_E("数据帧解析失败,错误码: %d", ret); + LOG_E ("数据帧解析失败,错误码: %d", ret); char imei[16] = {0}; char temp[32] = "0"; - Get_IotImei(imei, FLASH_NB_IMEI_LEN); - String2Hex(temp, imei); // 将字符串转为十六进制字符串 - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, ops->recv->cmd, temp, RESPONSE_CODE_PARSE_FAIL); + Get_IotImei (imei, FLASH_NB_IMEI_LEN); + String2Hex (temp, imei); // 将字符串转为十六进制字符串 + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, ops->recv->cmd, temp, RESPONSE_CODE_PARSE_FAIL); } -void Handle_Instruction_Down(struct Nt26k_Ops *ops) +void Handle_Instruction_Down (struct Nt26k_Ops *ops) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)ops; switch (nt26k_ops->recv->recv_data.event_type) { - case INSTRUCTION_DOWN_SELF_CHECK: - Handle_Self_Check(nt26k_ops); - break; - case INSTRUCTION_DOWN_MUTE: - Handle_Mute(nt26k_ops); - break; - case INSTRUCTION_DOWN_CLOSE_VALVE: - Handle_Close_Valve(nt26k_ops); - break; - case INSTRUCTION_DOWN_OPEN_VALVE: - Handle_Open_Valve(nt26k_ops); - break; - case INSTRUCTION_DOWN_OPEN_RELAY: - Handle_Open_Relay(nt26k_ops); - break; - case INSTRUCTION_DOWN_CLOSE_RELAY: - Handle_Close_Relay(nt26k_ops); - break; - case INSTRUCTION_DOWN_QUERY_PARAMS: - Handle_Query_Params(nt26k_ops); - break; - case INSTRUCTION_DOWN_CONFIG_PARAMS: - Handle_Config_Params(nt26k_ops); - break; - case INSTRUCTION_DOWN_TIME_CALIBRATION: - Handle_Time_Calibration_Data(nt26k_ops); - break; - case INSTRUCTION_DOWN_SEVER_ADDR: - Handle_Sever_Addr_Set(nt26k_ops); - break; + case INSTRUCTION_DOWN_SELF_CHECK: + Handle_Self_Check (nt26k_ops); + break; + case INSTRUCTION_DOWN_MUTE: + Handle_Mute (nt26k_ops); + break; + case INSTRUCTION_DOWN_CLOSE_VALVE: + Handle_Close_Valve (nt26k_ops); + break; + case INSTRUCTION_DOWN_OPEN_VALVE: + Handle_Open_Valve (nt26k_ops); + break; + case INSTRUCTION_DOWN_OPEN_RELAY: + Handle_Open_Relay (nt26k_ops); + break; + case INSTRUCTION_DOWN_CLOSE_RELAY: + Handle_Close_Relay (nt26k_ops); + break; + case INSTRUCTION_DOWN_QUERY_PARAMS: + Handle_Query_Params (nt26k_ops); + break; + case INSTRUCTION_DOWN_CONFIG_PARAMS: + Handle_Config_Params (nt26k_ops); + break; + case INSTRUCTION_DOWN_TIME_CALIBRATION: + Handle_Time_Calibration_Data (nt26k_ops); + break; + case INSTRUCTION_DOWN_SEVER_ADDR: + Handle_Sever_Addr_Set (nt26k_ops); + break; } } -void Handle_Time_Calibration(struct Nt26k_Ops *ops) +void Handle_Time_Calibration (struct Nt26k_Ops *ops) { rt_uint8_t data[10] = {0}; - LOG_D("服务器下发时间校准数据\n"); - rt_memcpy(data, ops->recv->recv_data.res_data, sizeof(data)); + LOG_D ("服务器下发时间校准数据\n"); + rt_memcpy (data, ops->recv->recv_data.res_data, sizeof (data)); TsRtcDateTime rtc_dt; // 提取后4个字节作为时间戳 time_t timestamp = (data[6] << 24) | (data[7] << 16) | (data[8] << 8) | data[9]; - Timestamp_To_Rtc_DateTime(timestamp, &rtc_dt); + Timestamp_To_Rtc_DateTime (timestamp, &rtc_dt); // 打印结果 - LOG_I("时间: %04d-%02d-%02d %02d:%02d:%02d (星期%d)\n", - rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second, rtc_dt.week); - RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); /* Setup Time */ - ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_TIME_CALIBRATION, NT26K_DEFIENE_DATA, RESPONSE_CODE_SUCCESS); + LOG_I ("时间: %04d-%02d-%02d %02d:%02d:%02d (星期%d)\n", + rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second, rtc_dt.week); + RTC_SetTime (rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); /* Setup Time */ + ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_TIME_CALIBRATION, NT26K_DEFIENE_DATA, RESPONSE_CODE_SUCCESS); } -void Handle_Cmd_Type(struct Nt26k_Ops *ops) +void Handle_Cmd_Type (struct Nt26k_Ops *ops) { struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)ops; switch (nt26k_ops->recv->cmd) { - case CMD_TYPE_SERVER_REPLY: - Handle_Server_Reply(nt26k_ops); - break; - case CMD_TYPE_INSTRUCTION_DOWN: - Handle_Instruction_Down(nt26k_ops); - break; - case CMD_TYPE_TIME_CALIBRATION: - Handle_Time_Calibration(nt26k_ops); - break; - default: - nt26k_ops->Resp(nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, ops->recv->cmd, NT26K_DEFIENE_DATA, RESPONSE_CODE_PARSE_FAIL); - break; + case CMD_TYPE_SERVER_REPLY: + Handle_Server_Reply (nt26k_ops); + break; + case CMD_TYPE_INSTRUCTION_DOWN: + Handle_Instruction_Down (nt26k_ops); + break; + case CMD_TYPE_TIME_CALIBRATION: + Handle_Time_Calibration (nt26k_ops); + break; + default: + nt26k_ops->Resp (nt26k_ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, ops->recv->cmd, NT26K_DEFIENE_DATA, RESPONSE_CODE_PARSE_FAIL); + break; } } -void Analyze_Recv_Frame(struct at_device *device, struct Nt26k_Ops *ops) +void Analyze_Recv_Frame (struct at_device *device, struct Nt26k_Ops *ops) { rt_err_t ret = RT_EOK; - ret = Compare_HeaderToTail(ops); + ret = Compare_HeaderToTail (ops); if (ret == RT_EOK) { - Handle_Cmd_Type(ops); + Handle_Cmd_Type (ops); } else { - Handle_Error(ops, ret); + Handle_Error (ops, ret); } } @@ -1182,249 +1186,274 @@ void Analyze_Recv_Frame(struct at_device *device, struct Nt26k_Ops *ops) 发送一包数据后,转换到检测模式 120分钟发送一次数据 当有事件发生时,发送一包事件数据包 */ -static void Nt26k_Send_Thread_Entry(void *param) +static void Nt26k_Send_Thread_Entry (void *param) { rt_err_t result = RT_EOK; rt_uint32_t nt26k_recv_event; - LOG_D("nt26k thread entry\n"); + LOG_D ("nt26k thread entry\n"); - struct Nt26k_Ops *ops = (struct Nt26k_Ops *)param; + struct Nt26k_Ops *ops = (struct Nt26k_Ops *)param; struct at_device_nt26k *nt26k = &_dev; - struct at_device *device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, nt26k->device_name); - RT_ASSERT(device); + struct at_device *device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, nt26k->device_name); + RT_ASSERT (device); - if (ops->init(ops, PROTOCOL_VERSION) != RT_EOK) + if (ops->init (ops, PROTOCOL_VERSION) != RT_EOK) { - LOG_E("nt26k init failed\n"); + LOG_E ("nt26k init failed\n"); } else { - LOG_D("nt26k init success\n"); - rt_completion_wait(&nt26k_init_complate, RT_WAITING_FOREVER); // wait for nt26k init finish - Nt26k_Send_Event(kNt26kTimeCalibrationEvent); // 上电网络连接成功时,更新下时间 - rt_timer_start(nt26k_upload_timer); - Nt26k_Send_Event(kNt26kPowerOnEvent); + LOG_D ("nt26k init success\n"); + rt_completion_wait (&nt26k_init_complate, RT_WAITING_FOREVER); // wait for nt26k init finish + Nt26k_Send_Event (kNt26kPowerOnEvent); } while (1) { - result = rt_event_recv(&at_device_event, - Nt26k_Get_Event_Flag(kNt26kPowerOnEvent) | - Nt26k_Get_Event_Flag(kNt26kHeartbeatEvent) | - Nt26k_Get_Event_Flag(kNt26kSelfCheckEvent) | - Nt26k_Get_Event_Flag(kNt26kSilenceEvent) | - Nt26k_Get_Event_Flag(kNt26kExceptionEvent) | - Nt26k_Get_Event_Flag(kNt26kValveStatusEvent) | - Nt26k_Get_Event_Flag(kNt26kFanStatusEvent) | - Nt26k_Get_Event_Flag(kNt26kTempAnomalyEvent) | - Nt26k_Get_Event_Flag(kNt26kPowerOnEvent) | - Nt26k_Get_Event_Flag(kNt26kPowerDownEvent) | - Nt26k_Get_Event_Flag(kNt26kAlarmEvent) | - Nt26k_Get_Event_Flag(kNt26kAlarmRcyEvent) | - Nt26k_Get_Event_Flag(kNt26kFaultEvent) | - Nt26k_Get_Event_Flag(kNt26kFaultRcyEvent) | - Nt26k_Get_Event_Flag(kNt26kDeviceFailureEvent) | - Nt26k_Get_Event_Flag(kNt26kTimeCalibrationEvent), - RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, - RT_WAITING_FOREVER, &nt26k_recv_event); // 这个事件一般是设备端发生了变化,发送到服务器时调用 + result = rt_event_recv (&at_device_event, + Nt26k_Get_Event_Flag (kNt26kPowerOnEvent) | + Nt26k_Get_Event_Flag (kNt26kHeartbeatEvent) | + Nt26k_Get_Event_Flag (kNt26kSelfCheckEvent) | + Nt26k_Get_Event_Flag (kNt26kSilenceEvent) | + Nt26k_Get_Event_Flag (kNt26kExceptionEvent) | + Nt26k_Get_Event_Flag (kNt26kValveStatusEvent) | + Nt26k_Get_Event_Flag (kNt26kFanStatusEvent) | + Nt26k_Get_Event_Flag (kNt26kTempAnomalyEvent) | + Nt26k_Get_Event_Flag (kNt26kPowerOnEvent) | + Nt26k_Get_Event_Flag (kNt26kPowerDownEvent) | + Nt26k_Get_Event_Flag (kNt26kAlarmEvent) | + Nt26k_Get_Event_Flag (kNt26kAlarmRcyEvent) | + Nt26k_Get_Event_Flag (kNt26kFaultEvent) | + Nt26k_Get_Event_Flag (kNt26kFaultRcyEvent) | + Nt26k_Get_Event_Flag (kNt26kDeviceFailureEvent) | + Nt26k_Get_Event_Flag (kNt26kTimeCalibrationEvent), + RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, + RT_WAITING_FOREVER, &nt26k_recv_event); // 这个事件一般是设备端发生了变化,发送到服务器时调用 if (result == RT_EOK) { - LOG_D("nt26k recv event OK\n"); - if (nt26k_conncet_tcp_flag != 1) + if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kPowerOnEvent)) { - if (device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK) // 打开连接 + result = Nt26k_Process_Events (kNt26kPowerOnEvent, device, ops); // 当上电心跳包发送不成功时,其他事件不启动 + if (result) { - LOG_D("nt26k connect tcp success\n"); + power_on_send_flag = 0; + rt_timer_start (nt26k_power_error_timer); // 启动重连定时器, 3min一次,直到发送成功 + LOG_E ("nt26k send data failed result = [%d]\n", result); } else { - LOG_E("nt26k connect tcp failed\n"); + rt_timer_start (nt26k_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送 + + rt_timer_start (nt26k_upload_timer); // 周期修改时间更新 + power_on_send_flag = 1; } } - if (nt26k_conncet_tcp_flag) + if (power_on_send_flag) { - if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kPowerOnEvent)) + if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kHeartbeatEvent)) { - result = Nt26k_Process_Events(kNt26kPowerOnEvent, device, ops); // 当上电心跳包发送不成功时,其他事件不启动 + result = Nt26k_Process_Events (kNt26kHeartbeatEvent, device, ops); if (result) { - power_on_send_flag = 0; - rt_timer_start(nt26k_power_error_timer); // 启动重连定时器, 3min一次,直到发送成功 - LOG_E("nt26k send data failed result = [%d]\n", result); - } - else - { - rt_timer_start(nt26k_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送 - power_on_send_flag = 1; + LOG_E ("nt26k send data failed result = [%d]\n", result); } } - if (power_on_send_flag) + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kTimeCalibrationEvent)) { - if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kHeartbeatEvent)) + Time_Calibration (device); + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kAlarmEvent)) + { + result = Nt26k_Process_Events (kNt26kAlarmEvent, device, ops); + if (result) { - result = Nt26k_Process_Events(kNt26kHeartbeatEvent, device, ops); + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kAlarmRcyEvent)) + { + result = Nt26k_Process_Events (kNt26kAlarmRcyEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kFaultEvent)) + { + if (device_state_flag != 1) // 当设备失效时,只上报失效信息 + { + result = Nt26k_Process_Events (kNt26kFaultEvent, device, ops); if (result) { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kTimeCalibrationEvent)) - { - Time_Calibration(device); - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmEvent)) - { - result = Nt26k_Process_Events(kNt26kAlarmEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmRcyEvent)) - { - result = Nt26k_Process_Events(kNt26kAlarmRcyEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultEvent)) - { - if (device_state_flag != 1) // 当设备失效时,只上报失效信息 - { - result = Nt26k_Process_Events(kNt26kFaultEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultRcyEvent)) - { - result = Nt26k_Process_Events(kNt26kFaultRcyEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSelfCheckEvent)) - { - result = Nt26k_Process_Events(kNt26kSelfCheckEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSilenceEvent)) - { - result = Nt26k_Process_Events(kNt26kSilenceEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kExceptionEvent)) - { - result = Nt26k_Process_Events(kNt26kExceptionEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kValveStatusEvent)) - { - result = Nt26k_Process_Events(kNt26kValveStatusEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFanStatusEvent)) - { - result = Nt26k_Process_Events(kNt26kFanStatusEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kTempAnomalyEvent)) - { - result = Nt26k_Process_Events(kNt26kTempAnomalyEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kPowerDownEvent)) - { - result = Nt26k_Process_Events(kNt26kPowerDownEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); - } - nt26k_event_initialized = RT_FALSE; // 当接收到掉电事件时,发送完成后删除事件,不再接收其他事件 - } - else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kDeviceFailureEvent)) - { - result = Nt26k_Process_Events(kNt26kDeviceFailureEvent, device, ops); - if (result) - { - LOG_E("nt26k send data failed result = [%d]\n", result); + LOG_E ("nt26k send data failed result = [%d]\n", result); } } } - rt_thread_mdelay(1); // 释放下线程 + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kFaultRcyEvent)) + { + result = Nt26k_Process_Events (kNt26kFaultRcyEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kSelfCheckEvent)) + { + result = Nt26k_Process_Events (kNt26kSelfCheckEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kSilenceEvent)) + { + result = Nt26k_Process_Events (kNt26kSilenceEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kExceptionEvent)) + { + result = Nt26k_Process_Events (kNt26kExceptionEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kValveStatusEvent)) + { + result = Nt26k_Process_Events (kNt26kValveStatusEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kFanStatusEvent)) + { + result = Nt26k_Process_Events (kNt26kFanStatusEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kTempAnomalyEvent)) + { + result = Nt26k_Process_Events (kNt26kTempAnomalyEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kPowerDownEvent)) + { + nt26k_event_initialized = RT_FALSE; // 当接收到掉电事件时,发送完成后删除事件,不再接收其他事件 + result = Nt26k_Process_Events (kNt26kPowerDownEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } + else if (nt26k_recv_event & Nt26k_Get_Event_Flag (kNt26kDeviceFailureEvent)) + { + result = Nt26k_Process_Events (kNt26kDeviceFailureEvent, device, ops); + if (result) + { + LOG_E ("nt26k send data failed result = [%d]\n", result); + } + } } } } } -static void Nt26k_Recv_Thread_Entry(void *parameter) +static void Nt26k_Recv_Thread_Entry (void *parameter) { - struct Nt26k_Ops *ops = (struct Nt26k_Ops *)parameter; + struct Nt26k_Ops *ops = (struct Nt26k_Ops *)parameter; struct at_device_nt26k *nt26k = &_dev; - struct at_device *device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, nt26k->device_name); - RT_ASSERT(device); + struct at_device *device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, nt26k->device_name); + RT_ASSERT (device); - LOG_D("nt26k recv thread entry\n"); + LOG_D ("nt26k recv thread entry\n"); while (1) { - rt_sem_take(nt26k_recv_sem, RT_WAITING_FOREVER); // 这个主要用来处理的数据 + rt_sem_take (nt26k_recv_sem, RT_WAITING_FOREVER); // 这个主要用来处理的数据 /*对数据帧进行分析,判断所处的是对服务器响应还是指令下发*/ - Analyze_Recv_Frame(device, ops); + Analyze_Recv_Frame (device, ops); } } -static void Nt26k_Life_Thread_Entry(void *parameter) +static void Nt26k_Life_Thread_Entry (void *parameter) { struct at_device_nt26k *nt26k = &_dev; - struct at_device *device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, nt26k->device_name); - RT_ASSERT(device); + struct at_device *device = at_device_get_by_name (AT_DEVICE_NAMETYPE_NETDEV, nt26k->device_name); + RT_ASSERT (device); rt_err_t ret; - LOG_D("nt26k_life_thread entry\n"); + LOG_D ("nt26k_life_thread entry\n"); while (1) { - ret = rt_sem_take(nt26k_disconnect_sem, RT_WAITING_FOREVER); + ret = rt_sem_take (nt26k_disconnect_sem, RT_WAITING_FOREVER); if (ret == RT_EOK) { if (!nt26k_conncet_tcp_flag) { - LOG_D("重连网络中...\n"); - device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_DISCONN, RT_NULL);//先关闭,再处理 - if(device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK) + LOG_D ("重连网络中...\n"); + at_response_t resp = at_create_resp (64, 0, 5000); + if (resp == RT_NULL) { - LOG_D("重连网络成功\n"); - nt26k_conncet_tcp_flag = RT_TRUE; + LOG_E ("No memory for response structure!"); + at_delete_resp (resp); } - else + if (device->class->device_ops->control (device, AT_DEVICE_CTRL_POWER_OFF, RT_NULL) == RT_EOK) { - LOG_D("重连网络失败,等待 10s 后重连\n"); - rt_thread_mdelay(10000); - rt_sem_release(nt26k_disconnect_sem); + LOG_D("AT device power off success"); + rt_thread_mdelay(1000); + if (device->class->device_ops->control (device, AT_DEVICE_CTRL_POWER_ON, RT_NULL) == RT_EOK) + { + LOG_D("AT device power on success"); + rt_thread_mdelay(1000); + /* disable echo */ + at_obj_exec_cmd(device->client, resp, "ATE0"); + /*AT+QICFG="dataformat" 设置收发模式*/ + if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"dataformat\",%d,%d", AT_NSONMI_MODE_DEFAULT, AT_NSONMI_MODE_DEFAULT) != RT_EOK) + { + LOG_E ("AT+QICFG=\"dataformat\" error\n"); + } + /*设置显示模式*/ + if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"viewmode\",1") != RT_EOK) + { + LOG_E ("AT+QICFG=\"viewmode\" error\n"); + } + /*设置保活信息*/ + if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"tcp/keepalive\",1,1800,100,3") != RT_EOK) + { + LOG_E ("AT+QICFG=\"tcp/keepalive\" error\n"); + } + if (at_obj_exec_cmd (device->client, resp, "AT+QICFG=\"passiveclosed\",1") != RT_EOK) + { + LOG_E ("AT+QICFG=\"passiveclosed\" error\n"); + } + if (at_obj_exec_cmd (device->client, resp, "AT+CGACT=1,1") != RT_EOK) + { + LOG_E ("AT+CGACT=1,1 error\n"); + } + if (device->class->device_ops->control (device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK) + { + LOG_D ("重连网络成功\n"); + nt26k_conncet_tcp_flag = RT_TRUE; + } + else + { + LOG_D ("重连网络失败,等待 10s 后重连\n"); + rt_thread_mdelay (10000); + rt_sem_release (nt26k_disconnect_sem); + } + at_delete_resp (resp); + } } } } @@ -1432,102 +1461,104 @@ static void Nt26k_Life_Thread_Entry(void *parameter) } // 定时器回调函数,当1分钟内没有数据交互时,关闭tcp连接 -static void Nt26k_Upload_Timer_Cb(void *parameter) +static void Nt26k_Upload_Timer_Cb (void *parameter) { - Nt26k_Send_Event(kNt26kTimeCalibrationEvent); // 更新下时间 + Nt26k_Send_Event (kNt26kTimeCalibrationEvent); // 更新下时间 } -int BSP_Nt26k_Thread_Init(void) +int BSP_Nt26k_Thread_Init (void) { rt_err_t ret; Nt26k_Event_Init(); - rt_uint32_t iot_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId); - unsigned long timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; - LOG_I("上报服务器周期:%d分钟", iot_upload_time); - nt26k_mutex = rt_mutex_create("nt26k_mutex", RT_IPC_FLAG_PRIO); + rt_uint32_t iot_upload_time = (uint16_t)Flash_Get_SysCfg (kIotUploadCycleId); + unsigned long timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; + LOG_I ("上报服务器周期:%d分钟", iot_upload_time); + nt26k_mutex = rt_mutex_create ("nt26k_mutex", RT_IPC_FLAG_PRIO); if (nt26k_mutex == RT_NULL) { - LOG_E("nt26k_mutex create failed"); + LOG_E ("nt26k_mutex create failed"); } - nt26k_recv_sem = rt_sem_create("nt26k_recv", 0, RT_IPC_FLAG_PRIO); + nt26k_recv_sem = rt_sem_create ("nt26k_recv", 0, RT_IPC_FLAG_PRIO); if (nt26k_recv_sem == RT_NULL) { - LOG_E("nt26k_recv_sem create failed"); + LOG_E ("nt26k_recv_sem create failed"); } - nt26k_disconnect_sem = rt_sem_create("nt26k_life", 0, RT_IPC_FLAG_PRIO); + nt26k_disconnect_sem = rt_sem_create ("nt26k_life", 0, RT_IPC_FLAG_PRIO); if (nt26k_disconnect_sem == RT_NULL) { - LOG_E("nt26k_disconnect_sem create failed"); + LOG_E ("nt26k_disconnect_sem create failed"); } // 创建定时器 - nt26k_timer = rt_timer_create("heartbeat", - Nt26k_Ht_Timer_Cb, // 回调函数 - RT_NULL, // 参数 - timeout, // 定时周期(120分钟) - RT_TIMER_FLAG_PERIODIC); // 周期性定时器 + nt26k_timer = rt_timer_create ("heartbeat", + Nt26k_Ht_Timer_Cb, // 回调函数 + RT_NULL, // 参数 + timeout, // 定时周期(120分钟) + RT_TIMER_FLAG_PERIODIC); // 周期性定时器 if (nt26k_timer == RT_NULL) { - rt_kprintf("创建定时器失败\n"); + rt_kprintf ("创建定时器失败\n"); return -1; } - nt26k_power_error_timer = rt_timer_create("nt26k_error_timer", - Nt26k_Error_Timer_Cb, - RT_NULL, - 3 * 60 * RT_TICK_PER_SECOND, // (3分钟) - RT_TIMER_FLAG_PERIODIC); - nt26k_upload_timer = rt_timer_create("nt26k_upload_timer", - Nt26k_Upload_Timer_Cb, - RT_NULL, - 24 * 60 * 60 * RT_TICK_PER_SECOND, - RT_TIMER_FLAG_PERIODIC); + nt26k_power_error_timer = rt_timer_create ("nt26k_error_timer", + Nt26k_Error_Timer_Cb, + RT_NULL, + 3 * 60 * RT_TICK_PER_SECOND, // (3分钟) + RT_TIMER_FLAG_PERIODIC); + nt26k_upload_timer = rt_timer_create ("nt26k_upload_timer", + Nt26k_Upload_Timer_Cb, + RT_NULL, + 24 * 60 * 60 * RT_TICK_PER_SECOND, + RT_TIMER_FLAG_PERIODIC); - ret = rt_thread_init(&nt26k_thread, - "nt26k_send_thread", - Nt26k_Send_Thread_Entry, - &nt26k_ops, - &nt26k_thread_stack[0], - sizeof(nt26k_thread_stack), - NT26K_THREAD_PRIORITY, - NT26K_THREAD_TICKS); - rt_thread_startup(&nt26k_thread); + ret = rt_thread_init (&nt26k_thread, + "nt26k_send_thread", + Nt26k_Send_Thread_Entry, + &nt26k_ops, + &nt26k_thread_stack[0], + sizeof (nt26k_thread_stack), + NT26K_THREAD_PRIORITY, + NT26K_THREAD_TICKS); + rt_thread_startup (&nt26k_thread); - ret = rt_thread_init(&nt26k_recv_thread, - "nt26k_recv_thread", - Nt26k_Recv_Thread_Entry, - &nt26k_ops, - &nt26k_recv_thread_stack[0], - sizeof(nt26k_recv_thread_stack), - NT26K_RECV_THREAD_PRIORITY, - NT26K_RECV_THREAD_TICKS); - rt_thread_startup(&nt26k_recv_thread); + ret = rt_thread_init (&nt26k_recv_thread, + "nt26k_recv_thread", + Nt26k_Recv_Thread_Entry, + &nt26k_ops, + &nt26k_recv_thread_stack[0], + sizeof (nt26k_recv_thread_stack), + NT26K_RECV_THREAD_PRIORITY, + NT26K_RECV_THREAD_TICKS); + rt_thread_startup (&nt26k_recv_thread); - ret = rt_thread_init(&nt26k_life_thread, - "nt26k_life_thread", - Nt26k_Life_Thread_Entry, - &nt26k_ops, - &nt26k_life_thread_stack[0], - sizeof(nt26k_life_thread_stack), - NT26K_LIFE_THREAD_PRIORITY, - NT26K_LIFE_THREAD_TICKS); - rt_thread_startup(&nt26k_life_thread); + ret = rt_thread_init (&nt26k_life_thread, + "nt26k_life_thread", + Nt26k_Life_Thread_Entry, + &nt26k_ops, + &nt26k_life_thread_stack[0], + sizeof (nt26k_life_thread_stack), + NT26K_LIFE_THREAD_PRIORITY, + NT26K_LIFE_THREAD_TICKS); + rt_thread_startup (&nt26k_life_thread); return ret; } + // INIT_APP_EXPORT(BSP_Nt26k_Thread_Init); -int nt26k_device_register(void) +int nt26k_device_register (void) { struct at_device_nt26k *nt26k = &_dev; - return at_device_register(&(nt26k->device), - nt26k->device_name, - nt26k->client_name, - AT_DEVICE_CLASS_NT26K, - (void *)nt26k); + return at_device_register (&(nt26k->device), + nt26k->device_name, + nt26k->client_name, + AT_DEVICE_CLASS_NT26K, + (void *)nt26k); } + // INIT_COMPONENT_EXPORT(nt26k_device_register); -#endif // IOT_MODULE_SWITCH +#endif // IOT_MODULE_SWITCH diff --git a/bsp/src/bsp_rtc.c b/bsp/src/bsp_rtc.c index 81afd1b..2d255d9 100644 --- a/bsp/src/bsp_rtc.c +++ b/bsp/src/bsp_rtc.c @@ -287,8 +287,8 @@ static uint8_t RTC_FirstInit(void) RTC_SetPrescaler(32767); RTC_WaitForLastTask(); - // RTC_SetTime(2024, 9, 5, 0, 0, 0); //设置出厂日期 - // RTC_WaitForLastTask(); + RTC_SetTime(2025, 1, 8, 12, 0, 0); //设置出厂日期 + RTC_WaitForLastTask(); // // RTC_SetAlarm(20 + RTC_GetCounter()); //闹钟值设定为当前时间的10秒后 // RTC_WaitForLastTask(); @@ -324,7 +324,6 @@ int BSP_RTC_Init(void) /* Is it the first configuration */ if (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET || BKP_ReadBackupRegister(BKP_DR1) != RTC_FIRST_INIT_VALUE) { - LOG_W("RTC hasn't been configured, please use [RTC_Cfg_Time] to config."); RTC_FirstInit(); } else