Программный модуль для мультиварки RMC-M40S. Версия 1.9
ПО является неотъемлемой частью мультиварки RMC-M40S, отдельно потребителю не поставляется и эксплуатируется только в составе устройства.
/**
* RMC-M40S
* @file application.c
* @brief This file contains implementation of main state machine and functions to service that state machine.
* Also provide APPL_ functions to access to variables of state machine and cooking conditions.
* Revision: 1.9
* Compiler: armcc
*
/
/********* HEADER FILE INCLUDES *************************************************/
#include <stdint.h>
#include <stdlib.h>
#include "std_def.h"
#include "nrf.h"
#include "nrf_delay.h"
#include "string.h"
#include "config.h"
#include "timers.h"
#include "keyb.h"
#include "ind.h"
#include "buz.h"
#include "cookprog.h"
#include "com.h"
#include "application.h"
#include "settings_manager.h"
#include "pof_manager.h"
#include "log_manager.h"
#include "test.h"
#include "temp.h"
#include "heat.h"
/********* DEFINES **************************************************************/
/********* MACROS ***************************************************************/
/********* GLOBAL VARIABLES *****************************************************/
/********* LOCAL VARIABLES ******************************************************/
//common variables
static app_state_t AppState = APP_STAND_BY; /* состояние SM */
static keyboard_data_t app_keyb_data; /* состояние кнопок */
static app_sound_mode_t sound_mode = APP_SOUND_ON; /* APP_SOUND_CTRL. */
static BOOL app_inactive_timeout_flag = 0; /* флаг таймаута нажатых кнопок */
static BOOL app_simple_timeout_flag = 0; /* флаг таймаута */
static BOOL app_param_adj_timer_flag = 0; /* флаг таймаута - изменение параметра при зажатой кнопке*/
static time_blink_mode_t app_time_blink = TIME_BLINK_NONE; /* тип мигания : минуты, часыб нет мигания */
static error_type_t app_error = ERR_NO; /* ошибка устройства */
static cooking_complexprog_t app_temp_cooking_prog __attribute__((aligned(4)));
static BOOL app_temp_was_changed_flag = 0; /* температура была изменена во время работы программы */
static U32 app_reset_reason; /* причина сборса контроллера */
//SM's states variables
static bool unpairing_sound_flag = false; /* APP_STAND-BY */
static bool unpairing_in_process = false; /* APP_STAND-BY флаг unpairing */
static app_sound_mode_t sound_mode_temp = APP_SOUND_ON; /* APP_SOUND_CTRL. */
static U16 appPostPonementTime = 0; /* APP_POSTMENT_TIME_SET. Внутренняя переменная для изменения отсрочки */
static U16 appCookTime = 0; /* APP_TIME_PRESET. Внутренняя переменная для изменения времени */
static app_state_t AppReturnStateTimeSet = APP_STAND_BY; /* APP_TIME_SET. состояние sm для возврата из APP_TIME_SET */
static U16 appCookTemp = 0; /* APP_TEMP_PRESET. Внутренняя переменная для изменения температуры */
static app_state_t AppReturnStateTempSet = APP_STAND_BY; /* APP_TEMP_SET. состояние sm для возврата из APP_TEMP_SET */
static U8 app_restore_context_beep_counter = 0; /* APP_COOK_PROC_CONFIRM. кол-во звуковых сигналов/время для подтверждения после пропадания питания */
static U8 app_end_of_boost_beep_counter = 0; /* APP_COOK_ENDOFBOOST_PROC. кол-во звуковых сигналов/время для продолжения готовки после разгона */
static U8 temp_reached_setting_sound_flag = 0; /* APP_COOK_PROC. Флаг выхода на заданную температуру */
static U8 bread_cooking_time_reached_middle_sound_flag = 0; /* APP_COOK_PROC. флаг сигнал половина времени выпекания */
static U8 preheat_temp_reached_setting_sound_flag = 0; /* APP_KEEPWARM_PROC. флаг выхода на заданную температуру в подогреве */
static U8 error_sound_flag = 0; /* APP_ERROR. флаг звуковой сигнал ошибки */
#ifdef CONFIG_COOK_DEBUG
static app_state_t AppReturnStatePwmSet = APP_STAND_BY; /* APP_PWM_SET */
#endif
/********* FUNCTION PROTOTYPES **************************************************/
static void app_inactive_timeout_timer_handler(void);
static void app_simple_timeout_timer_handler(void);
static void app_inactive_timeout_timer_reset(void);
static void app_timeout_timers_restart(U8 timeout_s);
static void app_check_inaction(const keyboard_data_t* app_keyb_data_prew);
static void app_ind_cook_mode_led(cooking_mode_t cook_mode);
static U8 app_select_cook_mode(const keyboard_data_t* app_keyb_data);
static U8 app_temp_sub(U8 Temp, U8 MinTempValue, U8 MaxTempValue, U8 Step );
static U8 app_temp_add(U8 Temp, U8 MinTempValue, U8 MaxTempValue, U8 Step );
/********* FUNCTIONS IMPLEMENTATION *********************************************/
static void app_check_inaction(const keyboard_data_t* app_keyb_data){
static keyboard_data_t app_keyb_data_prew;
U8 i0;
if( memcmp( app_keyb_data, &app_keyb_data_prew, sizeof(keyboard_data_t)) != 0 )
{
app_inactive_timeout_timer_reset();
memcpy( &app_keyb_data_prew, app_keyb_data, sizeof(keyboard_data_t) );
}
for(i0=0;i0<MAX_BUTTON_COUNT;i0++){
if( app_keyb_data->key_trigger_mas[i0].key_trigger == KEY_LONG_PRES ){
app_inactive_timeout_timer_reset();
return;
}
}
return;
}
static void app_inactive_timeout_timer_handler(void){
app_inactive_timeout_flag = 1;
return;
}
static void app_simple_timeout_timer_handler(void){
app_simple_timeout_flag = 1;
return;
}
void app_param_adj_timer_handler(void){
app_param_adj_timer_flag = 1;
return;
}
static void app_inactive_timeout_timer_reset(void){
app_inactive_timeout_flag = 0;
timer_reset(TIMER_APP_INACTIVE_TIMEOUT);
}
static void app_timeout_timers_restart(U8 timeout_s){
app_inactive_timeout_flag = 0;
timer_set(TIMER_APP_INACTIVE_TIMEOUT, TIMER_SECOND(timeout_s));
timer_reset(TIMER_APP_INACTIVE_TIMEOUT);
app_simple_timeout_flag = 0;
timer_set(TIMER_APP_SIMPLE_TIMEOUT, TIMER_SECOND(timeout_s));
timer_reset(TIMER_APP_SIMPLE_TIMEOUT);
}
static void app_ind_cook_mode_led(cooking_mode_t cook_mode){
ind_turn_off_cook_mode_leds();
switch( cook_mode )
{
case COOK_MODE_MASTER_CHIEF:
ind_LED_On(MASTER_CHIEF_LED);
break;
case COOK_MODE_EXPRESS:
break;
case COOK_MODE_BREAD:
ind_LED_On(BREAD_LED);
break;
case COOK_MODE_STEAM:
ind_LED_On(STEAM_LED);
break;
case COOK_MODE_BOIL:
ind_LED_On(BOIL_LED);
break;
case COOK_MODE_PASTA:
ind_LED_On(PASTA_LED);
break;
case COOK_MODE_ROAST:
ind_LED_On(ROAST_LED);
break;
case COOK_MODE_BAKE:
ind_LED_On(BAKE_LED);
break;
case COOK_MODE_BRAISE:
ind_LED_On(BRAISE_LED);
break;
case COOK_MODE_SOUP:
ind_LED_On(SOUP_LED);
break;
case COOK_MODE_YOGURT:
ind_LED_On(YOGURT_LED);
break;
case COOK_MODE_RICE:
ind_LED_On(RICE_LED);
break;
case COOK_MODE_PIZZA:
ind_LED_On(PIZZA_LED);
break;
case COOK_MODE_PORRIDGE:
ind_LED_On(PORRIDGE_LED);
break;
case COOK_MODE_PILAF:
ind_LED_On(PILAF_LED);
break;
case COOK_MODE_STEW:
ind_LED_On(STEW_LED);
break;
case COOK_MODE_VACUUM:
ind_LED_On(VACUUM_LED);
break;
default :
break;
}
return;
}
static BOOL app_param_adj_timer_expired(const key_data_t* key_data){
if(key_data->key_trigger == KEY_SHORT_PRES){
timer_set( TIMER_APP_PARAM_ADJ, TIMER_MILISECOND(APP_PARAM_ADJ_SPEED_SLOW_MS) );
timer_stop( TIMER_APP_PARAM_ADJ );
return TRUE;
}
if( key_data->key_timer < KEY_POLLING_TIMER_MS( APP_PARAM_ADJ_CHANGE_SPEED_TIME_MS )){
timer_set(TIMER_APP_PARAM_ADJ, TIMER_MILISECOND(APP_PARAM_ADJ_SPEED_SLOW_MS));
}else{
timer_set(TIMER_APP_PARAM_ADJ, TIMER_MILISECOND(APP_PARAM_ADJ_SPEED_FAST_MS));
}
timer_start(TIMER_APP_PARAM_ADJ);
if( app_param_adj_timer_flag == 1 ){
app_param_adj_timer_flag = 0;
return TRUE;
}
return false;
}
static U16 app_time_add_hour(U16 Time, U16 MinTimeValue, U16 MaxTimeValue ){
if( Time >= MaxTimeValue ){
//if time reach its max value set min value
Time = MinTimeValue;
}else{
if( ( Time + 60 ) < MaxTimeValue ){
Time += 60;
}else{
Time = MaxTimeValue;
}
}
return Time;
}
static U16 app_time_add_minutes(U16 Time, U16 MinTimeValue, U16 MaxTimeValue, U16 Step ){
if( Time >= MaxTimeValue ){
//if time reach its max value set min value
Time = MinTimeValue;
}else{
if( Time + Step < MaxTimeValue ){
//simple addition
if( ( Time%60 + Step ) >= 60 ){
//reset minutes
if( ( Time + Step - 60 ) >= MinTimeValue ){
Time = Time + Step - 60;
}else{
Time = MinTimeValue;
}
}else{
Time += Step;
}
}else{
//if after addition time exceed max value, set max value
Time = MaxTimeValue;
}
}
return Time;
}
static U16 app_time_sub_hour(U16 Time, U16 MinTimeValue, U16 MaxTimeValue ){
if( Time <= MinTimeValue ){
//if time reach its min value set max value
Time = MaxTimeValue;
}else{
if( Time > MinTimeValue + 60 ){
//simple subtraction
Time -= 60;
}else{
Time = MinTimeValue;
}
}
return Time;
}
static U16 app_time_sub_minutes(U16 Time, U16 MinTimeValue, U16 MaxTimeValue, U16 Step ){
if( Time <= MinTimeValue ){
//if time reach its min value set max value
Time = MaxTimeValue;
}else{
if( Time > MinTimeValue + Step ){
//simple substraction
if( Time%60 >= Step ){
Time -= Step;
}else{
//reset minutes
if( Time - Step + 60 >= MaxTimeValue ){
Time -= Step;
}else{
Time = Time - Step + 60;
}
}
}else{
//if after substraction time exceed min value, set min value
Time = MinTimeValue;
}
}
return Time;
}
static U8 app_temp_sub(U8 Temp, U8 MinTempValue, U8 MaxTempValue, U8 Step ){
if( Temp <= MinTempValue ){
//if temp reach its min value set max value
Temp = MaxTempValue;
}else{
if( Temp > MinTempValue + Step ){
//simple substraction
Temp -= Step;
}else{
//if after substraction temp exceed min value, set min value
Temp = MinTempValue;
}
}
return Temp;
}
static U8 app_temp_add(U8 Temp, U8 MinTempValue, U8 MaxTempValue, U8 Step ){
if( Temp >= MaxTempValue ){
//if temp reach its max value set min value
Temp = MinTempValue;
}else{
if( Temp + Step < MaxTempValue ){
//simple addition
Temp += Step;
}else{
//if after addition temp exceed max value, set max value
Temp = MaxTempValue;
}
}
return Temp;
}
static U8 app_select_cook_mode(const keyboard_data_t* app_keyb_data){
if( app_keyb_data->keys_value.maseter_chief_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_MASTER_CHIEF) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.vacuum_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_VACUUM) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.bread_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_BREAD) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.steam_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_STEAM) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.boil_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_BOIL) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.pasta_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_PASTA) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.roast_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_ROAST) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.bake_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_BAKE) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.braise_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_BRAISE) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.soup_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_SOUP) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.yogurt_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_YOGURT) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.rice_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_RICE) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.pizza_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_PIZZA) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.porridge_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_PORRIDGE) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.pilaf_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_PILAF) == 1 ){
return 1;
}
}
if( app_keyb_data->keys_value.stew_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_main_program_num(COOK_MODE_STEW) == 1 ){
return 1;
}
}
return 0;
}
U8 app_debug_temp_show(void){
static app_ind_sensor_temp_mode_t app_ind_sensor_temp_mode = IND_SENSOR_BOT;
switch(app_ind_sensor_temp_mode)
{
case IND_SENSOR_ALL:
return Temp_GetBotTemp();
case IND_SENSOR_BOT:
return Temp_GetBotTemp();
case IND_SENSOR_TOP:
return Temp_GetTopTemp();
case IND_SENSOR_TEST:
return Temp_GetTestTemp();
default:
return Temp_GetBotTemp();
}
}
void application_init(void){
//init application timers
timer_init(TIMER_APP_INACTIVE_TIMEOUT, 0, (callback_t)app_inactive_timeout_timer_handler );
timer_start(TIMER_APP_INACTIVE_TIMEOUT);
timer_init(TIMER_APP_PARAM_ADJ, 0, (callback_t)app_param_adj_timer_handler );
timer_stop(TIMER_APP_PARAM_ADJ);
timer_init(TIMER_APP_SIMPLE_TIMEOUT, 0, (callback_t)app_simple_timeout_timer_handler );
timer_start(TIMER_APP_SIMPLE_TIMEOUT);
sound_mode = settings_manager_get_sound_mode();
sound_mode_temp = sound_mode;
if( sound_mode == APP_SOUND_ON ){
ind_LED_Off(SOUND_LED);
}else{
ind_LED_On(SOUND_LED);
}
if( pof_manager_context_crc_valid() ){
pof_inc_pof_event_count();
pof_manager_get_prog( &app_temp_cooking_prog );
cooking_set_complex_prog( &app_temp_cooking_prog );
if( ( Temp_GetBotTemp() + APP_GET_COLD_TEMP ) >= app_temp_cooking_prog.iTermBot ){
if( ( cooking_get_main_program_postponement_enable() )
&& ( cooking_get_main_program_postponement_time() > 0 ))
{
AppState = APP_COOK_POSTPONEMENT_PROC;
}else if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else if( cooking_get_main_program_cook_remain_time() > 0 ){
AppState = APP_COOK_PROC;
}else if( cooking_get_keepwarm_state() ){
AppState = APP_KEEPWARM_PROC;
}
pof_clear_context();
}else{
AppState = APP_COOK_PROC_CONFIRM;
}
}else{
if( pof_manager_get_manual_restore_disable_flag() )
{
pof_inc_pof_event_count();
AppState = APP_CONTEXT_RESTORE_CANCEL_STATE;
}
}
app_reset_reason = NRF_POWER->RESETREAS;
NRF_POWER->RESETREAS = 0xFFFFFFFF;
return;
}
/**@brief Функция выполняет работу при изменении состояния state mashine.
*
* @param none
*
* @return none
*/
void app_sm_transition( app_state_t app_new_state ){
static app_state_t app_prew_state = APP_STAND_BY;
if( app_prew_state == app_new_state )return;
/*
Общая работа выполняется при любом переходе( во всех состояниях state mashine )
*/
ind_reset_dynamic_ind_timer();
/* Общая работа - КОНЕЦ */
/*
Работа при входе в новое состояние
*/
switch( app_new_state )
{
case APP_OFF:
{
break;
}
case APP_STAND_BY:
{
app_temp_was_changed_flag = 0;
pof_clear_all();
cooking_set_main_program_num( COOK_MODE_EXPRESS ); //установим программу по умолчанию
}
case APP_CONTEXT_RESTORE_CANCEL_STATE:
{
break;
}
case APP_SOUND_CTRL:
{
//скопируем настройки звука во временную переменную
sound_mode_temp = sound_mode;
app_timeout_timers_restart(APP_SOUND_INACTIVE_TIMEOUT_S);
break;
}
case APP_VERSION_IND:
{
break;
}
case APP_PAIRING:
{
app_timeout_timers_restart(APP_PAIRING_INACTIVE_TIMEOUT_S);
break;
}
case APP_COOK_MODE:
{
app_timeout_timers_restart(APP_COOK_MODE_INACTIVE_TIMEOUT_S);
break;
}
case APP_POSTMENT_TIME_SET:
{
appPostPonementTime = cooking_get_main_program_postponement_time();
app_time_blink = TIME_BLINK_HOUR;
app_timeout_timers_restart(APP_POSTPONEMENT_INACTIVE_TIMEOUT_S);
break;
}
case APP_TIME_PRESET:
case APP_TIME_SET:
{
appCookTime = cooking_get_main_program_cook_remain_time();
if( cooking_get_main_program_max_cook_time() == 60 )
{
app_time_blink = TIME_BLINK_MIN;
}else{
app_time_blink = TIME_BLINK_HOUR;
}
app_timeout_timers_restart(APP_TIME_INACTIVE_TIMEOUT_S);
break;
}
case APP_TEMP_PRESET:
case APP_TEMP_SET:
{
appCookTime = cooking_get_main_program_cook_remain_time();
appCookTemp = cooking_get_main_program_cook_temp();
app_timeout_timers_restart(APP_TEMP_INACTIVE_TIMEOUT_S);
break;
}
case APP_COOK_PROC_CONFIRM:
{
app_timeout_timers_restart(APP_RESTORE_CONTEXT_BEEP_TIME_S);
break;
}
case APP_COOK_POSTPONEMENT_PROC:
{
cooking_timer_restart();
app_simple_timeout_timer_handler(); //set simple timeout flag
break;
}
case APP_COOK_BOOST_PROC:
{
break;
}
case APP_COOK_ENDOFBOOST_PROC:
{
break;
}
case APP_COOK_PROC:
{
cooking_timer_restart();
temp_reached_setting_sound_flag = 0;
bread_cooking_time_reached_middle_sound_flag = 0;
break;
}
case APP_KEEPWARM_PROC:
{
cooking_timer_restart();
preheat_temp_reached_setting_sound_flag = 0;
break;
}
case APP_END_COOKING_PROC:
{
break;
}
case APP_ERROR:
{
error_sound_flag = 0;
break;
}
case APP_TEST:
{
test_init();
app_timeout_timers_restart(APP_TEST_INACTIVE_TIMEOUT_S);
break;
}
case APP_PWM_SET:
{
//не используется
AppState = APP_STAND_BY;
break;
}
default:
{
break;
}
}
/* Работа при входе - КОНЕЦ */
/*
Работа выполняется при выходе из текущего состояния
*/
switch( app_prew_state )
{
case APP_OFF:
{
break;
}
case APP_STAND_BY:
{
break;
}
case APP_CONTEXT_RESTORE_CANCEL_STATE:
{
pof_clear_all();
break;
}
case APP_SOUND_CTRL:
{
//сохраним изменения звука в энергонезависимую память если были изменения
if( sound_mode_temp != sound_mode )
{
sound_mode = sound_mode_temp;
settings_manager_set_sound_mode(sound_mode);
}
//установим индикатор
if( sound_mode == APP_SOUND_ON ){
ind_LED_Off(SOUND_LED);
}else{
ind_LED_On(SOUND_LED);
}
break;
}
case APP_VERSION_IND:
{
break;
}
case APP_PAIRING:
{
break;
}
case APP_COOK_MODE:
{
break;
}
case APP_POSTMENT_TIME_SET:
{
break;
}
case APP_TIME_PRESET:
{
break;
}
case APP_TIME_SET:
{
break;
}
case APP_TEMP_PRESET:
case APP_TEMP_SET:
{
if( cooking_get_main_program_cook_temp() < COOK_TEMP_PREHEAT_ENABLE ){
cooking_set_keepwarm_state(false);
}
break;
}
case APP_COOK_PROC_CONFIRM:
{
pof_clear_context();
break;
}
case APP_COOK_POSTPONEMENT_PROC:
{
break;
}
case APP_COOK_BOOST_PROC:
{
break;
}
case APP_COOK_ENDOFBOOST_PROC:
{
break;
}
case APP_COOK_PROC:
{
break;
}
case APP_KEEPWARM_PROC:
{
break;
}
case APP_END_COOKING_PROC:
{
break;
}
case APP_ERROR:
{
break;
}
case APP_TEST:
{
test_stop();
break;
}
case APP_PWM_SET:
{
break;
}
default:
{
break;
}
}
/* Работа при выходе - КОНЕЦ */
app_prew_state = app_new_state;
return;
}
void app_sm_proc( void ){
switch(AppState)
{
case APP_OFF:
{
//indication
ind_show_off();
ind_LED_Off(TIME_COOKING_LED);
ind_LED_Off(SOUND_LED);
ind_LED_Off(POSTPONEMENT_LED);
ind_LED_Off(PREHEATING_LED);
cooking_pause();
//transitions
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
break;
}
case APP_STAND_BY:
case APP_CONTEXT_RESTORE_CANCEL_STATE:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
ind_LED_Off(PREHEATING_LED);
if( AppState == APP_CONTEXT_RESTORE_CANCEL_STATE ){
ind_LED_On(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_YES);
}else{
ind_LED_Off(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
}
if( sound_mode == APP_SOUND_ON ){
ind_LED_Off(SOUND_LED);
}else{
ind_LED_On(SOUND_LED);
}
ind_show_stand_by();
#ifdef CONFIG_IND_SENSOR_TEMP
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
//work
cooking_pause();
//controll
if( ( app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED )
&& (app_keyb_data.keys_value.minus_key.key_timer > KEY_POLLING_TIMER_S( APP_UNPAIRING_STATE_TRANSITION_TIME_S )) )
{
if( false == unpairing_sound_flag )
{
unpairing_in_process = true;
unpairing_sound_flag = true;
if(sound_mode == APP_SOUND_ON){
add_beep(APP_LONG_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
break;
}else{
unpairing_sound_flag = false;
}
//transitions
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
if( app_keyb_data.keys_value.time_key.key_trigger == KEY_LONG_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_SOUND_CTRL;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( AppState == APP_STAND_BY ){
//если нет флага пропадания питания
if( cooking_set_main_program_num(COOK_MODE_PREHEAT) == 1 ){
AppState = APP_KEEPWARM_PROC;
break;
}
}else{
//если флаг таймаута после пропадания питания - снимем флаг
AppState = APP_STAND_BY;
}
}
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES )
{
if( cooking_set_main_program_num(COOK_MODE_EXPRESS) == 1 ){
app_temp_was_changed_flag = 0;
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_PROC;
}
break;
}
if( app_select_cook_mode( &app_keyb_data ) == 1 )
{
app_temp_was_changed_flag = 0;
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_MODE;
break;
}
if( ( app_keyb_data.keys_value.plus_key.state == KEY_CONDITION_PRESSED )
&& (app_keyb_data.keys_value.plus_key.key_timer > KEY_POLLING_TIMER_S( APP_PAIRING_STATE_TRANSITION_TIME_S )) )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_PAIRING;
break;
}
if( ( app_keyb_data.keys_value.postponement_key.state == KEY_CONDITION_PRESSED )
&& ( app_keyb_data.keys_value.postponement_key.key_timer > KEY_POLLING_TIMER_S(APP_VERSION_TRANSITION_TIME_S) ) )
{
AppState = APP_VERSION_IND;
break;
}
break;
case APP_SOUND_CTRL:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
ind_LED_Off(PREHEATING_LED);
ind_LED_Off(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
if((app_keyb_data.keys_value.plus_key.state == KEY_CONDITION_PRESSED) || (app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED) ){
ind_sound_ctrl(sound_mode_temp, SOUND_BLINK_NO);
}else{
ind_sound_ctrl(sound_mode_temp, SOUND_BLINK_YES);
}
//work
cooking_stop();
//controll
if( ( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES )
|| ( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES ) )
{
ind_reset_dynamic_ind_timer();
if( sound_mode_temp == APP_SOUND_OFF ){
sound_mode_temp = APP_SOUND_ON;
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
ind_LED_Off(SOUND_LED);
}else{
sound_mode_temp = APP_SOUND_OFF;
ind_LED_On(SOUND_LED);
}
break;
}
//transitions
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES ){
if( sound_mode_temp == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( app_inactive_timeout_flag ){
AppState = APP_STAND_BY;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode_temp == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_VERSION_IND:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
ind_LED_Off(PREHEATING_LED);
ind_LED_Off(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
ind_show_version();
//work
cooking_stop();
//transition
if( ( app_keyb_data.keys_value.postponement_key.state == KEY_CONDITION_RELEASED )
&& ( app_keyb_data.keys_value.minus_key.state != KEY_CONDITION_PRESSED ) )
{
if( sound_mode == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( ( app_keyb_data.keys_value.postponement_key.state == KEY_CONDITION_RELEASED )
&& ( app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED ) )
{
AppState = APP_TEST;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_PAIRING:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
ind_LED_Off(PREHEATING_LED);
ind_LED_Off(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
ind_show_paring();
//work
cooking_stop();
//transition
if( app_simple_timeout_flag ){
if( sound_mode == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_ERROR:
//indication
ind_show_error( app_error );
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
ind_LED_Off(PREHEATING_LED);
ind_LED_Off(TIME_COOKING_LED);
ind_LED_Off(SOUND_LED);
//work
cooking_stop();
if( error_sound_flag == 0 ){
error_sound_flag = 1;
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
}
//transition
//no transition
break;
case APP_TEST:
//incdication
//work
//transition
if( ( app_inactive_timeout_flag )
|| (!Test(&app_keyb_data)) )
{
if( sound_mode == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
break;
case APP_COOK_MODE:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_LED_On(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
app_ind_cook_mode_led(cooking_get_main_program_num());
ind_programm_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_main_program_num() != COOK_MODE_EXPRESS ){
ind_show_time( cooking_get_main_program_cook_time(),TIME_BLINK_NONE );
}else{
ind_show_express_mode(TIME_BLINK_NONE);
}
#ifndef CONFIG_IND_SENSOR_TEMP
if( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
//work
cooking_stop();
//controll
if( app_select_cook_mode(&app_keyb_data) == 1)
{
app_temp_was_changed_flag = 0;
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
//transitions
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( app_inactive_timeout_flag ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if(( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF ) && ( app_keyb_data.keys_value.temperature_key.key_trigger == KEY_SHORT_PRES )){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_TEMP_PRESET;
break;
}
if( ( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES )
&& ( cooking_get_main_program_num() != COOK_MODE_EXPRESS ))
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_TIME_PRESET;
break;
}
if( app_keyb_data.keys_value.postponement_key.key_trigger == KEY_SHORT_PRES ){
if( ( cooking_get_main_program_postponement_enable() )
&& ( cooking_get_main_program_num() != COOK_MODE_EXPRESS ) )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_POSTMENT_TIME_SET;
}
break;
}
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( cooking_get_main_program_postponement_time() == 0 )
{
if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else{
AppState = APP_COOK_PROC;
}
}else{
AppState = APP_COOK_POSTPONEMENT_PROC;
}
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_POSTMENT_TIME_SET:
//indication
ind_LED_On(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_LED_Off(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_YES);
if( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
if( (app_keyb_data.keys_value.plus_key.state == KEY_CONDITION_PRESSED) || (app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED) ){
ind_show_time( appPostPonementTime,TIME_BLINK_NONE );
}else{
if( app_time_blink == TIME_BLINK_HOUR ){
ind_show_time( appPostPonementTime,TIME_BLINK_HOUR );
}else if( app_time_blink == TIME_BLINK_MIN ){
ind_show_time( appPostPonementTime,TIME_BLINK_MIN );
}
}
//work
cooking_stop();
//controll
if( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.time_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( sound_mode == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( app_time_blink == TIME_BLINK_HOUR ){
app_time_blink = TIME_BLINK_MIN;
}else if( app_time_blink == TIME_BLINK_MIN ){
app_time_blink = TIME_BLINK_HOUR;
}
break;
}
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.plus_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_PARAM_SET_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( app_time_blink == TIME_BLINK_HOUR ){
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.plus_key) ){
appPostPonementTime = app_time_add_hour( appPostPonementTime, 0 , 24*60 );
}
}else if( app_time_blink == TIME_BLINK_MIN ){
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.plus_key) ){
appPostPonementTime = app_time_add_minutes( appPostPonementTime, 0 , 24*60, APP_POSTPONEMENT_TIME_ADJ_STEP );
}
}
}
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.minus_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_PARAM_SET_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.minus_key)){
if( app_time_blink == TIME_BLINK_HOUR ){
appPostPonementTime = app_time_sub_hour( appPostPonementTime, 0 , 24*60 );
}else if( app_time_blink == TIME_BLINK_MIN ){
appPostPonementTime = app_time_sub_minutes( appPostPonementTime, 0 , 24*60, APP_POSTPONEMENT_TIME_ADJ_STEP );
}
}
}
//transitions
if(( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF ) && ( app_keyb_data.keys_value.temperature_key.key_trigger == KEY_SHORT_PRES )){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
cooking_set_main_program_postponement_time( appPostPonementTime );
AppState = APP_TEMP_PRESET;
break;
}
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES )
{
cooking_set_main_program_postponement_time( appPostPonementTime );
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( cooking_get_main_program_postponement_time() == 0 )
{
if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else{
ind_reset_dynamic_ind_timer();
AppState = APP_COOK_PROC;
}
}else{
AppState = APP_COOK_POSTPONEMENT_PROC;
}
break;
}
if( app_inactive_timeout_flag ){
cooking_set_main_program_postponement_time( appPostPonementTime );
AppState = APP_COOK_MODE;
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_MODE;
break;
}
if( app_select_cook_mode( &app_keyb_data ) == 1 )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_MODE;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_TEMP_PRESET:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
if( appCookTemp < COOK_TEMP_PREHEAT_ENABLE )
{
ind_LED_Off(PREHEATING_LED);
}else{
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
}
ind_LED_On(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
ind_show_time( appCookTime, TIME_BLINK_NONE );
if( appCookTemp > COOK_TEMP_TIME_MAX_2HOUR ){
if( appCookTime > 2*60){
appCookTime = 2*60;
}
}else{
appCookTime = cooking_get_main_program_cook_remain_time();
}
if( (app_keyb_data.keys_value.plus_key.state == KEY_CONDITION_PRESSED) || (app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED) ){
ind_show_temp( appCookTemp, TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_show_temp( appCookTemp, TEMP_COOKING_TEMP_BLINK_YES );
}
//work
cooking_pause();
//controll
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.plus_key.key_trigger == KEY_LONG_PRES ){
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
ind_reset_dynamic_ind_timer();
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.plus_key) ){
appCookTemp = app_temp_add( appCookTemp, cooking_get_main_program_min_cook_temp(), cooking_get_main_program_max_cook_temp(), COOK_MULTICOOK_ADJ_TEMP );
}
}
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.minus_key.key_trigger == KEY_LONG_PRES ){
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
ind_reset_dynamic_ind_timer();
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.minus_key) ){
appCookTemp = app_temp_sub( appCookTemp, cooking_get_main_program_min_cook_temp(), cooking_get_main_program_max_cook_temp(), COOK_MULTICOOK_ADJ_TEMP );
}
}
//transition
if( ( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES )
&& ( cooking_get_main_program_num() != COOK_MODE_EXPRESS ))
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
cooking_set_main_program_cook_time( appCookTime );
cooking_set_main_program_cook_temp( appCookTemp );
app_temp_was_changed_flag = 1;
AppState = APP_TIME_PRESET;
break;
}
if( app_keyb_data.keys_value.postponement_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_get_main_program_postponement_enable() ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
cooking_set_main_program_cook_time( appCookTime );
cooking_set_main_program_cook_temp( appCookTemp );
app_temp_was_changed_flag = 1;
AppState = APP_POSTMENT_TIME_SET;
}
break;
}
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES )
{
cooking_set_main_program_cook_time( appCookTime );
cooking_set_main_program_cook_temp( appCookTemp );
app_temp_was_changed_flag = 1;
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( cooking_get_main_program_postponement_time() == 0 )
{
if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else{
ind_reset_dynamic_ind_timer();
AppState = APP_COOK_PROC;
}
}else{
AppState = APP_COOK_POSTPONEMENT_PROC;
}
break;
}
if( app_inactive_timeout_flag )
{
cooking_set_main_program_cook_time( appCookTime );
cooking_set_main_program_cook_temp( appCookTemp );
app_temp_was_changed_flag = 1;
AppState = APP_COOK_MODE;
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_MODE;
break;
}
if( app_select_cook_mode( &app_keyb_data ) == 1 )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_MODE;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_TEMP_SET:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
if( appCookTemp < COOK_TEMP_PREHEAT_ENABLE )
{
ind_LED_Off(PREHEATING_LED);
}else{
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
}
ind_LED_On(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
ind_show_time( appCookTime, TIME_BLINK_NONE );
if( appCookTemp > COOK_TEMP_TIME_MAX_2HOUR ){
if( appCookTime > 2*60){
appCookTime = 2*60;
}
}else{
appCookTime = cooking_get_main_program_cook_remain_time();
}
if( (app_keyb_data.keys_value.plus_key.state == KEY_CONDITION_PRESSED) || (app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED) ){
ind_show_temp( appCookTemp, TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_show_temp( appCookTemp, TEMP_COOKING_TEMP_BLINK_YES );
}
//work
cooking_pause();
//controll
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.plus_key.key_trigger == KEY_LONG_PRES )
{
ind_reset_dynamic_ind_timer();
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.plus_key) ){
appCookTemp = app_temp_add( appCookTemp, cooking_get_main_program_min_cook_temp(), cooking_get_main_program_max_cook_temp(), COOK_MASTER_CHIEF_LITE_ADJ_TEMP );
}
}
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.minus_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.minus_key) ){
appCookTemp = app_temp_sub( appCookTemp, cooking_get_main_program_min_cook_temp(), cooking_get_main_program_max_cook_temp(), COOK_MASTER_CHIEF_LITE_ADJ_TEMP );
}
}
//transition
if( app_inactive_timeout_flag ){
cooking_set_main_program_cook_remain_time( appCookTime );
cooking_set_main_program_cook_temp( appCookTemp );
app_temp_was_changed_flag = 1;
if( AppReturnStateTempSet == APP_COOK_BOOST_PROC )
{
AppState = APP_COOK_ENDOFBOOST_PROC;
}else{
AppState = AppReturnStateTempSet;
}
break;
}
if( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
cooking_set_main_program_cook_remain_time( appCookTime );
cooking_set_main_program_cook_temp( appCookTemp );
app_temp_was_changed_flag = 1;
if( AppReturnStateTempSet == APP_COOK_BOOST_PROC )
{
AppReturnStateTempSet = APP_COOK_ENDOFBOOST_PROC;
}
AppReturnStateTimeSet = AppReturnStateTempSet;
AppState = APP_TIME_SET;
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = AppReturnStateTempSet;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_TIME_PRESET:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_LED_On(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
if( (app_keyb_data.keys_value.plus_key.state == KEY_CONDITION_PRESSED) || (app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED) ){
ind_show_time( appCookTime,TIME_BLINK_NONE );
}else{
if( app_time_blink == TIME_BLINK_HOUR ){
ind_show_time( appCookTime,TIME_BLINK_HOUR );
}else if( app_time_blink == TIME_BLINK_MIN ){
ind_show_time( appCookTime,TIME_BLINK_MIN );
}
}
//work
cooking_stop();
//controll
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.plus_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.plus_key) ){
if( app_time_blink == TIME_BLINK_HOUR ){
appCookTime = app_time_add_hour( appCookTime, cooking_get_main_program_min_cook_time(), ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time() );
}else if( app_time_blink == TIME_BLINK_MIN ){
appCookTime = app_time_add_minutes( appCookTime, cooking_get_main_program_min_cook_time(), ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time(), cooking_get_main_program_adj_time_step() );
}
}
if( appCookTime > COOK_BREAD_PREHEAT_TIME ){
cooking_set_main_program_bread_preheat_time(COOK_BREAD_PREHEAT_TIME);
}else{
cooking_set_main_program_bread_preheat_time(0);
}
}
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.minus_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.minus_key) ){
if( app_time_blink == TIME_BLINK_HOUR ){
appCookTime = app_time_sub_hour( appCookTime, cooking_get_main_program_min_cook_time(), ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time() );
}else if( app_time_blink == TIME_BLINK_MIN ){
appCookTime = app_time_sub_minutes( appCookTime, cooking_get_main_program_min_cook_time(), ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time(), cooking_get_main_program_adj_time_step() );
}
}
if( appCookTime > COOK_BREAD_PREHEAT_TIME ){
cooking_set_main_program_bread_preheat_time(COOK_BREAD_PREHEAT_TIME);
}else{
cooking_set_main_program_bread_preheat_time(0);
}
}
if( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.time_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( sound_mode == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( app_time_blink == TIME_BLINK_HOUR ){
app_time_blink = TIME_BLINK_MIN;
}else if( app_time_blink == TIME_BLINK_MIN ){
app_time_blink = TIME_BLINK_HOUR;
}
break;
}
//transitions
if(( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF ) && ( app_keyb_data.keys_value.temperature_key.key_trigger == KEY_SHORT_PRES )){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
cooking_set_main_program_cook_time( appCookTime );
AppState = APP_TEMP_PRESET;
break;
}
if( app_keyb_data.keys_value.postponement_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_get_main_program_postponement_enable() ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
cooking_set_main_program_cook_time( appCookTime );
AppState = APP_POSTMENT_TIME_SET;
}
break;
}
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES )
{
cooking_set_main_program_cook_time( appCookTime );
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( cooking_get_main_program_postponement_time() == 0 )
{
if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else{
AppState = APP_COOK_PROC;
}
}else{
AppState = APP_COOK_POSTPONEMENT_PROC;
}
break;
}
if( app_inactive_timeout_flag ){
cooking_set_main_program_cook_time( appCookTime );
AppState = APP_COOK_MODE;
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_MODE;
break;
}
if( app_select_cook_mode( &app_keyb_data ) == 1 )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_MODE;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_TIME_SET:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_LED_On(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
if( (app_keyb_data.keys_value.plus_key.state == KEY_CONDITION_PRESSED) || (app_keyb_data.keys_value.minus_key.state == KEY_CONDITION_PRESSED) ){
ind_show_time( appCookTime,TIME_BLINK_NONE );
}else{
if( app_time_blink == TIME_BLINK_HOUR ){
ind_show_time( appCookTime,TIME_BLINK_HOUR );
}else if( app_time_blink == TIME_BLINK_MIN ){
ind_show_time( appCookTime,TIME_BLINK_MIN );
}
}
if( app_temp_was_changed_flag || ( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF) ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
//work
cooking_stop();
//controll
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.plus_key.key_trigger == KEY_LONG_PRES ){
ind_reset_dynamic_ind_timer();
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.plus_key) ){
if( app_time_blink == TIME_BLINK_HOUR ){
appCookTime = app_time_add_hour( appCookTime, 0, ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time() );
}else if( app_time_blink == TIME_BLINK_MIN ){
appCookTime = app_time_add_minutes( appCookTime, 0, ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time(), COOK_MASTER_CHIEF_LITE_ADJ_TIME );
}
}
}
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.minus_key.key_trigger == KEY_LONG_PRES ){
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
ind_reset_dynamic_ind_timer();
if( app_param_adj_timer_expired(&app_keyb_data.keys_value.minus_key) ){
if( app_time_blink == TIME_BLINK_HOUR ){
appCookTime = app_time_sub_hour( appCookTime, 0, ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time() );
}else if( app_time_blink == TIME_BLINK_MIN ){
appCookTime = app_time_sub_minutes( appCookTime, 0, ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR ) ? 2*60 : cooking_get_main_program_max_cook_time(), COOK_MASTER_CHIEF_LITE_ADJ_TIME );
}
}
}
if( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.time_key.key_trigger == KEY_LONG_PRES ){
if( sound_mode == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( app_time_blink == TIME_BLINK_HOUR ){
app_time_blink = TIME_BLINK_MIN;
ind_reset_dynamic_ind_timer();
}else if( app_time_blink == TIME_BLINK_MIN ){
app_time_blink = TIME_BLINK_HOUR;
ind_reset_dynamic_ind_timer();
}
break;
}
//transitions
if( app_inactive_timeout_flag ){
cooking_set_main_program_cook_remain_time( appCookTime );
AppState = AppReturnStateTimeSet;
break;
}
if( app_keyb_data.keys_value.temperature_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
cooking_set_main_program_cook_remain_time( appCookTime );
AppReturnStateTempSet = AppReturnStateTimeSet;
AppState = APP_TEMP_SET;
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = AppReturnStateTimeSet;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_COOK_PROC_CONFIRM:
{
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
#ifndef CONFIG_IND_SENSOR_TEMP
if( app_temp_was_changed_flag || ( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF) ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_LED_On(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_YES);
if( COOK_MODE_EXPRESS != cooking_get_main_program_num() ){
ind_show_time( cooking_get_main_program_cook_remain_time(),TIME_BLINK_HOUR_MIN );
}else{
ind_show_express_mode(TIME_BLINK_HOUR_MIN);
}
app_ind_cook_mode_led(cooking_get_main_program_num());
ind_programm_cooking_led_blinking(IND_LED_BLINK_YES);
//transition
if( ( app_simple_timeout_flag )
|| ( app_restore_context_beep_counter == 0 ) )
{
app_timeout_timers_restart(APP_RESTORE_CONTEXT_BEEP_TIME_S);
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( ++app_restore_context_beep_counter == APP_RESTORE_CONTEXT_BEEP_COUNT ){
pof_manager_set_manual_restore_disable_flag();
pof_clear_context();
AppState = APP_CONTEXT_RESTORE_CANCEL_STATE;
}
break;
}
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES )
{
pof_clear_all();
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
if( ( cooking_get_main_program_postponement_enable() )
&& ( cooking_get_main_program_postponement_time() > 0 ))
{
AppState = APP_COOK_POSTPONEMENT_PROC;
}else if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else if( cooking_get_main_program_cook_remain_time() > 0 ){
AppState = APP_COOK_PROC;
}else if( cooking_get_keepwarm_state() ){
AppState = APP_KEEPWARM_PROC;
}
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
pof_clear_all();
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
pof_clear_all();
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
}
case APP_COOK_POSTPONEMENT_PROC:
//indication
ind_LED_On(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
#ifndef CONFIG_IND_SENSOR_TEMP
if( app_temp_was_changed_flag || ( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF) ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_LED_Off(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
if( TRUE == app_simple_timeout_flag ){
ind_show_time( cooking_get_main_program_postponement_time(),TIME_BLINK_MP );
}else{
ind_show_time( cooking_get_main_program_cook_time(),TIME_BLINK_NONE );
}
app_ind_cook_mode_led(cooking_get_main_program_num());
ind_programm_cooking_led_blinking(IND_LED_BLINK_NO);
//work
cooking_pause();
//controll
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_keepwarm_state( 1 - cooking_get_keepwarm_state() ) ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
break;
}
if( app_keyb_data.keys_value.postponement_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
app_timeout_timers_restart(APP_POSTPONEMENT_PROC_SHOW_COOK_TIME_S);
break;
}
//work
cooking_postponement_proc();
//transition
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( cooking_get_main_program_postponement_time() == 0 ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
}
if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
break;
}else{
AppState = APP_COOK_PROC;
break;
}
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_COOK_BOOST_PROC:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
#ifndef CONFIG_IND_SENSOR_TEMP
if( app_temp_was_changed_flag || ( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF) ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_time_cooking_led_blinking(IND_LED_BLINK_YES);
if( cooking_get_main_program_num() != COOK_MODE_EXPRESS ){
ind_show_time( cooking_get_main_program_cook_remain_time(),TIME_BLINK_NONE );
ind_LED_On(TIME_COOKING_LED);
}else{
ind_show_express_proc();
ind_LED_Off(TIME_COOKING_LED);
}
app_ind_cook_mode_led(cooking_get_main_program_num());
ind_programm_cooking_led_blinking(IND_LED_BLINK_NO);
//controll
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_keepwarm_state( 1 - cooking_get_keepwarm_state() ) ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
break;
}
//work
if( cooking_boost() ){
AppState = APP_COOK_ENDOFBOOST_PROC;
break;
}
//transition
if(( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES )
&& ( COOK_MODE_EXPRESS != cooking_get_main_program_num() )){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppReturnStateTimeSet = AppState;
AppState = APP_TIME_SET;
break;
}
if(( app_keyb_data.keys_value.temperature_key.key_trigger == KEY_SHORT_PRES )
&& ( COOK_MODE_EXPRESS != cooking_get_main_program_num() )){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
appCookTime = cooking_get_main_program_cook_remain_time();
appCookTemp = cooking_get_main_program_cook_temp();
AppReturnStateTempSet = AppState;
AppState = APP_TEMP_SET;
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( cooking_get_main_program_cook_remain_time() == 0 ){
AppState = APP_STAND_BY;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
if( ( app_temp_was_changed_flag == 1 )
&& ( cooking_get_main_program_num() != COOK_MODE_MASTER_CHIEF ) )
{
AppState = APP_COOK_ENDOFBOOST_PROC;
}
break;
case APP_COOK_ENDOFBOOST_PROC:
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_keepwarm_state()){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_LED_On(TIME_COOKING_LED);
if( cooking_get_main_program_num() != COOK_MODE_EXPRESS ){
ind_show_time( cooking_get_main_program_cook_remain_time(),TIME_BLINK_NONE );
}
ind_time_cooking_led_blinking(IND_LED_BLINK_YES);
app_ind_cook_mode_led(cooking_get_main_program_num());
ind_programm_cooking_led_blinking(IND_LED_BLINK_NO);
#ifndef CONFIG_IND_SENSOR_TEMP
ind_hide_temp();
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
//work
cooking_pause();
//transition
if( cooking_get_main_program_num() == COOK_MODE_PASTA ){
if( app_simple_timeout_flag || ( app_end_of_boost_beep_counter == 0 ) ){
if( ++app_end_of_boost_beep_counter == APP_END_OF_BOOST_BEEP_COUNT ){
if( sound_mode == APP_SOUND_ON ){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
add_beep(APP_SHORT_BEEP_MS, APP_PASTA_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_PASTA_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_PASTA_BEEP_PAUSE_MS, BEEP_MULTI);
app_timeout_timers_restart(APP_END_OF_BOOST_BEEP_TIME_S);
}
}else{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_PROC;
break;
}
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES )
{
beep_clear_buff();
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_COOK_PROC;
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_COOK_PROC:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
#ifndef CONFIG_IND_SENSOR_TEMP
if( app_temp_was_changed_flag || ( cooking_get_main_program_num() == COOK_MODE_MASTER_CHIEF) ){
ind_show_temp( cooking_get_main_program_cook_temp(), TEMP_COOKING_TEMP_BLINK_NO );
}else{
ind_hide_temp();
}
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
if( cooking_get_keepwarm_state() ){
ind_LED_On(PREHEATING_LED);
}else{
ind_LED_Off(PREHEATING_LED);
}
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
if( cooking_get_main_program_num() != COOK_MODE_EXPRESS ){
ind_show_time( cooking_get_main_program_cook_remain_time(),TIME_BLINK_MP );
ind_LED_On(TIME_COOKING_LED);
}else{
ind_show_express_proc();
ind_LED_Off(TIME_COOKING_LED);
}
app_ind_cook_mode_led(cooking_get_main_program_num());
ind_programm_cooking_led_blinking(IND_LED_BLINK_NO);
//controll
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES ){
if( cooking_set_keepwarm_state( 1 - cooking_get_keepwarm_state() ) ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
break;
}
//work
if( abs( Temp_GetBotTemp() - cooking_get_main_program_cook_temp() ) < 5 )
{
if( ( COOK_MODE_BOIL == cooking_get_main_program_num() )
|| ( COOK_MODE_ROAST == cooking_get_main_program_num() )
|| ( COOK_MODE_SOUP == cooking_get_main_program_num() )
|| ( COOK_MODE_STEAM == cooking_get_main_program_num() ))
{
if( !temp_reached_setting_sound_flag ){
temp_reached_setting_sound_flag = 1;
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
}
}
}
}
if( bread_cooking_time_reached_middle_sound_flag == 0 ){
if( COOK_MODE_BREAD == cooking_get_main_program_num() ){
if( cooking_get_main_program_cook_time() > cooking_get_main_program_bread_preheat_time() ){
if( cooking_get_main_program_cook_remain_time() < ( ( cooking_get_main_program_cook_time() - cooking_get_main_program_bread_preheat_time() ) / 2 ) )
{
//half of baking time
bread_cooking_time_reached_middle_sound_flag = 1;
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
}
}
}
}
//transition
if( ( app_keyb_data.keys_value.time_key.key_trigger == KEY_SHORT_PRES )
&& ( COOK_MODE_EXPRESS != cooking_get_main_program_num() ) ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
ind_reset_dynamic_ind_timer();
app_timeout_timers_restart(APP_TIME_INACTIVE_TIMEOUT_S);
app_time_blink = TIME_BLINK_HOUR;
appCookTime = cooking_get_main_program_cook_remain_time();
AppReturnStateTimeSet = AppState;
AppState = APP_TIME_SET;
break;
}
if( cooking_proc() ){
if( cooking_get_keepwarm_state() == 1 ){
//cooking_timer_restart();
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_KEEPWARM_PROC;
}else{
app_timeout_timers_restart(APP_END_OF_COOK_TIMEOUT_S);
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
}
AppState = APP_END_COOKING_PROC;
}
break;
}
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if(( app_keyb_data.keys_value.temperature_key.key_trigger == KEY_SHORT_PRES )
&& ( COOK_MODE_EXPRESS != cooking_get_main_program_num() ))
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
app_timeout_timers_restart(APP_TEMP_INACTIVE_TIMEOUT_S);
appCookTime = cooking_get_main_program_cook_remain_time();
appCookTemp = cooking_get_main_program_cook_temp();
AppReturnStateTempSet = AppState;
AppState = APP_TEMP_SET;
break;
}
#ifdef CONFIG_COOK_DEBUG
if( app_keyb_data.keys_value.maseter_chief_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppReturnStatePwmSet = AppState;
AppState = APP_PWM_SET;
break;
}
#endif
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_KEEPWARM_PROC:
//indication
ind_LED_Off(TIME_COOKING_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
ind_LED_On(PREHEATING_LED);
ind_LED_Off(POSTPONEMENT_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
ind_show_time( cooking_get_keep_warm_time(),TIME_BLINK_MP );
app_ind_cook_mode_led(cooking_get_main_program_num());
ind_programm_cooking_led_blinking(IND_LED_BLINK_NO);
#ifndef CONFIG_IND_SENSOR_TEMP
ind_hide_temp();
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
//work
cooking_keepwarm_proc();
if( abs( Temp_GetBotTemp() - APP_PREHEAR_TEMP_MAKE_SOUND ) < 5 )
{
if( !preheat_temp_reached_setting_sound_flag ){
preheat_temp_reached_setting_sound_flag = 1;
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
}
}
}
//transition
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES )
{
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( cooking_get_keep_warm_time() == cooking_get_main_program_keepwarm_time() * 60 ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_MULTI);
}
AppState = APP_END_COOKING_PROC;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
case APP_END_COOKING_PROC:
//indication
ind_LED_Off(POSTPONEMENT_LED);
ind_postponement_cooking_led_blinking(IND_LED_BLINK_NO);
ind_LED_Off(PREHEATING_LED);
ind_LED_Off(TIME_COOKING_LED);
ind_time_cooking_led_blinking(IND_LED_BLINK_NO);
ind_end_cooking();
#ifndef CONFIG_IND_SENSOR_TEMP
ind_hide_temp();
#else
ind_show_temp( app_debug_temp_show(), TEMP_COOKING_TEMP_BLINK_NO );
#endif
//work
cooking_stop();
//transition
if( app_keyb_data.keys_value.cancel_preheating_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_STAND_BY;
break;
}
if( app_simple_timeout_flag ){
AppState = APP_STAND_BY;
break;
}
if( app_keyb_data.keys_value.power_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = APP_OFF;
break;
}
break;
#ifdef CONFIG_COOK_DEBUG
case APP_PWM_SET:
{
U8 pwm;
pwm = cooking_get_pwm_boiling();
#ifndef CONFIG_IND_SENSOR_TEMP
ind_hide_temp();
#else
ind_show_temp( pwm, TEMP_COOKING_TEMP_BLINK_NO );
#endif
//controll
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.plus_key.key_trigger == KEY_LONG_PRES ){
if( app_keyb_data.keys_value.plus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( (++pwm) >= (HEATER_MAX_PWM_DUTY_CICLE) ){
cooking_set_pwm_boiling(0);
}else{
cooking_set_pwm_boiling(pwm);
}
}
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES || app_keyb_data.keys_value.minus_key.key_trigger == KEY_LONG_PRES ){
if( app_keyb_data.keys_value.minus_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
}
if( (pwm) == 0 ){
cooking_set_pwm_boiling(HEATER_MAX_PWM_DUTY_CICLE);
}else{
cooking_set_pwm_boiling(--pwm);
}
}
//transition
if( app_keyb_data.keys_value.start_autoheating_key.key_trigger == KEY_SHORT_PRES ){
if(sound_mode == APP_SOUND_ON){
add_beep(APP_SHORT_BEEP_MS, APP_BEEP_PAUSE_MS, BEEP_SINGLE);
}
AppState = AppReturnStatePwmSet;
break;
}
break;
}
#endif
default:
AppState = APP_STAND_BY;
break;
}
}
void application_proc(void){
//state machine variables
keybord_data_read(&app_keyb_data);
app_check_inaction(&app_keyb_data);
app_sm_transition( AppState );
app_sm_proc();
return;
}
uint16_t Appl_GetVersion(void){
//appl_blth_cmd_received_flag = 1;
return SOFTWARE_VERSION;
}
//Start
bool Appl_Start(void){
switch(AppState)
{
case APP_OFF:
{
return false;
}
case APP_STAND_BY:
case APP_SOUND_CTRL:
case APP_CONTEXT_RESTORE_CANCEL_STATE:
case APP_COOK_MODE:
case APP_POSTMENT_TIME_SET:
case APP_TIME_PRESET:
case APP_TEMP_PRESET:
{
if( cooking_get_main_program_postponement_time() == 0 )
{
if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else{
AppState = APP_COOK_PROC;
}
}else{
AppState = APP_COOK_POSTPONEMENT_PROC;
}
return true;
}
case APP_COOK_PROC_CONFIRM:
{
pof_clear_all();
if( cooking_get_main_program_postponement_time() == 0 )
{
if( cooking_get_main_program_boost_enable() ){
AppState = APP_COOK_BOOST_PROC;
}else{
AppState = APP_COOK_PROC;
}
}else{
AppState = APP_COOK_POSTPONEMENT_PROC;
}
return true;
}
case APP_TIME_SET:
case APP_TEMP_SET:
case APP_COOK_POSTPONEMENT_PROC:
case APP_COOK_BOOST_PROC:
case APP_COOK_PROC:
case APP_KEEPWARM_PROC:
case APP_END_COOKING_PROC:
{
return true;
}
case APP_COOK_ENDOFBOOST_PROC:
{
AppState = APP_COOK_PROC;
return true;
}
default:
{
return false;
}
}
}
//Stop
bool Appl_Stop(void){
if( AppState == APP_OFF )return false;
if( AppState == APP_TEST )return false;
if( AppState == APP_VERSION_IND )return false;
if( AppState == APP_ERROR )return false;
if( AppState == APP_COOK_PROC_CONFIRM )
{
pof_clear_all();
}
AppState = APP_STAND_BY;
return true;
}
//Get device state
uint8_t Appl_GetState(void){
switch( AppState ){
case APP_OFF:
{
return APPL_OFF_STATE;
}
case APP_STAND_BY:
case APP_SOUND_CTRL:
{
return APPL_BEGIN_STATE;
}
case APP_CONTEXT_RESTORE_CANCEL_STATE:
{
return APPL_CONTEXT_RESTORE_CANCEL_STATE;
}
case APP_COOK_MODE:
case APP_POSTMENT_TIME_SET:
case APP_TIME_PRESET:
case APP_TEMP_PRESET:
{
return APPL_PROGRAM_STATE;
}
case APP_TIME_SET:
{
switch(AppReturnStateTimeSet)
{
case APP_COOK_POSTPONEMENT_PROC:
{
return APPL_START_DELAY_STATE;
}
case APP_COOK_BOOST_PROC:
{
return APPL_BOOST_STATE;
}
case APP_COOK_ENDOFBOOST_PROC:
{
return APPL_WAIT_STATE;
}
case APP_COOK_PROC:
{
return APPL_COOKING_STATE;
}
default:
{
return 0xff;
}
}
}
case APP_TEMP_SET:
{
switch( AppReturnStateTempSet )
{
case APP_COOK_POSTPONEMENT_PROC:
{
return APPL_START_DELAY_STATE;
}
case APP_COOK_BOOST_PROC:
{
return APPL_BOOST_STATE;
}
case APP_COOK_ENDOFBOOST_PROC:
{
return APPL_WAIT_STATE;
}
case APP_COOK_PROC:
{
return APPL_COOKING_STATE;
}
default :
{
return 0xff;
}
}
}
case APP_COOK_POSTPONEMENT_PROC:
{
return APPL_START_DELAY_STATE;
}
case APP_COOK_BOOST_PROC:
{
return APPL_BOOST_STATE;
}
case APP_COOK_ENDOFBOOST_PROC:
{
return APPL_WAIT_STATE;
}
case APP_COOK_PROC:
{
return APPL_COOKING_STATE;
}
case APP_KEEPWARM_PROC:
{
return APPL_REHEAT_STATE;
}
case APP_ERROR:
{
return APPL_ERROR_STATE;
}
case APP_PAIRING:
{
return APPL_PAIRING_STATE;
}
case APP_TEST:
{
return APPL_TEST_STATE;
}
case APP_COOK_PROC_CONFIRM:
{
return APPL_CONTEXT_RESTORE_CONFIRM_STATE;
}
default:
return 0xFF;
}
}
//Set program
bool Appl_SetProgram(uint8_t prog){
cooking_mode_t State;
if( ( AppState != APP_STAND_BY )
&& ( AppState != APPL_CONTEXT_RESTORE_CANCEL_STATE )
&& ( AppState != APP_COOK_MODE ) )
{
return false;
}
switch( prog ){
case APPL_MULTICOOKER_PROG:
State = COOK_MODE_MASTER_CHIEF;
break;
case APPL_QUICK_COOK_PROG:
State = COOK_MODE_EXPRESS;
break;
case APPL_BREAD_PROG:
State = COOK_MODE_BREAD;
break;
case APPL_STEAM_PROG:
State = COOK_MODE_STEAM;
break;
case APPL_BOIL_PROG:
State = COOK_MODE_BOIL;
break;
case APPL_PASTA_PROG:
State = COOK_MODE_PASTA;
break;
case APPL_FRY_PROG:
State = COOK_MODE_ROAST;
break;
case APPL_BAKE_PROG:
State = COOK_MODE_BAKE;
break;
case APPL_STEW_PROG:
State = COOK_MODE_BRAISE;
break;
case APPL_SOUP_PROG:
State = COOK_MODE_SOUP;
break;
case APPL_YOGURT_PROG:
State = COOK_MODE_YOGURT;
break;
case APPL_GRAIN_PROG:
State = COOK_MODE_RICE;
break;
case APPL_PIZZA_PROG:
State = COOK_MODE_PIZZA;
break;
case APPL_PORRIDGE_PROG:
State = COOK_MODE_PORRIDGE;
break;
case APPL_PILAF_PROG:
State = COOK_MODE_PILAF;
break;
case APPL_SLOW_COOK_PROG:
State = COOK_MODE_STEW;
break;
case APPL_VACUUM_PROG:
State = COOK_MODE_VACUUM;
break;
case APPL_PREHEAT_PROG:
State = COOK_MODE_PREHEAT;
break;
default:
return false;
}
if( cooking_set_main_program_num( State ) ){
app_temp_was_changed_flag = 0;
if( ( State != COOK_MODE_PREHEAT )
&& ( State != COOK_MODE_EXPRESS ) )
{
AppState = APP_COOK_MODE;
}else{
AppState = APP_STAND_BY;
}
return true;
}
return false;
}
//Get program
uint8_t Appl_GetProgram(void){
switch( cooking_get_main_program_num() ){
case COOK_MODE_MASTER_CHIEF:
return APPL_MULTICOOKER_PROG;
case COOK_MODE_EXPRESS:
return APPL_QUICK_COOK_PROG;
case COOK_MODE_BREAD:
return APPL_BREAD_PROG;
case COOK_MODE_STEAM:
return APPL_STEAM_PROG;
case COOK_MODE_BOIL:
return APPL_BOIL_PROG;
case COOK_MODE_PASTA:
return APPL_PASTA_PROG;
case COOK_MODE_ROAST:
return APPL_FRY_PROG;
case COOK_MODE_BAKE:
return APPL_BAKE_PROG;
case COOK_MODE_BRAISE:
return APPL_STEW_PROG;
case COOK_MODE_SOUP:
return APPL_SOUP_PROG;
case COOK_MODE_YOGURT:
return APPL_YOGURT_PROG;
case COOK_MODE_RICE:
return APPL_GRAIN_PROG;
case COOK_MODE_PIZZA:
return APPL_PIZZA_PROG;
case COOK_MODE_PORRIDGE:
return APPL_PORRIDGE_PROG;
case COOK_MODE_PILAF:
return APPL_PILAF_PROG;
case COOK_MODE_STEW:
return APPL_SLOW_COOK_PROG;
case COOK_MODE_VACUUM:
return APPL_VACUUM_PROG;
case COOK_MODE_PREHEAT:
return APPL_PREHEAT_PROG;
default:
return 0xFF;
}
}
//Set cooking temperature
bool Appl_SetCookTemp(uint8_t temp){
const cooking_prog_t* prog_p; //указатель на структуру параметров
cooking_mode_t prog_num;
prog_num = cooking_get_main_program_num();
if( cooking_get_default_program_param( prog_num , &prog_p ) == 0 )
{
return false; //ошибка неверно задана текущая программа
}
if( cooking_get_main_program_num() != COOK_MODE_MASTER_CHIEF )
{
if( prog_p->cCookTemp != temp ) //пытаемся задать отличную от default-ной температуру
{
if( ( AppState != APP_COOK_BOOST_PROC ) //состояния в которых разрешено изменение температуры( кроме мультиповара )
&& ( AppState != APP_COOK_POSTPONEMENT_PROC )
&& ( AppState != APP_COOK_ENDOFBOOST_PROC )
&& ( AppState != APP_COOK_PROC )
&& ( AppState != APP_TEMP_SET )
&& ( AppState != APP_TIME_SET ) )
{
return false;
}
if( cooking_get_main_program_num() == COOK_MODE_EXPRESS )return false;
if( cooking_get_main_program_num() == COOK_MODE_PREHEAT )return false;
}
}
if( ( temp <= cooking_get_main_program_max_cook_temp() )
&& ( temp >= cooking_get_main_program_min_cook_temp() ) )
{
if( prog_p->cCookTemp != temp ) //если задана не default тепмература отменим разгон
{
app_temp_was_changed_flag = 1;
}
cooking_set_main_program_cook_temp(temp);
if( temp > COOK_TEMP_TIME_MAX_2HOUR )
{
if( cooking_get_main_program_cook_remain_time() > 2*60 )
{
cooking_set_main_program_cook_remain_time(2*60);
}
}
if( temp < COOK_TEMP_PREHEAT_ENABLE )
{
cooking_set_keepwarm_state(0); //отключим разогрев
}
return true;
}
return false;
}
//Get cooking temperature
uint8_t Appl_GetCookTemp(void){
return cooking_get_main_program_cook_temp();
}
//Set cooking time in minutes
bool Appl_SetCookTime(uint16_t time){
if( time <= cooking_get_main_program_max_cook_time() ){
if( ( cooking_get_main_program_cook_temp() > COOK_TEMP_TIME_MAX_2HOUR )
&& ( time > 2*60 ))
{
return false;
}else{
cooking_set_main_program_cook_remain_time(time);
return true;
}
}else{
return false;
}
}
//Get cooking time in minutes
uint16_t Appl_GetCookTime(void){
return cooking_get_main_program_cook_time();
}
//Set defered start time in minutes, 0 if disable
bool Appl_SetDeferedStart(uint16_t time){
if( time > 24*60 ){
return false;
}else{
return cooking_set_main_program_postponement_time(time);
}
}
//Get defered start time in minutes, 0 if disable
uint16_t Appl_GetDeferedStart(void){
return cooking_get_main_program_postponement_time();
}
//Get time to end of cooking in minutes
uint16_t Appl_GetEndTime(void){
if( cooking_get_main_program_num() == COOK_MODE_EXPRESS ){
return 0;
}else{
return cooking_get_main_program_cook_remain_time();
}
}
//Set reheat state
bool Appl_SetReheat(uint8_t state){
return cooking_set_keepwarm_state(state);
}
//Get reheat state
uint8_t Appl_GetReheat(void){
return cooking_get_keepwarm_state();
}
//Get current time of reheat in minutes
uint16_t Appl_GetReheatTime(void){
return cooking_get_keep_warm_time();
}
//Get error
uint8_t Appl_GetError(void){
switch( app_error ){
case ERR_NO:
return APPL_NO_ERR;
case ERR_BOT_SENSOR:
return APPL_BOT_SENSOR_ERR;
case ERR_TOP_SENSOR:
return APPL_TOP_SENSOR_ERR;
case ERR_OVERHEAT:
return APPL_OVERHEAT_ERR;
case ERR_EMPTY_POT:
return APPL_EMPTY_POT_ERR;
default:
return APPL_NO_ERR;
}
}
//Return a state of the unpairing flag
bool Appl_IsUnpairing(void){
return unpairing_in_process;
}
//Clear unpairing flag
void Appl_ClrUnpairing(void){
unpairing_in_process = false;
return;
}
void Appl_ClrPairing(void){
AppState = APP_STAND_BY;
return;
}
void Appl_ErrorHandler(error_type_t Err){
app_error = Err;
AppState = APP_ERROR;
return;
}
U32 Appl_GetResetReason(void){
return app_reset_reason;
}
U8 Appl_GetPofEventCount(void){
return pof_get_pof_event_count();
}
bool Appl_TempWasChangedFlag(void){
return app_temp_was_changed_flag;
}
bool Appl_GetCookingProcessFlag(void){
switch (AppState)
{
case APP_STAND_BY:
case APP_SOUND_CTRL:
case APP_VERSION_IND:
case APP_PAIRING:
case APP_COOK_MODE:
case APP_POSTMENT_TIME_SET:
case APP_TIME_PRESET:
case APP_TEMP_PRESET:
case APP_END_COOKING_PROC:
case APP_PWM_SET:
case APP_ERROR:
case APP_TEST:
case APP_KEEPWARM_PROC:
case APP_COOK_PROC_CONFIRM:
return false;
case APP_TIME_SET:
case APP_TEMP_SET:
case APP_COOK_POSTPONEMENT_PROC:
case APP_COOK_BOOST_PROC:
case APP_COOK_ENDOFBOOST_PROC:
case APP_COOK_PROC:
return true;
default:
return false;
}
}