MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/peripheral/ICan.hpp
2024-06-07 11:12:56 +03:00

69 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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_ */