分支自 DSP/ADSP21569/DSP-21569

graydon
2023-09-20 d40b58b3ecbfb79e015f55755127849335e289b7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
 * protocol.h
 *
 *  Created on: 2021Äê11ÔÂ1ÈÕ
 *      Author: graydon
 */
 
#ifndef PROTOCOL_H_
#define PROTOCOL_H_
#include <string.h>
#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,
};
 
 
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];
};
 
 
struct DSPStatus{
    unsigned int mCpu;
    unsigned int mInternalUnUsedMem;
    unsigned int mExternalUnUsedMem;
    unsigned char mDDRPassed;
    unsigned char pad[3];
 
    //.....
};
#endif /* PROTOCOL_H_ */