#ifndef AVB_DRIVER_H_ #define AVB_DRIVER_H_ #include class QSettings; typedef uint16_t avb_1553_word_t; typedef int avb_microseconds_t; typedef enum { avb_bus_default=0, avb_bus_A=1, avb_bus_B=2 } avb_1553_bus_t; typedef struct { unsigned int wc: 5; unsigned int sa: 5; unsigned int tr: 1; unsigned int rt: 5; } avb_1553_cw_structure_t; typedef union { avb_1553_word_t raw; avb_1553_cw_structure_t str; } avb_1553_cmd_word_t; typedef struct { unsigned int tf: 1; unsigned int bca: 1; unsigned int sf: 1; unsigned int busy: 1; unsigned int brcs: 1; unsigned int reserved: 3; unsigned int sr: 1; unsigned int instr: 1; unsigned int me: 1; unsigned int rt: 5; } avb_1553_sw_structure_t; typedef union { avb_1553_word_t raw; avb_1553_sw_structure_t str; } avb_1553_sts_word_t; typedef struct { avb_1553_word_t data[32]; } avb_1553_data_buffer_t; typedef enum { avb_term_real=0, avb_term_simulated, avb_term_disabled } avb_1553_terminal_mode_t; typedef struct { const char* nickName; const char* longName; unsigned int adr; avb_1553_terminal_mode_t mode; } avb_1553_terminal_t; typedef enum { avb_mc_synch_with_data_word=17 } avb_1553_rx_mode_codes_t; typedef enum { avb_mc_synch_without_data_word=1 } avb_1553_tx_mode_codes_t; typedef enum { avb_t_auto, avb_t_nop, avb_t_nop_skip_next, avb_t_rt, avb_t_rt_rt } avb_msg_type_t; typedef enum { avb_rx=0, avb_tx=1 } avb_rxtx_t; //struct avb_reserved_msg_t; typedef int avb_reserved_msg_t; struct avb_1553_message_t; class IAvbDriver; typedef void (*avb_1553_major_frame_handler_t)(IAvbDriver* const drv, unsigned int frame_counter, avb_microseconds_t tt); typedef avb_1553_major_frame_handler_t avb_1553_minor_frame_handler_t; typedef avb_1553_major_frame_handler_t avb_1553_eof_of_frame_handler_t; typedef void (*avb_1553_message_handler_t)(IAvbDriver* const drv, bool ok, avb_1553_message_t* const msg, avb_microseconds_t tt); struct avb_1553_message_t { const char* nickName; const char* longName; avb_msg_type_t type; avb_1553_terminal_t* target; //src==0 -> from BC avb_1553_terminal_t* target_rtrt_tx; //dst==0 -> to BC, if both src and dst == 0 -> broadcast avb_rxtx_t tr; unsigned int sa; unsigned int wc; unsigned int moninal_frequency; //-1: async avb_1553_message_handler_t msgHandler; avb_1553_data_buffer_t* buffer; avb_reserved_msg_t avbReserved_; avb_reserved_msg_t avbReserved_BcPos; unsigned int avbReservedBc_; }; //struct avb_reserved_frame_t; typedef int avb_reserved_frame_t; typedef enum { avb_bc_no_interrupt=0, avb_bc_interrupt=1 } avb_1553_bc_intr_t; typedef struct avb_1553_bc_message_tag_t { avb_1553_message_t* msg; avb_1553_bc_intr_t interrupt; bool conditional; avb_microseconds_t time_to_next; avb_1553_bus_t bus; unsigned int retry; avb_reserved_frame_t avbReserved_; avb_reserved_frame_t avbReserved_BcPos; } avb_1553_bc_message_t; //extern const avb_1553_message_t avb_frame_end_of_minor__; //extern const avb_1553_message_t avb_frame_end_of_major__; //extern const avb_1553_message_t avb_frame_skip_next_message__; #define avb_frame_end_of_minor reinterpret_cast(0) #define avb_frame_end_of_major reinterpret_cast(1) #define avb_frame_skip_next_message reinterpret_cast(2) typedef struct { int num_of_message; avb_1553_bc_message_t** msg; //the message table avb_1553_bc_message_t** oob_msg; //out-of-band messages avb_microseconds_t minor_frame_time; } avb_1553_bc_frame_t; typedef struct { unsigned int major_frames; unsigned int major_frame_tt; unsigned int raised; unsigned int served; } avb_1553_intr_status_t; typedef struct { int rt; int sa; int tr; int error; avb_1553_data_buffer_t data; } avb_1553_message_info_t; typedef void (*avb_1553_isr_t)(avb_1553_message_info_t*); typedef struct { unsigned int total_message; unsigned int processed_message; unsigned int size; avb_1553_word_t* buffer; } avb_1553_monitor_info_t; typedef struct { bool err; bool invalid; bool no_response; bool bit_in_status_err; bool broadcast; bool modecode; unsigned int internal_eror_code; bool tx_sts_received; bool rx_sts_received; bool tr; unsigned int bus; unsigned int rt; unsigned int sa; avb_1553_cmd_word_t cmd; avb_1553_sts_word_t sts; avb_1553_cmd_word_t rtrt_tx_cmd; avb_1553_sts_word_t rtrt_tx_sts; unsigned long timetag; unsigned int wc; //avb_1553_word_t* data; avb_1553_word_t data[32]; void* next; } avb_1553_mon_decoded_t; typedef void (*avb_1553_monitor_isr_t)(avb_1553_monitor_info_t*); extern avb_1553_bc_message_t avb_1553_end_of_minor_frame; extern avb_1553_bc_message_t avb_1553_nop_message; class IAvbDriver { public: virtual ~IAvbDriver() {} virtual bool initialize()=0; virtual bool shutdown()=0; //virtual bool setUpMessages(unsigned int num_of_message, const avb_1553_message_t* const msg_table)=0; virtual void set_begin_of_major_frame_handler(avb_1553_major_frame_handler_t handler)=0; virtual void set_minor_frame_handler(avb_1553_major_frame_handler_t handler)=0; virtual void set_end_of_frame_handler(avb_1553_major_frame_handler_t handler)=0; virtual const char* getDeviceName()=0; virtual bool setUpBcFrame(avb_1553_bc_frame_t& frame)=0; virtual void set_isr(avb_1553_isr_t)=0; enum { mode_mon=1, mode_bc=2, mode_rt=4}; virtual bool go(int times)=0; virtual bool stop()=0; virtual bool go_mon()=0; virtual bool halt_mon()=0; enum run_status_t { sts_halt=0, sts_bc_run=1, sts_mon_run=2, sts_bc_mon_run }; virtual run_status_t getRunState()=0; virtual void niceInterrupt(bool enable)=0; virtual void enableMonitorIsr(bool enable=true)=0; virtual void set_mon_isr(avb_1553_monitor_isr_t)=0; virtual bool getMonitorRawBuffer(avb_1553_monitor_info_t* const buffer)=0; virtual int getLastDriverError()=0; virtual const char* getDriverErrrorMessage(int error_code)=0; virtual bool readDataBuffer(avb_1553_message_t* const, void* const dst, unsigned int wc=0)=0; virtual bool writeDataBuffer(const avb_1553_message_t* const, void* const src, unsigned int wc=0)=0; virtual void writeSyncWord(avb_1553_word_t)=0; virtual bool enableSkipMessage(bool enable=true)=0; //virtual bool adjustMinorFrameTimer(); virtual avb_1553_intr_status_t getIntrStatus()=0; virtual bool mon_decode_msg(avb_1553_mon_decoded_t* const decoded, void* const buffer)=0; virtual avb_microseconds_t getTimetag()=0; virtual void simulateBcTick()=0; virtual bool isSimulator(void) const =0; virtual bool insertMessage(const avb_1553_bc_message_t* const)=0; }; extern "C" { extern IAvbDriver* Avb_DriverCreate(QSettings* settings=0); } #endif /*AVB_DRIVER_H_*/