static void bear_notify_cb(cbm_bearer_state_enum state, u8 ip_addr[4]) { LOG_DEBUG("bear_notify state: %s.", getStateDescription(state)); switch (state) { case CBM_ACTIVATED: LOG_DEBUG("local ip is %d.%d.%d.%d", ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]); fsm_run(EVT_BEARER_HOLD); break; case CBM_DEACTIVATED: fsm_run(EVT_BEARER_DEACTIVATED); break; case CBM_GPRS_AUTO_DISC_TIMEOUT: LOG_ERROR("CBM_GPRS_AUTO_DISC_TIMEOUT happened!"); eat_reset_module(); break; case CBM_ACTIVATING: case CBM_DEACTIVATING: //no need to handle break; default: LOG_ERROR("BEAR_NOTIFY %d not handled", state); break; } }
static void soc_notify_cb(s8 s,soc_event_enum event,eat_bool result, u16 ack_size) { u8 buffer[1152] = {0};//1K + 128 for upgrade module s32 rc = 0; LOG_DEBUG("SOCKET notify:socketid(%d), event(%s).", s, getEventDescription(event)); switch (event) { case SOC_READ: rc = eat_soc_recv(socket_id, buffer, 1152);//1K + 128 for upgrade module if (rc > 0) { client_proc(buffer, rc); } else { LOG_ERROR("eat_soc_recv error:rc=%d!", rc); } break; case SOC_CONNECT: if(result) { LOG_DEBUG("SOC_CONNECT success."); fsm_run(EVT_SOCKET_CONNECTED); } else { LOG_ERROR("SOC_CONNECT failed, maybe the server is OFF!"); fsm_run(EVT_SOCKET_CONNECT_FAILED); eat_soc_close(s); } break; case SOC_CLOSE: LOG_INFO("SOC_CLOSE:socketid = %d", s); eat_soc_close(s); fsm_run(EVT_SOCKET_DISCONNECTED); break; case SOC_ACKED: LOG_DEBUG("acked size of send data: %d.", ack_size); break; default: LOG_INFO("SOC_NOTIFY %d not handled", event); break; } }
static int event_timer(const EatEvent_st* event) { switch (event->data.timer.timer_id) { case TIMER_LOOP: LOG_DEBUG("TIMER_LOOP expire."); fsm_run(EVT_LOOP); eat_timer_start(event->data.timer.timer_id, setting.main_loop_timer_period); break; case TIMER_SEEKAUTOOFF: LOG_DEBUG("TIMER_SEEKAUTOOFF expire!"); setSeekMode(EAT_FALSE); break; case TIMER_GPS_SEND: cmd_GPSPack(); eat_timer_start(event->data.timer.timer_id, setting.gps_send_period); break; case TIMER_MSG_RESEND: msg_resend(); eat_timer_start(event->data.timer.timer_id, 60*1000); break; default: LOG_ERROR ("timer(%d) not processed!", event->data.timer.timer_id); break; } return 0; }
static int event_mod_ready_rd(const EatEvent_st* event) { u8 buf[256] = {0}; u16 len = 0; len = eat_modem_read(buf, 256); if (!len) { LOG_ERROR("modem received nothing."); return -1; } LOG_DEBUG("modem recv: %s", buf); if(get_manager_ATcmd_state()) { set_manager_ATcmd_state(EAT_FALSE); cmd_get_AT(buf); } if (modem_IsCallReady(buf)) { //diag_check(); // because diagnosis is not accurate, remove it fsm_run(EVT_CALL_READY); } if(modem_IsCCIDOK(buf)) { cmd_SimInfo(buf + 9);//str(AT+CCID\r\n) = 9 } return 0; }
static void hostname_notify_cb(u32 request_id, eat_bool result, u8 ip_addr[4]) { if (result == EAT_TRUE) { LOG_DEBUG("hostname notify:%s -> %d.%d.%d.%d.", setting.domain, ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3], setting.port); socket_connect(ip_addr); //TODO:this should be done in function action_hostname2ip fsm_run(EVT_HOSTNAME2IP); } else { LOG_ERROR("hostname_notify_cb error: request_id = %d", request_id); fsm_run(EVT_HOSTNAME2IP_FAILED); } return; }
void fsm( event_t *evt ) { /* Start with the init loop. */ if (fsm_state == FSM_INIT) { fsm_init( evt ); return; } else if (fsm_state == FSM_ERR) { LED0_ON(); return; } /* Handle normal events. */ switch (evt->type) { case EVENT_TYPE_TIMER: if (evt->timer.timer == 0) { LED0_TOGGLE(); timer_start( 0, 500, NULL ); } else if (evt->timer.timer == 1) { if (fsm_state == FSM_SEARCH) fsm_search(); else if (fsm_state == FSM_RUN) fsm_run(); } break; case EVENT_TYPE_ADC: fsm_adcBuf[ fsm_adc ] = ADCL; fsm_adcBuf[ fsm_adc ] += ADCH<<8; /*printf( "adc %d: %u", fsm_adc, fsm_adcBuf[ fsm_adc ] );*/ fsm_adc = 1-fsm_adc; adc_start( fsm_adc ); break; default: break; } }
int socket_sendData(void* data, s32 len) { s32 rc; LOG_HEX((const char*)data, len); rc = eat_soc_send(socket_id, data, len); if (rc >= 0) { LOG_DEBUG("socket send data successful."); } else { if (rc == SOC_PIPE || rc == SOC_NOTCONN) { fsm_run(EVT_SOCKET_DISCONNECTED); //这个地方仅为保护作用,正常的socket断链应该会通过soc_notify_cb来通知 } LOG_ERROR("sokcet send data failed:%d!", rc); } return rc; }
int axe_run(LIFE_S *self) { DOTA_RETURN_IF_NULL(self, ERR_NULL_POINTER); return fsm_run(&axe_fsm, self); }