int get_battery_volt() { int fd_ad = -1; char ad_val[32]; int volt = -1; fd_ad = open(AD_NAME, O_RDONLY); if (fd_ad >= 0) { int size = read(fd_ad, ad_val, 32); if (size > 0) { int val = atoi(ad_val); volt = val * VREF / AD_MAX; if (volt < BATTERY_ALARM_VOLT) { set_sys_state(BIT6_BATTERY, STATE_BATTERY_FAIL); light_battery_alarm(1); } else { set_sys_state(BIT6_BATTERY, STATE_BATTERY_OK); light_battery_alarm(0); } } close(fd_ad); } return volt; }
static void * proc_control(void *args) { struct frame_manager *manager = get_frame_manager(CONTROL_MANAGER); struct record_manager * record_manager=get_record_manager(); struct block_filter *filter = NULL; struct frame *pframe = NULL; struct block * pblock = NULL; char buffer[64]; int length; char dest_addr = 0; char src_addr = 0; char operation = 0; char cmd = 0; char tmp; if (manager == NULL) return NULL; filter = get_frame_filter(manager); while (1) { pblock = get_block(filter, TIMEOUT_MAIN_UNIT, BLOCK_FULL); if (pblock != NULL) { set_sys_state(BIT5_MAIN_UNIT,STATE_MAINUNIT_OK); light_on(0); light_main_alarm(0); pframe = (struct frame*) pblock->data; pframe->length = pblock->data_length; dest_addr = destination_of_frame(pframe); src_addr = pframe->data[4]; cmd = command_of_frame(pframe); operation = operation_of_frame(pframe); if (src_addr == MASTER_ADDRESS) { switch (dest_addr) { case RADIO_450M_ADDRESS: if ((operation == 0x03) && (cmd == 0x20)) { //向450M发送机车号 char * cab_id = get_id(); get_frame_real_data(pframe, buffer, &length); buffer[8] = 0; tmp = buffer[3]; buffer[3] = 0; int cab_type = atoi(buffer); buffer[3] = tmp; sprintf(cab_id, "%s-%s", get_cab_code(cab_type), buffer + 3); } break; case ALL_MMI_ADDRESS: if ((operation == 0x03) && (cmd == 0x46)) { //关机命令 flush_all_data(record_manager); } break; } } if (dest_addr == RECORD_ADDRESS) { switch (operation) { case 1: //维护信息 // echo off tmp = 0; if (src_addr == 0x01) { tmp = 0x01; } else if ((src_addr == 0x03) || (src_addr == 0x04)) { tmp = 0x41; } send_frame(manager, RECORD_ADDRESS, src_addr, 1, tmp, pframe->data + 9, 2); switch (cmd) { case (char) 0x33: //播放控制 { if (pframe->data[10] == (char) 0xff) { start_play(src_addr); } else if (pframe->data[10] == 0) { stop_play(); } } break; case (char) 0xfa: //问询测试 break; case (char) 0x34: //查询时钟 { struct tm time; get_time(&time); buffer[0] = to_bcd(time.tm_year - 100); //year buffer[1] = to_bcd(time.tm_mon + 1); buffer[2] = to_bcd(time.tm_mday); buffer[3] = to_bcd(time.tm_hour); buffer[4] = to_bcd(time.tm_min); buffer[5] = to_bcd(time.tm_sec); send_frame(manager, RECORD_ADDRESS, src_addr, 1, (char) 0x91, buffer, 6); } break; case (char) 0x35: //设置时钟 break; case (char) 0xa5: //查询软件版本 { bcopy(version, buffer, 16); send_frame(manager, RECORD_ADDRESS, src_addr, 1, (char) 0xaa, buffer, 16); } break; } break; case 3: //不需要应答 break; } } put_block(pblock, BLOCK_EMPTY); } else { set_sys_state(BIT5_MAIN_UNIT,STATE_MAINUNIT_FAIL); light_main_alarm(1); } } return NULL; }
void delay_reload(void) { set_sys_state(SYS_STATE_DELAY_RELOAD); }
int main(void) { u32 endtime; system_state = SYS_STATE_INIT; wifi_state = 0; reset_uart_init(); default_gpio_init(); check_gotostandby(); int2host_init(); int2host(1); NFC_TAG_INIT(); mxchipInit(); userResetConfig(); reset_uart_deinit(); get_config(); tcpip_init(); emsp_init(); uart_init(); http_init(); #ifndef USE_0302 APP_Verify_Program_Code(); #endif dual_uap_start(); SetTimer(1, main_function_tick, 1); wifi_option_config(); int2host(0); system_is_bootup(); //EMSP_CMD_SYSTEM_BOOTUP while(1) { if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) != Bit_RESET) IWDG_ReloadCounter(); // Reload IWDG counter else reload(); if(NFC_STARTED){ SetTimer(3000,saveNFCConfig,0); NFC_STARTED = 0; //NFC task started NFC_STARTED2 = 1; //NFC task pending } http_tick(); // HTTP Server mxchipTick(); // wifi, network function switch (system_state) { case SYS_STATE_RESET: wait_uart_dma_clean(); NVIC_SystemReset(); break; case SYS_STATE_GOTO_DEFAULT: default_config(); save_config(); NVIC_SystemReset(); break; case SYS_STATE_DELAY_RELOAD: endtime = MS_TIMER+500; while(endtime>MS_TIMER) mxchipTick(); NVIC_SystemReset(); break; case SYS_STATE_WPS: // User pushed WPS PBC, try wps. user_wifi_stop(); wps_pbc_start(); set_sys_state(last_work_state); break; case SYS_STATE_WPS_FAIL: wps_ing = 0; user_wifi_start(); set_sys_state(last_work_state); set_conncetion_status(0); break; case SYS_STATE_WPS_SUCCESS: wps_ing = 0; set_sys_state(last_work_state); save_config(); set_conncetion_status(0); break; default: break; } } }
void goto_wps(void) { set_sys_state(SYS_STATE_WPS); wps_ing = 1; }
void goto_default(void) { set_sys_state(SYS_STATE_GOTO_DEFAULT); }