Official support library for using mbed as a programmable coprocessor in the Innomatix DAP-III+ telematics platform

Revision:
10:5fbe72ffb725
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/InnomatixCanAPI/can_example.txt	Wed Sep 06 19:17:07 2017 +0000
@@ -0,0 +1,131 @@
+/*******************************************************************
+ *
+ *  File: can_example.cpp
+ *
+ *  Copyright 2017 Innomatix, LLC, All Rights Reserved
+ *
+ *  Example of using the Innomatix CAN API for mbed
+ *
+ *******************************************************************/
+#include "InnomatixCanAPI.h"
+
+// Create the CAN objects per "the mbed way"
+CAN can0( p9, p10 );
+CAN can1( p30, p29 );
+
+
+/******************************************************************************/
+void CanExampleOpen()
+{
+    CanResults_e canresult;
+ 	unsigned long can_baud = 500000;
+
+    /*-----------------------------------------------*/
+    // Initialize the CAN library
+    CanInit( &can0, &can1 );
+
+    /*-----------------------------------------------*/
+    // Open the CAN channels at the specified baud rate
+    canresult = CanOpen( canChDAP3, can_baud );
+    // Have to manually attache the Rx event handler
+    can0.attach( OnReceiveCanZero );
+    printf( "Innomatix CAN API initialization for Ch3 @ %dbps: %s\r\n", can_baud, (canSuccess == canresult ? "INITIALIZED" : "FAILED") );
+
+    /*-----------------------------------------------*/
+    canresult = CanOpen( canChDAP4, can_baud );
+    can1.attach( OnReceiveCanOne );
+    printf( "Innomatix CAN API initialization for Ch4 @ %dbps: %s\r\n", can_baud, (canSuccess == canresult ? "INITIALIZED" : "FAILED") );
+
+    /*-----------------------------------------------*/
+    // Pause a moment to let all the CAN init stuff take effect, else
+    // sometimes we dont receive the first message on the bus
+    wait_ms( 100 );
+}
+
+
+
+
+/******************************************************************************/
+void CanExampleClose()
+{
+    // Close the channels and clean up the library
+    CanClose( canChDAP3 );
+    CanClose( canChDAP4 );
+}
+
+
+
+/******************************************************************************/
+void CanExampleMain()
+{
+    CanResults_e canresult;
+    unsigned long msgid;
+    char msglen;
+    unsigned char msgbuff[ 8 ] = {0};
+    CanFormat_e msgformat;
+	unsigned long timestamp;
+
+
+    /*-----------------------------------------------*/
+    // Get a message from CAN3
+    canresult = CanReceive( canChDAP3, &timestamp, &msgid, (CanFormat_e *)&msgformat, msgbuff, &msglen );
+    if( canSuccess == canresult )
+    {
+        // Check msgid to see if we're interested in this message
+        if( 0x100 == msgid )
+        {
+            // get some data from the message
+            unsigned short val = 0;
+            val += msgbuff[0] << 8;
+            val += msgbuff[1];
+
+            //TODO do something with the value....
+
+    }else if( canNoData != canresult )
+    {
+        // No CAN message available
+    }else
+    {
+        // Something went wrong, check InnomatixCanAPI.h for result codes
+    }
+
+
+
+    /*-----------------------------------------------*/
+	// detect receive overruns - this means CAN messages are arrving faster
+	// than the application is reading them via CanReceive()
+    {
+    	static unsigned long overflow = 0;
+	    StatisticsStruct_t Stats;
+
+		// Check if there are more overrun errors this time than last time
+	    CanStatistics( canChDAP3, &Stats );
+	    if( Stats.OverflowCount > 0 && Stats.OverflowCount != overflow )
+	    {
+            // save the new overflow count so we can tell if it changes next time
+			overflow = Stats.OverflowCount;
+
+			// publish the overflow count to a data bin
+			sprintf( str, "CAN3 OVF: %d", overflow );
+		    PutString( StatusBin, str );
+	    }
+	}
+
+
+
+    /*-----------------------------------------------*/
+    // Send a message on CAN4
+    memset( msgbuff, 0x00, sizeof(txbuff) );
+    msgbuff[ 0 ] = 0xF0;
+    msgbuff[ 1 ] = 0x0D;
+    canresult = CanSend( canChDAP4, 0x200, canFormatStandard, msgbuff, 8 );
+    if( canSuccess == canresult )
+    {
+        // success
+    }else
+    {
+        // fail - check InnomatixCanAPI.h for result codes
+	}
+}
+
+