// UTF-8 w/o BOM

#ifndef __SDK_DL_H__
#define __SDK_DL_H__

#include "typedefs.h"
#include "time_date.h"
#include "dl_keypad.h"


#ifdef __cplusplus
extern "C" {
#endif

/******************************
   Свет 
*******************************/

/* Регулировка яркости дисплея 
	E398 ONLY! */
void HAPI_LP393X_disp_backlight_intensity( UINT32 light ); // light = 0..100

/* Боковые светодиоды и фонарик 
	E398 ONLY! */
void HAPI_LP393X_set_tri_color_led( UINT32 type, //  0-боковые, 1-фонарик;
									UINT32 val  //  0xRGB (0x000 - 0xFFF), например 0x00F - синий
								   );

typedef struct {
	unsigned int *addr;
	unsigned int  data;
	unsigned int  mask;
	UINT8  			rw;
	UINT8 		   reg;
} HAPI_CAP_ACCESS;

// клавиатура
void HAPI_PCAP_transceive(HAPI_CAP_ACCESS*);

/* Начать мигалку(funlight) под номером fl_id

	 E398 ONLY! */
UINT32 DL_AudStartFunlight( UINT8 fl_id,  UINT32 p2,  UINT32 p3 ); // p2 = 1, p3 = 0

/* Останавливает мигалку(funlight) под номером fl_id 
	E398 ONLY! */
UINT32 DL_AudStopFunlight( UINT8 fl_id );

//  Сенсор освещения.
UINT8 HAPI_ATOD_convert_ambient_light_sensor( void );

// подсветка клавиатуры
void DL_KeyUpdateKeypadBacklight( UINT8 P1 ); // P1 = 1 lighting; P2 = 0

// Регулировка яркости дисплея
UINT32 UIS_SetBacklightWithIntensity( UINT8 color, // = 255 
									  UINT8 intensity // = 0...6
									); 

/******************************
   DbFeature
******************************/

// чтение 
UINT8 DL_DbFeatureGetCurrentState( UINT16 fstate_ID, UINT8 *state );
// запись 
UINT8 DL_DbFeatureStoreState(UINT16 fstate_ID, UINT8 state);


UINT8 DL_DbFeatureGetValue(UINT16 feature_id, UINT32 *feature_value );

UINT8 DL_DbFeatureGetValueString(UINT32 feature_id, WCHAR *feature_string );


// версия проши
#ifdef PATCH
	extern char product_version[];
#else
	extern char product_version[];
#endif

/*************************
  Симы
*************************/

typedef struct {
	UINT16		seem_element_id;
	UINT16		seem_record_number;
	UINT32		seem_offset;
	UINT32		seem_size;
} SEEM_ELEMENT_DATA_CONTROL_T; 


// чтение из сима
UINT16   SEEM_ELEMENT_DATA_read 	( 	SEEM_ELEMENT_DATA_CONTROL_T  *data_ctrl_ptr, // указатель на структуру данных, содержащую информацию о запросе
										UINT8  *data_buf, // указатель на буфер, куда прочитаются данные
										BOOL read_zero_byte_allowed  // если true, то можно читать маленькие симы, длина которых меньше 255
									);

//  запись в сим												
UINT16  SEEM_ELEMENT_DATA_write	(  	SEEM_ELEMENT_DATA_CONTROL_T  *data_ctrl_ptr,
									UINT8  *seem_data_ptr // указатель на буфер, где хранятся записываемые данные
								);	
								
//  возвращает размер сима							
UINT32 SEEM_GET_ADDRESS_LENGTH_element_length(UINT16 seem_element_id);
// возвращает кол-во records (записей) сима
UINT16 SEEM_MAX_RECORD_get_max_record(UINT16 seem_element_id);



/* Читает в буфер seem_data count байт сима seem, записи record
	Перед чтением ОБЯЗАТЕЛЬНО выделить не менее count байт памяти! */
UINT32 SEEM_FDI_OUTSIDE_SEEM_ACCESS_read( UINT32 seem,  UINT32 record,  void* seem_data,  UINT32 count );

/* Записывает из буфера seem_data count байт в сим seem, запись record
	Не проверено */
#define SEEM_WRITE_METHOD_ADD				0
#define SEEM_WRITE_METHOD_UPDATE			1
UINT32 SEEM_FDI_OUTSIDE_SEEM_ACCESS_write( UINT32 method,  UINT32 seem,  UINT32 record,  void* seem_data,  UINT32 count );
													
													
/****************************
  Питание 
*****************************/													
/* Функция ребута */
void HAPI_WATCHDOG_soft_reset( void );

/* Функция выключения */
void pu_main_powerdown(UINT32 r0);


/****************************
  Громкость 
****************************/

enum // volume_type
{
	BASE = 0,	// громкость звонка

	PHONE, // громкость клавиатуры
	VOICE, // громкость мультимедия  LTE
	MICROPHONE, // громкость разговора
	MULTIMEDIA, //  громкость мультимедия LTE2 и V3i
	PTT_TONES,
	MUTABLE_MAX,
	IMMUTABLE_MAX,
	MAX = IMMUTABLE_MAX
};

// установить громкость
void DL_AudSetVolumeSetting(UINT8 volume_type, UINT8 volume);
// получить текущую громкость
void DL_AudGetVolumeSetting(UINT8 volume_type, UINT8 *volume);


/****************************
  Звонки
****************************/

#define MAX_CALLS			7

typedef struct
{
	UINT16			call_id;  
	UINT8			call_state;
} CALL_ID_T;

typedef struct
{
	UINT8		number_of_calls;
	UINT8		overall_call_state;
	CALL_ID_T	call_state_info[MAX_CALLS];
} CALL_STATES_T;


// если number_of_calls == 0, то вызовов нет
void DL_SigCallGetCallStates(CALL_STATES_T *call_states);

// TRUE - звонок (входящий/исходящий)
BOOL APP_MMC_Util_IsVoiceCall(void); // если FALSE, то вызовов нет

BOOL AlmclkReminderUtilCallInProgress(void); // если FALSE, то никакого активного вызова нет


/********************************
  Прочее 
********************************/

// воспроизведение тона/ возвращает seq_num
UINT32 DL_AudPlayTone( UINT32 tone,  UINT8 volume ); //Current volume = 0xFF
// остановка тона
void DL_AudStopTone(UINT32 tone, UINT32 seq_num);


// получение кодов
UINT32 DL_DbSigNamGetSecurityCode(WCHAR *);
UINT32 DL_DbSigNamGetUnlockCode(WCHAR *);

// статус PIN
enum {
	SIMPIN_STATUS_SECURED = 2,	// Также без симки
	SIMPIN_STATUS_NO_PIN,
	SIMPIN_STATUS_INVALID
};
UINT8 DL_SimMgrGetPinStatus( UINT8 card );

// сила сигнала сети
typedef struct
{
	UINT8 	percent;
	INT8	dbm;
} SIGNAL_STRENGTH_T;

void DL_SigRegQuerySignalStrength(SIGNAL_STRENGTH_T *signal_strength);

// Cell Id
void DL_SigRegGetCellID(UINT16 *cell_id);

// показания батареи в процентах
UINT8 DL_PwrGetActiveBatteryPercent( void );

// true - гарнитура подключена
BOOL DL_AccIsHeadsetAvailable(void);


#ifdef __cplusplus
} /* extern "C" */
#endif

#endif // __SDK_DL_H__
