29 #ifndef TEMU_MIL_STD_1553_H
30 #define TEMU_MIL_STD_1553_H
71 #define TEMU_1553_NS_PER_WORD 20000
72 static inline uint64_t
73 temu_mil1553TransferTime(
unsigned Words)
79 #define TEMU_1553_BITS_PER_WORD 20
80 static inline uint64_t
81 temu_mil1553BitCount(
unsigned Words)
88 static inline uint16_t
91 return (Msg->
Data[0] >> 11) & 0x1f;
94 static inline uint16_t
97 return (Msg->
Data[0] >> 10) & 1;
100 static inline uint16_t
103 return (Msg->
Data[0] >> 5) & 0x1f;
106 static inline uint16_t
109 return Msg->
Data[0] & 0x1f;
117 if (temu_mil1553CmdSubAddr(Msg) == 0x00 ||
118 temu_mil1553CmdSubAddr(Msg) == 0x1f) {
127 temu_mil1553CreateCmd(uint16_t *Cmd)
139 temu_mil1553CreateModeTransmittMsg0(uint16_t *Mode, uint16_t RTAddr,
146 *Mode = (RTAddr << 11) | (1 << 10) | MC;
153 temu_mil1553CreateModeRecvMsg0(uint16_t *Mode, uint16_t RTAddr, uint16_t MC)
159 *Mode = (RTAddr << 11) | MC;
166 temu_mil1553CreateModeTransmittMsg1(uint16_t *Mode, uint16_t RTAddr,
173 *Mode = (RTAddr << 11) | (1 << 10) | (0x1f << 5) | MC;
180 temu_mil1553CreateModeRecvMsg1(uint16_t *Mode, uint16_t RTAddr, uint16_t MC)
186 *Mode = (RTAddr << 11) | (0x1f << 5) | MC;
192 temu_mil1553CreateStatMsg(uint16_t *Stat, uint16_t RTAddr)
198 *Stat = RTAddr << 11;
206 temu_mil1553CreateDataMsg(uint16_t *Data,
size_t Words)
217 temu_mil1553CreateRecvCmdMsg(uint16_t *CmdWord, uint16_t RTAddr,
218 uint16_t SubAddr, uint16_t Words)
225 *CmdWord = (RTAddr << 11) | (SubAddr << 5) | (Words & 0x1f);
230 temu_mil1553CreateTransmittCmdMsg(uint16_t *CmdWord, uint16_t RTAddr,
231 uint16_t SubAddr, uint16_t Words)
238 *CmdWord = (RTAddr << 11) | (1 << 10) | (SubAddr << 5) | (Words & 0x1f);
260 void (*
connected)(
void *Device, temu_Mil1553BusIfaceRef Bus,
int SubAddr);
262 void (*
disconnected)(
void *Device, temu_Mil1553BusIfaceRef Bus,
int SubAddr);
269 #define TEMU_MIL1553_DEV_IFACE_TYPE "Mil1553DevIface"
272 void (*
connect)(
void *Bus,
int RTAddr, temu_Mil1553DevIfaceRef Device);
282 #define TEMU_MIL1553_BUS_IFACE_TYPE "Mil1553BusIface"
290 static inline uint16_t
291 temu_mil1553CmdWordRa(uint16_t Msg)
293 return (Msg >> 11) & 0x1f;
296 static inline uint16_t
297 temu_mil1553CmdWordSa(uint16_t Msg)
299 return (Msg >> 5) & 0x1f;
302 static inline uint16_t
303 temu_mil1553CmdWordTr(uint16_t Msg)
305 return (Msg >> 10) & 0x1;
308 static inline uint16_t
309 temu_mil1553CmdWordCount(uint16_t Msg)
314 static inline uint16_t
315 temu_mil1553ModeWordCode(uint16_t Msg)
320 static inline uint16_t
321 temu_mil1553StatWordRtAddr(uint16_t Msg)
323 return (Msg >> 11) & 0x1f;
326 static inline uint16_t
327 temu_mil1553StatWordME(uint16_t Msg)
329 return (Msg >> 10) & 1;
332 static inline uint16_t
333 temu_mil1553StatWordInst(uint16_t Msg)
335 return (Msg >> 9) & 1;
338 static inline uint16_t
339 temu_mil1553StatWordSR(uint16_t Msg)
341 return (Msg >> 8) & 1;
344 static inline uint16_t
345 temu_mil1553StatWordBC(uint16_t Msg)
347 return (Msg >> 4) & 1;
350 static inline uint16_t
351 temu_mil1553StatWordBusy(uint16_t Msg)
353 return (Msg >> 3) & 1;
356 static inline uint16_t
357 temu_mil1553StatWordSubFlag(uint16_t Msg)
359 return (Msg >> 2) & 1;
362 static inline uint16_t
363 temu_mil1553StatWordDynBusCtrl(uint16_t Msg)
365 return (Msg >> 1) & 1;
368 static inline uint16_t
369 temu_mil1553StatWordTermFlag(uint16_t Msg)
375 static inline uint16_t
378 return Msg->
Data[0] & 0x1f;
381 static inline uint16_t
384 return Msg->
Data[0] & 0x1f;
387 static inline uint16_t
390 return (Msg->
Data[0] >> 11) & 0x1f;
393 static inline uint16_t
396 return (Msg->
Data[0] >> 10) & 1;
399 static inline uint16_t
402 return (Msg->
Data[0] >> 9) & 1;
405 static inline uint16_t
408 return (Msg->
Data[0] >> 8) & 1;
411 static inline uint16_t
414 return (Msg->
Data[0] >> 4) & 1;
417 static inline uint16_t
420 return (Msg->
Data[0] >> 3) & 1;
423 static inline uint16_t
426 return (Msg->
Data[0] >> 2) & 1;
429 static inline uint16_t
432 return (Msg->
Data[0] >> 1) & 1;
435 static inline uint16_t
438 return Msg->
Data[0] & 1;
445 #define TEMU_1553_TR_BIT 0x20
447 #define TEMU_1553_DYN_BUS_CTRL 0x00
448 #define TEMU_1553_SYNC_NO_DATA 0x01
449 #define TEMU_1553_TRANSMIT_STATUS_WORD 0x02
450 #define TEMU_1553_INITIATE_SELF_TEST 0x03
451 #define TEMU_1553_TRANSMITTER_SHUTDOWN 0x04
452 #define TEMU_1553_OVERRIDE_TRANSMITTER 0x05
453 #define TEMU_1553_INHIBIT_TERM_FLAG_BIT 0x06
454 #define TEMU_1553_OVERRIDE_INHIBIT_TERM_FLAG_BIT 0x07
455 #define TEMU_1553_RESET_RT 0x08
456 #define TEMU_1553_TRANSMIT_VECTOR_WORD 0x10
457 #define TEMU_1553_SYNC_WITH_DATA 0x11
458 #define TEMU_1553_TRANSMIT_LAST_CMD 0x12
459 #define TEMU_1553_TRANSMIT_BIT_WORD 0x13
460 #define TEMU_1553_SELECTED_TRANSMITTER 0x14
461 #define TEMU_1553_OVERRIDE_SELECTED_TRANSMITTER 0x15
temu_Mil1553BusResetType ResetType
uint64_t LastReportSentWords
void(* disconnect)(void *Bus, int RTAddr)
void(* setBusController)(void *Bus, temu_Mil1553DevIfaceRef Device)
void(* busEnteredIdle)(void *Bus, temu_Mil1553BusIdleInfo *idleInfo)
Notifies the bus controller the bus enters an idle.
void(* disableSendEvents)(void *Bus)
void(* enableSendEvents)(void *Bus)
#define TEMU_IFACE_REFERENCE_TYPE(N)
void(* reportStats)(void *Bus)
temu_Mil1553MsgType MsgTyp
struct temu_Mil1553Msg temu_Mil1553Msg
void(* disconnected)(void *Device, temu_Mil1553BusIfaceRef Bus, int SubAddr)
Called after device is disconnected.
void(* send)(void *Bus, void *Sender, temu_Mil1553Msg *Msg)
void(* receive)(void *Device, temu_Mil1553Msg *Msg)
Receive of 1553 message.
void(* connect)(void *Bus, int RTAddr, temu_Mil1553DevIfaceRef Device)
#define TEMU_1553_BITS_PER_WORD
#define TEMU_1553_NS_PER_WORD
void(* connected)(void *Device, temu_Mil1553BusIfaceRef Bus, int SubAddr)
Called after device is connected to bus.