/* * 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 ; unsigned short type ; }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; unsigned short q; unsigned short nsections; struct { short gain; }eq_attr[31]; }tag_geq,*ptag_geq; 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 delay[MAX_MIXER_OUTPUT][MAX_MIXER_INPUT]; //max - 100ms 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 step; unsigned short fbc_num; 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; unsigned short mode; short gain; }tag_afc, *ptag_afc; typedef struct{ unsigned short proc_type; unsigned short pad; short proc_ins[16]; }tag_3a,*ptag_3a; 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{ unsigned short bypass; unsigned short master_mute; short master_gain; unsigned short last_on; unsigned short holdtime; short offgain; unsigned short sensitivity; unsigned short nom_atten; unsigned short nom_num; short noise_thr; short pad; struct{ unsigned short automatic; unsigned short mute; short gain; unsigned short priority; unsigned short def; }channels[AUTOMIXER_CHANNEL_NUM]; }tag_gating_mixer,*ptag_gating_mixer; typedef struct{ short bypass; short master_mute; short master_gain; short response; short slope; struct{ short automatic; short mute; short gain; short priority; }channels[AUTOMIXER_CHANNEL_NUM]; }tag_gainsharing_mixer,*ptag_gainsharing_mixer; typedef struct{ unsigned short type; //1- gainsharing automixer, 2- gating automixer unsigned short pad; union { tag_gainsharing_mixer gainsharing_mixer; tag_gating_mixer gating_mixer; }am; }tag_automixer,*ptag_automixer; typedef struct{ unsigned short bypass; short threshold; short depth; unsigned short attacktime; unsigned short holdtime; unsigned short releasetime; short side_gain; unsigned short mute; unsigned short mask[(MAX_INPUT_NUM+15)/16]; }tag_ducker,*ptag_ducker; typedef struct{ unsigned short bypass; short maxgain; short mingain; unsigned short sense_ratio; unsigned short speed; short trim; short noise_thr; short distance; unsigned short mask[(MAX_INPUT_NUM+15)/16]; }tag_spl,*ptag_spl; typedef struct{ unsigned short bypass; short threshold; short depth; unsigned short holdtime; unsigned short attacktime; unsigned short releasetime; }tag_gate,*ptag_gate; typedef struct{ short bypass; short gain; short er_gain; short reverb_gain; short rt60; short bandwidth; short input_diffusion_1; short input_diffusion_2; short decay_diffusion_1; short decay_diffusion_2; short decay; short damping; }tag_reverb,*ptag_reverb; typedef struct{ short bypass; short pre_delay; short delay; short gain; }tag_echo,*ptag_echo; 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_FEEDBACK, PROC_AUTOMIXER, //gainsharing 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_3a afc_ns;//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, OUTPUT_TYPE, }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, MIXER_DELAY, }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_STEP, FB_CLEAR, FB_PANIC, FB_FLT_DEPTH, FB_THRS, }efeedback_cmd; typedef enum{ AM_GATE_BYPASS=0x1, AM_GATE_MUTE, AM_GATE_GAIN, AM_GATE_LAST_ON, AM_GATE_HOLD_TIME, AM_GATE_OFF_GAIN, AM_GATE_SENSITIVITY, AM_GATE_NOM_ATTEN, AM_GATE_NOM_NUM, AM_GATE_CHANNEL_AUTO, AM_GATE_CHANNEL_MUTE, AM_GATE_CHANNEL_GAIN, AM_GATE_CHANNEL_PRIORITY, AM_GATE_CHANNEL_DEF, AM_GATE_NOISE_THR, }eam_gatemixer_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{ GATE_BYPASS= 0x1, GATE_THRESHOLD, GATE_DEPTH, GATE_HOLDTIME, GATE_ATTACK, GATE_RELEASE, }egate_cmd; typedef enum{ DUCKER_BYPASS = 0x1, DUCKER_THRESHOLD, DUCKER_DEPTH, DUCKER_ATTACK, DUCKER_HOLD, DUCKER_RELEASE, DUCKER_SIDE_GAIN, DUCKER_SIDE_MUTE, DUCKER_MIX, }educker_cmd; typedef enum{ SPL_BYPASS =0x1, SPL_MAX_GAIN, SPL_MIN_GAIN, SPL_SENSE_RATIO, SPL_SPEED, SPL_TRIM, SPL_THR, SPL_DISTANCE, SPL_MIX, }espl_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{ AFC_BYPASS =0x1, AFC_MODE, AFC_GAIN, }eafc_cmd; typedef enum{ AGC_BYPASS = 0x1, AGC_THRESHOLD, AGC_TARGET_THRES, AGC_RATIO, AGC_ATTACKTIME, AGC_RELEASETIME, }eagc_cmd; typedef enum{ GEQ_BYPASS = 0x1, GEQ_Q, GEQ_GAIN, }egeq_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, MSG_NETVOICE_CHANNEL_REQ =0x8e, MSG_NETVOICE_CHANNEL_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; short hardware_type; short hardware_ver; short usb_master; short pad; }tag_hwconf,*ptag_hwconf; typedef enum{ HARDWARE_RULE, //³£¹æNLP HARDWARE_NX, //NX }ehardware_versions; #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?¨¦? dsp_clock_ok, }estatus; typedef enum { PRESET_NONE, PRESET_DONE, PRESET_NORMAL, }epreset_state; #endif /* PROTOCOL_H_ */