This commit is contained in:
小马_666 2025-05-29 08:55:08 +08:00
parent 1b566c8281
commit 2b9a2d0c32
2 changed files with 369 additions and 267 deletions

View File

@ -500,6 +500,12 @@ int main(void)
rt_uint8_t mac_addr[6]; rt_uint8_t mac_addr[6];
Flash_Get_Mac_Addr (mac_addr, 1); Flash_Get_Mac_Addr (mac_addr, 1);
Bt_Valve_Handler (kValveCmdCtr, 1, mac_addr); Bt_Valve_Handler (kValveCmdCtr, 1, mac_addr);
}
#if (IOT_MODULE_SWITCH == 1)
Ml307_Send_Event (kMl307PowerDownEvent);
#endif
if (Flash_Get_Valve_Num())
{
if (rt_sem_take (&bt_ctr_sem, 5000) == RT_EOK) if (rt_sem_take (&bt_ctr_sem, 5000) == RT_EOK)
{ {
LOG_D ("电磁阀动作完成"); LOG_D ("电磁阀动作完成");
@ -509,11 +515,8 @@ int main(void)
LOG_E ("电磁阀动作失败"); LOG_E ("电磁阀动作失败");
} }
} }
#if (IOT_MODULE_SWITCH == 1)
Ml307_Send_Event(kMl307PowerDownEvent);
#endif
rt_uint8_t cnt = 0; rt_uint8_t cnt = 0;
while ((ml307_power_down_flag == 0) && (cnt < 60)) // 等待接收到物联网模组关机完成 while ((ml307_power_down_flag == 0) && (cnt < 30)) // 等待接收到物联网模组关机完成
{ {
rt_thread_mdelay (1000); rt_thread_mdelay (1000);
LOG_D ("cnt = %d", cnt); LOG_D ("cnt = %d", cnt);

View File

@ -479,12 +479,20 @@ int Ml307_Send_Time_Calibration (struct at_device *device, void *param)
*/ */
int Ml307_Send_Alarm (struct at_device *device, void *param) int Ml307_Send_Alarm (struct at_device *device, void *param)
{ {
rt_err_t ret = RT_EOK;
struct Ml307_Ops *ml307_ops = (struct Ml307_Ops *)param; struct Ml307_Ops *ml307_ops = (struct Ml307_Ops *)param;
if ((device == RT_NULL) || (ml307_ops == RT_NULL)) if ((device == RT_NULL) || (ml307_ops == RT_NULL))
{ {
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_ALARM)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_ALARM))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_ALARM); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_ALARM);
@ -507,7 +515,13 @@ int Ml307_Send_Alarm_Recover (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_ALARM_RECOVER)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_ALARM_RECOVER))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_ALARM_RECOVER); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_ALARM_RECOVER);
@ -530,7 +544,13 @@ int Ml307_Send_Fault (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_FAULT)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_FAULT))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_FAULT); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_FAULT);
@ -553,7 +573,13 @@ int Ml307_Send_Fault_Recover (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_FAULT_RECOVER)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_FAULT_RECOVER))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_FAULT_RECOVER); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_FAULT_RECOVER);
@ -576,7 +602,13 @@ int Ml307_Send_Self_Check (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_SELF_CHECK)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_SELF_CHECK))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_SELF_CHECK); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_SELF_CHECK);
@ -599,7 +631,13 @@ int Ml307_Send_Silence (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_SILENCE)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_SILENCE))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_SILENCE); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_SILENCE);
@ -622,7 +660,13 @@ int Ml307_Send_Exception (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_EXCEPTION)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_EXCEPTION))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_EXCEPTION); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_EXCEPTION);
@ -714,7 +758,13 @@ int Ml307_Send_Power_On (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_POWER_ON)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_POWER_ON))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_POWER_ON); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_POWER_ON);
@ -737,6 +787,13 @@ int Ml307_Send_Power_Off (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
rt_memset (&valve[0].valve_connct_status, 0, (sizeof (struct valve_t) - 7)); // 当掉电事件时,直接清空阀门结构体,这样连接状态就为断开 rt_memset (&valve[0].valve_connct_status, 0, (sizeof (struct valve_t) - 7)); // 当掉电事件时,直接清空阀门结构体,这样连接状态就为断开
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_POWER_OFF)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_POWER_OFF))
{ {
@ -760,7 +817,13 @@ int Ml307_Send_Valve_Connect (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_VALVE_CONNECT)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_VALVE_CONNECT))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_VALVE_CONNECT); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_VALVE_CONNECT);
@ -783,7 +846,13 @@ int Ml307_Send_Valve_Disconnect (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_VALVE_DISCONNECT)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_VALVE_DISCONNECT))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_VALVE_DISCONNECT); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_VALVE_DISCONNECT);
@ -806,7 +875,13 @@ int Ml307_Send_Device_Failure (struct at_device *device, void *param)
LOG_E ("ml307 param error\n"); LOG_E ("ml307 param error\n");
return RT_ERROR; return RT_ERROR;
} }
rt_err_t ret = RT_EOK;
ret = device->class->device_ops->control (device, AT_DEVICE_CTRL_GET_SIGNAL, RT_NULL);
if (ret != RT_EOK)
{
LOG_E ("ml307 get signal failed\n");
return -RT_ERROR;
}
if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_DEVICE_FAILURE)) if (ml307_ops->send (ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_DEVICE_FAILURE))
{ {
LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_DEVICE_FAILURE); LOG_E ("ml307 send cmd[%X] failed\n", EVENT_TYPE_DEVICE_FAILURE);
@ -944,10 +1019,20 @@ int Ml307_Process_Events (Ml307Event ml307_recv_event, struct at_device *device,
{ {
if (ret != RT_EOK) if (ret != RT_EOK)
{ {
ml307_connect_sever_flag = 0; ml307_connect_sever_flag = 0;
if (!ml307_disconnect_retry_flag)
{
LOG_D("与服务器断开,重连网络中");
rt_sem_release (ml307_disconnect_sem); rt_sem_release (ml307_disconnect_sem);
}
else
{
LOG_D ("与服务区断开连接,等待连接中......\n"); LOG_D ("与服务区断开连接,等待连接中......\n");
} }
}
} }
return ret; return ret;
@ -1353,12 +1438,26 @@ rt_err_t Handle_Valve_Add (struct Ml307_Ops *ops)
} }
LOG_D ("新增阀门设备成功\n"); LOG_D ("新增阀门设备成功\n");
Flash_Set_Valve_Num (cnt + 1); Flash_Set_Valve_Num (cnt + 1);
ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_SUCCESS); if (ops->Resp (ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_SUCCESS) != RT_EOK)
{
LOG_D ("发送失败,清空本地mac地址");
rt_uint8_t mac_addr[6] = {0};
// 清空本地阀门信息
if (Flash_Set_Mac_Addr (mac_addr, 1) != RESET)
{
LOG_E ("本地阀门信息清空完成");
Flash_Set_Valve_Num (0);
}
Bt_Valve_Handler (kValveCmdRemAll, RT_NULL, RT_NULL);
if (rt_sem_take (&bt_rem_sem, 10000) == RT_EOK) // 如果没刷掉数据,则黄灯会亮一秒,如果刷成功了,则红灯闪一下黄灯不会亮
{
return RT_EOK; return RT_EOK;
} }
} }
}
return RT_EOK; return RT_EOK;
} }
}
/*更换阀门设备*/ /*更换阀门设备*/
rt_err_t Handle_Valve_Replace (struct Ml307_Ops *ops) rt_err_t Handle_Valve_Replace (struct Ml307_Ops *ops)
@ -1890,7 +1989,7 @@ static void Ml307_Life_Thread_Entry (void *parameter)
goto __exit; goto __exit;
} }
/*设置心跳包*/ /*设置心跳包*/
if (at_obj_exec_cmd (device->client, resp, "AT+MIPTKA=0,1,120,60,1") != RT_EOK) if (at_obj_exec_cmd (device->client, resp, "AT+MIPTKA=0,1,120,60,3") != RT_EOK)
{ {
result = -RT_ERROR; result = -RT_ERROR;
goto __exit; goto __exit;