Exemple #1
0
/** 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;
}
Exemple #2
0
/**
 * \brief This task, when activated, send every ten seconds on debug UART the
 * whole report of free heap and total tasks status
 */
static void task_win(void *pvParameters)
{
	uint32_t hour, minute, second;
	uint32_t year, month, date,week;

	uint8_t uc_result;

	UNUSED(pvParameters);

	for (;;) {
		while (demo_get_special_mode_status(DEMO_LCD_CALIBRATE_MODE)) {
			app_widget_settings_on(false);
			uc_result = rtouch_calibrate();
			if (uc_result == 0) {
				demo_set_special_mode_status(
						DEMO_LCD_CALIBRATE_MODE, 0);
				app_widget_settings_on(true);
				puts("Calibration successful !\r");
				break;
			} else {
				puts("Calibration failed; error delta is too big ! Please retry calibration procedure...\r");
			}
		}

		if (demo_get_special_mode_status(DEMO_WAIT_MODE) ||
				demo_get_special_mode_status(DEMO_SLEEP_MODE)) {
			app_widget_lpm_on(true);
			demo_set_special_mode_status(DEMO_WAIT_MODE, 0);
			demo_set_special_mode_status(DEMO_SLEEP_MODE, 0);
		}

		/* Play PPT */
		if (demo_get_special_mode_status(DEMO_PPT_MODE)) {
			demo_start_adc(true);
			if (pontentiometer_value == ppt_delay_clapse_counter) {
				snprintf( ppt_slide_path,
						sizeof(ppt_slide_path),
						"%s%s%s%u%s",
						SCR_PPT_SLIDE_PATH,
						SCR_PPT_SLIDE_FOLDER,
						SCR_PPT_SLIDE_BASENAME,
						ppt_silder_index,
						SCR_PPT_SLIDE_EXT );

				demo_ppt.data.custom = ppt_slide_path;

				gfx_draw_bitmap(&demo_ppt, 0, 0);
				ppt_delay_clapse_counter = 0;
				ppt_silder_index++;

				if (ppt_silder_index >= SCR_PPT_SLIDE_MAX) {
					ppt_silder_index = 0;
				}
			}

			ppt_delay_clapse_counter++;

			continue;
		}

		if (touch_event_on_ppt == 1) {
			app_widget_main_on(true);
			touch_event_on_ppt = 0;
		}

		demo_qtouch_event_handler();
		/* Process queued events in the windowing system */
		win_process_events();

		if (demo_get_special_mode_status(DEMO_MAIN_MODE)) {
			/* Retrieve date and time */
			rtc_get_time( RTC, &hour, &minute, &second );
			snprintf( demo_cur_time, sizeof(demo_cur_time),
					"%02u:%02u:%02u",
					hour, minute, second );
			/* Draw the time text */
			gfx_draw_string(demo_cur_time, 15, 300,
					&sysfont, COLOR_WHITE, COLOR_WHITE);
			gfx_draw_string(demo_cur_time, 15, 300,
					&sysfont, GFX_COLOR_TRANSPARENT,
					COLOR_BLUE);

			/* Retrieve date and time */
			rtc_get_date( RTC, &year, &month, &date, &week );
			snprintf( demo_cur_date, sizeof(demo_cur_date),
					"%04u/%02u/%02u",
					year, month, date );
			/* Draw the help text */
			gfx_draw_string(demo_cur_date, 135, 300,
					&sysfont, COLOR_WHITE, COLOR_WHITE);
			gfx_draw_string(demo_cur_date, 135, 300,
					&sysfont, GFX_COLOR_TRANSPARENT,
					COLOR_BLUE);
		}

		vTaskDelay(100);
	}
}