📄 sys_event.c
字号:
#include "includes.h"
_sys_evt_word_t _sys_event;
unsigned short modem_autoload_timer = 0;
unsigned char seconds = 0;
unsigned char send_sms_timeout = 0;
unsigned char modem_load_flag = 0;
unsigned char modem_ri_last_time = 0;
void sys_evt_add( unsigned char evt )
{
_disable_interrupt();
_sys_event |= evt;
_enable_interrupt();
}
void sys_evt_del( unsigned char evt )
{
_disable_interrupt();
_sys_event &=~ (evt|SYS_EVT_REVERSE);
_enable_interrupt();
}
void on_tick(void)
{
unsigned int len;
len = mcu_uart_check();
if( len > 0 )
{
sys_evt_add(SYS_EVT_FRMMCU_FRAME);
}
len = modem_uart_check();
if( len > 0 )
{
sys_evt_add(SYS_EVT_FRMMODEM_FRAME);
}
}
void on_second(void)
{
if( modem_load_flag != 0 )
{
if( modem_state == _m22_idle )
{
if( modem_load_flag == 0x01 )
{
modem_load_flag = 0;
modem_logon_internet();
}
else
{
modem_load_flag++;
if( modem_load_flag == MODEM_LOAD_FLAG_ATO2 )
{
modem_load_flag = 0;
at_send_cmd( (char *)&ATC_ATO[0], 5 );
}
}
}
}
redundancy_timer();
if( modem_auto_tx_flag )
{
if( modem_auto_tx_cnt < 2 )
{
modem_auto_tx_cnt++;
TimerCounter[TIMER_PROC_AUTO_TXINFO] = 1;
}
else
{
modem_auto_tx_cnt = 0;
modem_auto_tx_flag = 0;
TimerCounter[TIMER_PROC_AUTO_TXINFO] = 0;
}
}
if( ( modem_state == _m22_online_csd ) || ( modem_state == _m22_online_gprs ) )
{
if( hand_wait_time )
{
hand_wait_time--;
if( hand_wait_time == 0 )
{
modem_hang_up();
modem_power_off();
}
}
}
else
{
hand_wait_time = 0;
}
if( seconds++ >= ConMinute )
{
seconds = 0;
sys_evt_add( SYS_EVT_MINUTE );
}
if( at_resp_cnt >= 10 )
{
at_resp_cnt = 0;
modem_power_off();
}
if( modem_state == _m22_online_gprs )
{
if( !( MODULE_RI_IN & MODULE_RI ) )
{
modem_ri_last_time++;
if( modem_ri_last_time > 3 )
{
modem_ri_last_time = 0;
modem_load_flag = MODEM_LOAD_FLAG_ATO1;
modem_hang_up();
}
}
else
{
modem_ri_last_time = 0;
}
}
if( at_send_cmd_timeout )
{
at_send_cmd_timeout --;
if( at_send_cmd_timeout == 0 )
{
if( modem_state > _m22_idle )
{
if( modem_state == _m22_sending_sms )
{
modem_wait_for_send_sms = 0;
modem_power_off();
}
else if( modem_state == _m22_reading_sms )
{
modem_del_sms();
sms_pos --;
set_modem_state( _m22_idle, m_resp_idle );
}
else if( ( modem_state == _m22_logon ) || ( modem_state == _m22_answering_dial ) )
{
if( modem_state == _m22_logon )
{
modem_load_line_step = 0;
if( modem_reload_count != 0 )
{
modem_reload_count--;
modem_load_flag = 1;
}
}
modem_power_off();
}
else if( modem_state == _m22_resume_online)
{
modem_load_flag = 1;
modem_reload_count = GPRS_LOAD_MAX_CNT;
modem_power_off();
}
else
{
set_modem_state( _m22_idle, m_resp_idle );
}
}
}
}
}
void on_frmmcu_frame(void)
{
unsigned char pos;
if( ( modem_state == _m22_online_csd ) || ( modem_state == _m22_online_gprs ) )
{
if( modem_tx_status == FRAME_TX_PROCESS )
{
STMK0 = 1;
modem_tx_send_ptr = 0;
TXS0 = modem_tx_buf[modem_tx_send_ptr++];
STMK0 = 0;
hand_wait_time = (unsigned short)heart_beat_time*60;
return;
}
else if( modem_tx_status == FRAME_TX_START )
{
modem_uart_start_tx( (unsigned char *)&mcu_rx_buf[0], mcu_rx_len, 0 );
}
if( modem_auto_tx_flag )
{
modem_auto_tx_flag = 0;
modem_auto_tx_cnt = 0;
TimerCounter[TIMER_PROC_AUTO_TXINFO] = 0;
}
}
pos = (unsigned char)modem_parse_dl645( mcu_rx_buf, mcu_rx_len );
if( pos != ERROR )
{
modem_rx_frame_flag = 1;
switch( mcu_rx_buf[pos+FRM_COMMAND] )
{
case 0xF9:
modem_read_software_ver();
goto frmmcu_end;
case 0xEC:
modem_at_command_set(pos);
goto frmmcu_end;
default:
break;
}
}
frmmcu_end:
mcu_uart_start_to_rx();
}
const unsigned char _hang_up_frame[]={0x52,0x03,0x03,0x06};
void on_frmmodem_frame(void)
{
unsigned char pos;
if( ( modem_state == _m22_online_csd ) || ( modem_state == _m22_online_gprs ) )
{
hand_wait_time = (unsigned short)heart_beat_time*60;
if( mcu_tx_status == FRAME_TX_PROCESS )
{
STMK6 = 1; // 关发送中断
mcu_tx_send_ptr = 0;
RS485_TX_EN();
RS232_TXD_OUT |= RS232_TXD;
STIF6=0;
STPR6=1;
TXB6 = mcu_tx_buf[mcu_tx_send_ptr++];
STMK6 = 0;
return;
}
}
if( is_at_cmd( (char *)modem_rx_buf, modem_rx_len ) )
{
if( at_parse_resp( (char *)modem_rx_buf, modem_rx_len ) == 1 )
{
goto PARSE_FRM_DL645;
}
else
{
goto frmmodem_end;
}
}
else
{
PARSE_FRM_DL645:
pos = (unsigned char)( modem_parse_dl645( modem_rx_buf, modem_rx_len ) );
if( pos != ERROR )
{
modem_rx_frame_flag = 0;
if( modem_state == _m22_idle)
{
modem_state = _m22_online_gprs;
}
if( modem_state == _m22_online_gprs )
{
hand_wait_time = (unsigned short)heart_beat_time*60;
}
switch( modem_rx_buf[FRM_COMMAND+pos] )
{
case 0xFC:
modem_config_remote(pos);
goto frmmodem_end;
case 0xFA:
modem_respone_sim_number();
goto frmmodem_end;
case 0xFB:
modem_config_security(pos);
goto frmmodem_end;
case 0xFD:
modem_autoload_timer = 0;
modem_hang_up();
modem_power_off();
goto frmmodem_end;
case 0xF9:
modem_read_software_ver();
goto frmmodem_end;
case 0xF2:
modem_return_set_information();
goto frmmodem_end;
default:
break;
}
}
if( mcu_tx_status == FRAME_TX_START )
{
mcu_uart_start_to_tx( (unsigned char *)&modem_rx_buf[0], modem_rx_len );
if( ( modem_state == _m22_online_csd ) || ( modem_state == _m22_online_gprs ) )
{
if( is_equal( (unsigned char *)&modem_rx_buf[0], (unsigned char *)&_hang_up_frame[0], 4 ) == OK )
{
modem_hang_up();
modem_power_off();
}
}
}
}
frmmodem_end:
modem_uart_start_rx();
}
void on_minute(void)
{
unsigned short temp=0;
if( soft_switch & SOFT_SWITCH_AUTO_LOAD )
{
if( soft_switch & SOFT_SWITCH_GRADE )
{
E2promRead( MANUFACTURER_AUTOLOAD_TIME, (unsigned char *)&temp, LEN_LOAD_TIME );
}
else
{
E2promRead( CLIENT_AUTOLOAD_TIME, (unsigned char *)&temp, LEN_LOAD_TIME );
}
if( temp == 0 ) temp = 1;
temp *= 5;
if( modem_autoload_timer++ >= temp )
{
modem_autoload_timer = 0;
if( modem_state == _m22_idle )
{
modem_load_flag = 1;
modem_reload_count = GPRS_LOAD_MAX_CNT;
}
}
}
}
void on_modem_uart_init(void)
{
modem_uart_start_rx();
}
void on_mcu_uart_init(void)
{
mcu_uart_start_to_rx();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -