69 lines
2.6 KiB
C++
69 lines
2.6 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_ */
|