 |
TEMU
4.4
The Terma Emulator
|
Go to the documentation of this file.
17 #ifndef TEMU_SPACEWIRE_H
18 #define TEMU_SPACEWIRE_H
21 #include "temu-c/Support/Objsys.h"
22 #include "temu-c/Support/Buffer.h"
50 #define TEMU_SPW_FLAG_RMAP_HCRC_ERROR 0x01
51 #define TEMU_SPW_FLAG_RMAP_DCRC_ERROR 0x02
53 #define TEMU_SPW_PORT_IFACE_TYPE "SpwPortIface"
56 TEMU_IFACE_REFERENCE_TYPE(temu_SpwPort);
90 temu_SpwLinkState (*getOtherSideLinkState)(
void* Device);
95 void (*
connect)(
void *Device, temu_SpwPortIfaceRef Dest);
106 uint64_t (*timeToSendPacketNs)(
void* Device, uint64_t PacketLength);
113 temu_spwConnect(temu_SpwPortIfaceRef Dev1PortIface,
114 temu_SpwPortIfaceRef Dev2PortIface)
116 Dev1PortIface.Iface->connect(Dev1PortIface.Obj, Dev2PortIface);
117 Dev2PortIface.Iface->connect(Dev2PortIface.Obj, Dev1PortIface);
125 temu_spwDisconnect(temu_SpwPortIfaceRef Dev1PortIface,
126 temu_SpwPortIfaceRef Dev2PortIface)
128 Dev1PortIface.Iface->disconnect(Dev1PortIface.Obj);
129 Dev2PortIface.Iface->disconnect(Dev2PortIface.Obj);
141 uint8_t LS, uint8_t LD, uint8_t PortConnect,
142 temu_SpwLinkState otherSideLinkState);
149 #define TEMU_SPW_BITS_PER_DATA_CHAR 10
150 #define TEMU_SPW_BITS_PER_CTRL_CHAR 4
156 static inline uint64_t
157 temu_spwBitsForData(uint64_t Bytes)
163 #define TEMU_SPW_PROT_EXT 0
164 #define TEMU_SPW_PROT_RMAP 1
165 #define TEMU_SPW_PROT_CCSDSPKT 2
166 #define TEMU_SPW_PROT_GOES_R 238
167 #define TEMU_SPW_PROT_STUP 239
170 #define TEMU_SPW_LOGICAL_ADDRESS_DEFAULT 0xfe
183 } temu_SpwRmapDecodedCommandHeader;
193 } temu_SpwRmapDecodedReadReplyHeader;
202 } temu_SpwRmapDecodedWriteReplyHeader;
208 } temu_SpwRmapPacketType;
214 } temu_SpwRmapCommandType;
218 } temu_SpwRmapReadCmdPacket;
228 } temu_SpwRmapWriteCmdPacket;
242 } temu_SpwRmapRmwCmdPacket;
248 } temu_SpwRmapRawHeader;
251 temu_SpwRmapDecodedReadReplyHeader
Header;
258 } temu_SpwRmapDecodedReadReply;
261 temu_SpwRmapDecodedWriteReplyHeader
Header;
262 } temu_SpwRmapDecodedWriteReply;
265 temu_SpwRmapDecodedReadReplyHeader
Header;
272 } temu_SpwRmapDecodedRmwReply;
282 } temu_SpwRmapDecodedPacketType;
291 } temu_SpwRmapDecodedCmdField;
306 temu_SpwRmapReadCmdPacket ReadCmd;
307 temu_SpwRmapWriteCmdPacket WriteCmd;
308 temu_SpwRmapRmwCmdPacket RmwCmd;
309 temu_SpwRmapDecodedReadReply ReadReply;
310 temu_SpwRmapDecodedWriteReply WriteReply;
311 temu_SpwRmapDecodedRmwReply RmwReply;
313 } temu_SpwRmapDecodedPacket;
319 } temu_SpwRmapDecodingOutcome;
324 temu_SpwRmapDecodingOutcome
326 temu_SpwRmapDecodedPacket *PktDecoded);
330 temu_SpwRmapDecodingOutcome
332 temu_SpwRmapDecodedPacket *PktDecoded);
345 const temu_SpwRmapDecodedPacket *DCmdPkt,
346 uint8_t *Data, uint32_t AllocatedDataSize,
348 uint32_t DataLength);
355 const temu_SpwRmapDecodedPacket *DCmdPkt,
356 uint8_t *Data, uint32_t AllocatedDataSize,
358 uint32_t DataLength);
365 const temu_SpwRmapDecodedPacket *DCmdPkt,
366 uint8_t *Data, uint32_t AllocatedDataSize,
382 #define TEMU_SPW_RMAP_INST_CMD 0x40
;
383 #define TEMU_SPW_RMAP_INST_WRITE 0x20
;
384 #define TEMU_SPW_RMAP_INST_VERIFY 0x10
;
385 #define TEMU_SPW_RMAP_INST_ACK 0x8
;
386 #define TEMU_SPW_RMAP_INST_INC 0x4
;
temu_SpwRmapDecodedCommandHeader Header
Definition: Spacewire.h:221
#define TEMU_SPW_BITS_PER_DATA_CHAR
Definition: Spacewire.h:149
uint32_t temu_spwRmapEncodeRmwHeaderForPacket(const temu_SpwRmapDecodedPacket *DCmdPkt, uint8_t *Data, uint32_t AllocatedDataSize, uint8_t Status, uint32_t DataLength)
uint8_t TargetLogicalAddr
Definition: Spacewire.h:173
#define TEMU_SPW_EOP_BITS
Definition: Spacewire.h:151
@ teSPWRMAPPT_Response
Definition: Spacewire.h:205
@ teSPWRMAPCT_Read
Definition: Spacewire.h:211
uint32_t TotalSize
Total size of the packet received.
Definition: Spacewire.h:295
void(* receive)(void *Device, void *Sender, temu_SpwPacket *Pkt)
Definition: Spacewire.h:78
temu_SpwRmapDecodedCommandHeader Header
Definition: Spacewire.h:231
temu_SpwPacketType MsgType
Definition: Spacewire.h:41
uint8_t Inc
Definition: Spacewire.h:290
@ teSPWLS_ErrorReset
Definition: Spacewire.h:60
@ teSPWRMAPDO_NoError
Definition: Spacewire.h:316
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:241
uint8_t InitiatorLogicalAddr
Definition: Spacewire.h:179
void(* connect)(void *Device, temu_SpwPortIfaceRef Dest)
Definition: Spacewire.h:95
@ teSPWRMAPCT_Write
Definition: Spacewire.h:212
uint8_t Flags
Definition: Spacewire.h:47
uint8_t Key
Definition: Spacewire.h:176
@ teSPWLS_Run
Definition: Spacewire.h:65
uint8_t temu_spwRmapCRCNextCode(uint8_t InCRC, uint8_t InByte)
@ teSPWRMAPDP_Invalid
Definition: Spacewire.h:275
void temu_spwLsmInit(temu_SpwLinkState *StatePtr)
uint8_t ReplyAddresses[12]
Definition: Spacewire.h:177
@ teSPWRMAPCT_Rmw
Definition: Spacewire.h:213
temu_SpwRmapRawHeader RawHeader
Raw header data access.
Definition: Spacewire.h:301
uint32_t temu_spwRmapEncodeReadReplyHeaderForPacket(const temu_SpwRmapDecodedPacket *DCmdPkt, uint8_t *Data, uint32_t AllocatedDataSize, uint8_t Status, uint32_t DataLength)
@ teSPWLS_Ready
Definition: Spacewire.h:62
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:269
void(* disconnect)(void *Device)
Definition: Spacewire.h:100
uint8_t temu_spwRmapCRC(const uint8_t *Data, uint32_t DataSize)
@ teSPWRMAPDP_ReadReply
Definition: Spacewire.h:279
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:257
temu_SpwRmapDecodedCmdField CmdField
The command field, bits [5,4,3,2] in instruction.
Definition: Spacewire.h:299
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:255
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:223
@ teSPWRMAPDO_HeaderIncomplete
Definition: Spacewire.h:317
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:235
uint8_t AccessSize
Size of the access.
Definition: Spacewire.h:233
uint16_t TransactionId
Definition: Spacewire.h:180
uint32_t temu_spwRmapHeaderReplySize(const temu_SpwRmapDecodedPacket *DCmdPkt)
temu_SpwRmapDecodedReadReplyHeader Header
Definition: Spacewire.h:251
@ teSPWRMAPPT_Invalid
Definition: Spacewire.h:207
struct temu_SpwPortIface temu_SpwPortIface
Definition: Spacewire.h:55
temu_SpwRmapDecodingOutcome temu_spwRmapDecodeBuffer(const temu_Buff *PktDataBuffer, temu_SpwRmapDecodedPacket *PktDecoded)
temu_SpwRmapDecodingOutcome temu_spwRmapDecodePacket(const temu_SpwPacket *Pkt, temu_SpwRmapDecodedPacket *PktDecoded)
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:239
@ teSPWRMAPDP_RmwReply
Definition: Spacewire.h:281
@ teSPWRMAPDP_ReadCmd
Definition: Spacewire.h:276
@ teSPWLS_ErrorWait
Definition: Spacewire.h:61
uint64_t Address
Definition: Spacewire.h:181
uint32_t DataLength
Definition: Spacewire.h:182
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:267
@ teSPWLS_Started
Definition: Spacewire.h:63
uint8_t Verify
Definition: Spacewire.h:288
Definition: Spacewire.h:40
@ teSPWRMAPDP_WriteCmd
Definition: Spacewire.h:277
uint8_t ProtocolId
Definition: Spacewire.h:174
temu_Buff PktData
Definition: Spacewire.h:42
uint8_t Value
Definition: Spacewire.h:286
#define TEMU_SPW_BITS_PER_CTRL_CHAR
Definition: Spacewire.h:150
const uint8_t * Mask
Pointer to the first mask char.
Definition: Spacewire.h:237
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:227
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:253
uint8_t Write
Definition: Spacewire.h:287
temu_SpwRmapCommandType CmdType
Definition: Spacewire.h:285
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:225
temu_SpwRmapPacketType PacketType
The packet type as identified by bits [7,6] in instruction.
Definition: Spacewire.h:297
uint8_t Instruction
Definition: Spacewire.h:175
@ teSPWLS_Connecting
Definition: Spacewire.h:64
@ teSPWRMAPDP_WriteReply
Definition: Spacewire.h:280
temu_SpwRmapDecodedCommandHeader Header
Definition: Spacewire.h:217
@ teSPWRMAPDP_RmwCmd
Definition: Spacewire.h:278
uint8_t temu_spwLsmUpdate(temu_SpwLinkState *StatePtr, uint8_t AS, uint8_t LS, uint8_t LD, uint8_t PortConnect, temu_SpwLinkState otherSideLinkState)
uint8_t ReplyAddressesNum
Definition: Spacewire.h:178
temu_SpwRmapDecodedWriteReplyHeader Header
Definition: Spacewire.h:261
uint8_t Ack
Definition: Spacewire.h:289
@ teSMT_Err
Definition: Spacewire.h:35
@ teSPWRMAPPT_Command
Definition: Spacewire.h:206
void(* signalLinkStateChange)(void *Device, temu_SpwLinkState LinkState)
Definition: Spacewire.h:84
@ teSPWRMAPDO_InvalidPacketType
Definition: Spacewire.h:318
temu_SpwRmapDecodedReadReplyHeader Header
Definition: Spacewire.h:265
@ teSMT_Time
Definition: Spacewire.h:36
@ teSMT_Data
Definition: Spacewire.h:34
const char * temu_spwLinkStateToStr(uint8_t linkState)
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:271
uint32_t temu_spwRmapEncodeWriteReplyHeaderForPacket(const temu_SpwRmapDecodedPacket *DCmdPkt, uint8_t *Data, uint32_t AllocatedDataSize, uint8_t Status)
temu_SpwRmapDecodedPacketType DecodedPacketType
Definition: Spacewire.h:304