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