#ifndef MME_H
#define MME_H

#include <typedefs.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifdef FTR_L7E
#define EV_MME_RANGE_START		0xE0000
#else 
#define EV_MME_RANGE_START		0xC1000
#endif


#define EV_MME_OPEN_SUCCESS		EV_MME_RANGE_START + 0x00 // удачное открытие файла
#define EV_MME_OPEN_ERROR		EV_MME_RANGE_START + 0x01 // не удачное открытие файла
#define EV_MME_SEEK_SUCCESS		EV_MME_RANGE_START + 0x02 // возникает после использования ф-ции MME_GC_playback_seek
#define EV_MME_SEEK_ERROR		EV_MME_RANGE_START + 0x03 // не удачный seek
#define EV_MME_PLAY_COMPLETE	EV_MME_RANGE_START + 0x0D // возникает при окончании проигрывания // в аттаче PLAY_COMPLETE_T
#define EV_MME_CLOSE_COMPLETE	EV_MME_RANGE_START + 0x14 // при закрытия
#define EV_MME_STOP_COMPLETE	EV_MME_RANGE_START + 0x15 // при стопе
#define EV_MME_STOPPED_AT_TIME	EV_MME_RANGE_START + 0x16 // стоп во время?



typedef void *		MME_GC_MEDIA_FILE;

typedef struct
{
	IFACE_DATA_T				iface_data;
	MME_GC_MEDIA_FILE			media_handle;
	UINT8						status; // = 1 // при окончании воспроизведения , на L7e почему-то 128
} MME_PLAY_COMPLETE_T; 

typedef struct
{
	IFACE_DATA_T				iface_data;
	MME_GC_MEDIA_FILE			media_handle;
} MME_OPEN_SUCCESS_T;

/*******************************/

typedef enum
{
	// изображения
	MIME_TYPE_IMAGE_GIF = 0,
	MIME_TYPE_IMAGE_BMP,
	MIME_TYPE_IMAGE_WBMP,
	MIME_TYPE_IMAGE_PNG,
	MIME_TYPE_IMAGE_JPEG,

	// аудио 
	MIME_TYPE_AUDIO_MID = 11,
	MIME_TYPE_AUDIO_MIDI,
	MIME_TYPE_AUDIO_MIX,
	MIME_TYPE_AUDIO_BAS,
	MIME_TYPE_AUDIO_MP3,
	MIME_TYPE_AUDIO_AAC,
	MIME_TYPE_AUDIO_AMR = 24,
	MIME_TYPE_AUDIO_MP4 = 26,
	MIME_TYPE_AUDIO_M4A,

	// видео
	MIME_TYPE_VIDEO_ASF = 34,
	MIME_TYPE_VIDEO_MP4 = 36,
	MIME_TYPE_VIDEO_MPEG4,
	MIME_TYPE_VIDEO_H263

} MIME_TYPE_T;

/***************************************
	AUDIO
****************************************/

// Открывает файл uri для воспроизведения, и возвращает указатель на открытый файл. uri файла может как начинаться на "file:/", так и не начинаться
MME_GC_MEDIA_FILE  MME_GC_playback_create(IFACE_DATA_T * data, WCHAR * uri,
				UINT32 unk1, UINT32 unk2, UINT32 unk3, UINT32 unk4, UINT32 unk5, UINT32 unk6); 

// Закрывает файл
UINT32 MME_GC_playback_delete(MME_GC_MEDIA_FILE media_file); 

// Начать воспроизведение файла
UINT32 MME_GC_playback_start(MME_GC_MEDIA_FILE media_file, UINT32 unk1, UINT32 unk2); 

// Остановить воспроизведение файла
UINT32 MME_GC_playback_stop(MME_GC_MEDIA_FILE  media_file); 

// Пауза
UINT32 MME_GC_playback_pause(MME_GC_MEDIA_FILE  media_file); 

// перемотка на ms мс. от начала файла
UINT32 MME_GC_playback_seek(MME_GC_MEDIA_FILE media_file, UINT32 ms); 

typedef struct 
{
	WCHAR *		str;
	UINT16		str_size;
} STRING_T;

typedef struct 
{
	WCHAR *		str;
	UINT16		str_size;
	UINT8		unk0[4];
	UINT8		unk1[4];
} RATING_T;

typedef struct 
{
	STRING_T	title;
	STRING_T	author;
	STRING_T	copyright;
	STRING_T	description;
	STRING_T	performer;
	STRING_T	genre;
	RATING_T	rating;
	STRING_T	location;
	STRING_T	date;
	STRING_T	album;

} MEDIA_FILE_INFO_T;

typedef enum 
{
	PLAY_RATE_1X = 1,
	PLAY_RATE_2X,
	PLAY_RATE_3X,
	PLAY_RATE_4X,
	PLAY_RATE_MAX
} PLAY_RATE_T;

typedef enum{
	CODEC_NONE = 0,
	MP3_CODEC = 2,
	AAC_CODEC,
	MIDI_CODEC,
	WAV_CODEC,
	AMR_CODEC = 15
} AUDIO_CODEC_TYPE_T;

typedef struct
{
	UINT32						bit_rate;
	AUDIO_CODEC_TYPE_T			audio_codec;
	UINT32						sampling_freq;
	UINT8						audio_mode;	// 0=Mono, 1=Stereo 
	UINT16						unk1[7];
	UINT8						wav_bit_rate; // 0 =4, 1=8, 2=16 Kb/s
	UINT16						unk2[7];
} AUDIO_FORMAT_T;

#ifdef FTR_L7E
#define ATTRIBUTE_RANGE_1 	0x5C
#else
#define ATTRIBUTE_RANGE_1 	71
#endif

typedef enum
{
	// get и set
	FILE_INFO = 0, 					// MEDIA_FILE_INFO_T
	DURATION,						// UINT32
	DURATION_MS, 					// UINT32
	FILE_SIZE,						// UINT32
	MEDIA_PATH = 6,					// WCHAR
	PLAY_RATE = 8,					// PLAY_RATE_T
	MEDIA_STOP_TIME = 58,			// UINT32
	MEDIA_STOP_TIME_MS = 60,		// UINT32
	PLAYBACK_AUDIO_VOLUME = 63, 	// UINT8
	MEDIA_VOLUME,					// UINT8		
  
	// get
	AUDIO_FORMAT = ATTRIBUTE_RANGE_1,		// AUDIO_FORMAT_T
	POSITION = ATTRIBUTE_RANGE_1 + 3,		// UINT32
	POSITION_MS,							// UINT32 
	PAUSE_POSITION = 114					// UINT32
} ATTRIBUTE_NAME_T;

// получаем аттрибуты 
UINT32
MME_GC_playback_get_attribute( MME_GC_MEDIA_FILE handle,
								ATTRIBUTE_NAME_T attribute_name,
								void * attribute_value );

// устанавливаем аттрибуты 
UINT32
MME_GC_playback_set_attribute( MME_GC_MEDIA_FILE handle,
								ATTRIBUTE_NAME_T attribute_name,
								void * attribute_value );


#ifdef __cplusplus
} /* extern "C" */
#endif									
									
#endif
