Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
can/can.cpp@0:aa420961d99b, 2021-06-15 (annotated)
- Committer:
- ninomedj
- Date:
- Tue Jun 15 10:29:50 2021 +0000
- Revision:
- 0:aa420961d99b
receive;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ninomedj | 0:aa420961d99b | 1 | #include"mbed.h" |
ninomedj | 0:aa420961d99b | 2 | #include"string.h" |
ninomedj | 0:aa420961d99b | 3 | #include "CAN.h" |
ninomedj | 0:aa420961d99b | 4 | #include"can.h" |
ninomedj | 0:aa420961d99b | 5 | #define node_ID 4 |
ninomedj | 0:aa420961d99b | 6 | CAN can1(p30, p29); // rd, td Monitor |
ninomedj | 0:aa420961d99b | 7 | DigitalOut myled1(LED1); |
ninomedj | 0:aa420961d99b | 8 | DigitalOut myled2(LED2); |
ninomedj | 0:aa420961d99b | 9 | DigitalOut myled3(LED3); |
ninomedj | 0:aa420961d99b | 10 | DigitalOut myled4(LED4); |
ninomedj | 0:aa420961d99b | 11 | |
ninomedj | 0:aa420961d99b | 12 | bool newData = false; |
ninomedj | 0:aa420961d99b | 13 | |
ninomedj | 0:aa420961d99b | 14 | |
ninomedj | 0:aa420961d99b | 15 | int counter = 0; |
ninomedj | 0:aa420961d99b | 16 | int counter1 = 0; |
ninomedj | 0:aa420961d99b | 17 | float vspeed = 0.0; |
ninomedj | 0:aa420961d99b | 18 | float vattitude = 0.0; |
ninomedj | 0:aa420961d99b | 19 | |
ninomedj | 0:aa420961d99b | 20 | |
ninomedj | 0:aa420961d99b | 21 | |
ninomedj | 0:aa420961d99b | 22 | void can::CAN2_wrFilter (uint32_t id) { |
ninomedj | 0:aa420961d99b | 23 | static int CAN_std_cnt = 0; |
ninomedj | 0:aa420961d99b | 24 | uint32_t buf0, buf1; |
ninomedj | 0:aa420961d99b | 25 | int cnt1, cnt2, bound1; |
ninomedj | 0:aa420961d99b | 26 | |
ninomedj | 0:aa420961d99b | 27 | /* Acceptance Filter Memory full */ |
ninomedj | 0:aa420961d99b | 28 | if (((CAN_std_cnt + 1) >> 1) >= 512) |
ninomedj | 0:aa420961d99b | 29 | return; /* error: objects full */ |
ninomedj | 0:aa420961d99b | 30 | |
ninomedj | 0:aa420961d99b | 31 | /* Setup Acceptance Filter Configuration |
ninomedj | 0:aa420961d99b | 32 | Acceptance Filter Mode Register = Off */ |
ninomedj | 0:aa420961d99b | 33 | LPC_CANAF->AFMR = 0x00000001; |
ninomedj | 0:aa420961d99b | 34 | |
ninomedj | 0:aa420961d99b | 35 | id |= 1 << 13; /* Add controller number(2) */ |
ninomedj | 0:aa420961d99b | 36 | id &= 0x0000F7FF; /* Mask out 16-bits of ID */ |
ninomedj | 0:aa420961d99b | 37 | |
ninomedj | 0:aa420961d99b | 38 | if (CAN_std_cnt == 0) { /* For entering first ID */ |
ninomedj | 0:aa420961d99b | 39 | LPC_CANAF_RAM->mask[0] = 0x0000FFFF | (id << 16); |
ninomedj | 0:aa420961d99b | 40 | } else if (CAN_std_cnt == 1) { /* For entering second ID */ |
ninomedj | 0:aa420961d99b | 41 | if ((LPC_CANAF_RAM->mask[0] >> 16) > id) |
ninomedj | 0:aa420961d99b | 42 | LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] >> 16) | (id << 16); |
ninomedj | 0:aa420961d99b | 43 | else |
ninomedj | 0:aa420961d99b | 44 | LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] & 0xFFFF0000) | id; |
ninomedj | 0:aa420961d99b | 45 | } else { |
ninomedj | 0:aa420961d99b | 46 | /* Find where to insert new ID */ |
ninomedj | 0:aa420961d99b | 47 | cnt1 = 0; |
ninomedj | 0:aa420961d99b | 48 | cnt2 = CAN_std_cnt; |
ninomedj | 0:aa420961d99b | 49 | bound1 = (CAN_std_cnt - 1) >> 1; |
ninomedj | 0:aa420961d99b | 50 | while (cnt1 <= bound1) { /* Loop through standard existing IDs */ |
ninomedj | 0:aa420961d99b | 51 | if ((LPC_CANAF_RAM->mask[cnt1] >> 16) > id) { |
ninomedj | 0:aa420961d99b | 52 | cnt2 = cnt1 * 2; |
ninomedj | 0:aa420961d99b | 53 | break; |
ninomedj | 0:aa420961d99b | 54 | } |
ninomedj | 0:aa420961d99b | 55 | if ((LPC_CANAF_RAM->mask[cnt1] & 0x0000FFFF) > id) { |
ninomedj | 0:aa420961d99b | 56 | cnt2 = cnt1 * 2 + 1; |
ninomedj | 0:aa420961d99b | 57 | break; |
ninomedj | 0:aa420961d99b | 58 | } |
ninomedj | 0:aa420961d99b | 59 | cnt1++; /* cnt1 = U32 where to insert new ID */ |
ninomedj | 0:aa420961d99b | 60 | } /* cnt2 = U16 where to insert new ID */ |
ninomedj | 0:aa420961d99b | 61 | |
ninomedj | 0:aa420961d99b | 62 | if (cnt1 > bound1) { /* Adding ID as last entry */ |
ninomedj | 0:aa420961d99b | 63 | if ((CAN_std_cnt & 0x0001) == 0) /* Even number of IDs exists */ |
ninomedj | 0:aa420961d99b | 64 | LPC_CANAF_RAM->mask[cnt1] = 0x0000FFFF | (id << 16); |
ninomedj | 0:aa420961d99b | 65 | else /* Odd number of IDs exists */ |
ninomedj | 0:aa420961d99b | 66 | LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | id; |
ninomedj | 0:aa420961d99b | 67 | } else { |
ninomedj | 0:aa420961d99b | 68 | buf0 = LPC_CANAF_RAM->mask[cnt1]; /* Remember current entry */ |
ninomedj | 0:aa420961d99b | 69 | if ((cnt2 & 0x0001) == 0) /* Insert new mask to even address */ |
ninomedj | 0:aa420961d99b | 70 | buf1 = (id << 16) | (buf0 >> 16); |
ninomedj | 0:aa420961d99b | 71 | else /* Insert new mask to odd address */ |
ninomedj | 0:aa420961d99b | 72 | buf1 = (buf0 & 0xFFFF0000) | id; |
ninomedj | 0:aa420961d99b | 73 | |
ninomedj | 0:aa420961d99b | 74 | LPC_CANAF_RAM->mask[cnt1] = buf1; /* Insert mask */ |
ninomedj | 0:aa420961d99b | 75 | |
ninomedj | 0:aa420961d99b | 76 | bound1 = CAN_std_cnt >> 1; |
ninomedj | 0:aa420961d99b | 77 | /* Move all remaining standard mask entries one place up */ |
ninomedj | 0:aa420961d99b | 78 | while (cnt1 < bound1) { |
ninomedj | 0:aa420961d99b | 79 | cnt1++; |
ninomedj | 0:aa420961d99b | 80 | buf1 = LPC_CANAF_RAM->mask[cnt1]; |
ninomedj | 0:aa420961d99b | 81 | LPC_CANAF_RAM->mask[cnt1] = (buf1 >> 16) | (buf0 << 16); |
ninomedj | 0:aa420961d99b | 82 | buf0 = buf1; |
ninomedj | 0:aa420961d99b | 83 | } |
ninomedj | 0:aa420961d99b | 84 | |
ninomedj | 0:aa420961d99b | 85 | if ((CAN_std_cnt & 0x0001) == 0) /* Even number of IDs exists */ |
ninomedj | 0:aa420961d99b | 86 | LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | (0x0000FFFF); |
ninomedj | 0:aa420961d99b | 87 | } |
ninomedj | 0:aa420961d99b | 88 | } |
ninomedj | 0:aa420961d99b | 89 | CAN_std_cnt++; |
ninomedj | 0:aa420961d99b | 90 | |
ninomedj | 0:aa420961d99b | 91 | /* Calculate std ID start address (buf0) and ext ID start address <- none (buf1) */ |
ninomedj | 0:aa420961d99b | 92 | buf0 = ((CAN_std_cnt + 1) >> 1) << 2; |
ninomedj | 0:aa420961d99b | 93 | buf1 = buf0; |
ninomedj | 0:aa420961d99b | 94 | |
ninomedj | 0:aa420961d99b | 95 | /* Setup acceptance filter pointers */ |
ninomedj | 0:aa420961d99b | 96 | LPC_CANAF->SFF_sa = 0; |
ninomedj | 0:aa420961d99b | 97 | LPC_CANAF->SFF_GRP_sa = buf0; |
ninomedj | 0:aa420961d99b | 98 | LPC_CANAF->EFF_sa = buf0; |
ninomedj | 0:aa420961d99b | 99 | LPC_CANAF->EFF_GRP_sa = buf1; |
ninomedj | 0:aa420961d99b | 100 | LPC_CANAF->ENDofTable = buf1; |
ninomedj | 0:aa420961d99b | 101 | |
ninomedj | 0:aa420961d99b | 102 | LPC_CANAF->AFMR = 0xFFFF; /* Use acceptance filter */ |
ninomedj | 0:aa420961d99b | 103 | } // CAN2_wrFilter |
ninomedj | 0:aa420961d99b | 104 | |
ninomedj | 0:aa420961d99b | 105 | |
ninomedj | 0:aa420961d99b | 106 | void can::sendtocanvattitude(){ |
ninomedj | 0:aa420961d99b | 107 | char datas[4]; |
ninomedj | 0:aa420961d99b | 108 | char data1[4]; |
ninomedj | 0:aa420961d99b | 109 | char canmsg[8]; |
ninomedj | 0:aa420961d99b | 110 | if(newData==true){ |
ninomedj | 0:aa420961d99b | 111 | |
ninomedj | 0:aa420961d99b | 112 | if (counter==255){ |
ninomedj | 0:aa420961d99b | 113 | counter=0; |
ninomedj | 0:aa420961d99b | 114 | } |
ninomedj | 0:aa420961d99b | 115 | else{ |
ninomedj | 0:aa420961d99b | 116 | counter=++counter; |
ninomedj | 0:aa420961d99b | 117 | datas[0] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 118 | datas[1] = (char)(0x02); |
ninomedj | 0:aa420961d99b | 119 | datas[2] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 120 | datas[3] = (char)(counter); |
ninomedj | 0:aa420961d99b | 121 | memcpy(data1,&vattitude,4); |
ninomedj | 0:aa420961d99b | 122 | memcpy(canmsg, datas, 4); |
ninomedj | 0:aa420961d99b | 123 | memcpy(canmsg+4, data1, 8); |
ninomedj | 0:aa420961d99b | 124 | if(can1.write(CANMessage(311,canmsg,8))) { |
ninomedj | 0:aa420961d99b | 125 | printf("Node_ID 311 sent \n"); |
ninomedj | 0:aa420961d99b | 126 | } |
ninomedj | 0:aa420961d99b | 127 | myled1 = !myled1; |
ninomedj | 0:aa420961d99b | 128 | newData = false; |
ninomedj | 0:aa420961d99b | 129 | } |
ninomedj | 0:aa420961d99b | 130 | } |
ninomedj | 0:aa420961d99b | 131 | } |
ninomedj | 0:aa420961d99b | 132 | |
ninomedj | 0:aa420961d99b | 133 | void can::sendtocanvspeed(){ |
ninomedj | 0:aa420961d99b | 134 | char data2[4]; |
ninomedj | 0:aa420961d99b | 135 | char datass[4]; |
ninomedj | 0:aa420961d99b | 136 | char canmsg1[8]; |
ninomedj | 0:aa420961d99b | 137 | if(newData==true){ |
ninomedj | 0:aa420961d99b | 138 | if (counter1==255){ |
ninomedj | 0:aa420961d99b | 139 | counter1=0; |
ninomedj | 0:aa420961d99b | 140 | }else |
ninomedj | 0:aa420961d99b | 141 | { |
ninomedj | 0:aa420961d99b | 142 | counter1=++counter1; |
ninomedj | 0:aa420961d99b | 143 | datass[0] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 144 | datass[1] = (char)(0x02); |
ninomedj | 0:aa420961d99b | 145 | datass[2] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 146 | datass[3] = (char)(counter1); |
ninomedj | 0:aa420961d99b | 147 | memcpy(data2,&vspeed,4); |
ninomedj | 0:aa420961d99b | 148 | memcpy(canmsg1, datass, 4); |
ninomedj | 0:aa420961d99b | 149 | memcpy(canmsg1+4, data2, 8); |
ninomedj | 0:aa420961d99b | 150 | |
ninomedj | 0:aa420961d99b | 151 | |
ninomedj | 0:aa420961d99b | 152 | if(can1.write(CANMessage(1124,canmsg1,8))) { |
ninomedj | 0:aa420961d99b | 153 | printf("Node_ID 1124 sent \n"); |
ninomedj | 0:aa420961d99b | 154 | } |
ninomedj | 0:aa420961d99b | 155 | myled2 = !myled2; |
ninomedj | 0:aa420961d99b | 156 | newData = false; |
ninomedj | 0:aa420961d99b | 157 | } |
ninomedj | 0:aa420961d99b | 158 | } |
ninomedj | 0:aa420961d99b | 159 | } |
ninomedj | 0:aa420961d99b | 160 | |
ninomedj | 0:aa420961d99b | 161 | |
ninomedj | 0:aa420961d99b | 162 | |
ninomedj | 0:aa420961d99b | 163 | |
ninomedj | 0:aa420961d99b | 164 | |
ninomedj | 0:aa420961d99b | 165 | void can::tick(){ |
ninomedj | 0:aa420961d99b | 166 | ticker.attach(callback(this, &can::sendtocanvspeed), 1.0 ); |
ninomedj | 0:aa420961d99b | 167 | } |
ninomedj | 0:aa420961d99b | 168 | |
ninomedj | 0:aa420961d99b | 169 | |
ninomedj | 0:aa420961d99b | 170 | |
ninomedj | 0:aa420961d99b | 171 | //////////////////////////////////////////////////////////// |
ninomedj | 0:aa420961d99b | 172 | //////////////////////////////////////////////////////////// |
ninomedj | 0:aa420961d99b | 173 | /////////////////////////////////////////////////////////// |
ninomedj | 0:aa420961d99b | 174 | ////////////////NODE SERVICE PROTOCOL/////////////////////// |
ninomedj | 0:aa420961d99b | 175 | //////////////////////////////////////////////////////////// |
ninomedj | 0:aa420961d99b | 176 | //////////////////////////////////////////////////////////// |
ninomedj | 0:aa420961d99b | 177 | /////////////////////////////////////////////////////////// |
ninomedj | 0:aa420961d99b | 178 | //////// identifiction service: |
ninomedj | 0:aa420961d99b | 179 | void nodespresponse::ids(){ |
ninomedj | 0:aa420961d99b | 180 | char data[8]; |
ninomedj | 0:aa420961d99b | 181 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 182 | data[1] = (char)(0x10);//data type:uchar4 |
ninomedj | 0:aa420961d99b | 183 | data[2] = (char)(0x00);//service code 0 ids |
ninomedj | 0:aa420961d99b | 184 | data[3] = (char)(0x00);//message code as in request |
ninomedj | 0:aa420961d99b | 185 | data[4] = (char)(0x00);//hardware revision |
ninomedj | 0:aa420961d99b | 186 | data[5] = (char)(0x00);//software revision |
ninomedj | 0:aa420961d99b | 187 | data[6] = (char)(0x00);//identifier distribution (0=CANaerospace distribution) |
ninomedj | 0:aa420961d99b | 188 | data[7] = (char)(0x00);//header type (0 = CANaerospace standard header) |
ninomedj | 0:aa420961d99b | 189 | if(can1.write(CANMessage(129,data,8))) { |
ninomedj | 0:aa420961d99b | 190 | printf("ids responce from %d is sent",node_ID); |
ninomedj | 0:aa420961d99b | 191 | } |
ninomedj | 0:aa420961d99b | 192 | } |
ninomedj | 0:aa420961d99b | 193 | /* nss dont request a response |
ninomedj | 0:aa420961d99b | 194 | void nodespresponse::nss(unsigned long time){ |
ninomedj | 0:aa420961d99b | 195 | char data[8]; |
ninomedj | 0:aa420961d99b | 196 | char data1[4]; |
ninomedj | 0:aa420961d99b | 197 | char data2[4] |
ninomedj | 0:aa420961d99b | 198 | char canmsg[8]; |
ninomedj | 0:aa420961d99b | 199 | data1[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 200 | data1[1] = (char)(0x04);//data type:no data |
ninomedj | 0:aa420961d99b | 201 | data1[2] = (char)(0x01);//service code 1 |
ninomedj | 0:aa420961d99b | 202 | data1[3] = (char)(0x00);//message code as in request |
ninomedj | 0:aa420961d99b | 203 | memcpy(data2,&time,4); |
ninomedj | 0:aa420961d99b | 204 | memcpy(canmsg, data1, 4); |
ninomedj | 0:aa420961d99b | 205 | memcpy(canmsg+4, data2, 8); |
ninomedj | 0:aa420961d99b | 206 | can1.write(CANMessage(1124,canmsg,8)); |
ninomedj | 0:aa420961d99b | 207 | } |
ninomedj | 0:aa420961d99b | 208 | */ |
ninomedj | 0:aa420961d99b | 209 | |
ninomedj | 0:aa420961d99b | 210 | |
ninomedj | 0:aa420961d99b | 211 | /////////////////////////data download service |
ninomedj | 0:aa420961d99b | 212 | //////first response a start download request message |
ninomedj | 0:aa420961d99b | 213 | void nodespresponse::dds1(){ |
ninomedj | 0:aa420961d99b | 214 | char data[8]; |
ninomedj | 0:aa420961d99b | 215 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 216 | data[1] = (char)(0x03);//data type:long |
ninomedj | 0:aa420961d99b | 217 | data[2] = (char)(0x02);//service code 2 |
ninomedj | 0:aa420961d99b | 218 | data[3] = (char)(0x00);//as in request |
ninomedj | 0:aa420961d99b | 219 | data[4] = (char)(0x00);/////-2=invalid//-1=abort//0=xoff//1=xon |
ninomedj | 0:aa420961d99b | 220 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 221 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 222 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 223 | } |
ninomedj | 0:aa420961d99b | 224 | ////////second response the message |
ninomedj | 0:aa420961d99b | 225 | void nodespresponse::dds2(){ |
ninomedj | 0:aa420961d99b | 226 | char data[8]; |
ninomedj | 0:aa420961d99b | 227 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 228 | data[1] = (char)(0x16);//data type:chksum |
ninomedj | 0:aa420961d99b | 229 | data[2] = (char)(0x02);//service code 2 |
ninomedj | 0:aa420961d99b | 230 | data[3] = (char)(0x00);//last number |
ninomedj | 0:aa420961d99b | 231 | data[4] = (char)(0x00);//checksum |
ninomedj | 0:aa420961d99b | 232 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 233 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 234 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 235 | } |
ninomedj | 0:aa420961d99b | 236 | /////////////////////////data upload service |
ninomedj | 0:aa420961d99b | 237 | //////first response a start download request message |
ninomedj | 0:aa420961d99b | 238 | void nodespresponse::dus1(){ |
ninomedj | 0:aa420961d99b | 239 | char data[8]; |
ninomedj | 0:aa420961d99b | 240 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 241 | data[1] = (char)(0x15);//data type:MEMID |
ninomedj | 0:aa420961d99b | 242 | data[2] = (char)(0x03);//service code 3 |
ninomedj | 0:aa420961d99b | 243 | data[3] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 244 | data[4] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 245 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 246 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 247 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 248 | } |
ninomedj | 0:aa420961d99b | 249 | ////////second response the message |
ninomedj | 0:aa420961d99b | 250 | void nodespresponse::dus2(){ |
ninomedj | 0:aa420961d99b | 251 | char data[8]; |
ninomedj | 0:aa420961d99b | 252 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 253 | data[1] = (char)(0x15);//data type:MEMID |
ninomedj | 0:aa420961d99b | 254 | data[2] = (char)(0x03);//service code 3 |
ninomedj | 0:aa420961d99b | 255 | data[3] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 256 | data[4] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 257 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 258 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 259 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 260 | } |
ninomedj | 0:aa420961d99b | 261 | |
ninomedj | 0:aa420961d99b | 262 | ////////////simulation control service |
ninomedj | 0:aa420961d99b | 263 | |
ninomedj | 0:aa420961d99b | 264 | void nodespresponse::scs(){ |
ninomedj | 0:aa420961d99b | 265 | char data[8]; |
ninomedj | 0:aa420961d99b | 266 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 267 | data[1] = (char)(0x00);//data type:??????????? user defined |
ninomedj | 0:aa420961d99b | 268 | data[2] = (char)(0x04);//service code 4 |
ninomedj | 0:aa420961d99b | 269 | data[3] = (char)(0x00);//message code:???????????? |
ninomedj | 0:aa420961d99b | 270 | data[4] = (char)(0x00);/////user defined |
ninomedj | 0:aa420961d99b | 271 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 272 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 273 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 274 | } |
ninomedj | 0:aa420961d99b | 275 | |
ninomedj | 0:aa420961d99b | 276 | //////Transmission Interval Service |
ninomedj | 0:aa420961d99b | 277 | |
ninomedj | 0:aa420961d99b | 278 | void nodespresponse::tis(){ |
ninomedj | 0:aa420961d99b | 279 | char data[8]; |
ninomedj | 0:aa420961d99b | 280 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 281 | data[1] = (char)(0x00);//data type:no data |
ninomedj | 0:aa420961d99b | 282 | data[2] = (char)(0x05);//service code |
ninomedj | 0:aa420961d99b | 283 | data[3] = (char)(0x00);//message code:0=ok//-6 =CAN identifier or transmission rate out of range |
ninomedj | 0:aa420961d99b | 284 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 285 | data[5] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 286 | data[6] = (char)(0x00);////na |
ninomedj | 0:aa420961d99b | 287 | data[7] = (char)(0x00);////na |
ninomedj | 0:aa420961d99b | 288 | } |
ninomedj | 0:aa420961d99b | 289 | //////FLASH Programming Service |
ninomedj | 0:aa420961d99b | 290 | |
ninomedj | 0:aa420961d99b | 291 | void nodespresponse::fps(){ |
ninomedj | 0:aa420961d99b | 292 | char data[8]; |
ninomedj | 0:aa420961d99b | 293 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 294 | data[1] = (char)(0x00);//data type:nodata |
ninomedj | 0:aa420961d99b | 295 | data[2] = (char)(0x06);//service code 6 |
ninomedj | 0:aa420961d99b | 296 | data[3] = (char)(0x00);//message code:0 = OK ///-3 = invalid security code |
ninomedj | 0:aa420961d99b | 297 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 298 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 299 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 300 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 301 | } |
ninomedj | 0:aa420961d99b | 302 | |
ninomedj | 0:aa420961d99b | 303 | /* no response |
ninomedj | 0:aa420961d99b | 304 | //////State Transmission Service |
ninomedj | 0:aa420961d99b | 305 | |
ninomedj | 0:aa420961d99b | 306 | void nodespresponse::sts(){ |
ninomedj | 0:aa420961d99b | 307 | char data[8]; |
ninomedj | 0:aa420961d99b | 308 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 309 | data[1] = (char)(0x00);//data type:nodata |
ninomedj | 0:aa420961d99b | 310 | data[2] = (char)(0x07);//service code 7 |
ninomedj | 0:aa420961d99b | 311 | data[3] = (char)(0x00);//message code:0 |
ninomedj | 0:aa420961d99b | 312 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 313 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 314 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 315 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 316 | } |
ninomedj | 0:aa420961d99b | 317 | */ |
ninomedj | 0:aa420961d99b | 318 | |
ninomedj | 0:aa420961d99b | 319 | //////Filter setting services |
ninomedj | 0:aa420961d99b | 320 | |
ninomedj | 0:aa420961d99b | 321 | void nodespresponse::fss(){ |
ninomedj | 0:aa420961d99b | 322 | char data[8]; |
ninomedj | 0:aa420961d99b | 323 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 324 | data[1] = (char)(0x00);//data type:no data |
ninomedj | 0:aa420961d99b | 325 | data[2] = (char)(0x08);//service code 8 |
ninomedj | 0:aa420961d99b | 326 | data[3] = (char)(0x00);//message code:0 = OK -6 = limit frequency or filter number out of rang |
ninomedj | 0:aa420961d99b | 327 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 328 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 329 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 330 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 331 | } |
ninomedj | 0:aa420961d99b | 332 | |
ninomedj | 0:aa420961d99b | 333 | |
ninomedj | 0:aa420961d99b | 334 | |
ninomedj | 0:aa420961d99b | 335 | //////Test Control Service |
ninomedj | 0:aa420961d99b | 336 | |
ninomedj | 0:aa420961d99b | 337 | void nodespresponse::tcs(){ |
ninomedj | 0:aa420961d99b | 338 | char data[8]; |
ninomedj | 0:aa420961d99b | 339 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 340 | data[1] = (char)(0x00);//data type:user defined |
ninomedj | 0:aa420961d99b | 341 | data[2] = (char)(0x09);//service code 9 |
ninomedj | 0:aa420961d99b | 342 | data[3] = (char)(0x00);//message code:user defined |
ninomedj | 0:aa420961d99b | 343 | data[4] = (char)(0x00);/////user defined |
ninomedj | 0:aa420961d99b | 344 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 345 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 346 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 347 | } |
ninomedj | 0:aa420961d99b | 348 | |
ninomedj | 0:aa420961d99b | 349 | |
ninomedj | 0:aa420961d99b | 350 | |
ninomedj | 0:aa420961d99b | 351 | //////Baudrate Setting Service |
ninomedj | 0:aa420961d99b | 352 | |
ninomedj | 0:aa420961d99b | 353 | void nodespresponse::bss(){ |
ninomedj | 0:aa420961d99b | 354 | char data[8]; |
ninomedj | 0:aa420961d99b | 355 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 356 | data[1] = (char)(0x06);//data type:short |
ninomedj | 0:aa420961d99b | 357 | data[2] = (char)(0xA);//service code 10 |
ninomedj | 0:aa420961d99b | 358 | data[3] = (char)(0x00);//message code:-1 = baudrate code unknown |
ninomedj | 0:aa420961d99b | 359 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 360 | data[5] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 361 | data[6] = (char)(0x00);///na |
ninomedj | 0:aa420961d99b | 362 | data[7] = (char)(0x00);////na |
ninomedj | 0:aa420961d99b | 363 | } |
ninomedj | 0:aa420961d99b | 364 | |
ninomedj | 0:aa420961d99b | 365 | |
ninomedj | 0:aa420961d99b | 366 | //////Node-ID Setting Service |
ninomedj | 0:aa420961d99b | 367 | |
ninomedj | 0:aa420961d99b | 368 | void nodespresponse::nis(){ |
ninomedj | 0:aa420961d99b | 369 | char data[8]; |
ninomedj | 0:aa420961d99b | 370 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 371 | data[1] = (char)(0x00);//data type:no data |
ninomedj | 0:aa420961d99b | 372 | data[2] = (char)(0xB);//service code 11 |
ninomedj | 0:aa420961d99b | 373 | data[3] = (char)(0x00);//message code:0 = OK -6 = node-ID out of range |
ninomedj | 0:aa420961d99b | 374 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 375 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 376 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 377 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 378 | } |
ninomedj | 0:aa420961d99b | 379 | |
ninomedj | 0:aa420961d99b | 380 | ////// Module Information Service |
ninomedj | 0:aa420961d99b | 381 | |
ninomedj | 0:aa420961d99b | 382 | void nodespresponse::mis(){ |
ninomedj | 0:aa420961d99b | 383 | char data[8]; |
ninomedj | 0:aa420961d99b | 384 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 385 | data[1] = (char)(0x00);//data type:user defined |
ninomedj | 0:aa420961d99b | 386 | data[2] = (char)(0xC);//service code 12 |
ninomedj | 0:aa420961d99b | 387 | data[3] = (char)(0x00);//message code:user defined |
ninomedj | 0:aa420961d99b | 388 | data[4] = (char)(0x00);/////user defined |
ninomedj | 0:aa420961d99b | 389 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 390 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 391 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 392 | } |
ninomedj | 0:aa420961d99b | 393 | ////// Module Configuration Service |
ninomedj | 0:aa420961d99b | 394 | |
ninomedj | 0:aa420961d99b | 395 | void nodespresponse::mcs(){ |
ninomedj | 0:aa420961d99b | 396 | char data[8]; |
ninomedj | 0:aa420961d99b | 397 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 398 | data[1] = (char)(0x00);//data type:user defined |
ninomedj | 0:aa420961d99b | 399 | data[2] = (char)(0xD);//service code 13 |
ninomedj | 0:aa420961d99b | 400 | data[3] = (char)(0x00);//message code:user defined |
ninomedj | 0:aa420961d99b | 401 | data[4] = (char)(0x00);/////user defined |
ninomedj | 0:aa420961d99b | 402 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 403 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 404 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 405 | } |
ninomedj | 0:aa420961d99b | 406 | ////// CAN Identifier Setting Service |
ninomedj | 0:aa420961d99b | 407 | |
ninomedj | 0:aa420961d99b | 408 | void nodespresponse::css(){ |
ninomedj | 0:aa420961d99b | 409 | char data[8]; |
ninomedj | 0:aa420961d99b | 410 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 411 | data[1] = (char)(0x00);//data type:no data |
ninomedj | 0:aa420961d99b | 412 | data[2] = (char)(0xE);//service code 14 |
ninomedj | 0:aa420961d99b | 413 | data[3] = (char)(0x00);//message code:0 = OK -6 = message number or CAN identifier out of range |
ninomedj | 0:aa420961d99b | 414 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 415 | data[5] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 416 | data[6] = (char)(0x00);////na |
ninomedj | 0:aa420961d99b | 417 | data[7] = (char)(0x00);///na |
ninomedj | 0:aa420961d99b | 418 | } |
ninomedj | 0:aa420961d99b | 419 | |
ninomedj | 0:aa420961d99b | 420 | //////CANaerospace Identifier Distribution Setting Service |
ninomedj | 0:aa420961d99b | 421 | |
ninomedj | 0:aa420961d99b | 422 | void nodespresponse::dss(){ |
ninomedj | 0:aa420961d99b | 423 | char data[8]; |
ninomedj | 0:aa420961d99b | 424 | data[0] = (char)(node_ID);//node_id |
ninomedj | 0:aa420961d99b | 425 | data[1] = (char)(0x00);//data type:no data |
ninomedj | 0:aa420961d99b | 426 | data[2] = (char)(0xF);//service code 15 |
ninomedj | 0:aa420961d99b | 427 | data[3] = (char)(0x00);//message code:0= ok //-6= distribution id out of range |
ninomedj | 0:aa420961d99b | 428 | data[4] = (char)(0x00);/////na |
ninomedj | 0:aa420961d99b | 429 | data[5] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 430 | data[6] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 431 | data[7] = (char)(0x00); |
ninomedj | 0:aa420961d99b | 432 | } |