root/trunk/libffado/src/bebob/bebob_dl_codes.h

Revision 864, 9.9 kB (checked in by ppalmers, 16 years ago)

update license to GPLv2 or GPLv3 instead of GPLv2 or any later version. Update copyrights to reflect the new year

Line 
1 /*
2  * Copyright (C) 2005-2008 by Daniel Wagner
3  *
4  * This file is part of FFADO
5  * FFADO = Free Firewire (pro-)audio drivers for linux
6  *
7  * FFADO is based upon FreeBoB
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 2 of the License, or
12  * (at your option) version 3 of the License.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  */
23 #ifndef BEBOB_DL_CODES_H
24 #define BEBOB_DL_CODES_H
25
26 #include "fbtypes.h"
27
28 #include "libutil/cmd_serialize.h"
29
30 namespace BeBoB {
31     enum EBootloaderProtocolVersion {
32         eBPV_Unknown = 0,
33         eBPV_V1 = 1,
34         eBPV_V2 = 2,
35         eBPV_V3 = 3,
36     };
37
38     enum EBootloaderCommandCodes {
39         eCmdC_Halt                       = 0x01,
40         eCmdC_Reset                      = 0x02,
41         eCmdC_ReadImageCRC               = 0x03,
42         eCmdC_DownloadStart              = 0x04,
43         eCmdC_DownloadBlock              = 0x05,
44         eCmdC_DownloadEnd                = 0x06,
45         eCmdC_SwitchTo1394Shell          = 0x07,
46         eCmdC_ReadShellChars             = 0x08,
47         eCmdC_WriteShellChars            = 0x09,
48         eCmdC_ProgramGUID                = 0x0a,
49         eCmdC_ProgramMAC                 = 0x0b,
50         eCmdC_InitPersParams             = 0x0c,
51         eCmdC_InitConfigToFactorySetting = 0x0d,
52         eCmdC_SetDebugGUID               = 0x0f,
53         eCmdC_ProgramHWIdVersion         = 0x10,
54         eCmdC_Go                         = 0x11,
55     };
56
57     /////////////////////////
58
59     class CommandCodes {
60     public:
61         CommandCodes( fb_quadlet_t protocolVersion,
62                       fb_byte_t commandCode,
63                       size_t    msgSize,
64                       fb_byte_t operandSizeRequestField,
65                       fb_byte_t operandSizeResponseField );
66         virtual ~CommandCodes();
67
68         virtual bool serialize( Util::Cmd::IOSSerialize& se );
69         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
70
71         virtual size_t getMaxSize();
72
73         EBootloaderCommandCodes getCommandCode() const
74             { return static_cast<EBootloaderCommandCodes>( m_commandCode ); }
75
76         fb_byte_t getProtocolVersion() const
77             { return m_protocolVersion; }
78         size_t getMsgSize() const
79             { return m_msgSize; }
80         fb_byte_t getOperandSizeRequest() const
81             { return m_operandSizeRequest; }
82         fb_byte_t getOperandSizeResponse() const
83             { return m_operandSizeResponse; }
84         unsigned short getCommandId() const
85             { return m_commandId; }
86
87         fb_quadlet_t getRespProtocolVersion() const
88             { return m_resp_protocolVersion; }
89         unsigned short getRespCommandId() const
90             { return m_resp_commandId; }
91         fb_byte_t getRespCommandCode() const
92             { return m_resp_commandCode; }
93         fb_byte_t getRespOperandSize() const
94             { return m_resp_operandSize; }
95         fb_byte_t getRespSizeInQuadlets() const
96             { return 2 + m_operandSizeResponse; }
97
98     protected:
99         static unsigned short m_gCommandId;
100         unsigned short m_commandId;
101         fb_quadlet_t m_protocolVersion;
102         fb_byte_t m_commandCode;
103         size_t    m_msgSize;
104         fb_byte_t m_operandSizeRequest;
105         fb_byte_t m_operandSizeResponse;
106
107         fb_quadlet_t   m_resp_protocolVersion;
108         unsigned short m_resp_commandId;
109         fb_byte_t      m_resp_commandCode;
110         fb_byte_t      m_resp_operandSize;
111     };
112
113     /////////////////////////
114
115     class CommandCodesReset : public CommandCodes {
116     public:
117         enum EStartMode {
118             eSM_Application = 0,
119             eSM_Bootloader,
120             eSM_Debugger,
121         };
122
123         CommandCodesReset( fb_quadlet_t protocolVersion, EStartMode startMode );
124         virtual ~CommandCodesReset();
125
126         virtual bool serialize( Util::Cmd::IOSSerialize& se );
127         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
128
129         EStartMode getStartMode() const
130             { return static_cast<EStartMode>( m_startMode ); }
131         bool setStartMode( EStartMode startMode )
132             { m_startMode = startMode; return true; }
133
134     private:
135         fb_byte_t m_startMode;
136     };
137
138     /////////////////////////
139
140     class CommandCodesProgramGUID : public CommandCodes {
141     public:
142         CommandCodesProgramGUID( fb_quadlet_t protocolVersion,
143                            fb_octlet_t guid );
144         virtual ~CommandCodesProgramGUID();
145
146         virtual bool serialize( Util::Cmd::IOSSerialize& se );
147         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
148
149         fb_octlet_t getGUID() const
150             { return m_guid; }
151         bool setGUID( fb_octlet_t guid )
152             { m_guid = guid; return true; }
153
154     private:
155         fb_octlet_t m_guid;
156     };
157
158
159     /////////////////////////
160
161     class CommandCodesDownloadStart : public CommandCodes {
162     public:
163         enum EObject {
164             eO_Application    = 0,
165             eO_Config         = 1,
166             eO_Debugger       = 2,
167             eO_Bootloader     = 3,
168             eO_WarpImage      = 4,
169             eO_SerialBootCode = 5,
170         };
171
172         CommandCodesDownloadStart( fb_quadlet_t protocolVersion,
173                      EObject object );
174         virtual ~CommandCodesDownloadStart();
175
176         virtual bool serialize( Util::Cmd::IOSSerialize& se );
177         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
178
179         bool setDate( fb_octlet_t date )
180             { m_date = date; return true; }
181         bool setTime( fb_octlet_t time )
182             { m_time = time; return true; }
183         bool setId( fb_quadlet_t id )
184             { m_id = id; return true; }
185         bool setVersion( fb_quadlet_t version )
186             { m_version = version; return true; }
187         bool setBaseAddress( fb_quadlet_t address )
188             { m_address = address; return true; }
189         bool setLength( fb_quadlet_t length )
190             { m_length = length; return true; }
191         bool setCRC( fb_quadlet_t crc )
192             { m_crc = crc; return true; }
193
194         int getMaxBlockSize() const
195             { return m_resp_max_block_size; }
196
197     private:
198         fb_quadlet_t m_object;
199         fb_octlet_t  m_date;
200         fb_octlet_t  m_time;
201         fb_quadlet_t m_id;
202         fb_quadlet_t m_version;
203         fb_quadlet_t m_address;
204         fb_quadlet_t m_length;
205         fb_quadlet_t m_crc;
206
207         int m_resp_max_block_size;
208     };
209
210     /////////////////////////
211
212     class CommandCodesDownloadBlock : public CommandCodes {
213     public:
214         CommandCodesDownloadBlock( fb_quadlet_t protocolVersion );
215         virtual ~CommandCodesDownloadBlock();
216
217         virtual bool serialize( Util::Cmd::IOSSerialize& se );
218         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
219
220         bool setSeqNumber( fb_quadlet_t seqNumber )
221             { m_seqNumber = seqNumber; return true; }
222         bool setAddress( fb_quadlet_t address )
223             { m_address = address; return true; }
224         bool setNumberBytes( fb_quadlet_t numByte )
225             { m_numBytes = numByte; return true; }
226         fb_quadlet_t getRespSeqNumber() const
227             { return m_resp_seqNumber; }
228         fb_quadlet_t getRespErrorCode() const
229             { return m_resp_errorCode; }
230     private:
231         fb_quadlet_t m_seqNumber;
232         fb_quadlet_t m_address;
233         fb_quadlet_t m_numBytes;
234
235         fb_quadlet_t m_resp_seqNumber;
236         fb_quadlet_t m_resp_errorCode;
237     };
238
239     /////////////////////////
240
241     class CommandCodesDownloadEnd : public CommandCodes {
242     public:
243         CommandCodesDownloadEnd( fb_quadlet_t protocolVersion );
244         virtual ~CommandCodesDownloadEnd();
245
246         virtual bool serialize( Util::Cmd::IOSSerialize& se );
247         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
248
249         fb_quadlet_t getRespCrc32() const
250             { return m_resp_crc32; }
251         bool getRespIsValid() const
252             { return m_resp_valid == 0; }
253
254     private:
255         quadlet_t m_resp_crc32;
256         quadlet_t m_resp_valid;
257     };
258
259
260     /////////////////////////
261
262     class CommandCodesInitializePersParam : public CommandCodes {
263     public:
264         CommandCodesInitializePersParam( fb_quadlet_t protocolVersion );
265         virtual ~CommandCodesInitializePersParam();
266
267         virtual bool serialize( Util::Cmd::IOSSerialize& se );
268         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
269     };
270
271     /////////////////////////
272
273     class CommandCodesInitializeConfigToFactorySetting : public CommandCodes {
274     public:
275         CommandCodesInitializeConfigToFactorySetting(
276             fb_quadlet_t protocolVersion );
277         virtual ~CommandCodesInitializeConfigToFactorySetting();
278
279         virtual bool serialize( Util::Cmd::IOSSerialize& se );
280         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
281     };
282
283     /////////////////////////
284
285     class CommandCodesGo : public CommandCodes {
286     public:
287         enum EStartMode {
288             eSM_Application = 0,
289             eSM_Debugger = 2,
290         };
291
292         CommandCodesGo( fb_quadlet_t protocolVersion, EStartMode startMode );
293         virtual ~CommandCodesGo();
294
295         virtual bool serialize( Util::Cmd::IOSSerialize& se );
296         virtual bool deserialize( Util::Cmd::IISDeserialize& de );
297
298         EStartMode getStartMode() const
299             { return static_cast<EStartMode>( m_startMode ); }
300         bool setStartMode( EStartMode startMode )
301             { m_startMode = startMode; return true; }
302
303         fb_quadlet_t getRespIsValidCRC() const
304             { return m_resp_validCRC; }
305
306     private:
307         fb_quadlet_t m_startMode;
308         fb_quadlet_t m_resp_validCRC;
309     };
310
311 };
312 #endif
Note: See TracBrowser for help on using the browser.