Luis Silvio Cordova Rivadeneira
/
Can_open_masternode
Can_open_masternode
source/port_helper.cpp@7:537bae5a6fc6, 2012-09-26 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |