/*********************************************************** * Function: * Description: * Input: * Input: * Output: * Return: * Others: ***********************************************************/ static void keypress( unsigned int key ) { if(fupgrading) return; switch( KeyValue ) { case KeyValueMenu: pMenuItem=&Menu_5_other; pMenuItem->show(); CounterBack=0; if(tid_upgrade) /*正在升级中*/ { rt_thread_delete(tid_upgrade); } break; case KeyValueOk: if(BD_upgrad_contr==1) menu_set(); if(menu_pos==0) { tid_upgrade = rt_thread_create( "upgrade", thread_gps_upgrade_uart, (void*)msg, 1024, 5, 5 ); if( tid_upgrade != RT_NULL ) { msg("I等待串口升级"); rt_thread_startup( tid_upgrade ); }else { msg("E线程创建失败"); } }else /*U盘升级*/ { tid_upgrade = rt_thread_create( "upgrade", thread_gps_upgrade_udisk, (void*)msg, 1024, 5, 5 ); if( tid_upgrade != RT_NULL ) { msg("I等待U盘升级"); rt_thread_startup( tid_upgrade ); }else { msg("E线程创建失败"); } } break; case KeyValueUP: menu_pos=menu_pos^0x01; menu_set(); break; case KeyValueDown: menu_pos=menu_pos^0x01; menu_set(); break; } KeyValue = 0; }
magnify () { int pid; extern int errno; menu_set ( menu_find ( main_menu, MENU_STRING, "magnify", 0 ), MENU_INACTIVE, TRUE, 0 ); pid = vfork (); if ( pid == -1 ) /* fork failed */ { printf ( "fork failed errno is %d\n", errno ); } else if ( pid ) /* parent */ { notify_set_wait3_func ( canvas, mag_handler, pid ); } else /* child */ { execlp ( "/bin/X11/xmag", "xmag", "-display", getenv("DISPLAY"), (char *) 0); printf ( "exec failed\n" ); } }
Notify_value mag_handler () { menu_set ( menu_find ( main_menu, MENU_STRING, "magnify", 0 ), MENU_INACTIVE, FALSE, 0 ); return NOTIFY_DONE; }
/*********************************************************** * Function: * Description: * Input: * Input: * Output: * Return: * Others: ***********************************************************/ static void show( void ) { menu_pos=0; menu_set(); }
/** Główna funkcja programu */ int main(void) { FuncPtr FPtr; ioinit(); hd44780_clear(); hd44780_bl_on(); hd44780_cursor_off(); load_basic_settings(EEPROM_BASIC_SETTINGS_BEGIN); load_temp_sensors_settings(EEPROM_TEMP_SETTINGS_BEGIN); load_outputs_settings(EEPROM_OUTS_SETTING_BEGIN); load_timers_settings(EEPROM_TIMERS_SETTING_BEGIN); load_timersv_settings(EEPROM_TIMERSV_SETTING_BEGIN); load_topoff_settings(EEPROM_TOPOFF_SETTINGS_BEGIN); hd44780_printOnLcdDelay(PSTR(PROGRAM_FULL_NAME)); hd44780_clear(); sei(); rtc_get_time(); rtc_get_date(); gui_client_present(); log_write_record(LOG_EVENT_START,0,0,0); for (;;) { wdt_reset(); qbuttons_process(); ui_key_pressed(); if (key_pressed && alarms_notification_enabled() && alarms_is_active() ){ alarms_block_notification(); menu_set(1,1,0,0); key_pressed = NONE; } //########################### akcje wykonywane kiedy minie sekunda if (SF(FLAG_SECOND_PAST)) { SSF(FLAG_FORCE_LCD_REFRESH); temp_counter++; top_off_check_time(); top_off_process(); CSF(FLAG_SECOND_PAST); } //########################### akcje wykonywane kiedy minie pół sekundy if (SF(FLAG_HALF_SECOND_PAST)) { SSF(FLAG_FORCE_LCD_SEMI_REFRESH); if (alarms_is_active() && alarms_notification_enabled()) { buzzer_toggle(); } else { buzzer_off(); } CSF(FLAG_HALF_SECOND_PAST); } //######################################## odświeżenie wyswietlacza LCD if (system_flags & LCD_REFRESH_MASK) { //if (back_light_counter < LCD_BL_SHUTOFF_TIME) { hd44780_bl_on(); } FPtr=(FuncPtr)pgm_read_word(&FuncPtrTable[menu_func_index()]); hd44780_outcmd(HD44780_HOME); FPtr(); menu_dummy(); CSF(FLAG_FORCE_LCD_REFRESH); CSF(FLAG_FORCE_LCD_SEMI_REFRESH); } //########################### akcje wykonywane kiedy minie minuta if (SF(FLAG_MINUTE_PAST)) { //if (back_light_counter < 0xFF) { back_light_counter++; } //if (back_light_counter >= LCD_BL_SHUTOFF_TIME) { hd44780_bl_off(); } timers_process(); timersv_process(); if (alarms_block_notification_counter < ALARM_MAX_BLOCK_VALUE) { alarms_block_notification_counter++; } CSF(FLAG_MINUTE_PAST); } //########################### akcje wykonywane kiedy minie godzina if (SF(FLAG_HOUR_PAST)) { temp_register(); CSF(FLAG_HOUR_PAST); } //########################### akcje wykonywane jak minie dzień if (SF(FLAG_DAY_PAST)) { rtc_get_time(); rtc_get_date(); CSF(FLAG_DAY_PAST); } //########################### pomiar temeratury if (temp_counter > TEMP_SENSOR_READ_INTERVAL) { temp_read_temperature(); temp_counter = 0; } //######################################## obsługa interfejsu szeregowego gui_cm_process_char(); //######################################## aktualizacja stanu wyjść outputs_update(); } return 0; }
void ui_init (void) { UI_DDR &= ~UI_KEYPAD_MASK; UI_PORTOUT |= UI_KEYPAD_MASK; menu_set(0,0,0,0); }