/* * protocol.h * Description: * * Created on: 2014-10-11 * Author: DELL * Modify: */ #ifndef PROTOCOL_H_ #define PROTOCOL_H_ #include "drv/global.h" //¶¨Òå¸÷´¦ÀíÄ£¿é²ÎÊý //ÓÉÓÚDSPÄÚ´æËùÓÐÀàÐÍÕ¼ÓÃ1×Ö½Ú£¬ÓëÆäËûCPUÓÐËù²»Í¬¡£Ð­ÒéËùÓÐÀàÐͶ¨Î»short¡£ typedef struct{ unsigned short input_num; //ĬÈÏÖµ:8 struct{ unsigned short channelID; //ĬÈÏÖµ:0,1,2...8 unsigned short mute; //ĬÈÏÖµ:0 short gain; //ĬÈÏÖµ:0 short maxgain; short mingain; short phase; unsigned short phant; // »ÃÏ󹩵ç ĬÈÏÖµ:0 short sensitivity; // ÁéÃô¶È ĬÈÏÖµ:0 short name[8]; //ĬÈÏÖµ:"1","2","3"..."8" //new short type ; //ÐźÅÀàÐÍ, 0 ,ÏßÊäÈë ,1, ÕýÏÒÐźŠ£¬2£¬°×ÔëÉù£¬3 £¬·ÛºìÔëÉù¡£ short freq; short level; short link ; } input[MAX_INPUT_NUM]; } tag_input, *ptag_input; // 178 typedef struct{ unsigned short output_num; //8 struct{ unsigned short channelID; //ĬÈÏÖµ:0,1,2...8 unsigned short mute; //ĬÈÏÖµ:0 short gain; //ĬÈÏÖµ:0 short maxgain; short mingain; short phase; short sensitivity; short name[8]; //ĬÈÏÖµ:"1","2","3"..."8" short link ; }output[MAX_OUTPUT_NUM]; }tag_output,*ptag_output; typedef struct{ unsigned short input_num; //ĬÈÏÖµ:8 }tag_Meter,*ptag_Meter; typedef struct{ unsigned short bypass; //ĬÈÏÖµ:1 unsigned short nsection; //ĬÈÏÖµ:ÊäÈ벿·Ö4£¬Êä³ö²¿·Ö6 struct { unsigned short bypass; //ĬÈÏÖµ:1 unsigned short type; short freq;//ĬÈÏÖµ:0 short gain;//ĬÈÏÖµ:100 short q;//ĬÈÏÖµ:nsectionΪ£º20,120,250,500 nsectionΪ6;20,120,250,500,1000,4000 }eq_attr[MAX_EQ_SECTION]; }tag_eq,*ptag_eq; typedef struct{ unsigned short bypass;//ĬÈÏÖµ:1 unsigned short ms;//ĬÈÏÖµ:0 unsigned short us; }tag_delay,*ptag_delay; typedef struct{ unsigned short bypass;//ĬÈÏÖµ:1 unsigned short soft;//ĬÈÏÖµ:1 short gain;//ĬÈÏÖµ:0 short threshold;//ĬÈÏÖµ:-4800 unsigned short ratio;////ĬÈÏÖµ:1 unsigned short attack;//ĬÈÏÖµ:1 unsigned short release;//ĬÈÏÖµ:1 }tag_compress,*ptag_compress,tag_limit,*ptag_limit; typedef struct{ unsigned short bypass;//ĬÈÏÖµ:1 short threshold;//ĬÈÏÖµ:-4800 unsigned short ratio;//ĬÈÏÖµ:1 unsigned short attack;//ĬÈÏÖµ:1 unsigned short release;//ĬÈÏÖµ:1 }tag_expander,*ptag_expander; typedef struct{ struct{ unsigned short bypass;//ĬÈÏÖµ:1 unsigned short type;//ĬÈÏÖµ:1, 0±íʾbessel,1±íʾbutterworth£¬2±íʾlink/Riley unsigned short taps; //Â˲¨Æ÷½×Êý,//ĬÈÏÖµ:18£¬·¶Î§bessel(type-0)£º12,18,24,48£¬butterworth(type-1)£º12,18,24,48£¬link/Riley((type-2): 12,24,48 unsigned short freq;//ĬÈÏÖµ:500 short gain; }highpass,lowpass; }tag_crossover,*ptag_crossover; typedef struct{ struct{ unsigned short bypass; short gain; //-45~+15dB,default:0 unsigned short q; //0.02~50,default:0.71 unsigned short freq; //20~20000,default:for lowshelf,20.for higshelf-20000 }highshelf,lowshelf; }tag_shelf,*ptag_shelf; typedef struct{ unsigned short input_num;//ĬÈÏÖµ:8 unsigned short output_num;////ĬÈÏÖµ:8 unsigned short input_mask[MAX_MIXER_OUTPUT][(MAX_MIXER_INPUT+15)/16];//Êä³öͨµÀµÄÊäÈëÑÚÂë,//ĬÈÏÖµ,Êä³ö1¶ÔÓ¦ÊäÈë1...£¬Êä³ö8¶ÔÓ¦Êä³ö8,input_mask[0][0]=1<<0;...input_mask[7][0]=1<<7 short input_gain[MAX_MIXER_OUTPUT][MAX_MIXER_INPUT];//ĬÈÏÖµ:0 short pad; }tag_mixer,*ptag_mixer; typedef struct{ unsigned short input_num;//ĬÈÏÖµ:8 unsigned short output_num;////ĬÈÏÖµ:8 unsigned short input_mask[MAX_MIXER_OUTPUT][(MAX_MIXER_INPUT+15)/16]; }tag_selector,*ptag_selector; typedef struct{ short gain; short mute; }tag_gain,*ptag_gain; typedef struct{ unsigned short bypass; short panic_threshold; short fb_threshold; short bw; unsigned short flt_depth; unsigned short mode; struct{ unsigned short type; short fc; short gain; }flt_group[FEEDBACK_FILTERS_NUM]; }tag_feedback,*ptag_feedback; typedef struct{ unsigned short bypass; unsigned short mode; }tag_aec, *ptag_aec ,tag_ans, *ptag_ans; //??,?? typedef struct{ unsigned short bypass; short threshold; short tar_threshold; unsigned short ratio; unsigned short attacktime; unsigned short releasetime; }tag_agc, *ptag_agc; //???? typedef struct{ short bypass; short master_mute; short master_gain; short response; short slope; struct{ short automatic; short master; short gain; short threshold; }channels[AUTOMIXER_CHANNEL_NUM]; }tag_automixer,*ptag_automixer; typedef struct{ }tag_fir, *ptag_fir; typedef struct{ short gain; short mute; short time; }tag_sysctl,*ptag_sysctl; typedef enum{ //PROC_NONE, PROC_INPUT , PROC_METER, PROC_EQ, PROC_EXPANDER, PROC_COMPRESS, PROC_LIMIT, PROC_MIXER, PROC_DELAY, PROC_CROSSOVER, PROC_OUTPUT, PROC_GAIN, PROC_NHS, PROC_AUTOMIXER, PROC_AGC, PROC_AEC, PROC_ANS, PROC_SYSCTL, PROC_SHELF, // test PROC_SELECTOR, PROC_GATING_AUTOMIXER, PROC_CONTINUNOUS_SPL, PROC_GATING, PROC_DUCKER, PROC_REVERB, PROC_ECHO, PROC_GEQ, PROC_FIR, PROC_AFC, PROC_COUNT, }eproc_type; typedef struct{ short proc_type; short pad; short proc_ins[sizeof(tag_eq)]; }tag_module ,*ptag_module; typedef struct{ short input_group[MAX_INPUT_NUM]; short output_group[MAX_OUTPUT_NUM]; }tag_group,*ptag_group ; typedef struct { unsigned short magic; unsigned short nmds; unsigned short pad1; unsigned short pad2; unsigned short crc[2]; tag_input input;//514 tag_module in1[MAX_INPUT_NUM]; tag_module in2[MAX_INPUT_NUM]; tag_module in3[MAX_INPUT_NUM]; tag_module in4[MAX_INPUT_NUM]; tag_module in5[MAX_INPUT_NUM]; tag_automixer automixer;//138 tag_selector aec_selector; //68 tag_aec aec; //4 tag_selector ans_selector; //68 tag_ans ans;//4 tag_mixer mixer; //728 -4 tag_module out1[MAX_OUTPUT_NUM]; tag_module out2[MAX_OUTPUT_NUM]; tag_module out3[MAX_OUTPUT_NUM]; tag_module out4[MAX_OUTPUT_NUM]; tag_output output; tag_sysctl sysctl; tag_group group; } tag_parameters, *ptag_parameters; typedef enum{ INPUT_GAIN = 0x1, INPUT_MUTE, INPUT_SENS, INPUT_PHANT, INPUT_TYPE, INPUT_FREQ, INPUT_LEVEL, INPUT_NAME, INPUT_POL, INPUT_STEP, INPUT_LINK, INPUT_CHANNEL_LEVEL, INPUT_MIN, INPUT_MAX, }einput_cmd; typedef enum{ OUTPUT_GAIN = 0x1, OUTPUT_MUTE, OUTPUT_NAME, OUTPUT_POL, OUTPUT_SENS, OUTPUT_STEP, OUTPUT_LINK, OUTPUT_CHANNEL_LEVEL, OUTPUT_MIN, OUTPUT_MAX, }eoutput_cmd; typedef enum{ DELAY_BYPASS= 0x1, DELAY_MSEC, DELAY_USEC, }edelay_cmd; typedef enum{ EQ_BYPASS_ALL = 0x1, EQ_BYPASS, EQ_FREQ, EQ_GAIN, EQ_QVALUE, EQ_TYPE, }epeq_cmd; typedef enum{ EXPANDER_BYPASS= 0x1, EXPANDER_THRESHOLD, EXPANDER_RADIO, EXPANDER_ATTACK, EXPANDER_RELEASE, }eexpander_cmd; typedef enum{ COMPRESS_BYPASS=0x1, COMPRESS_THERSHOLD, COMPRESS_RADIO, COMPRESS_ATTACK, COMPRESS_RELEASE, COMPRESS_GAIN, }ecompressor_cmd; typedef enum{ MIXER_SWITCH=0x1, MIXER_GAIN, }emixer_cmd; typedef enum{ XOVER_HIGHPASS_BYPASS=0x1, XOVER_HIGHPASS_TYPE, XOVER_HIGHPASS_ORDER, XOVER_HIGHPASS_FREQ, XOVER_HIGHPASS_GAIN, XOVER_LOWPASS_BYPASS=0x11, XOVER_LOWPASS_TYPE, XOVER_LOWPASS_ORDER, XOVER_LOWPASS_FREQ, XOVER_LOWPASS_GAIN, }exover_cmd; typedef enum{ GAIN_SET=0x1, }gain_cmd; typedef enum{ SYSCTL_GAIN=0x1, SYSCTL_MUTE, }sysctl_cmd; typedef enum{ FB_BYPASS= 0x1, FB_FLT_FREQ, FB_FLT_GAIN, FB_FLT_Q, FB_FLT_TYPE, FB_MODE, FB_CLEAR, FB_PANIC, FB_FLT_DEPTH, FB_THRS, }efeedback_cmd; typedef enum{ AM_MUTE=0x1, AM_GAIN, AM_SLOPE, AM_RESPONSE, AM_CHANNEL_AUTO, AM_CHANNEL_MUTE, AM_CHANNEL_GAIN, AM_CHANNEL_PRIORITY, AM_BYPASS, }eamixer_cmd; typedef enum{ HIGH_SHELF_BYPASS =0x1, HIGH_SHELF_FREQ, HIGH_SHELF_QVALUE, HIGH_SHELF_GAIN, LOW_SHELF_BYPASS=0x11, LOW_SHELF_FREQ, LOW_SHELF_QVALUE, LOW_SHELF_GAIN, }eshelf_cmd; typedef enum{ FIR_BYPASS=0x1, FIR_COEFFS, }eFir_cmd; typedef enum{ AEC_BYPASS =0x1, AEC_MODE, }eaec_cmd; typedef enum{ ANS_BYPASS =0x1, ANS_MODE, }eans_cmd; typedef enum{ AGC_BYPASS = 0x1, AGC_THRESHOLD, AGC_TARGET_THRES, AGC_RATIO, AGC_ATTACKTIME, AGC_RELEASETIME, }eagc_cmd; typedef enum{ SYSTEM_MUTE = 0x55, }esystem_cmd; typedef enum{ MSG_PARAM_CONFIG=0x11, MSG_PARAM_CTRL=0x21,// data ÀïÃæ0ÊÇ´¦ÀíÆ÷ID£¬1¿ØÖÆÀàÐÍ£¬2£¬3¿ØÖÆÊý¾Ý MSG_PARAM_COMPLETED=0x30, //²ÎÊýÅäÖÃÍê³É MSG_ACK_REQ =0x19, //Æô¶¯ÎÕÊÖÃüÁî MSG_GET_LEVEL=0xaa, MSG_CHANNEL_COPY_REQ=0x50, MSG_DSP_DEBUG =0xfe, MSG_DSP_NEGOTIATE =0x64, MSG_DSP_STATUS_REPORT =0x65, MSG_DSP_STATUS_REQ =0x72, MSG_DSP_STATUS_RES, }command_type; typedef struct _meter { short input_meter[MAX_INPUT_NUM]; short expander_meter[MAX_INPUT_NUM]; short incompress_meter[MAX_INPUT_NUM*2]; short agc_meter[MAX_INPUT_NUM*2]; short feedback_meter[FEEDBACK_FILTERS_NUM*MAX_INPUT_NUM*2]; short automixer_meter[AUTOMIXER_CHANNEL_NUM*2]; short limit_meter[MAX_OUTPUT_NUM*2]; short outmeter[MAX_OUTPUT_NUM]; short cpu_ulitily; } Meter; typedef struct{ short dual_dsp; short dsp_index; short local_rx_num; short local_tx_num; short dante_rx_num; short dante_tx_num; short external_clock; short scene_size ; //dsp reply short level_num; short modulelist; }tag_hwconf,*ptag_hwconf; #define MSG_HEAD_SIZE OFFSET(ptag_msg,data) #define SPI_PKT_SIZE (1024/2) //128×Ö½Ú,spiÅäÖÃ16×Ö½Ú·¢ËÍ #define SPI_DATA_LEN (SPI_PKT_SIZE-8) #define NORMALIZE(X) (((X)&0x8000)?(-((~(X))&0xffff)-1):(X)) //»¹Ô­·ûºÅλ //#define NORMALIZE(X) ((X)>32767?(X)-65536:(X)) typedef struct{ unsigned short magic; unsigned short len; //data length short pkt_total_num; short pkt_no; short ctype; // MSB:checksum,LSB: type; short result;//MSB:reserve,LSB: result short request_id_lsb; short request_id_msb; short data[SPI_DATA_LEN]; }tag_msg,*ptag_msg; typedef struct{ short output; short source_channel_index; short dest_channel_index; }tag_channel_copy,*ptag_channel_copy; typedef enum{ dsp_unknow, dsp_running_ok, dsp_no_clock, //dsp ?T¨º¡À?¨®¡ê?3¡ê???¨º¨¬a¨º?dante2?2¨²¨¦¨²¨º¡À?¨® dsp_mem_err, //dsp ?¨²¡ä?¡ä¨ª?¨®¡ê?3¡ê??¦Ì??¨º¨¬a¨º?sdram¨®D?¨º¨¬a dsp_halt, //dsp ?¨¤?¨²¨¢?¡ê??D??¨°¨¤?Y¨º?SPI¨ª¡§??2?¨¦? }estatus; #endif /* PROTOCOL_H_ */