/* * protocol.h * * Created on: 2021Äê11ÔÂ1ÈÕ * Author: graydon */ #ifndef PROTOCOL_H_ #define PROTOCOL_H_ #include #include "config.h" #include "../drv/board.h" #define MSG_DATA_LEN (SPI_BUFFER_SIZE-8) #define MLEN(pmsg) ((pmsg)->dataLen/2+8) enum MsgType{ MSG_HANDSHAKE_REQ = 0x19, //ARM->DSP ,ÎÕÊÖÇëÇó. MSG_HANDSHAKE_RES = 0x19, MSG_REHANDSHAKE_REQ, //DSP->ARM ,ÖØÐÂÎÕÊÖÇëÇó £¬ÓÃÓÚDSPÖØÐ³õʼ»¯¡£ MSG_REHANDSHAKE_RES, MSG_TOPO_REQ =0x11, //ARM->DSP ¡£·¢ËÍTOPO BINÎļþ MSG_TOPO_RES, MSG_PRESET_REQ =0x30, //ARM->DSP£¬ ·¢ËÍÔ¤Éè²ÎÊýÎļþ MSG_PRESET_RES, MSG_CHANNEL_COPY_REQ = 0x50, MSG_CHANNEL_COPY_RES, MSG_PARMA_CTRL_REQ =0x21, //ARM->DSP, ²ÎÊý¿ØÖÆ MSG_PARAM_CTRL_RES =0x21, MSG_LEVEL_GET_REQ = 0xaa, //ARM->DSP , µçƽ»ñÈ¡¡£ MSG_LEVEL_GET_RES = 0xaa, MSG_DSP_STATUS_REQ =0x65, //ARM->DSP , ÔËÐÐ״̬±¨¸æ. MSG_DSP_STATUS_RES =0x65, }; class MSG{ public: unsigned short magic; unsigned short dataLen; unsigned short totalPkts; unsigned short pktNo; unsigned short msgType; unsigned short result; unsigned short msgIDLSB; unsigned short msgIDMSB; short data[MSG_DATA_LEN]; inline int Enc(MsgType msg_type, void* buffer, u32 len) { magic = 0x5aa5; msgType = msg_type; dataLen = len; if (buffer != 0 && len > 0) { memcpy(data, buffer, len/2); } return 0; } MSG& operator=(const MSG& m){ if(this != &m) { memcpy(this, &m , MLEN(&m)); } return *this; } }; struct FlowChartHead { short crcLsb; short crcMsb; unsigned short module_num; unsigned short compress; //±êʶÊÇ·ñѹËõ unsigned short dsp_buffer_num[12]; }; struct scenehead{ unsigned short magic; unsigned short nmds; unsigned short pad1; unsigned short pad2; unsigned short crc[2]; };//scenehead, *ptag_scenehead; enum ModuleInterfaceType{ SOFT_MODULE, PHY_INPUT, PHY_OUTPUT, }; struct Module { unsigned short mID; //Ä£¿éID unsigned short mType; //Ä£¿éÀàÐÍ ModuleType unsigned short mTag; //Ä£¿é¸½¼Ó×ֶΣ¨ÈçEQ6 £¬8¶Î£© unsigned short mRxNum; //Ä£¿é½ÓÊÕͨµÀÊý unsigned short mTxNum; //Ä£¿éÊä³öͨµÀÊý unsigned short mDsp; //Ä£¿éËùÊôDSP Ë÷Òý unsigned short mPhyModule; //0£¬·ÇÓ²¼þÄ£¿é£¬1-ÎïÀíÊäÈëÄ£¿é£¬2-ÎïÀíÊä³öÄ£¿é. //u16 mRxbufID[]; //u16 mTxbufID[]; }; struct ModuleParam { unsigned short mID; //Ä£¿éID unsigned short mType; //Ä£¿éÀàÐÍ ModuleType unsigned short mTag; //Ä£¿é¸½¼Ó×ֶΣ¨ÈçEQ6 £¬8¶Î£© unsigned short mRxNum; //Ä£¿é½ÓÊÕͨµÀÊý unsigned short mTxNum; //Ä£¿éÊä³öͨµÀÊý unsigned short mDsp; //Ä£¿éËùÊôDSP Ë÷Òý unsigned short mPhyModule; //0£¬·ÇÓ²¼þÄ£¿é£¬1-ÎïÀíÊäÈëÄ£¿é£¬2-ÎïÀíÊä³öÄ£¿é. void *handle; }; 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, EQ_CLEAR, }epeq_cmd; typedef enum{ GEQ_BYPASS = 0x1, GEQ_Q, GEQ_GAIN, GEQ_CLEAR, }egeq_cmd; typedef enum{ EXPANDER_BYPASS= 0x1, EXPANDER_THRESHOLD, EXPANDER_RADIO, EXPANDER_ATTACK, EXPANDER_RELEASE, }eexpander_cmd; typedef enum{ GATE_BYPASS= 0x1, GATE_THRESHOLD, GATE_DEPTH, GATE_HOLDTIME, GATE_ATTACK, GATE_RELEASE, }egate_cmd; typedef enum{ COMPRESS_BYPASS=0x1, COMPRESS_THERSHOLD, COMPRESS_RADIO, COMPRESS_ATTACK, COMPRESS_RELEASE, COMPRESS_GAIN, COMPRESS_SOFT, COMPRESS_SIDEIN, }ecompressor_cmd; typedef enum{ MIXER_SWITCH=0x1, MIXER_GAIN, MIXER_DELAY, }emixer_cmd; typedef enum{ XOVER_HIGHPASS_BYPASS=0x1, XOVER_HIGHPASS_TYPE, XOVER_HIGHPASS_SLOPE, XOVER_HIGHPASS_FREQ, XOVER_HIGHPASS_GAIN, XOVER_LOWPASS_BYPASS=0x11, XOVER_LOWPASS_TYPE, XOVER_LOWPASS_SLOPE, XOVER_LOWPASS_FREQ, XOVER_LOWPASS_GAIN, }exover_cmd; typedef enum{ GAIN_SET=0x1, GAIN_MUTE, GAIN_STEP, }gain_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_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{ 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{ AGC_BYPASS = 0x1, AGC_THRESHOLD, AGC_TARGET_THRES, AGC_RATIO, AGC_ATTACKTIME, AGC_RELEASETIME, }eagc_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_NS_MODE, AFC_GAIN, }eafc_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{ 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{ SYSCTL_MUTE, SYSCTL_GAIN, SYSCTL_TIME, }esys_cmd; typedef struct { int pad; }tag_dummy, *ptag_dummy; 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 ; //short pitch; } 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 bypass;//ĬÈÏÖµ:1 short threshold;//ĬÈÏÖµ:-4800 unsigned short ratio;//ĬÈÏÖµ:1 unsigned short attack;//ĬÈÏÖµ:1 unsigned short release;//ĬÈÏÖµ:1 }tag_expander,*ptag_expander; 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 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 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 bypass;//ĬÈÏÖµ:1 unsigned short ms;//ĬÈÏÖµ:0 unsigned short us; }tag_delay,*ptag_delay; 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{ unsigned short bypass; short panic_threshold; short fb_threshold; short bw; unsigned short flt_depth; unsigned short flt_step; //unsigned short fbc_num; struct{ unsigned short type; short fc; short gain; }flt_group[FEEDBACK_FILTERS_NUM]; }tag_feedback,*ptag_feedback; 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_CHANNELS_NUM]; }tag_gainsharing_mixer,*ptag_gainsharing_mixer; 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 mode; }tag_aec, *ptag_aec ,tag_ans, *ptag_ans; typedef struct{ short gain; short mute; short time; }tag_sysctl,*ptag_sysctl; 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{ 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_CHANNELS_NUM]; }tag_gating_mixer,*ptag_gating_mixer; 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 threshold; short depth; unsigned short holdtime; unsigned short attacktime; unsigned short releasetime; }tag_gate,*ptag_gate; 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; unsigned short q; unsigned short nsections; struct { short gain; }eq_attr[31]; }tag_geq,*ptag_geq; typedef struct{ unsigned short proc_type; unsigned short pad; short proc_ins[16]; }tag_3a,*ptag_3a; typedef struct{ unsigned short type; unsigned short pad; union { tag_gainsharing_mixer gainsharing_mixer; tag_gating_mixer gating_mixer; }am; }tag_automixer,*ptag_automixer; 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{ u16 magic; u16 ninmds; u16 pad1; u16 pad2; u16 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_gainsharing_mixer automixer; tag_selector aec_selector; //68 tag_aec aec; //4 tag_selector ans_selector; //68 //tag_3a afc_ns;//4 tag_ans ans; 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 struct{ short proc_id; short cmd; short val[2]; }tag_cmd,*ptag_cmd; typedef struct{ short output; short source_channel_index; short dest_channel_index; }tag_channel_copy,*ptag_channel_copy; struct Param { unsigned short mID; //Ä£¿éID unsigned short pID; //²ÎÊýID unsigned short pad; unsigned short num; //s16 val[3]; }; //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; //}tag_hwconf,*ptag_hwconf; //struct DSPStatus{ // unsigned int mCpu; // unsigned int mInternalUnUsedMem; // unsigned int mExternalUnUsedMem; // unsigned char mDDRPassed; // unsigned char pad[3]; // //..... //}; enum eDSPStatus{ dsp_unknow, //δ֪ dsp_running_ok, //ÔËÐÐÕý³£ dsp_no_clock, //ûÓÐʱÖÓ dsp_mem_err, //DDR´íÎó }; #define DSP_CPU_UTILITY 1001 //CPUʹÓÃÂÊ #define DSP_MEM_UTILITY 1002 //ÄÚ´æÊ¹ÓÃÂÊ #define DSP_RUNNING_STATUS 1003 //ÔËÐÐ״̬ #define DSP_USB_JITTER 1004 //USBʱÖÓ¶¶¶¯ÂÊ #define DSP_CLOCK_STATUS 1005 //ÒôƵʱÖÓ״̬ #define DSP_EMULATE_DEBUG 1006 //DSPµ÷ÊÔÆô¶¯ typedef struct { short ID; short value[12]; }DeviceStatus; #endif /* PROTOCOL_H_ */