Suga koubou
/
Car_test
OBD II see: https://os.mbed.com/users/okini3939/notebook/obd2-can-bus/
ecu_reader/ecu_reader.cpp@0:c6f40de7ab86, 2017-12-20 (annotated)
- Committer:
- okini3939
- Date:
- Wed Dec 20 07:21:57 2017 +0000
- Revision:
- 0:c6f40de7ab86
1st build;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:c6f40de7ab86 | 1 | #include "mbed.h" |
okini3939 | 0:c6f40de7ab86 | 2 | #include "ecu_reader.h" |
okini3939 | 0:c6f40de7ab86 | 3 | |
okini3939 | 0:c6f40de7ab86 | 4 | extern Serial pc; |
okini3939 | 0:c6f40de7ab86 | 5 | |
okini3939 | 0:c6f40de7ab86 | 6 | // Use a timer to see if things take too long |
okini3939 | 0:c6f40de7ab86 | 7 | namespace mbed { |
okini3939 | 0:c6f40de7ab86 | 8 | |
okini3939 | 0:c6f40de7ab86 | 9 | |
okini3939 | 0:c6f40de7ab86 | 10 | ecu_reader::ecu_reader(PinName rd, PinName td, int can_speed) : can2(rd, td) |
okini3939 | 0:c6f40de7ab86 | 11 | { |
okini3939 | 0:c6f40de7ab86 | 12 | can2.frequency(can_speed); |
okini3939 | 0:c6f40de7ab86 | 13 | } |
okini3939 | 0:c6f40de7ab86 | 14 | |
okini3939 | 0:c6f40de7ab86 | 15 | |
okini3939 | 0:c6f40de7ab86 | 16 | #define TIMEOUT 200 |
okini3939 | 0:c6f40de7ab86 | 17 | unsigned char ecu_reader::request(unsigned char pid, float *engine_data) |
okini3939 | 0:c6f40de7ab86 | 18 | { |
okini3939 | 0:c6f40de7ab86 | 19 | char can_msg[8]; |
okini3939 | 0:c6f40de7ab86 | 20 | // float *engine_data; |
okini3939 | 0:c6f40de7ab86 | 21 | |
okini3939 | 0:c6f40de7ab86 | 22 | // led1 = 1; |
okini3939 | 0:c6f40de7ab86 | 23 | |
okini3939 | 0:c6f40de7ab86 | 24 | can_msg[0] = 0x02; |
okini3939 | 0:c6f40de7ab86 | 25 | can_msg[1] = 0x01; |
okini3939 | 0:c6f40de7ab86 | 26 | can_msg[2] = pid; |
okini3939 | 0:c6f40de7ab86 | 27 | can_msg[3] = 0; |
okini3939 | 0:c6f40de7ab86 | 28 | can_msg[4] = 0; |
okini3939 | 0:c6f40de7ab86 | 29 | can_msg[5] = 0; |
okini3939 | 0:c6f40de7ab86 | 30 | can_msg[6] = 0; |
okini3939 | 0:c6f40de7ab86 | 31 | can_msg[7] = 0; |
okini3939 | 0:c6f40de7ab86 | 32 | |
okini3939 | 0:c6f40de7ab86 | 33 | if (! can2.write(CANMessage(PID_REQUEST, can_msg, 8))) { |
okini3939 | 0:c6f40de7ab86 | 34 | pc.printf("*********Request write failed*********\n\r"); |
okini3939 | 0:c6f40de7ab86 | 35 | } |
okini3939 | 0:c6f40de7ab86 | 36 | |
okini3939 | 0:c6f40de7ab86 | 37 | CANTimer.reset(); |
okini3939 | 0:c6f40de7ab86 | 38 | CANTimer.start(); |
okini3939 | 0:c6f40de7ab86 | 39 | |
okini3939 | 0:c6f40de7ab86 | 40 | while (CANTimer.read_ms() < TIMEOUT) { |
okini3939 | 0:c6f40de7ab86 | 41 | |
okini3939 | 0:c6f40de7ab86 | 42 | if (can2.read(can_MsgRx)) { |
okini3939 | 0:c6f40de7ab86 | 43 | pc.printf("CANTimer.read_ms(): %dms\r\n", CANTimer.read_ms()); |
okini3939 | 0:c6f40de7ab86 | 44 | //print message id |
okini3939 | 0:c6f40de7ab86 | 45 | pc.printf("can_MsgRx.id: %x\r\n", can_MsgRx.id); |
okini3939 | 0:c6f40de7ab86 | 46 | //print length of message |
okini3939 | 0:c6f40de7ab86 | 47 | pc.printf("Hex: can_MsgRx.len: %x\r\n", can_MsgRx.len); |
okini3939 | 0:c6f40de7ab86 | 48 | //print data[2] and PID |
okini3939 | 0:c6f40de7ab86 | 49 | pc.printf("can_MsgRx.data[2]: %x, pid: %x\r\n", can_MsgRx.data[2], pid); |
okini3939 | 0:c6f40de7ab86 | 50 | |
okini3939 | 0:c6f40de7ab86 | 51 | for (int i = 0; i < (int)can_MsgRx.len; i++) { |
okini3939 | 0:c6f40de7ab86 | 52 | pc.printf(" %02x", can_MsgRx.data[i]); |
okini3939 | 0:c6f40de7ab86 | 53 | } |
okini3939 | 0:c6f40de7ab86 | 54 | pc.printf("\r\n"); |
okini3939 | 0:c6f40de7ab86 | 55 | |
okini3939 | 0:c6f40de7ab86 | 56 | if ((can_MsgRx.id == PID_REPLY) && (can_MsgRx.data[2] == pid)) { |
okini3939 | 0:c6f40de7ab86 | 57 | CANTimer.stop(); |
okini3939 | 0:c6f40de7ab86 | 58 | /* Details from http://en.wikipedia.org/wiki/OBD-II_PIDs */ |
okini3939 | 0:c6f40de7ab86 | 59 | switch (can_MsgRx.data[2]) { /* Details from http://en.wikipedia.org/wiki/OBD-II_PIDs */ |
okini3939 | 0:c6f40de7ab86 | 60 | case PID_0_20: // PID 0-20 Supported |
okini3939 | 0:c6f40de7ab86 | 61 | PID020 = ((can_MsgRx.data[3] << 24) | (can_MsgRx.data[4] << 16) | (can_MsgRx.data[5] << 8) | (can_MsgRx.data[6])); |
okini3939 | 0:c6f40de7ab86 | 62 | break; |
okini3939 | 0:c6f40de7ab86 | 63 | case STATUS_DTC: { // bit encoded |
okini3939 | 0:c6f40de7ab86 | 64 | if (can_MsgRx.data[4] & 0x04) { //Compression Ignition (Diesel) |
okini3939 | 0:c6f40de7ab86 | 65 | if (can_MsgRx.data[3] & 0x80) { //MIL Light on |
okini3939 | 0:c6f40de7ab86 | 66 | *engine_data = (can_MsgRx.data[3] - 128); |
okini3939 | 0:c6f40de7ab86 | 67 | //sprintf(buffer,"MIL ON, %d DTCs", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 68 | } else { //MIL Light off |
okini3939 | 0:c6f40de7ab86 | 69 | *engine_data = (can_MsgRx.data[3]); |
okini3939 | 0:c6f40de7ab86 | 70 | //sprintf(buffer,"MIL OFF, %d DTCs", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 71 | } |
okini3939 | 0:c6f40de7ab86 | 72 | // Diesel C and D bytes (can_MsgRx.data[5] and can_MsgRx.data[6]) |
okini3939 | 0:c6f40de7ab86 | 73 | // Test available Test incomplete |
okini3939 | 0:c6f40de7ab86 | 74 | // Catalyst C0 D0 |
okini3939 | 0:c6f40de7ab86 | 75 | // Heated Catalyst C1 D1 |
okini3939 | 0:c6f40de7ab86 | 76 | // Evap System C2 D2 |
okini3939 | 0:c6f40de7ab86 | 77 | // Secondary Air C3 D3 |
okini3939 | 0:c6f40de7ab86 | 78 | // A/C Refrigerant C4 D4 |
okini3939 | 0:c6f40de7ab86 | 79 | // O2 Sensor C5 D5 |
okini3939 | 0:c6f40de7ab86 | 80 | // O2 Sensor Heater C6 D6 |
okini3939 | 0:c6f40de7ab86 | 81 | // EGR System C7 D7 |
okini3939 | 0:c6f40de7ab86 | 82 | } else { //Spark Ignition (Gasoline) |
okini3939 | 0:c6f40de7ab86 | 83 | if (can_MsgRx.data[3] & 0x80) { //MIL Light on |
okini3939 | 0:c6f40de7ab86 | 84 | *engine_data = (can_MsgRx.data[3] - 128); |
okini3939 | 0:c6f40de7ab86 | 85 | //sprintf(buffer,"MIL ON, %d DTCs", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 86 | } else { //MIL Light off |
okini3939 | 0:c6f40de7ab86 | 87 | *engine_data = (can_MsgRx.data[3]); |
okini3939 | 0:c6f40de7ab86 | 88 | //sprintf(buffer,"MIL OFF, %d DTCs", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 89 | } |
okini3939 | 0:c6f40de7ab86 | 90 | // Gasoline C and D bytes (can_MsgRx.data[5] and can_MsgRx.data[6]) |
okini3939 | 0:c6f40de7ab86 | 91 | // Test available Test incomplete |
okini3939 | 0:c6f40de7ab86 | 92 | // NMHC Catalyst C0 D0 |
okini3939 | 0:c6f40de7ab86 | 93 | // NOx/SCR Monitoring C1 D1 |
okini3939 | 0:c6f40de7ab86 | 94 | // Boost Pressure C3 D3 |
okini3939 | 0:c6f40de7ab86 | 95 | // Exhaust Gas Sensor C5 D5 |
okini3939 | 0:c6f40de7ab86 | 96 | // Particulate Filter C6 D6 |
okini3939 | 0:c6f40de7ab86 | 97 | // EGR and/or VVT/VTEC C7 D7 |
okini3939 | 0:c6f40de7ab86 | 98 | } |
okini3939 | 0:c6f40de7ab86 | 99 | // Common Tests between Gas and Diesel Engines, byte B (can_MsgRx.data[4]) |
okini3939 | 0:c6f40de7ab86 | 100 | // Test available Test incomplete |
okini3939 | 0:c6f40de7ab86 | 101 | // Misfire B0 B4 |
okini3939 | 0:c6f40de7ab86 | 102 | // Fuel System B1 B5 |
okini3939 | 0:c6f40de7ab86 | 103 | // Components B2 B6 |
okini3939 | 0:c6f40de7ab86 | 104 | break; |
okini3939 | 0:c6f40de7ab86 | 105 | } |
okini3939 | 0:c6f40de7ab86 | 106 | case FREEZE_DTC: // Locks in Diagnostic trouble Codes |
okini3939 | 0:c6f40de7ab86 | 107 | break; |
okini3939 | 0:c6f40de7ab86 | 108 | case FUEL_SYS_STATUS: // bit encoded |
okini3939 | 0:c6f40de7ab86 | 109 | //This tells us the warmup status of the engine. Only 1 bit should be set |
okini3939 | 0:c6f40de7ab86 | 110 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 111 | if (((int) *engine_data) & 0x01) { // Open loop - Engine warmup |
okini3939 | 0:c6f40de7ab86 | 112 | //sprintf(buffer,"Open Loop - Warmup"); |
okini3939 | 0:c6f40de7ab86 | 113 | } |
okini3939 | 0:c6f40de7ab86 | 114 | if (((int) *engine_data) & 0x02) { // Closed Loop - O2 Sensor feedback |
okini3939 | 0:c6f40de7ab86 | 115 | //sprintf(buffer,"Closed Loop - Normal"); |
okini3939 | 0:c6f40de7ab86 | 116 | } |
okini3939 | 0:c6f40de7ab86 | 117 | if (((int) *engine_data) & 0x04) { // Open loop, |
okini3939 | 0:c6f40de7ab86 | 118 | //sprintf(buffer,"Open Loop-Load/Decel"); |
okini3939 | 0:c6f40de7ab86 | 119 | } |
okini3939 | 0:c6f40de7ab86 | 120 | if (((int) *engine_data) & 0x08) { // Open loop - system failure |
okini3939 | 0:c6f40de7ab86 | 121 | //sprintf(buffer,"Open Loop - FAILURE"); |
okini3939 | 0:c6f40de7ab86 | 122 | } |
okini3939 | 0:c6f40de7ab86 | 123 | if (((int) *engine_data) & 0x10) { // Closed Loop - O2 Sensor feedback failure |
okini3939 | 0:c6f40de7ab86 | 124 | //sprintf(buffer,"Closed Loop - O2Fail"); |
okini3939 | 0:c6f40de7ab86 | 125 | } |
okini3939 | 0:c6f40de7ab86 | 126 | if ((((int) *engine_data) & 0x20) | (((int) *engine_data) & 0x40) | (((int) *engine_data) & 0x80)) { //These shouldnt be on, assume Proprietary status |
okini3939 | 0:c6f40de7ab86 | 127 | //sprintf(buffer,"Unsupported Status"); |
okini3939 | 0:c6f40de7ab86 | 128 | } |
okini3939 | 0:c6f40de7ab86 | 129 | break; |
okini3939 | 0:c6f40de7ab86 | 130 | case ENGINE_LOAD: // A*100/255 |
okini3939 | 0:c6f40de7ab86 | 131 | *engine_data = (can_MsgRx.data[3]*100)/255; |
okini3939 | 0:c6f40de7ab86 | 132 | //sprintf(buffer,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 133 | break; |
okini3939 | 0:c6f40de7ab86 | 134 | case ENGINE_COOLANT_TEMP: // A-40 [degree C] |
okini3939 | 0:c6f40de7ab86 | 135 | *engine_data = can_MsgRx.data[3] - 40; |
okini3939 | 0:c6f40de7ab86 | 136 | //sprintf(buffer,"%d degC ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 137 | break; |
okini3939 | 0:c6f40de7ab86 | 138 | case ST_FUEL_TRIM_1: // (A-128)*100/128 |
okini3939 | 0:c6f40de7ab86 | 139 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 140 | //sprintf(buffer,"%d %% ", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 141 | break; |
okini3939 | 0:c6f40de7ab86 | 142 | case LT_FUEL_TRIM_1: // (A-128)*100/128 |
okini3939 | 0:c6f40de7ab86 | 143 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 144 | //sprintf(buffer,"%d %% ", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 145 | break; |
okini3939 | 0:c6f40de7ab86 | 146 | case ST_FUEL_TRIM_2: // (A-128)*100/128 |
okini3939 | 0:c6f40de7ab86 | 147 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 148 | //sprintf(buffer,"%d %% ", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 149 | break; |
okini3939 | 0:c6f40de7ab86 | 150 | case LT_FUEL_TRIM_2: // (A-128)*100/128 |
okini3939 | 0:c6f40de7ab86 | 151 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 152 | //sprintf(buffer,"%d %% ", (int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 153 | break; |
okini3939 | 0:c6f40de7ab86 | 154 | case FUEL_PRESSURE: // A*3 |
okini3939 | 0:c6f40de7ab86 | 155 | *engine_data = (can_MsgRx.data[3]*3); |
okini3939 | 0:c6f40de7ab86 | 156 | //sprintf(buffer,"%d kPa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 157 | break; |
okini3939 | 0:c6f40de7ab86 | 158 | case INTAKE_PRESSURE: // A |
okini3939 | 0:c6f40de7ab86 | 159 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 160 | //sprintf(buffer,"%d kPa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 161 | break; |
okini3939 | 0:c6f40de7ab86 | 162 | case ENGINE_RPM: // ((A*256)+B)/4 [RPM] |
okini3939 | 0:c6f40de7ab86 | 163 | *engine_data = ((can_MsgRx.data[3]*256) + can_MsgRx.data[4])/4; |
okini3939 | 0:c6f40de7ab86 | 164 | //sprintf(buffer,"%d rpm ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 165 | break; |
okini3939 | 0:c6f40de7ab86 | 166 | case VEHICLE_SPEED: // A [km] |
okini3939 | 0:c6f40de7ab86 | 167 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 168 | //sprintf(buffer,"%d km ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 169 | break; |
okini3939 | 0:c6f40de7ab86 | 170 | case TIMING_ADVANCE: // A/2 - 64 |
okini3939 | 0:c6f40de7ab86 | 171 | *engine_data = (can_MsgRx.data[3]/2) - 64; |
okini3939 | 0:c6f40de7ab86 | 172 | //sprintf(buffer,"%d Deg",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 173 | break; |
okini3939 | 0:c6f40de7ab86 | 174 | case INTAKE_TEMP: // A - 40 |
okini3939 | 0:c6f40de7ab86 | 175 | *engine_data = (can_MsgRx.data[3] - 40); |
okini3939 | 0:c6f40de7ab86 | 176 | //sprintf(buffer,"%d DegC",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 177 | break; |
okini3939 | 0:c6f40de7ab86 | 178 | case MAF_SENSOR: // ((256*A)+B) / 100 [g/s] |
okini3939 | 0:c6f40de7ab86 | 179 | *engine_data = ((can_MsgRx.data[3]*256) + can_MsgRx.data[4])/100; |
okini3939 | 0:c6f40de7ab86 | 180 | //sprintf(buffer,"%d g/s",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 181 | break; |
okini3939 | 0:c6f40de7ab86 | 182 | case THROTTLE: // A*100/255 |
okini3939 | 0:c6f40de7ab86 | 183 | *engine_data = (can_MsgRx.data[3]*100)/255; |
okini3939 | 0:c6f40de7ab86 | 184 | //sprintf(buffer,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 185 | break; |
okini3939 | 0:c6f40de7ab86 | 186 | case COMMANDED_SEC_AIR: // bit encoded |
okini3939 | 0:c6f40de7ab86 | 187 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 188 | if (((int) *engine_data) & 0x01) { //Upstream of Catalytic Converter |
okini3939 | 0:c6f40de7ab86 | 189 | //sprintf(buffer,"Upstream of Cat."); |
okini3939 | 0:c6f40de7ab86 | 190 | } |
okini3939 | 0:c6f40de7ab86 | 191 | if (((int) *engine_data) & 0x02) { //Downstream of Catalytic Converter |
okini3939 | 0:c6f40de7ab86 | 192 | //sprintf(buffer,"Downstream of Cat."); |
okini3939 | 0:c6f40de7ab86 | 193 | } |
okini3939 | 0:c6f40de7ab86 | 194 | if (((int) *engine_data) & 0x04) { //From outside atmosphere or off |
okini3939 | 0:c6f40de7ab86 | 195 | //sprintf(buffer,"Off"); |
okini3939 | 0:c6f40de7ab86 | 196 | } |
okini3939 | 0:c6f40de7ab86 | 197 | break; |
okini3939 | 0:c6f40de7ab86 | 198 | case O2_SENS_PRES: { // A [A0..A3] == Bank 1, [A4..A7] == Bank 2 |
okini3939 | 0:c6f40de7ab86 | 199 | *engine_data = (can_MsgRx.data[3]); //Check # of O2 sensors present by masking individual bits and counting |
okini3939 | 0:c6f40de7ab86 | 200 | int o2pres = 0; |
okini3939 | 0:c6f40de7ab86 | 201 | if (((int) *engine_data) & 0x01) { // Bank 1 Sensor 1 |
okini3939 | 0:c6f40de7ab86 | 202 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 203 | } |
okini3939 | 0:c6f40de7ab86 | 204 | if (((int) *engine_data) & 0x02) { // Bank 1 Sensor 2 |
okini3939 | 0:c6f40de7ab86 | 205 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 206 | } |
okini3939 | 0:c6f40de7ab86 | 207 | if (((int) *engine_data) & 0x04) { // Bank 1 Sensor 3 |
okini3939 | 0:c6f40de7ab86 | 208 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 209 | } |
okini3939 | 0:c6f40de7ab86 | 210 | if (((int) *engine_data) & 0x08) { // Bank 1 Sensor 4 |
okini3939 | 0:c6f40de7ab86 | 211 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 212 | } |
okini3939 | 0:c6f40de7ab86 | 213 | if (((int) *engine_data) & 0x10) { // Bank 2 Sensor 1 |
okini3939 | 0:c6f40de7ab86 | 214 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 215 | } |
okini3939 | 0:c6f40de7ab86 | 216 | if (((int) *engine_data) & 0x20) { // Bank 2 Sensor 2 |
okini3939 | 0:c6f40de7ab86 | 217 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 218 | } |
okini3939 | 0:c6f40de7ab86 | 219 | if (((int) *engine_data) & 0x40) { // Bank 2 Sensor 3 |
okini3939 | 0:c6f40de7ab86 | 220 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 221 | } |
okini3939 | 0:c6f40de7ab86 | 222 | if (((int) *engine_data) & 0x80) { // Bank 2 Sensor 4 |
okini3939 | 0:c6f40de7ab86 | 223 | o2pres++; |
okini3939 | 0:c6f40de7ab86 | 224 | } |
okini3939 | 0:c6f40de7ab86 | 225 | //sprintf(buffer,"%d Present",(int) o2pres); |
okini3939 | 0:c6f40de7ab86 | 226 | break; |
okini3939 | 0:c6f40de7ab86 | 227 | } |
okini3939 | 0:c6f40de7ab86 | 228 | case O2_B1S1_VOLTAGE: // A/200, (B-128) * 100/128 |
okini3939 | 0:c6f40de7ab86 | 229 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 230 | //sprintf(buffer,"%d V ",(int) *engine_data); //Raw O2 Voltage |
okini3939 | 0:c6f40de7ab86 | 231 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 232 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 233 | } else { |
okini3939 | 0:c6f40de7ab86 | 234 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 235 | //sprintf(buffer2,"%d %% ",(int) *engine_data); //Calculated lean/rich |
okini3939 | 0:c6f40de7ab86 | 236 | } |
okini3939 | 0:c6f40de7ab86 | 237 | break; |
okini3939 | 0:c6f40de7ab86 | 238 | case O2_B1S2_VOLTAGE: // |
okini3939 | 0:c6f40de7ab86 | 239 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 240 | //sprintf(buffer,"%d V ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 241 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 242 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 243 | } else { |
okini3939 | 0:c6f40de7ab86 | 244 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 245 | //sprintf(buffer2,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 246 | } |
okini3939 | 0:c6f40de7ab86 | 247 | break; |
okini3939 | 0:c6f40de7ab86 | 248 | case O2_B1S3_VOLTAGE: // |
okini3939 | 0:c6f40de7ab86 | 249 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 250 | //sprintf(buffer,"%d V ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 251 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 252 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 253 | } else { |
okini3939 | 0:c6f40de7ab86 | 254 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 255 | //sprintf(buffer2,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 256 | } |
okini3939 | 0:c6f40de7ab86 | 257 | break; |
okini3939 | 0:c6f40de7ab86 | 258 | case O2_B1S4_VOLTAGE: // |
okini3939 | 0:c6f40de7ab86 | 259 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 260 | //sprintf(buffer,"%d V ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 261 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 262 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 263 | } else { |
okini3939 | 0:c6f40de7ab86 | 264 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 265 | //sprintf(buffer2,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 266 | } |
okini3939 | 0:c6f40de7ab86 | 267 | break; |
okini3939 | 0:c6f40de7ab86 | 268 | case O2_B2S1_VOLTAGE: // |
okini3939 | 0:c6f40de7ab86 | 269 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 270 | //sprintf(buffer,"%d V ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 271 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 272 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 273 | } else { |
okini3939 | 0:c6f40de7ab86 | 274 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 275 | //sprintf(buffer2,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 276 | } |
okini3939 | 0:c6f40de7ab86 | 277 | break; |
okini3939 | 0:c6f40de7ab86 | 278 | case O2_B2S2_VOLTAGE: // |
okini3939 | 0:c6f40de7ab86 | 279 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 280 | //sprintf(buffer,"%d V ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 281 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 282 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 283 | } else { |
okini3939 | 0:c6f40de7ab86 | 284 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 285 | //sprintf(buffer2,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 286 | } |
okini3939 | 0:c6f40de7ab86 | 287 | break; |
okini3939 | 0:c6f40de7ab86 | 288 | case O2_B2S3_VOLTAGE: { // |
okini3939 | 0:c6f40de7ab86 | 289 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 290 | //sprintf(buffer,"%d V ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 291 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 292 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 293 | } else { |
okini3939 | 0:c6f40de7ab86 | 294 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 295 | //sprintf(buffer2,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 296 | } |
okini3939 | 0:c6f40de7ab86 | 297 | break; |
okini3939 | 0:c6f40de7ab86 | 298 | } |
okini3939 | 0:c6f40de7ab86 | 299 | case O2_B2S4_VOLTAGE: { // |
okini3939 | 0:c6f40de7ab86 | 300 | *engine_data = (can_MsgRx.data[3]/200); |
okini3939 | 0:c6f40de7ab86 | 301 | //sprintf(buffer,"%d V ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 302 | if (can_MsgRx.data[4] & 0xFF) { |
okini3939 | 0:c6f40de7ab86 | 303 | //sprintf(buffer,"Not Present"); |
okini3939 | 0:c6f40de7ab86 | 304 | } else { |
okini3939 | 0:c6f40de7ab86 | 305 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 306 | //sprintf(buffer2,"%d %% ",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 307 | } |
okini3939 | 0:c6f40de7ab86 | 308 | break; |
okini3939 | 0:c6f40de7ab86 | 309 | } |
okini3939 | 0:c6f40de7ab86 | 310 | case OBDII_STANDARDS: { //bit encoded NOT DONE |
okini3939 | 0:c6f40de7ab86 | 311 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 312 | if (((int) *engine_data) & 0x0D) { //JOBD, EOBD, and OBD II |
okini3939 | 0:c6f40de7ab86 | 313 | //sprintf(buffer,"JOBD,EOBD,OBDII"); |
okini3939 | 0:c6f40de7ab86 | 314 | } |
okini3939 | 0:c6f40de7ab86 | 315 | if (((int) *engine_data) & 0x0C) { //JOBD and EOBD |
okini3939 | 0:c6f40de7ab86 | 316 | //sprintf(buffer,"JOBD,EOBD"); |
okini3939 | 0:c6f40de7ab86 | 317 | } |
okini3939 | 0:c6f40de7ab86 | 318 | if (((int) *engine_data) & 0x0B) { //JOBD and OBDII |
okini3939 | 0:c6f40de7ab86 | 319 | //sprintf(buffer,"JOBD,OBDII"); |
okini3939 | 0:c6f40de7ab86 | 320 | } |
okini3939 | 0:c6f40de7ab86 | 321 | if (((int) *engine_data) & 0x0A) { //JOBD |
okini3939 | 0:c6f40de7ab86 | 322 | //sprintf(buffer,"JOBD"); |
okini3939 | 0:c6f40de7ab86 | 323 | } |
okini3939 | 0:c6f40de7ab86 | 324 | if (((int) *engine_data) & 0x09) { //EOBD, OBD, and OBD II |
okini3939 | 0:c6f40de7ab86 | 325 | //sprintf(buffer,"EOBD,OBDI,OBDII"); |
okini3939 | 0:c6f40de7ab86 | 326 | } |
okini3939 | 0:c6f40de7ab86 | 327 | if (((int) *engine_data) & 0x08) { //EOBD and OBD |
okini3939 | 0:c6f40de7ab86 | 328 | //sprintf(buffer,"EOBD,OBDI"); |
okini3939 | 0:c6f40de7ab86 | 329 | } |
okini3939 | 0:c6f40de7ab86 | 330 | if (((int) *engine_data) & 0x07) { //EOBD and OBDII |
okini3939 | 0:c6f40de7ab86 | 331 | //sprintf(buffer,"EOBD,OBDII"); |
okini3939 | 0:c6f40de7ab86 | 332 | } |
okini3939 | 0:c6f40de7ab86 | 333 | if (((int) *engine_data) & 0x06) { //EOBD |
okini3939 | 0:c6f40de7ab86 | 334 | //sprintf(buffer,"EOBD"); |
okini3939 | 0:c6f40de7ab86 | 335 | } |
okini3939 | 0:c6f40de7ab86 | 336 | if (((int) *engine_data) & 0x05) { //Not meant to comply with any OBD standard |
okini3939 | 0:c6f40de7ab86 | 337 | //sprintf(buffer,"No Compliance"); |
okini3939 | 0:c6f40de7ab86 | 338 | } |
okini3939 | 0:c6f40de7ab86 | 339 | if (((int) *engine_data) & 0x04) { //OBDI |
okini3939 | 0:c6f40de7ab86 | 340 | //sprintf(buffer,"OBDI"); |
okini3939 | 0:c6f40de7ab86 | 341 | } |
okini3939 | 0:c6f40de7ab86 | 342 | if (((int) *engine_data) & 0x03) { //OBD and OBDII |
okini3939 | 0:c6f40de7ab86 | 343 | //sprintf(buffer,"OBDI,OBDII"); |
okini3939 | 0:c6f40de7ab86 | 344 | } |
okini3939 | 0:c6f40de7ab86 | 345 | if (((int) *engine_data) & 0x02) { //OBD and defined by the EPA |
okini3939 | 0:c6f40de7ab86 | 346 | //sprintf(buffer,"OBD"); |
okini3939 | 0:c6f40de7ab86 | 347 | } |
okini3939 | 0:c6f40de7ab86 | 348 | if (((int) *engine_data) & 0x01) { //OBD-II as defined by CARB |
okini3939 | 0:c6f40de7ab86 | 349 | //sprintf(buffer,"OBDII"); |
okini3939 | 0:c6f40de7ab86 | 350 | } |
okini3939 | 0:c6f40de7ab86 | 351 | //sprintf(buffer,"ERROR"); |
okini3939 | 0:c6f40de7ab86 | 352 | break; |
okini3939 | 0:c6f40de7ab86 | 353 | } |
okini3939 | 0:c6f40de7ab86 | 354 | case O2_SENS_PRES_ALT: { //******************* |
okini3939 | 0:c6f40de7ab86 | 355 | *engine_data = (can_MsgRx.data[3]); //Check # of O2 sensors present by masking individual bits and counting |
okini3939 | 0:c6f40de7ab86 | 356 | int o2presalt = 0; |
okini3939 | 0:c6f40de7ab86 | 357 | if (((int) *engine_data) & 0x01) { // Bank 1 Sensor 1 |
okini3939 | 0:c6f40de7ab86 | 358 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 359 | } |
okini3939 | 0:c6f40de7ab86 | 360 | if (((int) *engine_data) & 0x02) { // Bank 1 Sensor 2 |
okini3939 | 0:c6f40de7ab86 | 361 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 362 | } |
okini3939 | 0:c6f40de7ab86 | 363 | if (((int) *engine_data) & 0x04) { // Bank 2 Sensor 1 |
okini3939 | 0:c6f40de7ab86 | 364 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 365 | } |
okini3939 | 0:c6f40de7ab86 | 366 | if (((int) *engine_data) & 0x08) { // Bank 2 Sensor 2 |
okini3939 | 0:c6f40de7ab86 | 367 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 368 | } |
okini3939 | 0:c6f40de7ab86 | 369 | if (((int) *engine_data) & 0x10) { // Bank 3 Sensor 1 |
okini3939 | 0:c6f40de7ab86 | 370 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 371 | } |
okini3939 | 0:c6f40de7ab86 | 372 | if (((int) *engine_data) & 0x20) { // Bank 3 Sensor 2 |
okini3939 | 0:c6f40de7ab86 | 373 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 374 | } |
okini3939 | 0:c6f40de7ab86 | 375 | if (((int) *engine_data) & 0x40) { // Bank 4 Sensor 1 |
okini3939 | 0:c6f40de7ab86 | 376 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 377 | } |
okini3939 | 0:c6f40de7ab86 | 378 | if (((int) *engine_data) & 0x80) { // Bank 4 Sensor 2 |
okini3939 | 0:c6f40de7ab86 | 379 | o2presalt++; |
okini3939 | 0:c6f40de7ab86 | 380 | } |
okini3939 | 0:c6f40de7ab86 | 381 | //sprintf(buffer,"%d Present",(int) o2presalt); |
okini3939 | 0:c6f40de7ab86 | 382 | break; |
okini3939 | 0:c6f40de7ab86 | 383 | } |
okini3939 | 0:c6f40de7ab86 | 384 | case AUX_IN_STATUS: { // A (A0 == PTO Active) |
okini3939 | 0:c6f40de7ab86 | 385 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 386 | if (((int) *engine_data) & 0x01) { |
okini3939 | 0:c6f40de7ab86 | 387 | //sprintf(buffer,"PTO Active"); |
okini3939 | 0:c6f40de7ab86 | 388 | } else { |
okini3939 | 0:c6f40de7ab86 | 389 | //sprintf(buffer,"PTO Inactive"); |
okini3939 | 0:c6f40de7ab86 | 390 | } |
okini3939 | 0:c6f40de7ab86 | 391 | break; |
okini3939 | 0:c6f40de7ab86 | 392 | } |
okini3939 | 0:c6f40de7ab86 | 393 | case ENGINE_RUNTIME: // (A*256)+B |
okini3939 | 0:c6f40de7ab86 | 394 | *engine_data = (can_MsgRx.data[3]*256)+(can_MsgRx.data[4]); |
okini3939 | 0:c6f40de7ab86 | 395 | //sprintf(buffer,"%d Sec",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 396 | break; |
okini3939 | 0:c6f40de7ab86 | 397 | case PID_21_40: // bit encoded NOT DONE |
okini3939 | 0:c6f40de7ab86 | 398 | PID2140 = ((can_MsgRx.data[3] << 24) | (can_MsgRx.data[4] << 16) | (can_MsgRx.data[5] << 8) | (can_MsgRx.data[6])); |
okini3939 | 0:c6f40de7ab86 | 399 | break; |
okini3939 | 0:c6f40de7ab86 | 400 | case DIST_TRAVELED_MIL: // (A*256) + B |
okini3939 | 0:c6f40de7ab86 | 401 | *engine_data = ((can_MsgRx.data[3] * 256) + can_MsgRx.data[4]); |
okini3939 | 0:c6f40de7ab86 | 402 | //sprintf(buffer,"%d km",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 403 | break; |
okini3939 | 0:c6f40de7ab86 | 404 | case FUEL_RAIL_PRESSURE: // ((A*256)+B)*0.079 |
okini3939 | 0:c6f40de7ab86 | 405 | *engine_data = ((can_MsgRx.data[3] * 256)+can_MsgRx.data[4])*0.079; |
okini3939 | 0:c6f40de7ab86 | 406 | //sprintf(buffer,"%d kPa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 407 | break; |
okini3939 | 0:c6f40de7ab86 | 408 | case FUEL_RAIL_PRES_ALT: // ((A*256)+B)*0.079 |
okini3939 | 0:c6f40de7ab86 | 409 | *engine_data = ((can_MsgRx.data[3] * 256) + can_MsgRx.data[4])*10; |
okini3939 | 0:c6f40de7ab86 | 410 | //sprintf(buffer,"%d kPa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 411 | break; |
okini3939 | 0:c6f40de7ab86 | 412 | case O2S1_WR_LAMBDA_V: // ((A*256)+B)*2/65535 [ratio], ((C*256)+D)*8/65535 [V] |
okini3939 | 0:c6f40de7ab86 | 413 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 414 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 415 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 416 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 417 | break; |
okini3939 | 0:c6f40de7ab86 | 418 | case O2S2_WR_LAMBDA_V: // |
okini3939 | 0:c6f40de7ab86 | 419 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 420 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 421 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 422 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 423 | break; |
okini3939 | 0:c6f40de7ab86 | 424 | case O2S3_WR_LAMBDA_V: // |
okini3939 | 0:c6f40de7ab86 | 425 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 426 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 427 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 428 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 429 | break; |
okini3939 | 0:c6f40de7ab86 | 430 | case O2S4_WR_LAMBDA_V: // |
okini3939 | 0:c6f40de7ab86 | 431 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 432 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 433 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 434 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 435 | break; |
okini3939 | 0:c6f40de7ab86 | 436 | case O2S5_WR_LAMBDA_V: // |
okini3939 | 0:c6f40de7ab86 | 437 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 438 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 439 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 440 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 441 | break; |
okini3939 | 0:c6f40de7ab86 | 442 | case O2S6_WR_LAMBDA_V: // |
okini3939 | 0:c6f40de7ab86 | 443 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 444 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 445 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 446 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 447 | break; |
okini3939 | 0:c6f40de7ab86 | 448 | case O2S7_WR_LAMBDA_V: // |
okini3939 | 0:c6f40de7ab86 | 449 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 450 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 451 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 452 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 453 | break; |
okini3939 | 0:c6f40de7ab86 | 454 | case O2S8_WR_LAMBDA_V: // |
okini3939 | 0:c6f40de7ab86 | 455 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*2)/65535); |
okini3939 | 0:c6f40de7ab86 | 456 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 457 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])*8)/65535); |
okini3939 | 0:c6f40de7ab86 | 458 | //sprintf(buffer2,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 459 | break; |
okini3939 | 0:c6f40de7ab86 | 460 | case COMMANDED_EGR: // 100*A/255 |
okini3939 | 0:c6f40de7ab86 | 461 | *engine_data = (can_MsgRx.data[3]*100/255); |
okini3939 | 0:c6f40de7ab86 | 462 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 463 | break; |
okini3939 | 0:c6f40de7ab86 | 464 | case EGR_ERROR: // (A-128)*100/128 |
okini3939 | 0:c6f40de7ab86 | 465 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 466 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 467 | break; |
okini3939 | 0:c6f40de7ab86 | 468 | case COMMANDED_EVAP_P: // 100*A/255 [%] |
okini3939 | 0:c6f40de7ab86 | 469 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 470 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 471 | break; |
okini3939 | 0:c6f40de7ab86 | 472 | case FUEL_LEVEL: //100*A/255 |
okini3939 | 0:c6f40de7ab86 | 473 | *engine_data = ((100*can_MsgRx.data[3])/255); |
okini3939 | 0:c6f40de7ab86 | 474 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 475 | break; |
okini3939 | 0:c6f40de7ab86 | 476 | case WARMUPS_SINCE_CLR: //A |
okini3939 | 0:c6f40de7ab86 | 477 | *engine_data = (can_MsgRx.data[3]); |
okini3939 | 0:c6f40de7ab86 | 478 | //sprintf(buffer,"%d Warmups",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 479 | break; |
okini3939 | 0:c6f40de7ab86 | 480 | case DIST_SINCE_CLR: //A*256+B [km] |
okini3939 | 0:c6f40de7ab86 | 481 | *engine_data = ((can_MsgRx.data[3]*256)+can_MsgRx.data[4]); |
okini3939 | 0:c6f40de7ab86 | 482 | //sprintf(buffer,"%d km",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 483 | break; |
okini3939 | 0:c6f40de7ab86 | 484 | case EVAP_PRESSURE: //((A*256)+B)/4 |
okini3939 | 0:c6f40de7ab86 | 485 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/4); |
okini3939 | 0:c6f40de7ab86 | 486 | //sprintf(buffer,"%d Pa",(int) *engine_data); //Yes it's in pascals |
okini3939 | 0:c6f40de7ab86 | 487 | break; |
okini3939 | 0:c6f40de7ab86 | 488 | case BAROMETRIC_PRESSURE: //A |
okini3939 | 0:c6f40de7ab86 | 489 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 490 | //sprintf(buffer,"%d kPa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 491 | break; |
okini3939 | 0:c6f40de7ab86 | 492 | case O2S1_WR_LAMBDA_I: //((A*256)+B)/32,768 [Ratio], ((C*256)+D)/256 - 128 [mA] |
okini3939 | 0:c6f40de7ab86 | 493 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 494 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 495 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 496 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 497 | break; |
okini3939 | 0:c6f40de7ab86 | 498 | case O2S2_WR_LAMBDA_I: |
okini3939 | 0:c6f40de7ab86 | 499 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 500 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 501 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 502 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 503 | break; |
okini3939 | 0:c6f40de7ab86 | 504 | case O2S3_WR_LAMBDA_I: |
okini3939 | 0:c6f40de7ab86 | 505 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 506 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 507 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 508 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 509 | break; |
okini3939 | 0:c6f40de7ab86 | 510 | case O2S4_WR_LAMBDA_I: |
okini3939 | 0:c6f40de7ab86 | 511 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 512 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 513 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 514 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 515 | break; |
okini3939 | 0:c6f40de7ab86 | 516 | case O2S5_WR_LAMBDA_I: |
okini3939 | 0:c6f40de7ab86 | 517 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 518 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 519 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 520 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 521 | break; |
okini3939 | 0:c6f40de7ab86 | 522 | case O2S6_WR_LAMBDA_I: |
okini3939 | 0:c6f40de7ab86 | 523 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 524 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 525 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 526 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 527 | break; |
okini3939 | 0:c6f40de7ab86 | 528 | case O2S7_WR_LAMBDA_I: |
okini3939 | 0:c6f40de7ab86 | 529 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 530 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 531 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 532 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 533 | break; |
okini3939 | 0:c6f40de7ab86 | 534 | case O2S8_WR_LAMBDA_I: |
okini3939 | 0:c6f40de7ab86 | 535 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 536 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 537 | *engine_data = ((((can_MsgRx.data[5]*256)+can_MsgRx.data[6])/256)-128); |
okini3939 | 0:c6f40de7ab86 | 538 | //sprintf(buffer2,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 539 | break; |
okini3939 | 0:c6f40de7ab86 | 540 | case CAT_TEMP_B1S1: //((A*256)+B)/10 - 40 [DegC] |
okini3939 | 0:c6f40de7ab86 | 541 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/10)-40); |
okini3939 | 0:c6f40de7ab86 | 542 | //sprintf(buffer,"%d DegC",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 543 | break; |
okini3939 | 0:c6f40de7ab86 | 544 | case CAT_TEMP_B1S2: |
okini3939 | 0:c6f40de7ab86 | 545 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/10)-40); |
okini3939 | 0:c6f40de7ab86 | 546 | //sprintf(buffer,"%d DegC",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 547 | break; |
okini3939 | 0:c6f40de7ab86 | 548 | case CAT_TEMP_B2S1: |
okini3939 | 0:c6f40de7ab86 | 549 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/10)-40); |
okini3939 | 0:c6f40de7ab86 | 550 | //sprintf(buffer,"%d DegC",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 551 | break; |
okini3939 | 0:c6f40de7ab86 | 552 | case CAT_TEMP_B2S2: |
okini3939 | 0:c6f40de7ab86 | 553 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/10)-40); |
okini3939 | 0:c6f40de7ab86 | 554 | //sprintf(buffer,"%d DegC",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 555 | break; |
okini3939 | 0:c6f40de7ab86 | 556 | case PID_41_60: //bit encoded NOT DONE |
okini3939 | 0:c6f40de7ab86 | 557 | PID4160 = ((can_MsgRx.data[3] << 24) | (can_MsgRx.data[4] << 16) | (can_MsgRx.data[5] << 8) | (can_MsgRx.data[6])); |
okini3939 | 0:c6f40de7ab86 | 558 | break; |
okini3939 | 0:c6f40de7ab86 | 559 | case MONITOR_STATUS: // bit encoded |
okini3939 | 0:c6f40de7ab86 | 560 | //LUT: (Uses multiple bytes) A7..0 always 0 |
okini3939 | 0:c6f40de7ab86 | 561 | // Test enabled Test Incomplete |
okini3939 | 0:c6f40de7ab86 | 562 | // Misfire B0 B4 |
okini3939 | 0:c6f40de7ab86 | 563 | // Fuel System B1 B5 |
okini3939 | 0:c6f40de7ab86 | 564 | // Components B2 B6 |
okini3939 | 0:c6f40de7ab86 | 565 | // Reserved B3 B7 |
okini3939 | 0:c6f40de7ab86 | 566 | // Catalyst C0 D0 |
okini3939 | 0:c6f40de7ab86 | 567 | // Heated Catalyst C1 D1 |
okini3939 | 0:c6f40de7ab86 | 568 | // Evap System C2 D2 |
okini3939 | 0:c6f40de7ab86 | 569 | // Sec. Ait system C3 D3 |
okini3939 | 0:c6f40de7ab86 | 570 | // A/C Refrigerant C4 D4 |
okini3939 | 0:c6f40de7ab86 | 571 | // O2 Sensor C5 D5 |
okini3939 | 0:c6f40de7ab86 | 572 | // O2 Sensor Heater C6 D6 |
okini3939 | 0:c6f40de7ab86 | 573 | // EGR System C7 D7 |
okini3939 | 0:c6f40de7ab86 | 574 | break; |
okini3939 | 0:c6f40de7ab86 | 575 | case ECU_VOLTAGE: //((A*256)+B)/1000 [V] |
okini3939 | 0:c6f40de7ab86 | 576 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/1000); |
okini3939 | 0:c6f40de7ab86 | 577 | //sprintf(buffer,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 578 | break; |
okini3939 | 0:c6f40de7ab86 | 579 | case ABSOLUTE_LOAD: //((A*256)+B)*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 580 | *engine_data = ((((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*100)/255); |
okini3939 | 0:c6f40de7ab86 | 581 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 582 | break; |
okini3939 | 0:c6f40de7ab86 | 583 | case COMMANDED_EQUIV_R: //((A*256)+B)/32768 [Ratio] |
okini3939 | 0:c6f40de7ab86 | 584 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])/32768); |
okini3939 | 0:c6f40de7ab86 | 585 | //sprintf(buffer,"Ratio %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 586 | break; |
okini3939 | 0:c6f40de7ab86 | 587 | case REL_THROTTLE_POS: // A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 588 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 589 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 590 | break; |
okini3939 | 0:c6f40de7ab86 | 591 | case AMB_AIR_TEMP: // A-40 [DegC] |
okini3939 | 0:c6f40de7ab86 | 592 | *engine_data = (can_MsgRx.data[3]-40); |
okini3939 | 0:c6f40de7ab86 | 593 | //sprintf(buffer,"%d DegC",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 594 | break; |
okini3939 | 0:c6f40de7ab86 | 595 | case ABS_THROTTLE_POS_B: // A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 596 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 597 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 598 | break; |
okini3939 | 0:c6f40de7ab86 | 599 | case ABS_THROTTLE_POS_C: // A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 600 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 601 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 602 | break; |
okini3939 | 0:c6f40de7ab86 | 603 | case ACCEL_POS_D: // A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 604 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 605 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 606 | break; |
okini3939 | 0:c6f40de7ab86 | 607 | case ACCEL_POS_E: // A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 608 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 609 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 610 | break; |
okini3939 | 0:c6f40de7ab86 | 611 | case ACCEL_POS_F: // A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 612 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 613 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 614 | break; |
okini3939 | 0:c6f40de7ab86 | 615 | case COMMANDED_THROTTLE: //A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 616 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 617 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 618 | break; |
okini3939 | 0:c6f40de7ab86 | 619 | case TIME_RUN_WITH_MIL: //(A*256)+B [minutes] |
okini3939 | 0:c6f40de7ab86 | 620 | *engine_data = ((can_MsgRx.data[3]*256)/(can_MsgRx.data[4])); |
okini3939 | 0:c6f40de7ab86 | 621 | //sprintf(buffer,"%d Mins",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 622 | break; |
okini3939 | 0:c6f40de7ab86 | 623 | case TIME_SINCE_CLR: //(A*256)+B [minutes] |
okini3939 | 0:c6f40de7ab86 | 624 | *engine_data = ((can_MsgRx.data[3]*256)/(can_MsgRx.data[4])); |
okini3939 | 0:c6f40de7ab86 | 625 | //sprintf(buffer,"%d Mins",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 626 | break; |
okini3939 | 0:c6f40de7ab86 | 627 | case MAX_R_O2_VI_PRES: //A,B,C,D*10 [Ratio,V,mA,kPa] |
okini3939 | 0:c6f40de7ab86 | 628 | *engine_data = can_MsgRx.data[3]; |
okini3939 | 0:c6f40de7ab86 | 629 | //sprintf(buffer,"Ratio: %d",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 630 | *engine_data = can_MsgRx.data[4]; |
okini3939 | 0:c6f40de7ab86 | 631 | //sprintf(buffer,"%d V",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 632 | *engine_data = can_MsgRx.data[5]; |
okini3939 | 0:c6f40de7ab86 | 633 | //sprintf(buffer,"%d mA",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 634 | *engine_data = (can_MsgRx.data[6]*10); |
okini3939 | 0:c6f40de7ab86 | 635 | //sprintf(buffer,"%d kPa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 636 | break; |
okini3939 | 0:c6f40de7ab86 | 637 | case MAX_AIRFLOW_MAF: //A*10 [g/s] |
okini3939 | 0:c6f40de7ab86 | 638 | *engine_data = (can_MsgRx.data[3]*10); |
okini3939 | 0:c6f40de7ab86 | 639 | //sprintf(buffer,"%d g/s",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 640 | break; |
okini3939 | 0:c6f40de7ab86 | 641 | case FUEL_TYPE: // USE LUT NOT DONE |
okini3939 | 0:c6f40de7ab86 | 642 | break; |
okini3939 | 0:c6f40de7ab86 | 643 | case ETHANOL_PERCENT: //A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 644 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 645 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 646 | break; |
okini3939 | 0:c6f40de7ab86 | 647 | case ABS_EVAP_SYS_PRES: //1/200 per bit [kPa] ----NOT DONE---- |
okini3939 | 0:c6f40de7ab86 | 648 | break; |
okini3939 | 0:c6f40de7ab86 | 649 | case EVAP_SYS_PRES: // (A*256)+B - 32768 [Pa] |
okini3939 | 0:c6f40de7ab86 | 650 | *engine_data = ((can_MsgRx.data[3]*256)+can_MsgRx.data[4]-32768); |
okini3939 | 0:c6f40de7ab86 | 651 | //sprintf(buffer,"%d Pa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 652 | break; |
okini3939 | 0:c6f40de7ab86 | 653 | case ST_O2_TRIM_B1B3: // ((A-128)*100/128 (B-128)*100/128 [%] |
okini3939 | 0:c6f40de7ab86 | 654 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 655 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 656 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 657 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 658 | break; |
okini3939 | 0:c6f40de7ab86 | 659 | case LT_O2_TRIM_B1B3: |
okini3939 | 0:c6f40de7ab86 | 660 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 661 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 662 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 663 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 664 | break; |
okini3939 | 0:c6f40de7ab86 | 665 | case ST_02_TRIM_B2B4: |
okini3939 | 0:c6f40de7ab86 | 666 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 667 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 668 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 669 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 670 | break; |
okini3939 | 0:c6f40de7ab86 | 671 | case LT_O2_TRIM_B2B4: |
okini3939 | 0:c6f40de7ab86 | 672 | *engine_data = ((can_MsgRx.data[3]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 673 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 674 | *engine_data = ((can_MsgRx.data[4]-128)*(100/128)); |
okini3939 | 0:c6f40de7ab86 | 675 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 676 | break; |
okini3939 | 0:c6f40de7ab86 | 677 | case ABS_FUEL_RAIL_PRES: //((A*256)+B)*10 [kPa] |
okini3939 | 0:c6f40de7ab86 | 678 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*10); |
okini3939 | 0:c6f40de7ab86 | 679 | //sprintf(buffer,"%d kPa",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 680 | break; |
okini3939 | 0:c6f40de7ab86 | 681 | case REL_ACCEL_POS: //A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 682 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 683 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 684 | break; |
okini3939 | 0:c6f40de7ab86 | 685 | case HYBRID_BATT_PCT: //A*100/255 [%] |
okini3939 | 0:c6f40de7ab86 | 686 | *engine_data = ((can_MsgRx.data[3]*100)/255); |
okini3939 | 0:c6f40de7ab86 | 687 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 688 | break; |
okini3939 | 0:c6f40de7ab86 | 689 | case ENGINE_OIL_TEMP: //A-40 [DegC] |
okini3939 | 0:c6f40de7ab86 | 690 | *engine_data = (can_MsgRx.data[3]-40); |
okini3939 | 0:c6f40de7ab86 | 691 | //sprintf(buffer,"%d DegC",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 692 | break; |
okini3939 | 0:c6f40de7ab86 | 693 | case FUEL_TIMING: //(38655-((A*256)+B))/128 |
okini3939 | 0:c6f40de7ab86 | 694 | *engine_data = ((38655 - ((can_MsgRx.data[3]*256)+can_MsgRx.data[4]))/128); |
okini3939 | 0:c6f40de7ab86 | 695 | //sprintf(buffer,"%d Deg",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 696 | break; |
okini3939 | 0:c6f40de7ab86 | 697 | case FUEL_RATE: //((A*256)+B)*0.05 |
okini3939 | 0:c6f40de7ab86 | 698 | *engine_data = (((can_MsgRx.data[3]*256)+can_MsgRx.data[4])*0.05); |
okini3939 | 0:c6f40de7ab86 | 699 | //sprintf(buffer,"%d L/m",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 700 | break; |
okini3939 | 0:c6f40de7ab86 | 701 | case EMISSIONS_STANDARD: //bit encoded ----NOT DONE---- |
okini3939 | 0:c6f40de7ab86 | 702 | break; |
okini3939 | 0:c6f40de7ab86 | 703 | case DEMANDED_TORQUE: //A-125 [%] |
okini3939 | 0:c6f40de7ab86 | 704 | *engine_data = (can_MsgRx.data[3]-125); |
okini3939 | 0:c6f40de7ab86 | 705 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 706 | break; |
okini3939 | 0:c6f40de7ab86 | 707 | case ACTUAL_TORQUE: //A-125 [%] |
okini3939 | 0:c6f40de7ab86 | 708 | *engine_data = (can_MsgRx.data[3]-125); |
okini3939 | 0:c6f40de7ab86 | 709 | //sprintf(buffer,"%d %%",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 710 | break; |
okini3939 | 0:c6f40de7ab86 | 711 | case REFERENCE_TORQUE: //A*256+b [Nm] |
okini3939 | 0:c6f40de7ab86 | 712 | *engine_data = ((can_MsgRx.data[3]*256)+can_MsgRx.data[4]); |
okini3939 | 0:c6f40de7ab86 | 713 | //sprintf(buffer,"%d Nm",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 714 | break; |
okini3939 | 0:c6f40de7ab86 | 715 | case ENGINE_PCT_TORQUE: //A-125 idle, B-125 pt 1, C-125, D-125 |
okini3939 | 0:c6f40de7ab86 | 716 | *engine_data = (can_MsgRx.data[3]); |
okini3939 | 0:c6f40de7ab86 | 717 | //sprintf(buffer,"%d %% - Idle",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 718 | *engine_data = (can_MsgRx.data[4]); |
okini3939 | 0:c6f40de7ab86 | 719 | //sprintf(buffer2,"%d %% - Point 1",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 720 | *engine_data = (can_MsgRx.data[5]); |
okini3939 | 0:c6f40de7ab86 | 721 | //sprintf(buffer3,"%d %% - Point 2",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 722 | *engine_data = (can_MsgRx.data[6]); |
okini3939 | 0:c6f40de7ab86 | 723 | //sprintf(buffer4,"%d %% - Point 3",(int) *engine_data); |
okini3939 | 0:c6f40de7ab86 | 724 | break; |
okini3939 | 0:c6f40de7ab86 | 725 | case AUX_IO_SUPPORTED: //Bit encoded ----NOT DONE---- |
okini3939 | 0:c6f40de7ab86 | 726 | break; |
okini3939 | 0:c6f40de7ab86 | 727 | case P_MAF_SENSOR: |
okini3939 | 0:c6f40de7ab86 | 728 | case P_ENGINE_COOLANT_T: |
okini3939 | 0:c6f40de7ab86 | 729 | case P_INTAKE_TEMP: |
okini3939 | 0:c6f40de7ab86 | 730 | case P_COMMANDED_EGR: |
okini3939 | 0:c6f40de7ab86 | 731 | case P_COMMANDED_INTAKE: |
okini3939 | 0:c6f40de7ab86 | 732 | case P_EGR_TEMP: |
okini3939 | 0:c6f40de7ab86 | 733 | case P_COMMANDED_THROT: |
okini3939 | 0:c6f40de7ab86 | 734 | case P_FUEL_PRESSURE: |
okini3939 | 0:c6f40de7ab86 | 735 | case P_FUEL_INJ_PRES: |
okini3939 | 0:c6f40de7ab86 | 736 | case P_TURBO_PRESSURE: |
okini3939 | 0:c6f40de7ab86 | 737 | case P_BOOST_PRES_CONT: |
okini3939 | 0:c6f40de7ab86 | 738 | case P_VGT_CONTROL: |
okini3939 | 0:c6f40de7ab86 | 739 | case P_WASTEGATE_CONT: |
okini3939 | 0:c6f40de7ab86 | 740 | case P_EXHAUST_PRESSURE: |
okini3939 | 0:c6f40de7ab86 | 741 | case P_TURBO_RPM: |
okini3939 | 0:c6f40de7ab86 | 742 | case P_TURBO_TEMP1: |
okini3939 | 0:c6f40de7ab86 | 743 | case P_TURBO_TEMP2: |
okini3939 | 0:c6f40de7ab86 | 744 | case P_CACT: |
okini3939 | 0:c6f40de7ab86 | 745 | case P_EGT_B1: |
okini3939 | 0:c6f40de7ab86 | 746 | case P_EGT_B2: |
okini3939 | 0:c6f40de7ab86 | 747 | case P_DPF1: |
okini3939 | 0:c6f40de7ab86 | 748 | case P_DPF2: |
okini3939 | 0:c6f40de7ab86 | 749 | case P_DPF_TEMP: |
okini3939 | 0:c6f40de7ab86 | 750 | case P_NOX_NTE_STATUS: |
okini3939 | 0:c6f40de7ab86 | 751 | case P_PM_NTE_STATUS: |
okini3939 | 0:c6f40de7ab86 | 752 | case P_ENGINE_RUNTUME: |
okini3939 | 0:c6f40de7ab86 | 753 | case P_ENGINE_AECD_1: |
okini3939 | 0:c6f40de7ab86 | 754 | case P_ENGINE_AECD_2: |
okini3939 | 0:c6f40de7ab86 | 755 | case P_NOX_SENSOR: |
okini3939 | 0:c6f40de7ab86 | 756 | case P_MANIFOLD_TEMP: |
okini3939 | 0:c6f40de7ab86 | 757 | case P_NOX_SYSTEM: |
okini3939 | 0:c6f40de7ab86 | 758 | case P_PM_SENSOR: |
okini3939 | 0:c6f40de7ab86 | 759 | case P_IN_MANIF_TEMP: |
okini3939 | 0:c6f40de7ab86 | 760 | //sprintf(buffer,"Not supported"); |
okini3939 | 0:c6f40de7ab86 | 761 | break; |
okini3939 | 0:c6f40de7ab86 | 762 | } // switch |
okini3939 | 0:c6f40de7ab86 | 763 | |
okini3939 | 0:c6f40de7ab86 | 764 | return 1; |
okini3939 | 0:c6f40de7ab86 | 765 | |
okini3939 | 0:c6f40de7ab86 | 766 | } // if |
okini3939 | 0:c6f40de7ab86 | 767 | |
okini3939 | 0:c6f40de7ab86 | 768 | } // if read |
okini3939 | 0:c6f40de7ab86 | 769 | } // while |
okini3939 | 0:c6f40de7ab86 | 770 | |
okini3939 | 0:c6f40de7ab86 | 771 | return 0; |
okini3939 | 0:c6f40de7ab86 | 772 | |
okini3939 | 0:c6f40de7ab86 | 773 | |
okini3939 | 0:c6f40de7ab86 | 774 | |
okini3939 | 0:c6f40de7ab86 | 775 | |
okini3939 | 0:c6f40de7ab86 | 776 | } |
okini3939 | 0:c6f40de7ab86 | 777 | } // namespace mbed |