#ifndef __CM65xx_H__
#define __CM65xx_H__
#include "types.h"
extern BYTE code T1_ConfigDscr;
extern BYTE code T1_ACIntrfcDscrHeader;
extern BYTE code T1_OTerminal3Dscr;
extern BYTE code T1_OTerminal3DscrEnd;
extern BYTE code T1_FeatureUnit5Dscr;
extern BYTE code T1_FeatureUnit5DscrEnd;
extern BYTE code T1_FeatureUnit6Dscr;
extern BYTE code T1_FeatureUnit6DscrEnd;
extern BYTE code T1_FeatureUnit7Dscr;
extern BYTE code T1_FeatureUnit7DscrEnd;
extern BYTE code T1_MixerUnit9Dscr;
extern BYTE code T1_MixerUnit9DscrEnd;
extern BYTE code T1_ASIt1Alt1Dscr;
extern BYTE code T1_ASIt1Alt1DscrEnd;
extern BYTE code T1_ASIt1Alt1EpDscr;
extern BYTE code T1_ASIt1Alt1EpDscrEnd;
extern BYTE code T1_ASIt1Alt1FbEpDscr;
extern BYTE code T1_ASIt1Alt1FbEpDscrEnd;
extern BYTE code T1_ASIt2Alt1EpDscr;
extern BYTE code T1_ASIt2Alt1EpDscrEnd;
extern BYTE code T1_HidDscr;
extern BYTE code T2_ConfigDscr;
extern BYTE code T2_ACIntrfcDscrHeader;
extern BYTE code T2_OTerminal2Dscr;
extern BYTE code T2_OTerminal2DscrEnd;
extern BYTE code T2_FeatureUnit3Dscr;
extern BYTE code T2_FeatureUnit3DscrEnd;
extern BYTE code T2_ASIt1Alt1Dscr;
extern BYTE code T2_ASIt1Alt1DscrEnd;
extern BYTE code T2_ASIt1Alt1EpDscr;
extern BYTE code T2_ASIt1Alt1EpDscrEnd;
extern BYTE code T2_ASIt1Alt1FbEpDscr;
extern BYTE code T2_ASIt1Alt1FbEpDscrEnd;
extern BYTE code T2_HidDscr;
extern BYTE code T3_ConfigDscr;
extern BYTE code T3_ACIntrfcDscrHeader;
extern BYTE code T3_ITerminal1Dscr;
extern BYTE code T3_FeatureUnit3Dscr;
extern BYTE code T3_FeatureUnit3DscrEnd;
extern BYTE code T3_ASIt1Alt1EpDscr;
extern BYTE code T3_ASIt1Alt1EpDscrEnd;
extern BYTE code T3_HidDscr;
extern BYTE code T4_ConfigDscr;
extern BYTE code T4_ACIntrfcDscrHeader;
extern BYTE code T4_ITerminal4Dscr;
extern BYTE code T4_ITerminal4DscrEnd;
extern BYTE code T4_ITerminal5Dscr;
extern BYTE code T4_ITerminal5DscrEnd;
extern BYTE code T4_OTerminal6Dscr;
extern BYTE code T4_OTerminal6DscrEnd;
extern BYTE code T4_FeatureUnit8Dscr;
extern BYTE code T4_FeatureUnit8DscrEnd;
extern BYTE code T4_FeatureUnit9Dscr;
extern BYTE code T4_FeatureUnit9DscrEnd;
extern BYTE code T4_FeatureUnit11Dscr;
extern BYTE code T4_FeatureUnit11DscrEnd;
extern BYTE code T4_FeatureUnit12Dscr;
extern BYTE code T4_FeatureUnit12DscrEnd;
extern BYTE code T4_FeatureUnit13Dscr;
extern BYTE code T4_FeatureUnit13DscrEnd;
extern BYTE code T4_FeatureUnit14Dscr;
extern BYTE code T4_FeatureUnit14DscrEnd;
extern BYTE code T4_SelectorUnit15Dscr;
extern BYTE code T4_SelectorUnit15DscrEnd;
extern BYTE code T4_SelectorUnit15Dscr_0;
extern BYTE code T4_SelectorUnit15DscrEnd_0;
extern BYTE code T4_SelectorUnit15Dscr_1;
extern BYTE code T4_SelectorUnit15DscrEnd_1;
extern BYTE code T4_SelectorUnit15Dscr_2;
extern BYTE code T4_SelectorUnit15DscrEnd_2;
extern BYTE code T4_MixerUnit16Dscr;
extern BYTE code T4_MixerUnit16DscrEnd;
extern BYTE code T4_ASIt1Alt1Dscr;
extern BYTE code T4_ASIt1Alt1DscrEnd;
extern BYTE code T4_ASIt1Alt1EpDscr;
extern BYTE code T4_ASIt1Alt1EpDscrEnd;
extern BYTE code T4_ASIt1Alt1FbEpDscr;
extern BYTE code T4_ASIt1Alt1FbEpDscrEnd;
extern BYTE code T4_ASIt2Alt1EpDscr;
extern BYTE code T4_ASIt2Alt1EpDscrEnd;
extern BYTE code T4_HidDscr;
#define VENDOR_ID_CMEDIA_H 0x0D //VID高位
#define VENDOR_ID_CMEDIA_L 0x8C //VID低位
#define DEFAULT_PRODUCT_NUM 5
#define PRODUCT_HEADSET 1
#define PRODUCT_HEADPHONE 2
#define PRODUCT_DOCKING 3
#define PRODUCT_MONO_MIC 4
#define PRODUCT_STEREO_MIC 5
#define PRODUCT_ID_BASE_H 0x01 //PID高位
#define PRODUCT_ID_BASE_L 0x70 //PID低位
#define PRODUCT_ID_GROUP_HEADSET 0x00
#define PRODUCT_ID_GROUP_SPEAKER 0x01
#define PRODUCT_ID_GROUP_MIC 0x02
#define PRODUCT_ID_GROUP_DOCKING 0x03
#define MAX_BUFFER_SIZE 16
#define MAX_HID_REPORT_SIZE 16
#define EEPROM_DEVICE_ADDRESS 0xA0
#define EEPROM_VENDOR_ID_ADDR 0x02
#define EEPROM_PRODUCT_ID_ADDR 0x04
#define EEPROM_SETTING_A_ADDR 0x06
#define EEPROM_SETTING_B_ADDR 0x07
#define EEPROM_SETTING_C_ADDR 0x08
#define EEPROM_SETTING_D_ADDR 0x09
#define EEPROM_SETTING_E_ADDR 0x0A
#define EEPROM_SETTING_F_ADDR 0x0B
#define EEPROM_GROUP_MCU_CODE_ADDR 0x0C
#define EEPROM_GROUP_START_ADDR 0x0C
#define EEPROM_GROUP_NUM 7
#define EEPROM_GROUP_END 0x7F
#define HID_REPORT_ID_GENEGRIC 0x01
#define HID_INPUT_REPORT_INT_IR bmBIT0
#define HID_INPUT_REPORT_INT_I2C bmBIT1
#define HID_INPUT_REPORT_INT_SPI bmBIT3
#define HID_INPUT_REPORT_INT_UART bmBIT6
#define HID_INPUT_REPORT_INT_GPIO bmBIT5
#define HID_INPUT_REPORT_INT_I2C_SLAVE bmBIT2
#define HID_INPUT_REPORT_INT_SPI_SLAVE bmBIT4
#define DEFAULT_GPIO_RECORD_MUTE 0x03
//Headsets
#define T1_LENGTH 0x0106
#define T1_HEADER_ADDR (&T1_ACIntrfcDscrHeader - &T1_ConfigDscr)
#define T1_HEADER_LEN (g_bmAaPathEn ? 0x0066 : 0x004F)
#define T1_OT_ADDR (&T1_OTerminal3Dscr - &T1_ConfigDscr)
#define T1_OT_LEN (&T1_OTerminal3DscrEnd - &T1_OTerminal3Dscr)
#define T1_FEA_DAC_ADDR (&T1_FeatureUnit5Dscr - &T1_ConfigDscr)
#define T1_FEA_DAC_LEN (&T1_FeatureUnit5DscrEnd - &T1_FeatureUnit5Dscr)
#define T1_FEA_ADC_ADDR (&T1_FeatureUnit6Dscr - &T1_ConfigDscr)
#define T1_FEA_ADC_LEN (&T1_FeatureUnit6DscrEnd - &T1_FeatureUnit6Dscr)
#define T1_FEA_AA_ADDR (&T1_FeatureUnit7Dscr - &T1_ConfigDscr)
#define T1_FEA_AA_LEN (&T1_FeatureUnit7DscrEnd - &T1_FeatureUnit7Dscr)
#define T1_MIX_ADDR (&T1_MixerUnit9Dscr - &T1_ConfigDscr)
#define T1_MIX_LEN (&T1_MixerUnit9DscrEnd - &T1_MixerUnit9Dscr)
#define T1_I1A1_ADDR (&T1_ASIt1Alt1Dscr - &T1_ConfigDscr)
#define T1_I1A1_LEN (&T1_ASIt1Alt1DscrEnd - &T1_ASIt1Alt1Dscr)
#define T1_I1A1E_ADDR (&T1_ASIt1Alt1EpDscr - &T1_ConfigDscr)
#define T1_I1A1E_LEN (&T1_ASIt1Alt1EpDscrEnd - &T1_ASIt1Alt1EpDscr)
#define T1_I1A1FE_ADDR (&T1_ASIt1Alt1FbEpDscr - &T1_ConfigDscr)
#define T1_I1A1FE_LEN (&T1_ASIt1Alt1FbEpDscrEnd - &T1_ASIt1Alt1FbEpDscr)
#define T1_I2A1E_ADDR (&T1_ASIt2Alt1EpDscr - &T1_ConfigDscr)
#define T1_I2A1E_LEN (&T1_ASIt2Alt1EpDscrEnd - &T1_ASIt2Alt1EpDscr)
//fix wrong HID report dscr. length
#define T1_HID_ADDR (&T1_HidDscr- &T1_ConfigDscr)
//Speaker
#define T2_LENGTH 0x0099
#define T2_HEADER_ADDR (&T2_ACIntrfcDscrHeader - &T2_ConfigDscr)
#define T2_HEADER_LEN 0x0028
#define T2_OT_ADDR (&T2_OTerminal2Dscr - &T2_ConfigDscr)
#define T2_OT_LEN (&T2_OTerminal2DscrEnd - &T2_OTerminal2Dscr)
#define T2_FEA_DAC_ADDR (&T2_FeatureUnit3Dscr - &T2_ConfigDscr)
#define T2_FEA_DAC_LEN (&T2_FeatureUnit3DscrEnd - &T2_FeatureUnit3Dscr)
#define T2_I1A1_ADDR (&T2_ASIt1Alt1Dscr - &T2_ConfigDscr)
#define T2_I1A1_LEN (&T2_ASIt1Alt1DscrEnd - &T2_ASIt1Alt1Dscr)
#define T2_I1A1E_ADDR (&T2_ASIt1Alt1EpDscr - &T2_ConfigDscr)
#define T2_I1A1E_LEN (&T2_ASIt1Alt1EpDscrEnd - &T2_ASIt1Alt1EpDscr)
#define T2_I1A1FE_ADDR (&T2_ASIt1Alt1FbEpDscr - &T2_ConfigDscr)
#define T2_I1A1FE_LEN (&T2_ASIt1Alt1FbEpDscrEnd - &T2_ASIt1Alt1FbEpDscr)
//fix wrong HID report dscr. length
#define T2_HID_ADDR (&T2_HidDscr- &T2_ConfigDscr)
//Stereo Mic
#define T3_LENGTH 0x00A0
#define T3_HEADER_ADDR (&T3_ACIntrfcDscrHeader - &T3_ConfigDscr)
#define T3_HEADER_LEN 0x002F
#define T3_IT_ADDR (&T3_ITerminal1Dscr - &T3_ConfigDscr)
#define T3_FEA_ADC_ADDR (&T3_FeatureUnit3Dscr - &T3_ConfigDscr)
#define T3_FEA_ADC_LEN (&T3_FeatureUnit3DscrEnd - &T3_FeatureUnit3Dscr)
#define T3_I1A1E_ADDR (&T3_ASIt1Alt1EpDscr - &T3_ConfigDscr)
#define T3_I1A1E_LEN (&T3_ASIt1Alt1EpDscrEnd - &T3_ASIt1Alt1EpDscr)
//fix wrong HID report dscr. length
#define T3_HID_ADDR (&T3_HidDscr- &T3_ConfigDscr)
//Dongle and Docking
#define T4_LENGTH 0x011D
#define T4_HEADER_ADDR (&T4_ACIntrfcDscrHeader - &T4_ConfigDscr)
#define T4_HEADER_LEN 0x0066
#define T4_IT_S_ADDR (&T4_ITerminal4Dscr - &T4_ConfigDscr)
#define T4_IT_S_LEN (&T4_ITerminal4DscrEnd - &T4_ITerminal4Dscr)
#define T4_IT_M_ADDR (&T4_ITerminal5Dscr - &T4_ConfigDscr)
#define T4_IT_M_LEN (&T4_ITerminal5DscrEnd - &T4_ITerminal5Dscr)
#define T4_OT_ADDR (&T4_OTerminal6Dscr - &T4_ConfigDscr)
#define T4_OT_LEN (&T4_OTerminal6DscrEnd - &T4_OTerminal6Dscr)
#define T4_FEA_DAC_ADDR (&T4_FeatureUnit8Dscr - &T4_ConfigDscr)
#define T4_FEA_DAC_LEN (&T4_FeatureUnit8DscrEnd - &T4_FeatureUnit8Dscr)
#define T4_FEA_ADCM_ADDR (&T4_FeatureUnit9Dscr - &T4_ConfigDscr)
#define T4_FEA_ADCM_LEN (&T4_FeatureUnit9DscrEnd - &T4_FeatureUnit9Dscr)
#define T4_FEA_SPD_ADDR (&T4_FeatureUnit11Dscr - &T4_ConfigDscr)
#define T4_FEA_SPD_LEN (&T4_FeatureUnit11DscrEnd - &T4_FeatureUnit11Dscr)
#define T4_FEA_MIX_ADDR (&T4_FeatureUnit12Dscr - &T4_ConfigDscr)
#define T4_FEA_MIX_LEN (&T4_FeatureUnit12DscrEnd - &T4_FeatureUnit12Dscr)
#define T4_FEA_AAM_ADDR (&T4_FeatureUnit13Dscr - &T4_ConfigDscr)
#define T4_FEA_AAM_LEN (&T4_FeatureUnit13DscrEnd - &T4_FeatureUnit13Dscr)
#define T4_FEA_AAL_ADDR (&T4_FeatureUnit14Dscr - &T4_ConfigDscr)
#define T4_FEA_AAL_LEN (&T4_FeatureUnit14DscrEnd - &T4_FeatureUnit14Dscr)
#define T4_SEL_ADDR (&T4_SelectorUnit15Dscr - &T4_ConfigDscr)
#define T4_SEL_LEN_1 (&T4_SelectorUnit15DscrEnd - &T4_SelectorUnit15Dscr)
#define T4_SEL_LEN_2 (&T4_SelectorUnit15DscrEnd_0 - &T4_SelectorUnit15Dscr_0)
#define T4_SEL_LEN_3 (&T4_SelectorUnit15DscrEnd_1 - &T4_SelectorUnit15Dscr_1)
#define T4_SEL_LEN_4 (&T4_SelectorUnit15DscrEnd_2 - &T4_SelectorUnit15Dscr_2)
#define T4_SEL_LEN_ALL (&T4_SelectorUnit15DscrEnd_2 - &T4_SelectorUnit15Dscr)
#define T4_MIX_ADDR (&T4_MixerUnit16Dscr - &T4_ConfigDscr)
#define T4_MIX_LEN (&T4_MixerUnit16DscrEnd - &T4_MixerUnit16Dscr)
#define T4_I1A1_ADDR (&T4_ASIt1Alt1Dscr - &T4_ConfigDscr)
#define T4_I1A1_LEN (&T4_ASIt1Alt1DscrEnd - &T4_ASIt1Alt1Dscr)
#define T4_I1A1E_ADDR (&T4_ASIt1Alt1EpDscr - &T4_ConfigDscr)
#define T4_I1A1E_LEN (&T4_ASIt1Alt1EpDscrEnd - &T4_ASIt1Alt1EpDscr)
#define T4_I1A1FE_ADDR (&T4_ASIt1Alt1FbEpDscr - &T4_ConfigDscr)
#define T4_I1A1FE_LEN (&T4_ASIt1Alt1FbEpDscrEnd - &T4_ASIt1Alt1FbEpDscr)
#define T4_I2A1E_ADDR (&T4_ASIt2Alt1EpDscr - &T4_ConfigDscr)
#define T4_I2A1E_LEN (&T4_ASIt2Alt1EpDscrEnd - &T4_ASIt2Alt1EpDscr)
//fix wrong HID report dscr. length
#define T4_HID_ADDR (&T4_HidDscr- &T4_ConfigDscr)
//Lync
#define T5_LENGTH 0x00DB
typedef enum
{
EEPROM_GROUP_FEATURE_CTRL = 0,
EEPROM_GROUP_MANUFACTURE_STRING,
EEPROM_GROUP_PRODUCT_STRING,
EEPROM_GROUP_SERIAL_STRING,
EEPROM_GROUP_MEMORY_DSCR,
EEPROM_GROUP_DESCRIPTORS,
EEPROM_GROUP_HID_REPORT_DSCR,
EEPROM_GROUP_HID_LYNC_STRING,
EEPROM_GROUP_STEREO_MIXER,
EEPROM_GROUP_OUTPUT_EQ,
EEPROM_GROUP_INPUT_EQ,
EEPROM_GROUP_MAX
} EEPROM_GROUP_TYPE;
typedef struct _EEPROM_GROUP_INFO_STRUCT
{
WORD wLength;
WORD wStartAddr;
} EEPROM_GROUP_INFO_STRUCT;
typedef struct _AS_CONTROL_STRUCT
{
BYTE attribute; // bit7: invalid = 1, bit6: mono/stero, bit5~4: interface number, bit3~0: max alternate
BYTE endpoint; // endpoint number and direction
void (*setFrequency)();
}AS_CONTROL_STRUCT;
typedef struct _AUDIO_CONTROL_STRUCT
{
void (*featureVolume)();
void (*featureMute)();
void (*featureAgc)();
void (*setSelector)();
void (*recordMute)();
BYTE code *pAcUnitTable;
AS_CONTROL_STRUCT asControl[2];
}AUDIO_CONTROL_STRUCT;
typedef struct _DEVICE_CONTROL_STRUCT
{
BYTE bAudioInterface;
BYTE bHidInterface;
//BOOL hidGetInReport();
//BOOL hidSetOutReport();
}DEVICE_CONTROL_STRUCT;
typedef struct _CONVERTIBLE_CONTROL_TABLE_STRUCT
{
DEVICE_CONTROL_STRUCT code *pDeviceControl;
AUDIO_CONTROL_STRUCT code *pAudioControl;
void (*initialize)();
void (*reset)();
void (*configure)();
void (*event)();
void (*gpi)();
void (*ir)();
}CONVERTIBLE_CONTROL_TABLE_STRUCT;
typedef enum
{
LANGID_S = 0,
MANUFACTURE_S,
PRODUCT_S,
SERIAL_S,
LYNC_S = 33,
VERSION1_S = 50,
VERSION2_S = 80
} STRING_DSCR;
typedef enum
{
NEC = 0,
RC5,
RC6
}IR_MODULE;
#endif // __CM65xx_H__