17 #ifndef TEMU_SPACEWIRE_H 18 #define TEMU_SPACEWIRE_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" 95 void (*
connect)(
void *Device, temu_SpwPortIfaceRef Dest);
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,
149 #define TEMU_SPW_BITS_PER_DATA_CHAR 10 150 #define TEMU_SPW_BITS_PER_CTRL_CHAR 4 151 #define TEMU_SPW_EOP_BITS TEMU_SPW_BITS_PER_CTRL_CHAR 152 #define TEMU_SPW_FCT_BITS TEMU_SPW_BITS_PER_CTRL_CHAR 153 #define TEMU_SPW_EEP_BITS TEMU_SPW_BITS_PER_CTRL_CHAR 154 #define TEMU_SPW_ESC_BITS TEMU_SPW_BITS_PER_CTRL_CHAR 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 177 uint8_t ReplyAddresses[12];
346 uint8_t *Data, uint32_t AllocatedDataSize,
348 uint32_t DataLength);
356 uint8_t *Data, uint32_t AllocatedDataSize,
358 uint32_t DataLength);
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; uint8_t Instruction
Definition: Spacewire.h:175
const char * temu_spwLinkStateToStr(uint8_t linkState)
temu_SpwRmapDecodedPacketType
Definition: Spacewire.h:274
uint8_t temu_spwLsmUpdate(temu_SpwLinkState *StatePtr, uint8_t AS, uint8_t LS, uint8_t LD, uint8_t PortConnect, temu_SpwLinkState otherSideLinkState)
temu_SpwLinkState(* getOtherSideLinkState)(void *Device)
Definition: Spacewire.h:90
uint32_t temu_spwRmapEncodeWriteReplyHeaderForPacket(const temu_SpwRmapDecodedPacket *DCmdPkt, uint8_t *Data, uint32_t AllocatedDataSize, uint8_t Status)
#define TEMU_SPW_EOP_BITS
Definition: Spacewire.h:151
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:271
Definition: Spacewire.h:280
Definition: Spacewire.h:250
uint32_t temu_spwRmapEncodeReadReplyHeaderForPacket(const temu_SpwRmapDecodedPacket *DCmdPkt, uint8_t *Data, uint32_t AllocatedDataSize, uint8_t Status, uint32_t DataLength)
temu_SpwRmapDecodedReadReplyHeader Header
Definition: Spacewire.h:251
uint8_t Ack
Definition: Spacewire.h:289
Definition: Spacewire.h:61
Definition: Spacewire.h:284
uint32_t temu_spwRmapEncodeRmwHeaderForPacket(const temu_SpwRmapDecodedPacket *DCmdPkt, uint8_t *Data, uint32_t AllocatedDataSize, uint8_t Status, uint32_t DataLength)
uint8_t AccessSize
Size of the access.
Definition: Spacewire.h:233
Definition: Spacewire.h:62
Definition: Spacewire.h:64
temu_SpwRmapDecodedPacketType DecodedPacketType
Definition: Spacewire.h:304
uint8_t Key
Definition: Spacewire.h:176
Definition: Spacewire.h:277
temu_SpwRmapDecodedCommandHeader Header
Definition: Spacewire.h:217
Definition: Spacewire.h:279
Definition: Spacewire.h:276
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:253
Definition: Spacewire.h:275
Definition: Spacewire.h:213
Definition: Spacewire.h:40
temu_SpwRmapPacketType
Definition: Spacewire.h:204
Definition: Spacewire.h:318
uint32_t TotalSize
Total size of the packet received.
Definition: Spacewire.h:295
void(* disconnect)(void *Device)
Definition: Spacewire.h:100
temu_SpwRmapRawHeader RawHeader
Raw header data access.
Definition: Spacewire.h:301
Definition: Spacewire.h:34
temu_SpwRmapDecodedWriteReplyHeader Header
Definition: Spacewire.h:261
temu_SpwRmapDecodedRmwReply RmwReply
Definition: Spacewire.h:311
uint8_t temu_spwRmapCRC(const uint8_t *Data, uint32_t DataSize)
temu_SpwPacketType MsgType
Definition: Spacewire.h:41
uint8_t InitiatorLogicalAddr
Definition: Spacewire.h:179
Definition: Spacewire.h:35
Definition: Spacewire.h:264
uint8_t Inc
Definition: Spacewire.h:290
temu_SpwRmapRmwCmdPacket RmwCmd
Definition: Spacewire.h:308
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:235
Definition: Spacewire.h:36
temu_SpwRmapDecodingOutcome
Definition: Spacewire.h:315
Definition: Spacewire.h:281
uint8_t Flags
Definition: Spacewire.h:47
Definition: Spacewire.h:278
const uint8_t * Mask
Pointer to the first mask char.
Definition: Spacewire.h:237
void temu_spwLsmInit(temu_SpwLinkState *StatePtr)
uint64_t Address
Definition: Spacewire.h:181
Definition: Spacewire.h:206
uint32_t DataLength
Definition: Spacewire.h:182
Definition: Spacewire.h:216
Definition: Spacewire.h:63
struct temu_SpwPacket temu_SpwPacket
temu_SpwPacketType
Definition: Spacewire.h:33
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:269
uint64_t(* timeToSendPacketNs)(void *Device, uint64_t PacketLength)
Definition: Spacewire.h:106
uint8_t temu_spwRmapCRCNextCode(uint8_t InCRC, uint8_t InByte)
uint8_t ProtocolId
Definition: Spacewire.h:174
void(* receive)(void *Device, void *Sender, temu_SpwPacket *Pkt)
Definition: Spacewire.h:78
temu_SpwRmapReadCmdPacket ReadCmd
Definition: Spacewire.h:306
uint32_t temu_spwRmapHeaderReplySize(const temu_SpwRmapDecodedPacket *DCmdPkt)
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:267
Definition: Spacewire.h:60
void(* connect)(void *Device, temu_SpwPortIfaceRef Dest)
Definition: Spacewire.h:95
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:239
temu_SpwRmapDecodedReadReply ReadReply
Definition: Spacewire.h:309
TEMU_IFACE_REFERENCE_TYPE(temu_SpwPort)
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:225
temu_SpwRmapDecodedCommandHeader Header
Definition: Spacewire.h:221
Definition: Spacewire.h:260
uint8_t Value
Definition: Spacewire.h:286
temu_SpwRmapDecodedWriteReply WriteReply
Definition: Spacewire.h:310
uint16_t TransactionId
Definition: Spacewire.h:180
temu_SpwRmapCommandType CmdType
Definition: Spacewire.h:285
temu_SpwRmapDecodingOutcome temu_spwRmapDecodePacket(const temu_SpwPacket *Pkt, temu_SpwRmapDecodedPacket *PktDecoded)
#define TEMU_SPW_BITS_PER_DATA_CHAR
Definition: Spacewire.h:149
Definition: Spacewire.h:317
temu_Buff PktData
Definition: Spacewire.h:42
uint8_t Write
Definition: Spacewire.h:287
Definition: Spacewire.h:211
temu_SpwRmapDecodedCmdField CmdField
The command field, bits [5,4,3,2] in instruction.
Definition: Spacewire.h:299
void(* signalLinkStateChange)(void *Device, temu_SpwLinkState LinkState)
Definition: Spacewire.h:84
temu_SpwRmapDecodedCommandHeader Header
Definition: Spacewire.h:231
Definition: Spacewire.h:65
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:241
temu_SpwRmapDecodingOutcome temu_spwRmapDecodeBuffer(const temu_Buff *PktDataBuffer, temu_SpwRmapDecodedPacket *PktDecoded)
const uint8_t * Data
Pointer to the first data char.
Definition: Spacewire.h:223
Definition: Spacewire.h:212
uint8_t ReplyAddressesNum
Definition: Spacewire.h:178
Definition: Spacewire.h:205
uint8_t Verify
Definition: Spacewire.h:288
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:257
Definition: Spacewire.h:172
uint8_t DataCrc
Data crc. Valid only if AvailableDataLength > Header.DataLength.
Definition: Spacewire.h:227
Definition: Spacewire.h:293
temu_SpwLinkState
Definition: Spacewire.h:59
temu_SpwRmapCommandType
Definition: Spacewire.h:210
temu_SpwRmapDecodedReadReplyHeader Header
Definition: Spacewire.h:265
Definition: Spacewire.h:220
Definition: Spacewire.h:72
temu_SpwRmapWriteCmdPacket WriteCmd
Definition: Spacewire.h:307
temu_SpwRmapPacketType PacketType
The packet type as identified by bits [7,6] in instruction.
Definition: Spacewire.h:297
Definition: Spacewire.h:230
Definition: Spacewire.h:207
uint8_t TargetLogicalAddr
Definition: Spacewire.h:173
Definition: Spacewire.h:316
uint32_t AvailableDataLength
The amount of data available.
Definition: Spacewire.h:255