/* * ICan.hpp * * Created on: 12 May 2022 * Author: malyarenko */ #ifndef UMLIBRARY_PERIPHERAL_ICAN_HPP_ #define UMLIBRARY_PERIPHERAL_ICAN_HPP_ #include #include namespace peripheral { struct ICan { public: struct MessageObject { enum Type { Tx = 0x0, /** Transmit object */ TxRtr = 0x1, /** Transmit object with remote response */ Rx = 0x2, /** Receive object */ }; uint32_t id : 29; uint32_t xtd : 1; uint32_t type : 2; uint32_t mask; uint16_t size; }; typedef uint16_t MailboxId; typedef uint32_t CanFrameId; typedef void (*RxCallback) (MailboxId mb_id, CanFrameId can_id, char * data, uint16_t data_bytes, void * param); typedef void (*TxCallback) (MailboxId mb_id, CanFrameId can_id, void * param); virtual void reset() = 0; //!<Полный сброс? virtual void disable() = 0; //!<Отключение приема-передачи, перевод в режим настройки. virtual void enable() = 0; //!<Активация приема-передачи. //!Размещение почтового ящика, получение идентификатора почтового ящика. virtual MailboxId allocMailbox( const MessageObject & msg_object, bool async ) = 0; /** @return Mailbox index [1:32], 0 on error*/ virtual void freeMailbox( MailboxId mb_id ) = 0;//!<Освобождение почтового ящика. virtual bool isTxDone( MailboxId mb_id ) = 0; //!<Признак завершения отправки. virtual bool isRxPending( MailboxId mb_id ) = 0; //!<Признак ожидания обработки приема. virtual bool transmit( MailboxId mb_id, const char * data, uint16_t data_bits ) = 0; virtual bool transmit( MailboxId mb_id ) = 0; //!<Запрос на передачу данных. virtual bool write( MailboxId mb_id, const char * data, uint16_t data_bits ) = 0; virtual bool read( MailboxId mb_id, char * buffer, std::size_t size, uint16_t * data_bits ) = 0; virtual void setRxCallback( RxCallback usr_rx_callback, void * param ) = 0; virtual void setTxCallback( TxCallback usr_tx_callback, void * param ) = 0; }; } /* namespace peripheral */ #endif /* UMLIBRARY_PERIPHERAL_ICAN_HPP_ */