Demonstration example for CanPipe Library.

Dependencies:   CanPipe mbed

Committer:
ptpaterson
Date:
Mon Nov 07 02:16:45 2016 +0000
Revision:
1:7cf308c1484d
Parent:
0:5abca479f387
Cleaned up example for updates to CanPipe.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ptpaterson 0:5abca479f387 1 #include "mbed.h"
ptpaterson 0:5abca479f387 2 #include "CanPipe.h"
ptpaterson 1:7cf308c1484d 3 #include "ExampleCanProtocol.h"
ptpaterson 0:5abca479f387 4
ptpaterson 0:5abca479f387 5 Ticker ticker;
ptpaterson 0:5abca479f387 6 DigitalOut led1(LED1);
ptpaterson 0:5abca479f387 7
ptpaterson 0:5abca479f387 8 CAN m_can(P0_11, P0_31);
ptpaterson 0:5abca479f387 9 CanPipe m_can_pipe(&m_can);
ptpaterson 0:5abca479f387 10
ptpaterson 0:5abca479f387 11 char counter = 0;
ptpaterson 0:5abca479f387 12 void send() {
ptpaterson 0:5abca479f387 13 led1 = !led1;
ptpaterson 0:5abca479f387 14 m_can_pipe.PostMessage(CANMessage(1337, &counter, 1));
ptpaterson 1:7cf308c1484d 15 //m_can.write(CANMessage(1337, &counter, 1));
ptpaterson 1:7cf308c1484d 16 ++counter;
ptpaterson 0:5abca479f387 17 }
ptpaterson 0:5abca479f387 18
ptpaterson 1:7cf308c1484d 19 /* Define user static callbacks */
ptpaterson 1:7cf308c1484d 20 int user_cb1(CANMessage &msg) { printf("user_cb1\r\n"); return CanPipe::kOkay; }
ptpaterson 1:7cf308c1484d 21 int user_cb2(CANMessage &msg) { printf("user_cb2\r\n"); return CanPipe::kOkay; }
ptpaterson 1:7cf308c1484d 22 int user_cb3(CANMessage &msg) { printf("user_cb3\r\n"); return CanPipe::kOkay; }
ptpaterson 0:5abca479f387 23
ptpaterson 1:7cf308c1484d 24 /* main program */
ptpaterson 0:5abca479f387 25 int main() {
ptpaterson 1:7cf308c1484d 26 m_can.frequency(500000);
ptpaterson 1:7cf308c1484d 27
ptpaterson 0:5abca479f387 28 int handle;
ptpaterson 0:5abca479f387 29
ptpaterson 1:7cf308c1484d 30 /* 1 is default hardware filter handle for ALL messages. override it.
ptpaterson 1:7cf308c1484d 31 * Otherwise, other filters will be skipped
ptpaterson 1:7cf308c1484d 32 */
ptpaterson 1:7cf308c1484d 33 handle = m_can.filter(0x000, 0x7ff, CANAny, 1);
ptpaterson 1:7cf308c1484d 34
ptpaterson 1:7cf308c1484d 35 /* react to message 0x400 */
ptpaterson 1:7cf308c1484d 36 handle = m_can_pipe.RegisterFilter(0x400, 0x7ff, CANAny, 3);
ptpaterson 1:7cf308c1484d 37 m_can_pipe.RegisterCallback(CanMessageCallback(user_cb1), handle);
ptpaterson 0:5abca479f387 38
ptpaterson 1:7cf308c1484d 39 /* react to messages 0x500 to 0x5FF */
ptpaterson 1:7cf308c1484d 40 handle = m_can_pipe.RegisterFilter(0x500, 0x700, CANAny, 2);
ptpaterson 1:7cf308c1484d 41 m_can_pipe.RegisterCallback(CanMessageCallback(user_cb2), handle);
ptpaterson 1:7cf308c1484d 42 m_can_pipe.RegisterCallback(CanMessageCallback(user_cb3), handle);
ptpaterson 0:5abca479f387 43
ptpaterson 1:7cf308c1484d 44 /* CanProtocol callbacks will be called after the user callbacks */
ptpaterson 1:7cf308c1484d 45 ExampleCanProtocol protocol;
ptpaterson 1:7cf308c1484d 46 protocol.RegisterProtocols(m_can_pipe);
ptpaterson 1:7cf308c1484d 47
ptpaterson 1:7cf308c1484d 48 /* Schedule a message to be sent once a second */
ptpaterson 0:5abca479f387 49 ticker.attach(send, 1);
ptpaterson 0:5abca479f387 50
ptpaterson 0:5abca479f387 51 while (1) {
ptpaterson 1:7cf308c1484d 52 /* We know there will be nothing to handle until there is an interrupt */
ptpaterson 0:5abca479f387 53 __WFI(); //sleep();
ptpaterson 1:7cf308c1484d 54 /* Handle the messages as soon as we can */
ptpaterson 0:5abca479f387 55 m_can_pipe.HandleMessages();
ptpaterson 0:5abca479f387 56 }
ptpaterson 0:5abca479f387 57 }