Official support library for using mbed as a programmable coprocessor in the Innomatix DAP-III+ telematics platform
Diff: InnomatixCanAPI/inc/InnomatixCanAPI.h
- Revision:
- 11:b28c0d6773bf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/InnomatixCanAPI/inc/InnomatixCanAPI.h Wed Sep 06 19:18:48 2017 +0000 @@ -0,0 +1,170 @@ +/******************************************************************* + * + * File: InnomatixCanAPI.h + * + * Description: Simple CAN API for Innomatix Coprocessor applications + * + * Copyright 2015 Innomatix, LLC., All Rights Reserved + * + * THIS DOCUMENT AND ITS CONTENTS ARE INTELLECTUAL PROPERTY + * OF INNOMATIX, LLC. ANY DUPLICATION IN PART OR WHOLE + * WITHOUT PRIOR WRITTEN CONSENT IS STRICTLY PROHIBITED. + * + *******************************************************************/ + +#ifndef _INNOMATIX_CAN_API_H +#define _INNOMATIX_CAN_API_H + +#ifdef __cplusplus +extern "C" +{ +#endif +/*************************************************/ + +typedef enum +{ + canSuccess, // 0 + canInvalidChannel, // 1 + canInvalidSpeed, // 2 + canInvalidIdentifier, // 3 + canInvalidLength, // 4 + canNoData, // 5 + canNotInitialized, // 6 + canGeneralError // N +}CanResults_e; + +typedef enum +{ + canChDAP3, // CAN 3 interface on the DAP connector or wiring harness + canChDAP4 // CAN 4 interface on the DAP connector or wiring harness +}CanChannel_e; +static const char *CanChannelName[] = {"CanChDAP3", "CanChDAP4"}; + + +typedef enum +{ + canFormatStandard, // A standard, 11-bit identifier + canFormatExtended, // An extended, 29-bit identifier +}CanFormat_e; + +typedef struct +{ + int TxMessageCount; + int RxMessageCount; + + // Increments when the internal message receive buffer is full and another message is received + int OverflowCount; +}StatisticsStruct_t, *StatisticsStruct_p; + + +typedef struct +{ + int Id; + int DataLen; + int Timestamp; + CanFormat_e Format; + unsigned char Data[ 8 ]; +}CanMessage_t, *CanMessage_p; + + +/** + * These functions are the event handlers for incoming CAN messages. + * They buffer the messages so they can be retrieved (by the application) later + * + * The mechanics of the API require that the application assign the event + * handler rather than take care of it internally. + * Example: + * CAN can0( p9, p10 ); + * CAN can1( p30, p29 ); + * + * CanInit( &can0, &can1 ); + * can0.attach( OnReceiveCanZero ); + * Can1.attach( OnReceiveCanOne ); + * + * while( something ) + * result = CanReceive( canChDAP3, ... ) + * + ************************************************************************/ +void OnReceiveCanZero( void ); +void OnReceiveCanOne( void ); + + +/** + * This function initializes the API and the designated CAN interface. + * Return Values: + * Success - the API was initialized and the channel is ready to use. + * InvalidChannel - the specified channel is not supported + * InvalidSpeed - the specified network speed is not supported + * GeneralError - an unknown or unspecified error has occurred + *************************************************************************/ +CanResults_e CanInit( CAN *Can0, CAN *Can1 ); + +/** + * This function opens the CAN channel at the specified baud rate and + * begins receiving messages. + * Return Values: + * Success - the API was initialized and the channel is ready to use. + * InvalidChannel - the specified channel is not supported + * InvalidSpeed - the specified network speed is not supported + * GeneralError - an unknown or unspecified error has occurred + *************************************************************************/ +CanResults_e CanOpen( CanChannel_e Channel, int Speed ); + + +/** + * This function disables the designated CAN interface. + *************************************************************************/ +void CanClose( CanChannel_e Channel ); + + +/** + * Allow the client to send a message on the CAN bus. + * Return Values: + * Success - the message was sent + * InvalidChannel - the specified channel is not supported + * InvalidIdentifier - the provided message id is not a valid for the specified format + * InvalidLength - more than 8 bytes of data were indicated + * GeneralError - an unknown or unspecified error has occurred + *************************************************************************/ +CanResults_e CanSend( CanChannel_e Channel, unsigned long Id, CanFormat_e Format, const unsigned char *Data, char DLen ); + + +/** + * Allow the client to get a message from the CAN bus. + * Return Values: + * Success - a message was retrieved, the parameters hold the message values. + * InvalidChannel - the specified channel is not supported + * NoData - no message is available on the requested channel + * GeneralError - an unknown or unspecified error has occurred + *************************************************************************/ +CanResults_e CanReceive( CanChannel_e Channel, unsigned long *Timestamp, unsigned long *Id, CanFormat_e *Format, unsigned char *Data, char *DLen ); + + +/** + * Allow the client to retrieve statistics about the CAN interface. + * + * Return Values: + * Success - statistics were retrieved + * InvalidChannel - the specified channel is not supported + * GeneralError - an unknown or unspecified error has occurred + *************************************************************************/ +CanResults_e CanStatistics( CanChannel_e Channel, StatisticsStruct_t *Stats ); + + +/** + * Flush the Rx buffer - all messages are discarded, Rx and Overflow stats are cleared + * + * Return Values: + * Success - statistics were retrieved + * InvalidChannel - the specified channel is not supported + * GeneralError - an unknown or unspecified error has occurred + *************************************************************************/ +CanResults_e CanFlush( CanChannel_e Channel ); + + +/*************************************************/ +#ifdef __cplusplus +} +#endif + +#endif /* _INNOMATIX_CAN_API_H */