  | 
  
    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