⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_event.c

📁 单相 CPU卡表复费率电能表,内部有提供I2C驱动,CPU卡驱动,NEC单片机0513等
💻 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 + -