void component_key_service() { char szTrace[256]; sprintf(szTrace, "key = service"); post_trace(szTrace); mobile_state(); if(!prepare_gsm()) { post_trace("gsm power on error"); return; } if(!phone_dial(TEST_PHONE)) { post_trace("dial error"); power_device(ED_GSM, EP_OFF); return; } post_trace("call established"); phone_hand_free(); phone_hangup(); power_device(ED_GSM, EP_OFF); post_trace("service completed"); mobile_state(); }
int main(int argc, char const *argv[]) { double operating_time, operating_current; double discharge_time; //ask user for battery info printf("%s", "Enter battery voltage > "); scanf("%lf", &bat.voltage); printf("%s", "Enter power rating of the battery (in joules) > "); scanf("%lf", &bat.energy_limit); printf("%s", "What is battery’s available energy (in joules) > "); scanf("%lf", &bat.energy_available); printf("%s", "What is operating time (in seconds) > "); scanf("%lf", &operating_time); printf("%s", "What is operating current (int amps) > "); scanf("%lf", &operating_current); /****** start calculation *******/ bat = power_device (bat, operating_time, operating_current); printf("\n\nthe outcome is %d\n",bat.dec); printf("the updated energy is %f\n\n\n",bat.energy_available); discharge_time = max_time(bat, operating_time, operating_current); printf("%s%f\n", "Discharge time with current load:\n", discharge_time); bat = recharge (bat); discharge_time = max_time(bat, operating_time, operating_current); printf("%s%f\n", "Discharge time after the battery is fully recharged:\n", discharge_time); //debug //printf("%f %f %f\n", bat.voltage, bat.energy_limit, bat.energy_available); return 0; }
void component_key_boardcast() { const uint8 DATA_SIZE = sizeof(HMC5883L_data) + sizeof(RTC_Clock) + sizeof(MMA8451_data); char szTrace[piece_size], szData[piece_size]; sprintf(szTrace, "key = broadcast"); post_trace(szTrace); mobile_state(); if(!prepare_transport()) { post_trace("gprs power on error"); return; } read_file("temp", szData, DATA_SIZE); post_trace("read sensor data in file named \"temp\" in tf card"); communication_test((uchar*)szData, DATA_SIZE, (uchar*)szTrace); gprs_disconnect(); power_device(ED_GPRS, EP_OFF); if(memcmp(szData, szTrace, DATA_SIZE) == 0) { HMC5883L_data *data_5883 = (HMC5883L_data*)szTrace; RTC_Clock *clock = (RTC_Clock*)(szTrace + sizeof(HMC5883L_data)); Sensor *data_8451 = (Sensor*)(szTrace + sizeof(HMC5883L_data) + sizeof(RTC_Clock)); sprintf(szTrace, "传输成功, 5883, x %d, y %d, z %d, 时间, 20%02d年%02d月%02d日%02d时%02d分%02d秒, 8451, x %d, y %d, z %d", data_5883->x, data_5883->y, data_5883->z, clock->year, clock->month, clock->day, clock->hour, clock->minute, clock->second, data_8451->x, data_8451->y, data_8451->z); } else { strcpy(szTrace, "传输失败"); } report_content(szTrace); post_trace("broadcast completed"); mobile_state(); }
void idle_task(void *pvParam) { while(1) { if(KEY_Pressed(KEY_State(), key_right)) { // 如果是KEY1被按下 while(KEY_Pressed(KEY_State(), key_right)); // 等待按键释放 power_device(ED_SWITCH, EP_OFF); } else if(KEY_Pressed(KEY_State(), key_left)) { // 如果是KEY2被按下 while(KEY_Pressed(KEY_State(), key_left)); // 等待按键释放 POWER_Control(dev_mobile, pt_on); } else if(KEY_Pressed(KEY_State(), key_alarm)) { while(KEY_Pressed(KEY_State(), key_alarm)); // 等待按键释放 } else if(KEY_Pressed(KEY_State(), key_service)) { while(KEY_Pressed(KEY_State(), key_service)); // 等待按键释放 } else if(KEY_Pressed(KEY_State(), key_broadcast)) { while(KEY_Pressed(KEY_State(), key_broadcast)); // 等待按键释放 } else if(KEY_PowerOff()) { POWER_Off(); } } }
void mobile_off_time() { int nCount=0; char s[10] = {0}; uint8 nPowerState = POWER_State(dev_mobile); if(nPowerState == pt_off){ post_trace("mobile state is off"); return; } post_trace("mobile power off start"); power_device(ED_SWITCH, EP_OFF); while(1){ nPowerState = POWER_State(dev_mobile); if(nPowerState == pt_off){ post_trace("end"); break; } // delay_ms(100); ++nCount; } sprintf(s,"mobile power off:%d",nCount); post_trace(s); }
void state_task(void *pvParam) { LED_Light(led_red, false); LED_Light(led_green, false); LED_Light(led_blue, false); power_screen(true); while(1) { if(KEY_Pressed(KEY_State(), key_right)) { // 如果是KEY1被按下 while(KEY_Pressed(KEY_State(), key_right)); // 等待按键释放 post_trace("power on"); POWER_Control(dev_mobile, pt_on); display_clear(); screen_step(0); } else if(KEY_Pressed(KEY_State(), key_left)) { // 如果是KEY2被按下 while(KEY_Pressed(KEY_State(), key_left)); // 等待按键释放 post_trace("power off"); //POWER_Control(dev_mobile, pt_off); power_device(ED_SWITCH, EP_OFF); display_clear(); screen_step(1); } else if(KEY_Pressed(KEY_State(), key_alarm)) { while(KEY_Pressed(KEY_State(), key_alarm)); // 等待按键释放 mobile_state(); display_clear(); screen_step(4); } else if(KEY_Pressed(KEY_State(), key_service)) { uint8 nPowerState; while(KEY_Pressed(KEY_State(), key_service)); // 等待按键释放 mobile_state(); nPowerState = POWER_State(dev_mobile); if(pt_comm == nPowerState) { post_trace("shutdown gsm"); power_device(ED_GSM, EP_OFF); } else { post_trace("poweron gsm"); power_device(ED_GSM, EP_ON); } display_clear(); screen_step(2); } else if(KEY_Pressed(KEY_State(), key_broadcast)) { uint8 nPowerState; while(KEY_Pressed(KEY_State(), key_broadcast)); // 等待按键释放 mobile_state(); nPowerState = POWER_State(dev_mobile); if(pt_hibernation == nPowerState) { post_trace("wakup"); POWER_Control(dev_mobile, pt_wakeup); } else { post_trace("hibernation"); POWER_Control(dev_mobile, pt_hibernation); } display_clear(); screen_step(3); } else if(KEY_PowerOff()) { POWER_Off(); return; } } }
void power_task(void *pvParam) { LED_Light(led_red, true); LED_Light(led_green, true); LED_Light(led_blue, true); if(KEY_PowerOff()) { post_trace("power key is down"); POWER_Off(); return; } { POWER_Control(dev_mobile, pt_off); POWER_Control(dev_mobile, pt_on); power_device(ED_GPRS, EP_OFF); power_device(ED_GSM, EP_OFF); power_device(ED_BLUETOOTH, EP_OFF); power_device(ED_GPS, EP_OFF); post_trace("mobile power on"); } LED_Light(led_red, false); LED_Light(led_green, false); LED_Light(led_blue, false); while(1) { if(KEY_Pressed(KEY_State(), key_right)) { // 如果是KEY1被按下 while(KEY_Pressed(KEY_State(), key_right)); // 等待按键释放 post_trace("mobile hibernation"); POWER_Control(dev_mobile, pt_hibernation); } else if(KEY_Pressed(KEY_State(), key_left)) { // 如果是KEY2被按下 while(KEY_Pressed(KEY_State(), key_left)); // 等待按键释放 post_trace("mobile wakeup"); power_device(ED_GSM, EP_ON); } else if(KEY_Pressed(KEY_State(), key_alarm)) { static bool bOn = false; while(KEY_Pressed(KEY_State(), key_alarm)); // 等待按键释放 if(!bOn) { power_screen(true); draw_rectangle(55, 0, 18, 64); bOn = true; } else { power_screen(false); bOn = false; } } else if(KEY_Pressed(KEY_State(), key_service)) { static bool bOn = false; while(KEY_Pressed(KEY_State(), key_service)); // 等待按键释放 if(!bOn) { LED_Light(led_red, true); bOn = true; } else { LED_Light(led_red, false); bOn = false; } } else if(KEY_Pressed(KEY_State(), key_broadcast)) { while(KEY_Pressed(KEY_State(), key_broadcast)); // 等待按键释放 post_trace("arm hibernation"); POWER_Control(dev_system, pt_hibernation); } else if(KEY_PowerOff()) { POWER_Off(); return; } } }
void protocol_download() { UpdateResp update = { 0 }; uint8 nIndex; uint16 nOffset; power_device(ED_GPRS, EP_ON); post_trace("gprs power on"); if(!gprs_dial(APN_USER, APN_PASS)) { post_trace("gprs dial error"); power_device(ED_GPRS, EP_OFF); return; } if(!gprs_connect(SERVER_ADDR, SERVER_PORT)) { post_trace("gprs connect error"); power_device(ED_GPRS, EP_OFF); return; } if(!request_update(&update)) { gprs_disconnect(); power_device(ED_GPRS, EP_OFF); return; } complete_communication(); for(nIndex = 0; nIndex < ECT_COUNT; ++nIndex) { if(0 == update.update[nIndex] || EV_REMOVE == update.update[nIndex]) { continue; } if(ECT_HEALTH == nIndex) { uchar szBuf[SERVER_DATA_SIZE] = { 0 }; char szPath[max_path] = { 0 }; uint8 nLen; sprintf(szPath, "%s0", HEALTH_PATH); for(nOffset = 0; nOffset < update.update[nIndex]; ++nOffset) { nLen = SERVER_DATA_SIZE; if(!download_health(nOffset, szBuf, &nLen)) { break; } if(!write_file_ex(szPath, szBuf, nLen, nOffset * SERVER_DATA_SIZE)) { break; } } complete_communication(); } else if(ECT_CONFIG == nIndex) { Config config = { 0 }; if(!download_config(0, &config)) { continue; } save_server_config(&config); complete_communication(); } else if(ECT_RELATION == nIndex) { Relation relation = { 0 }; char szPath[max_path] = { 0 }; uint8 nFile = 0; if(EV_REMOVE == update.update[nIndex]) { // remove relation continue; } for(nOffset = 0; nOffset < update.update[nIndex]; ++nOffset) { if(!download_relation(nOffset, &relation)) { continue; } sprintf(szPath, "%s%d", RELATION_PATH, nFile++); if(!write_file(szPath, &relation, sizeof(Relation))) { --nFile; } } complete_communication(); } else if(ECT_REMIND == nIndex) { Remind remind = { 0 }; char szPath[max_path] = { 0 }; uint8 nFile = 0; if(EV_REMOVE == update.update[nIndex]) { // remove remind continue; } for(nOffset = 0; nOffset < update.update[nIndex]; ++nOffset) { if(!download_remind(nOffset, &remind)) { continue; } sprintf(szPath, "%s%d", RELATION_PATH, nFile++); if(!write_file(szPath, &remind, sizeof(Remind))) { --nFile; } } complete_communication(); } } gprs_disconnect(); power_device(ED_GPRS, EP_OFF); }
void protocol_upload() { uint8 nIndex; char szPath[max_path] = { 0 }; uchar szData[BUFFER_SIZE] = { 0 }; bool bRet = true; power_device(ED_GPRS, EP_ON); post_trace("gprs power on"); if(!gprs_dial(APN_USER, APN_PASS)) { post_trace("gprs dial error"); power_device(ED_GPRS, EP_OFF); return; } if(!gprs_connect(SERVER_ADDR, SERVER_PORT)) { post_trace("gprs connect error"); power_device(ED_GPRS, EP_OFF); return; } for(nIndex = 0; nIndex < 3 && bRet; ++nIndex) { sprintf(szPath, "%s%d", BASE_PATH, nIndex); if(!read_file(szPath, szData, sizeof(Base))) { continue; } bRet = upload_base((BasePtr)szData); if(!bRet) { break; } } for(nIndex = 0; nIndex < 3 && bRet; ++nIndex) { sprintf(szPath, "%s%d", ACTIVITY_PATH, nIndex); if(!read_file(szPath, szData, sizeof(Activity))) { continue; } bRet = upload_activity((ActivityPtr)szData); if(!bRet) { break; } } for(nIndex = 0; nIndex < 3 && bRet; ++nIndex) { sprintf(szPath, "%s%d", STEP_PATH, nIndex); if(!read_file(szPath, szData, sizeof(Step))) { continue; } bRet = upload_step((StepPtr)szData); if(!bRet) { break; } } for(nIndex = 0; nIndex < 3 && bRet; ++nIndex) { sprintf(szPath, "%s%d", EVENT_PATH, nIndex); if(!read_file(szPath, szData, sizeof(Event))) { continue; } bRet = upload_event((EventPtr)szData); if(!bRet) { break; } } for(nIndex = 0; nIndex < 3 && bRet; ++nIndex) { sprintf(szPath, "%s%d", POSITION_PATH, nIndex); if(!read_file(szPath, szData, sizeof(Position))) { continue; } bRet = upload_position((PositionPtr)szData); if(!bRet) { break; } } complete_communication(); gprs_disconnect(); power_device(ED_GPRS, EP_OFF); }