/* * 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-16) #define MLEN(pmsg) ((pmsg)->dataLen+16) enum MsgType{ MSG_HANDSHAKE_REQ =0x10, //ARM->DSP ,ÎÕÊÖÇëÇó. MSG_HANDSHAKE_RES, MSG_REHANDSHAKE_REQ, //DSP->ARM ,ÖØÐÂÎÕÊÖÇëÇó £¬ÓÃÓÚDSPÖØÐ³õʼ»¯¡£ MSG_REHANDSHAKE_RES, MSG_TOPO_REQ, //ARM->DSP ¡£·¢ËÍTOPO BINÎļþ MSG_TOPO_RES, MSG_PRESET_REQ, //ARM->DSP£¬ ·¢ËÍÔ¤Éè²ÎÊýÎļþ MSG_PRESET_RES, MSG_PARMA_CTRL_REQ, //ARM->DSP, ²ÎÊý¿ØÖÆ MSG_PARAM_CTRL_RES, MSG_LEVEL_GET_REQ, //ARM->DSP , µçƽ»ñÈ¡¡£ MSG_LEVEL_GET_RES, MSG_DSP_STATUS_REQ, //ARM->DSP , ÔËÐÐ״̬±¨¸æ. MSG_DSP_STATUS_RES, MSG_MODULE_CPU_REQ, MSG_MODULE_CPU_RES, MSG_SPI_RESET_REQ, MSG_SPI_RESET_RES, }; class MSG{ public: unsigned short magic; unsigned short dataLen; unsigned short totalPkts; unsigned short pktNo; unsigned char msgType; unsigned char checksum; unsigned char result; unsigned char subType; unsigned int msgID; char data[MSG_DATA_LEN]; inline int Enc(MsgType msg_type, void* buffer, uint32_t len) { magic = 0x5aa5; msgType = msg_type; dataLen = len; if (buffer != 0 && len > 0) { memcpy(data, buffer, len); } return 0; } MSG& operator=(const MSG& m){ if(this != &m) { memcpy(this, &m , MLEN(&m)); } return *this; } }; enum ModuleInterfaceType{ SOFT_MODULE, PHY_INPUT, PHY_OUTPUT, }; struct FlowChartHead { int crc; unsigned short module_num; unsigned char compress; unsigned char pad; unsigned short dsp_buffer_num[12]; }; struct Module { unsigned int mID; //Ä£¿éID unsigned short mType; //Ä£¿éÀàÐÍ ModuleType unsigned short mTag; //Ä£¿é¸½¼Ó×ֶΣ¨ÈçEQ6 £¬8¶Î£© unsigned char mRxNum; //Ä£¿é½ÓÊÕͨµÀÊý unsigned char mTxNum; //Ä£¿éÊä³öͨµÀÊý unsigned char mDsp; //Ä£¿éËùÊôDSP Ë÷Òý unsigned char mPhyModule; //0£¬·ÇÓ²¼þÄ£¿é£¬1-ÎïÀíÊäÈëÄ£¿é£¬2-ÎïÀíÊä³öÄ£¿é. //u16 mRxbufID[]; //u16 mTxbufID[]; }; struct Param { unsigned int mID; //Ä£¿éID unsigned char mType; unsigned char slotID; unsigned short cpu; unsigned char pID; //²ÎÊýID unsigned char dspID; //Dsp unsigned short num; //s16 val[3]; }; //Level struct Level{ unsigned short mID; unsigned short num; //s16 val[4]; }; typedef enum { DSP_NO_ERR, DSP_TOPO_INVALID, DSP_PRESET_INVALID, DSP_NO_TOPO, DSP_SPIQ_OVERRANGE, }eErrStatus; extern eErrStatus err_status; #define set_error(err_no) err_status = err_no struct DSPStatus{ unsigned int mCpu; unsigned int mInternalUnUsedMem; unsigned int mExternalUnUsedMem; unsigned char mLevelPacketsNum; unsigned char mErrStatus; unsigned char pad[2]; unsigned short mSPIQDropCnt; unsigned short mModuleCnt; //..... }; #endif /* PROTOCOL_H_ */