代码暂存 阀门状态上报及优化按键中断
This commit is contained in:
parent
34e0700abc
commit
b76977326a
|
@ -109,8 +109,8 @@ int main(void)
|
|||
BSP_VBAT_Init();
|
||||
logDebug("VBAT init ok\n");
|
||||
|
||||
BSP_Ml307r_Init();
|
||||
logDebug("BSP_M1307r ok\n");
|
||||
// BSP_Ml307r_Init();
|
||||
// logDebug("BSP_M1307r ok\n");
|
||||
|
||||
ShowRestartReason();
|
||||
IWDG_Init(5000);
|
||||
|
|
|
@ -1,6 +1 @@
|
|||
获取sim信息(用于上报)
|
||||
获取实时时间
|
||||
|
||||
数据上报(低电压、阀门状态)
|
||||
下行数据处理
|
||||
滴答定时器精度
|
||||
目前存在当电容电压较低时启动模组会偶现系统卡住现象
|
|
@ -19,9 +19,9 @@
|
|||
typedef struct __attribute__((packed))
|
||||
{
|
||||
uint8_t module_init_flag : 1; //模块初始化
|
||||
uint8_t module_Sleep_flag : 1; //模块睡眠
|
||||
uint8_t Date_Sending_flag : 1; //数据发送中
|
||||
uint8_t Low_Voltage_flag : 1; //低电压
|
||||
uint8_t Regular_report_flag : 1; //定期上报
|
||||
uint8_t Key_Finish_flag : 1; //按键完成
|
||||
|
||||
uint8_t PowerOn_success_flag : 1; //模块开机成功
|
||||
uint8_t PowerOn_error_flag : 1; //模块开机失败
|
||||
|
@ -110,6 +110,7 @@ static void BSP_Ml307_Power_Off(void);
|
|||
|
||||
|
||||
void BSP_Ml307r_Init(void);
|
||||
void Iot_Send_Data(void);
|
||||
void Ml307r_Loop(void);
|
||||
void BSP_Module_Emergency_Send(uint8_t* data, uint8_t len);
|
||||
void BSP_ML307_StartTimeoutTimer(void);
|
||||
|
|
|
@ -730,7 +730,6 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
{
|
||||
if (events & CHECK_EVT_START)
|
||||
{
|
||||
uint8_t Status_upload = 0;
|
||||
// logDebug("fault_state = %d \r\n",fault_state);
|
||||
if(!fault_state)
|
||||
{
|
||||
|
@ -738,9 +737,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
if(P[0] - P[2] >= 80) //8000
|
||||
{
|
||||
VALVE_CLOSE();
|
||||
IotFlag_t.Valve_Close_flag = 1;
|
||||
fault_state = 1;
|
||||
Status_upload = 1;
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1500)); //1000
|
||||
logDebug("motor high close");
|
||||
}
|
||||
|
@ -748,9 +745,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
if(P[0] - P[2] <= 80) //800
|
||||
{
|
||||
VALVE_CLOSE();
|
||||
IotFlag_t.Valve_Close_flag = 1;
|
||||
fault_state = 2;
|
||||
Status_upload = 1;
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1500)); //1000
|
||||
logDebug("motor low close");
|
||||
}
|
||||
|
@ -758,9 +753,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
if( P[0] - P[1] >= 7) //700
|
||||
{
|
||||
VALVE_CLOSE();
|
||||
IotFlag_t.Valve_Close_flag = 1;
|
||||
fault_state = 3;
|
||||
Status_upload = 1;
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1500)); //1000
|
||||
logDebug("motor ver close");
|
||||
}
|
||||
|
@ -773,7 +766,6 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
VALVE_OPEN();
|
||||
IotFlag_t.Valve_Open_flag = 1;
|
||||
fault_state = 0;
|
||||
Status_upload = 2;
|
||||
LED_VALVE_OPEN;
|
||||
logDebug("motor/LED open");
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1000));
|
||||
|
@ -782,17 +774,11 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
{
|
||||
motor_flag = 0;
|
||||
VALVE_CLOSE();
|
||||
IotFlag_t.Valve_Close_flag = 1;
|
||||
Status_upload = 1;
|
||||
LED_VALVE_CLOSE;
|
||||
fault_state = 4;
|
||||
logDebug("motor/LED close");
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1000));
|
||||
}
|
||||
// if(Status_upload){
|
||||
// logDebug("BSP_M1307r start_send message!!!\n");
|
||||
// BSP_Ml307r_Init();
|
||||
// Status_upload = 0;
|
||||
// }
|
||||
tmos_start_task(check_task_id, CHECK_EVT_START, MS1_TO_SYSTEM_TIME(200)); //100
|
||||
return (events ^ CHECK_EVT_START);
|
||||
}
|
||||
|
@ -800,6 +786,11 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
{
|
||||
VALVE_STOP();
|
||||
logDebug("motor STOP");
|
||||
if(fault_state == 4)
|
||||
{
|
||||
IotFlag_t.Valve_Close_flag = 1;
|
||||
Iot_Send_Data();
|
||||
}
|
||||
return (events ^ MOTOR_STOP_EVT);
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "bsp_motor.h"
|
||||
#include "bsp_uart.h"
|
||||
#include "bsp_led.h"
|
||||
#include "bsp_ml307r.h"
|
||||
#include "log.h"
|
||||
#include "SLEEP.h"
|
||||
|
||||
|
@ -38,9 +39,8 @@ void app_task_handler(TeAppEvtType app_evt_type)
|
|||
case kKeyRelease:
|
||||
BSP_KEY_EnterLowpower();
|
||||
// DelayMs(10);
|
||||
// BSP_RequestSleep();
|
||||
BSP_RequestSleep();
|
||||
logDebug("gpio relase;BSP_RequestSleep ");
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -123,10 +123,21 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
}
|
||||
else
|
||||
{
|
||||
// if(key_run == 1)
|
||||
// {
|
||||
// p_handler(kKeyRelease);
|
||||
// key_run = 0;
|
||||
// }
|
||||
if(key_run == 1)
|
||||
{
|
||||
p_handler(kKeyRelease);
|
||||
key_run = 0;
|
||||
// 确保按键已真正释放后再触发释放事件
|
||||
if (!IS_KEY_Vaild()) {
|
||||
p_handler(kKeyRelease);
|
||||
key_run = 0;
|
||||
} else {
|
||||
// 按键仍未释放,继续检测
|
||||
tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(KEY_SACN_MS));
|
||||
}
|
||||
}
|
||||
}
|
||||
return (events ^ KEY_SCAN_EVT);
|
||||
|
@ -317,6 +328,7 @@ void KEY_ProcessLoop(void)
|
|||
// logDebug("KEY_ProcessLoop");
|
||||
// }
|
||||
// }
|
||||
|
||||
if (key_wakeup_flag)
|
||||
{
|
||||
key_wakeup_flag = 0;
|
||||
|
@ -350,25 +362,36 @@ __INTERRUPT // 告诉编译器使用硬件压栈
|
|||
__HIGH_CODE // 放到RAM里
|
||||
void GPIOB_IRQHandler(void)
|
||||
{
|
||||
// 阻止睡眠
|
||||
BSP_BlockSleep();
|
||||
// 关按键中断
|
||||
BSP_KEY_ExitLowpower();
|
||||
|
||||
printf("KEY IRQ");
|
||||
|
||||
// 清除中断标志位
|
||||
GPIOB_ClearITFlagBit(KEY_B_PIN);
|
||||
|
||||
key_wakeup_flag = 1;
|
||||
// key_timeout_flag = 0;
|
||||
// 检查是否为真实按键事件(通过确认电平是否真的接近0V)
|
||||
if (GPIOB_ReadPortPin(KEY_B_PIN) == 0) {
|
||||
// 再次确认是否真的为低电平(接近0V)
|
||||
DelayUs(50); // 短暂延时
|
||||
if (GPIOB_ReadPortPin(KEY_B_PIN) == 0) {
|
||||
// 确认是真实按键事件
|
||||
// 阻止睡眠
|
||||
BSP_BlockSleep();
|
||||
// 关按键中断
|
||||
BSP_KEY_ExitLowpower();
|
||||
|
||||
printf("KEY IRQ");
|
||||
key_wakeup_flag = 1;
|
||||
}
|
||||
} else {
|
||||
// 可能是电源波动导致的中断,忽略此次中断
|
||||
printf("Power Fluctuation - Ignored");
|
||||
}
|
||||
// // 阻止睡眠
|
||||
// BSP_BlockSleep();
|
||||
// // 关按键中断
|
||||
// BSP_KEY_ExitLowpower();
|
||||
|
||||
// printf("KEY IRQ");
|
||||
|
||||
// GPIOB_ClearITFlagBit(KEY_B_PIN);
|
||||
|
||||
// key_wakeup_flag = 1;
|
||||
|
||||
// if (R16_PB_INT_IF & KEY_B_PIN)
|
||||
// {
|
||||
// R16_PB_INT_IF = KEY_B_PIN;
|
||||
// // tmos_set_event(key_task_id, KEY_SCAN_EVT);
|
||||
// BSP_KEY_ExitLowpower();
|
||||
// }
|
||||
// tmos_set_event(key_task_id,KEY_SCAN_EVT);
|
||||
}
|
||||
|
|
|
@ -30,20 +30,9 @@ MultiTimer Multi_StopTask_t; //StopTask
|
|||
MultiTimer Multi_Loop_t; //Loop
|
||||
MultiTimer Multi_GetInfo_t; //siminfo
|
||||
|
||||
// 电源状态
|
||||
typedef enum {
|
||||
POWER_STATE_INIT,
|
||||
POWER_STATE_ON_START,
|
||||
POWER_STATE_ON_COMPLETE,
|
||||
POWER_STATE_OFF_START,
|
||||
POWER_STATE_OFF_COMPLETE
|
||||
} ml307_power_state_t;
|
||||
|
||||
static ml307_power_state_t ml307_power_state = POWER_STATE_INIT;
|
||||
static tmosTaskID ml307_task_id = INVALID_TASK_ID;
|
||||
|
||||
at_obj_t *ml307r_obj;
|
||||
uint8_t databuf[5] = {0x01,0xaa,0x12,0xde,0x39};
|
||||
|
||||
|
||||
int Ml307r_Gpio_Init(void)
|
||||
|
@ -58,7 +47,6 @@ int Ml307r_Gpio_Init(void)
|
|||
|
||||
GPIOB_ModeCfg(ML307_PWR_PIN, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -107,7 +95,7 @@ static uint8_t state = 0;
|
|||
#define CPIN_RETRY_INTERVAL_TIME (20*1000UL)
|
||||
#define CONNECT_RETRY_INTERVAL_TIME (20*1000UL)
|
||||
#define SEND_RETRY_INTERVAL_TIME (30*1000UL)
|
||||
#define STOP_TASK_INTERVAL_TIME (25*1000UL)
|
||||
#define STOP_TASK_INTERVAL_TIME (15*1000UL)
|
||||
#define LOOP_INTERVAL_TIME (30*1000UL)
|
||||
#define GETINFO_INTERVAL_TIME (20*1000UL)
|
||||
|
||||
|
@ -167,10 +155,11 @@ void StopTask_CallBack(MultiTimer* timer, void* userData)
|
|||
tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT);
|
||||
BSP_RequestSleep();
|
||||
}else{
|
||||
BSP_Ml307_Power_Off(); //关机
|
||||
// BSP_Ml307_Power_Off(); //关机
|
||||
tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT);
|
||||
BSP_RequestSleep();
|
||||
}
|
||||
IotFlag_t.Date_Sending_flag = 0;
|
||||
}
|
||||
|
||||
//模块准备就绪
|
||||
|
@ -530,7 +519,7 @@ static int BSP_Module_Connect_CtWing_Handle(at_env_t *e)
|
|||
{
|
||||
case 0:
|
||||
logDebug("create device...\r\n");
|
||||
e->println(e, "AT+MIPOPEN=0,\"TCP\",\"112.125.89.8\",42499,,1"); // 8.135.10.183,32994
|
||||
e->println(e, "AT+MIPOPEN=0,\"TCP\",\"112.125.89.8\",44679,,1"); // 8.135.10.183,32994
|
||||
e->reset_timer(e);
|
||||
e->state++;
|
||||
break;
|
||||
|
@ -819,13 +808,20 @@ void BSP_ML307_SendMessage(void)
|
|||
// 根据系统状态确定设备状态
|
||||
device_status_t device_status;
|
||||
|
||||
// 这里根据实际系统状态判断逻辑进行修改
|
||||
if (fault_state) {
|
||||
device_status = DEVICE_STATUS_FAULT;
|
||||
} else {
|
||||
// 检查其他状态,例如电池电量等
|
||||
// 这里可以添加更多状态检测逻辑
|
||||
device_status = DEVICE_STATUS_NORMAL;
|
||||
// // 这里根据实际系统状态判断逻辑进行修改
|
||||
// if (fault_state) {
|
||||
// device_status = DEVICE_STATUS_FAULT;
|
||||
// } else {
|
||||
// // 检查其他状态,例如电池电量等
|
||||
// // 这里可以添加更多状态检测逻辑
|
||||
// device_status = DEVICE_STATUS_NORMAL;
|
||||
// }
|
||||
|
||||
|
||||
if(IotFlag_t.Valve_Close_flag)
|
||||
{
|
||||
IotFlag_t.Valve_Close_flag = 0;
|
||||
device_status = DEVICE_STATUS_CLOSED;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1191,16 +1187,50 @@ uint16_t Ml307r_Handle(uint8_t task_id, uint16_t events)
|
|||
|
||||
void BSP_Ml307r_Init(void)
|
||||
{
|
||||
Ml307r_Gpio_Init();
|
||||
BSP_UART1_Init();
|
||||
Init_cJSON_With_TMOS();
|
||||
ml307r_obj = at_obj_create(&at_adapter);//Create AT communication object
|
||||
if(ml307r_obj != NULL)
|
||||
if(IotFlag_t.Date_Sending_flag == 0)
|
||||
{
|
||||
at_obj_set_urc(ml307r_obj, urc_table, sizeof(urc_table) / sizeof(urc_table[0]));
|
||||
IotFlag_t.module_init_flag = 1;
|
||||
BSP_BlockSleep();
|
||||
BSP_UART1_Init();
|
||||
Ml307r_Gpio_Init();
|
||||
ml307r_obj = at_obj_create(&at_adapter);//Create AT communication object
|
||||
if(ml307r_obj != NULL)
|
||||
{
|
||||
Init_cJSON_With_TMOS();
|
||||
at_obj_set_urc(ml307r_obj, urc_table, sizeof(urc_table) / sizeof(urc_table[0]));
|
||||
IotFlag_t.module_init_flag = 1;
|
||||
IotFlag_t.Date_Sending_flag = 1;
|
||||
BSP_BlockSleep();
|
||||
ml307_task_id = TMOS_ProcessEventRegister(Ml307r_Handle);
|
||||
// tmos_set_event(ml307_task_id, ML307_PERIODIC_EVT);
|
||||
tmos_start_task(ml307_task_id, ML307_PERIODIC_EVT, MS1_TO_SYSTEM_TIME(300)); //电流稳定后再启动模组
|
||||
}
|
||||
}else
|
||||
{
|
||||
logDebug("ERROR ,Iot_Send_Data!!!\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
void Iot_Send_Data(void)
|
||||
{
|
||||
if(IotFlag_t.Date_Sending_flag == 0)
|
||||
{
|
||||
logDebug("Iot_Send_Data!!!\r\n");
|
||||
BSP_UART1_Init();
|
||||
Ml307r_Gpio_Init();
|
||||
logDebug("Ml307r_Init_Finish!!!\r\n");
|
||||
if(ml307r_obj != NULL)
|
||||
{
|
||||
IotFlag_t.Date_Sending_flag = 1;
|
||||
IotFlag_t.module_init_flag = 1;
|
||||
BSP_BlockSleep();
|
||||
ml307_task_id = TMOS_ProcessEventRegister(Ml307r_Handle);
|
||||
// tmos_set_event(ml307_task_id, ML307_PERIODIC_EVT);
|
||||
tmos_start_task(ml307_task_id, ML307_PERIODIC_EVT, MS1_TO_SYSTEM_TIME(300)); //电流稳定后再启动模组
|
||||
}else
|
||||
{
|
||||
BSP_Ml307r_Init();
|
||||
}
|
||||
}else
|
||||
{
|
||||
logDebug("ERROR ,Iot_Send_Data!!!\r\n");
|
||||
}
|
||||
ml307_task_id = TMOS_ProcessEventRegister(Ml307r_Handle);
|
||||
tmos_set_event(ml307_task_id, ML307_PERIODIC_EVT);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue