CANfestival - an open source CANopen framework

Dependencies:   mbed

Committer:
sam_grove
Date:
Wed Sep 26 05:43:05 2012 +0000
Revision:
6:bc64031ac849
Parent:
1:285c99dcbb25
Change a typecast in can_mbed.cpp from unit8_t * to char * to fit the CANMessage constructor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:6219434a0cb5 1
sam_grove 0:6219434a0cb5 2 /* Just for demonstration purposes - consider it a notepad
sam_grove 0:6219434a0cb5 3 *
sam_grove 0:6219434a0cb5 4 * sgrove
sam_grove 0:6219434a0cb5 5 */
sam_grove 0:6219434a0cb5 6
sam_grove 0:6219434a0cb5 7 #include "port_helper.h"
sam_grove 0:6219434a0cb5 8 #include "main.h"
sam_grove 0:6219434a0cb5 9
sam_grove 0:6219434a0cb5 10 Serial Debug(USBTX, USBRX);
sam_grove 0:6219434a0cb5 11 DigitalOut running_status(LED1);
sam_grove 0:6219434a0cb5 12
sam_grove 0:6219434a0cb5 13 extern uint8_t nodeID;
sam_grove 0:6219434a0cb5 14 extern uint8_t change_node_id;
sam_grove 0:6219434a0cb5 15 extern uint8_t digital_input[1];
sam_grove 0:6219434a0cb5 16
sam_grove 0:6219434a0cb5 17 void initHelper()
sam_grove 0:6219434a0cb5 18 {
sam_grove 1:285c99dcbb25 19 Debug.baud(57600);
sam_grove 1:285c99dcbb25 20 printf(" CANopen port of CANfestival slave node (DS-401) \n");
sam_grove 0:6219434a0cb5 21 }
sam_grove 0:6219434a0cb5 22
sam_grove 0:6219434a0cb5 23 void serviceHelper()
sam_grove 0:6219434a0cb5 24 {
sam_grove 1:285c99dcbb25 25 static uint32_t cnt = 0;
sam_grove 1:285c99dcbb25 26 // indicate that the stack is running
sam_grove 1:285c99dcbb25 27 if (cnt++ > 100){
sam_grove 1:285c99dcbb25 28 cnt = 0;
sam_grove 1:285c99dcbb25 29 running_status = !running_status;
sam_grove 1:285c99dcbb25 30 }
sam_grove 0:6219434a0cb5 31 }
sam_grove 0:6219434a0cb5 32
sam_grove 0:6219434a0cb5 33
sam_grove 0:6219434a0cb5 34 void printMsg(Message& msg)
sam_grove 0:6219434a0cb5 35 {
sam_grove 1:285c99dcbb25 36 CANMessage m(msg.cob_id, (char*)msg.data, msg.len, static_cast<CANType>(msg.rtr), CANStandard);
sam_grove 1:285c99dcbb25 37 // call the CANMessage formatted method
sam_grove 1:285c99dcbb25 38 printMsg(m);
sam_grove 0:6219434a0cb5 39 }
sam_grove 0:6219434a0cb5 40
sam_grove 0:6219434a0cb5 41 void printMsg(CANMessage& msg)
sam_grove 0:6219434a0cb5 42 {
sam_grove 1:285c99dcbb25 43 switch(msg.len){
sam_grove 1:285c99dcbb25 44 case 1:
sam_grove 1:285c99dcbb25 45 printf("ID: 0x%04X DLC: %d Data(0): 0x%02X\n", msg.id, msg.len, msg.data[0]);
sam_grove 1:285c99dcbb25 46 break;
sam_grove 1:285c99dcbb25 47 case 2:
sam_grove 1:285c99dcbb25 48 printf("ID: 0x%04X DLC: %d Data(0->1): 0x%02X 0x%02X\n", msg.id, msg.len, msg.data[0], msg.data[1]);
sam_grove 1:285c99dcbb25 49 break;
sam_grove 1:285c99dcbb25 50 case 3:
sam_grove 1:285c99dcbb25 51 printf("ID: 0x%04X DLC: %d Data(0->2): 0x%02X 0x%02X 0x%02X\n",
sam_grove 1:285c99dcbb25 52 msg.id, msg.len, msg.data[0], msg.data[1], msg.data[2]);
sam_grove 1:285c99dcbb25 53 break;
sam_grove 1:285c99dcbb25 54 case 4:
sam_grove 1:285c99dcbb25 55 printf("ID: 0x%04X DLC: %d Data(0->3): 0x%02X 0x%02X 0x%02X 0x%02X\n",
sam_grove 1:285c99dcbb25 56 msg.id, msg.len, msg.data[0], msg.data[1], msg.data[2], msg.data[3]);
sam_grove 1:285c99dcbb25 57 break;
sam_grove 1:285c99dcbb25 58 case 5:
sam_grove 1:285c99dcbb25 59 printf("ID: 0x%04X DLC: %d Data(0->4): 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
sam_grove 1:285c99dcbb25 60 msg.id, msg.len, msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4]);
sam_grove 1:285c99dcbb25 61 break;
sam_grove 1:285c99dcbb25 62 case 6:
sam_grove 1:285c99dcbb25 63 printf("ID: 0x%04X DLC: %d Data(0->5): 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
sam_grove 1:285c99dcbb25 64 msg.id, msg.len, msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4], msg.data[5]);
sam_grove 1:285c99dcbb25 65 break;
sam_grove 1:285c99dcbb25 66 case 7:
sam_grove 1:285c99dcbb25 67 printf("ID: 0x%04X DLC: %d Data(0->6): 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
sam_grove 1:285c99dcbb25 68 msg.id, msg.len, msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4], msg.data[5], msg.data[6]);
sam_grove 1:285c99dcbb25 69 break;
sam_grove 1:285c99dcbb25 70 case 8:
sam_grove 1:285c99dcbb25 71 printf("ID: 0x%04X DLC: %d Data(0->7): 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
sam_grove 1:285c99dcbb25 72 msg.id, msg.len, msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4], msg.data[5], msg.data[6], msg.data[7]);
sam_grove 1:285c99dcbb25 73 break;
sam_grove 1:285c99dcbb25 74 default:
sam_grove 1:285c99dcbb25 75 break;
sam_grove 1:285c99dcbb25 76 }
sam_grove 0:6219434a0cb5 77
sam_grove 0:6219434a0cb5 78 }
sam_grove 0:6219434a0cb5 79
sam_grove 0:6219434a0cb5 80 void serviceCOMCommands()
sam_grove 0:6219434a0cb5 81 {
sam_grove 1:285c99dcbb25 82 static char msg[64];
sam_grove 1:285c99dcbb25 83 static char w_loc=0;
sam_grove 1:285c99dcbb25 84 if (Debug.readable()){
sam_grove 1:285c99dcbb25 85 // store the data
sam_grove 1:285c99dcbb25 86 if (w_loc < 64){
sam_grove 1:285c99dcbb25 87 msg[w_loc++] = Debug.getc();
sam_grove 1:285c99dcbb25 88 }
sam_grove 1:285c99dcbb25 89 // clear the buffer and try again
sam_grove 1:285c99dcbb25 90 else{
sam_grove 1:285c99dcbb25 91 // clear the buffer
sam_grove 1:285c99dcbb25 92 memset(msg, 0, 64);
sam_grove 1:285c99dcbb25 93 w_loc = 0;
sam_grove 1:285c99dcbb25 94 return;
sam_grove 1:285c99dcbb25 95 }
sam_grove 1:285c99dcbb25 96 // parse the message and act on it
sam_grove 1:285c99dcbb25 97 if ((msg[w_loc-1] == '\r') || (msg[w_loc-1] == '\n') ){
sam_grove 1:285c99dcbb25 98 // process the message and look for something familiar
sam_grove 1:285c99dcbb25 99 if (strncmp(msg, "help", strlen("help")) == 0){
sam_grove 1:285c99dcbb25 100 // print the help menu
sam_grove 1:285c99dcbb25 101 printf("\t HELP OPTIONS (case sesnitive):\n");
sam_grove 1:285c99dcbb25 102 printf("\t help - display the available options\n");
sam_grove 1:285c99dcbb25 103 printf("\t id=xxx - change the node id\n");
sam_grove 1:285c99dcbb25 104 printf("\t about - get info about the node\n");
sam_grove 1:285c99dcbb25 105 printf("\t input=x - a decimal number\n");
sam_grove 1:285c99dcbb25 106 }
sam_grove 1:285c99dcbb25 107 else if (strncmp(msg, "id=", strlen("id=")) == 0){
sam_grove 1:285c99dcbb25 108 // change the node ID
sam_grove 1:285c99dcbb25 109 int res = atoi(msg+strlen("id="));
sam_grove 1:285c99dcbb25 110 if ( (res > 0) && (res < 128) ){
sam_grove 1:285c99dcbb25 111 nodeID = res;
sam_grove 1:285c99dcbb25 112 printf("the new node_id = %d\n", nodeID);
sam_grove 1:285c99dcbb25 113 change_node_id = 1;
sam_grove 1:285c99dcbb25 114 }
sam_grove 1:285c99dcbb25 115 else{
sam_grove 1:285c99dcbb25 116 printf("invalid parameter");
sam_grove 1:285c99dcbb25 117 }
sam_grove 1:285c99dcbb25 118 }
sam_grove 1:285c99dcbb25 119 else if (strncmp(msg, "about", strlen("about")) == 0){
sam_grove 1:285c99dcbb25 120 // our call tag
sam_grove 1:285c99dcbb25 121 printf(" CANopen port of CANfestival slave node (DS-401) \n");
sam_grove 1:285c99dcbb25 122 }
sam_grove 1:285c99dcbb25 123 else if (strncmp(msg, "input=", strlen("input=")) == 0){
sam_grove 1:285c99dcbb25 124 // store the input value
sam_grove 1:285c99dcbb25 125 digital_input[0] = (uint8_t)atoi(msg+strlen("input="));
sam_grove 1:285c99dcbb25 126 printf("you entered %d", digital_input[0]);
sam_grove 1:285c99dcbb25 127 }
sam_grove 1:285c99dcbb25 128 // clear the buffer
sam_grove 1:285c99dcbb25 129 memset(msg, 0, 64);
sam_grove 1:285c99dcbb25 130 w_loc = 0;
sam_grove 1:285c99dcbb25 131 }
sam_grove 1:285c99dcbb25 132 }
sam_grove 0:6219434a0cb5 133 }
sam_grove 0:6219434a0cb5 134
sam_grove 0:6219434a0cb5 135 /*
sam_grove 0:6219434a0cb5 136 WDT_IRQHandler
sam_grove 0:6219434a0cb5 137 TIMER0_IRQHandler
sam_grove 0:6219434a0cb5 138 TIMER1_IRQHandler
sam_grove 0:6219434a0cb5 139 TIMER2_IRQHandler
sam_grove 0:6219434a0cb5 140 TIMER3_IRQHandler
sam_grove 0:6219434a0cb5 141 UART0_IRQHandler
sam_grove 0:6219434a0cb5 142 UART1_IRQHandler
sam_grove 0:6219434a0cb5 143 UART2_IRQHandler
sam_grove 0:6219434a0cb5 144 UART3_IRQHandler
sam_grove 0:6219434a0cb5 145 PWM1_IRQHandler
sam_grove 0:6219434a0cb5 146 I2C0_IRQHandler
sam_grove 0:6219434a0cb5 147 I2C1_IRQHandler
sam_grove 0:6219434a0cb5 148 I2C2_IRQHandler
sam_grove 0:6219434a0cb5 149 SPI_IRQHandler
sam_grove 0:6219434a0cb5 150 SSP0_IRQHandler
sam_grove 0:6219434a0cb5 151 SSP1_IRQHandler
sam_grove 0:6219434a0cb5 152 PLL0_IRQHandler
sam_grove 0:6219434a0cb5 153 RTC_IRQHandler
sam_grove 0:6219434a0cb5 154 EINT0_IRQHandler
sam_grove 0:6219434a0cb5 155 EINT1_IRQHandler
sam_grove 0:6219434a0cb5 156 EINT2_IRQHandler
sam_grove 0:6219434a0cb5 157 EINT3_IRQHandler
sam_grove 0:6219434a0cb5 158 ADC_IRQHandler
sam_grove 0:6219434a0cb5 159 BOD_IRQHandler
sam_grove 0:6219434a0cb5 160 USB_IRQHandler
sam_grove 0:6219434a0cb5 161 CAN_IRQHandler
sam_grove 0:6219434a0cb5 162 DMA_IRQHandler
sam_grove 0:6219434a0cb5 163 I2S_IRQHandler
sam_grove 0:6219434a0cb5 164 ENET_IRQHandler
sam_grove 0:6219434a0cb5 165 RIT_IRQHandler
sam_grove 0:6219434a0cb5 166 MCPWM_IRQHandler
sam_grove 0:6219434a0cb5 167 QEI_IRQHandler
sam_grove 0:6219434a0cb5 168 PLL1_IRQHandler
sam_grove 0:6219434a0cb5 169 USBActivity_IRQHandler
sam_grove 0:6219434a0cb5 170 CANActivity_IRQHandler
sam_grove 0:6219434a0cb5 171 */