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; //!<Ïîëíûé ñáðîñ?
|
|
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_ */
|