Can_open_masternode

Dependencies:   mbed

Committer:
sam_grove
Date:
Wed Sep 26 05:48:14 2012 +0000
Revision:
7:537bae5a6fc6
Parent:
1:cb8989598a0f
Child:
3:5bea13b77b97
Pushing the project into the new repo

Who changed what in which revision?

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