
#include "wallpaper.h"
UINT32              evcode_base;
BOOL bPressStar = FALSE;
UINT8 result;
const char app_name[APP_NAME_LEN] = "wallpaper"; 



const EVENT_HANDLER_ENTRY_T any_state_handlers[] =
{  
    
    {0x20bf,             caseopen},
     
    {0x20be,             caseclose},
     
    { EV_TIMER_EXPIRED,       	 Timer },
    { EV_KEY_PRESS,             HandleKeypress},
    { EV_KEY_RELEASE,           HandleKeyrelease},
    { STATE_HANDLERS_END,           NULL           },
};

const EVENT_HANDLER_ENTRY_T main_state_handlers[] =
{
    { STATE_HANDLERS_END,           NULL           },
};

/* Таблиц?соответствий обработчиков, сост?ни??функци?вход?выхода из сост?ния.
   По?до?сост?ни?тако?же, ка??enum-e */
static const STATE_HANDLERS_ENTRY_T state_handling_table[] =
{
    { HW_STATE_ANY,               // State
      NULL,                       // Обработчик вход??state
      NULL,                       // Обработчик выхода из state
      any_state_handlers          // Список обработчиков событи?
    },

    { HW_STATE_MAIN,
      MainStateEnter,
      NULL,
      main_state_handlers
    }

};

/* Эт?entry для всех эльфов, должна быть об?влен?именно та?*/
/* file_uri - путь ?эльф?(аналогично argv[0]) */
/* param - параметр?эльф?(аналогично остальны?argv) */
/* reserve - выделенн? база eventcode-ов (зарезервирован?64 значен?)*/
UINT32 Register( char* file_uri,  char* param,  UINT32 reserve )
{
    UINT32 status = RESULT_OK;
    evcode_base = reserve;    // Сохраняем reserve
    

/* Регистрируем приложение */
    status = APP_Register( &evcode_base,            // На како?событи?должно запускаться приложение
                           1,                       // Ко?во событи? на которо?должно запускаться приложение
                           state_handling_table,    // Таблиц?сост?ни?
                           HW_STATE_MAX,            // Количество сост?ни?
                           (void*)HelloWorldStart );   // Функция, вызываем? пр?запуск?
                   
    UtilLogStringData(" *** ELF *** HelloWorld: Register status %d", status);
    
    LdrStartApp(reserve);   // Запустит?немедленно
    
    return 1;   // Пока не имее?значен?, чт?возвращать
}


/* Функция вызываем? пр?старте приложен? */
UINT32 HelloWorldStart( EVENT_STACK_T *ev_st,  REG_ID_T reg_id,  UINT32 param2 )//void *reg_hdl )
{
    APP_HELLOWORLD_T     *app = NULL;
    UINT32 status = RESULT_OK;
    
    UtilLogStringData(" *** ELF *** HelloWorld: HelloWorldStart");

    /* Проверяем, ?вдру?уж?запущено? */
    if( AFW_InquireRoutingStackByRegId( reg_id ) == RESULT_OK )
    {
        return RESULT_FAIL; // На?не нуже?второй экземп??
    }
    else
    {
        // Инициализация для фоновы?приложений
        app = (APP_HELLOWORLD_T*)APP_InitAppData( (void *)APP_HandleEventPrepost, // Обработчик для фоновы?приложений
                                                  sizeof(APP_HELLOWORLD_T), // Размер структур?приложен?
                                                  reg_id,
                                                  0, 1,
                                                  1,
                                                  2, 0, 0 );
                                                  
        UtilLogStringData(" *** ELF *** HelloWorld: APP_InitAppData 0x%X", app);
        status = APP_Start( ev_st,
                            &app->apt,
                            HW_STATE_MAIN, // Начально?сост?ни?
                            state_handling_table,
                            HelloWorldExit,
                            app_name,
                            0 );

       

    }

    return RESULT_OK;
}


/* Функция выхода из приложен? */
UINT32 HelloWorldExit( EVENT_STACK_T *ev_st,  void *app )
{
    UINT32  status;

    /* Завершае?работу приложен? */
    status = APP_Exit( ev_st, app, NULL );

    /* Выгружае?эльф */
    LdrUnloadELF(&Lib); // &Lib указывае?на начало эльф?

    return status;
}

/* Обработчик вход??state */
UINT32 MainStateEnter( EVENT_STACK_T *ev_st,  void *app,  ENTER_STATE_TYPE_T type )
{
    UtilLogStringData(" *** ELF *** HelloWorld: MainStateEnter");
    return RESULT_OK;
}
UINT32 HandleKeypress( EVENT_STACK_T *ev_st,  void *app )
{
    EVENT_T     *event = AFW_GetEv(ev_st);

    

	
    
    if(event->data.key_pressed == 11)
	{
		if(bPressStar == TRUE)
		{
			UtilLogStringData(" *** ELF *** ");
			
			
		}
		else
			UtilLogStringData(" *** ELF *** ");
	}
	else
	{
		if(bPressStar == TRUE && event->data.key_pressed == 5)
		{
			UtilLogStringData(" *** ELF *** ");
			return HelloWorldExit(ev_st, app);
		}
		else
			UtilLogStringData(" *** ELF ***");
	}
    
    return RESULT_OK;
}

UINT32 HandleKeyrelease( EVENT_STACK_T *ev_st,  void *app )
{
    EVENT_T     *event = AFW_GetEv(ev_st);
    UINT8 res;
    UIS_GetActiveDialogType(&res);

    if(event->data.key_pressed == 11&&res==0xE)
	{
		if(bPressStar == FALSE)
			bPressStar = TRUE;
	}
	else
		bPressStar = FALSE;
    return RESULT_OK;
}
/* Обработчик события, EV_KEY_PRESS ?данном случае */
UINT32 caseopen(EVENT_STACK_T *ev_st,  void *app)
{
            DL_DbFeatureGetCurrentState( 0x05CE, &result ); 
          APP_UtilStartTimer(1000,7,app);//СУіЩК±јд

                    return RESULT_OK;

}
UINT32 caseclose(EVENT_STACK_T *ev_st,  void *app)
{
        DL_DbFeatureGetCurrentState( 0x05CE, &result );      
        APP_UtilStartTimer(1000,8,app);//СУіЩК±јд
                    return RESULT_OK;

}
UINT32 Timer( EVENT_STACK_T *ev_st,  void *app )
{
 WCHAR* strFilePath = suAllocMem( 100, NULL );
if(result !=02 && result !=04)
{
   if (((DL_TIMER_DATA_T*)(AFW_GetEv(ev_st)->attachment))->ID == 7) 
      {
       u_atou( "file://b/dkdiy/CaseOpen.mp3", strFilePath); 
        
      }
   if (((DL_TIMER_DATA_T*)(AFW_GetEv(ev_st)->attachment))->ID == 8)
      {
     
      u_atou( "file://b/dkdiy/CaseClose.mp3", strFilePath);
      }

}

MME_GC_playback_open_audio_play_forget(strFilePath);
suFreeMem( strFilePath);


return RESULT_OK;
}
 


