
#include "zv.h"
extern UINT32 *EV_CALL_PLACE2;
extern UINT32 *BEGIN_4A__IN_DB;
extern UINT32 *EV_CHANGE_MODE;
WCHAR   TXT[256];
UINT32 evcode_base;
UINT8  ress=1;


const char app_name[APP_NAME_LEN] = "cps"; 



EVENT_HANDLER_ENTRY_T any_state_handlers[] =
{    
	{0x8201B,                OS5}, // единый для всех ивент "Пропущенный вызов"
    { NULL,                  OS3}, // определим "Ответили на звонок" позже
	{ NULL ,             HelloWorldExit},// без выхода
    { STATE_HANDLERS_END,    NULL  },
};

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


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
    }

};


UINT32 Register( char* file_uri,  char* param,  UINT32 reserve )
{
    UINT32 status = RESULT_OK;
    WCHAR              nameCfgFile[256];
    FILE_HANDLE_T  myf;
    UINT32                DDD;
    char                SSS='3'; // количество пропущенных вызовов для файла txt
	char                buf[256];
UINT32 two_event = *EV_CALL_PLACE2 + 2; // единый ивент "Ответили на звонок"
evcode_base = reserve;    // Сохраняем reserve
any_state_handlers[1].code = two_event;

    status = APP_Register( &evcode_base,      
                           1,                       
                           state_handling_table, 
                           HW_STATE_MAX,         
                           (void*)HelloWorldStart);  
u_atou(file_uri, nameCfgFile);
nameCfgFile[u_strlen(nameCfgFile)-3] = 0;
u_strcat(nameCfgFile, L"txt");
  if (DL_FsFFileExist( nameCfgFile)) // проверяем есть ли файл
  { u_strcpy(TXT,nameCfgFile); } //если есть пишем в глобальную переменную TXT путь к нему
  else // если файла нет , создаём его
  {

   myf = DL_FsOpenFile( nameCfgFile,  FILE_APPEND_PLUS_MODE,  0 );
   DL_FsFSeekFile( myf, 0, 0 );
   DL_FsWriteFile( &SSS , 1,  1,  myf, &DDD); // и пишем в него значение 3
   DL_FsCloseFile(myf);
  }
u_strcpy(TXT,nameCfgFile); //пишем в глобальную переменную TXT путь к нему
u_utoa(TXT, buf);
PFprintf("TXT = %s", buf);
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;

    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 );
                                                  

        status = APP_Start( ev_st,
                            &app->apt,
                            HW_STATE_MAIN, // Начально?сост?ни?
                            state_handling_table,
                            HelloWorldExit,
                            app_name,
                            0 );

PFprintf ("------------------------------ ELF  cps \n");
      
     
    }

    return RESULT_OK;
}



UINT32 HelloWorldExit( EVENT_STACK_T *ev_st,  void *app )// выход
{    UINT32  status;
    PFprintf ("------------------------------ ELF  cps EXIT \n");   
    status = APP_Exit( ev_st, app, 0 );   
    LdrUnloadELF(&Lib); 
    return status;
}


UINT32 MainStateEnter( EVENT_STACK_T *ev_st,  void *app,  ENTER_STATE_TYPE_T type )
{
PFprintf ("------------------------------ ELF  cps StateEnter \n");
    return RESULT_OK;
}


UINT32 OS5( EVENT_STACK_T *ev_st,  void *app ) // сработал ивент "пропущенный вызов"
{
	UINT8 feature_state;
	UINT32 drop;
	FILE_HANDLE_T  myf;
    UINT32    DDD;
    char      SYS;
	UINT8 	my_int=1;



drop=*BEGIN_4A__IN_DB+0xA; // SEEM 004A_0001, Смещ-е 000Ah/10d (Абс.бит 80): ACTIVE_ALERT_TYPE
DL_DbFeatureGetCurrentState( drop,  &feature_state); // читаем значение в этом байте 
PFprintf ("--------------------------------ELF  cps: feature_state = %d\n", feature_state);
if (feature_state == 2 || feature_state == 4) // если бесшумный или вибро режим
{
myf = DL_FsOpenFile( TXT,  FILE_READ_MODE,  0 ); // читаем конфигурационный файл CallPostStyle.txt
DL_FsReadFile(&SYS, 1 , 1, myf, &DDD );
my_int = strtol(&SYS, 0, 10);
PFprintf ("--------------------------------my_int  = %d\n", my_int); // значение из txt 
	if (my_int==ress) // если счётчик пропущенных и значение из txt равны 
	{ 
		DL_DbFeatureStoreState(*BEGIN_4A__IN_DB+0x1ED, 0); // пишем значение Улица в SEEM 004A_0001, Смещ-е 01EDh/493d (Абс.бит 3944): SILENT_VIBRATE_MODE_HASH_KEY

		AFW_CreateInternalQueuedEvAux( *EV_CHANGE_MODE , 0x65, 0, 0 ); // запускаем ивент смены стиля
PFprintf ("--------------------------------ELF  cps: key");
						 ress=1; // сбрасываем счётчик

PFprintf ("--------------------------------ELF  cps: START !!! = %d\n", ress);
	}
	 else { ress++ ; // иначе нарасчиваем счётчик
PFprintf ("--------------------------------ELF  cps: rano ... tolko = %d\n", ress);
	 }
}

			return RESULT_OK;
}




UINT32 OS3( EVENT_STACK_T *ev_st,  void *app )//сработал ивент "ответ на звонок"
{
	  ress=1;  // если по телефону ответили, то сбрасываем счётчик
	  PFprintf ("--------------------------------ELF  cps: answer -------- -- --");
		return RESULT_OK;
}
 

