MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/peripheral/ICan.hpp

69 lines
2.4 KiB
C++

/*
* ICan.hpp
*
* Created on: 12 May 2022
* Author: malyarenko
*/
#ifndef UMLIBRARY_PERIPHERAL_ICAN_HPP_
#define UMLIBRARY_PERIPHERAL_ICAN_HPP_
#include <stdint.h>
#include <cstddef>
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_ */