69 lines
2.4 KiB
C++
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; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>?
|
|||
|
|
virtual void disable() = 0; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
virtual void enable() = 0; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
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;//!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
virtual bool isTxDone( MailboxId mb_id ) = 0; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
virtual bool isRxPending( MailboxId mb_id ) = 0; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
virtual bool transmit( MailboxId mb_id, const char * data, uint16_t data_bits ) = 0;
|
|||
|
|
virtual bool transmit( MailboxId mb_id ) = 0; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
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_ */
|