Code for Mbed Dashboard project. http://developer.mbed.org/users/julieefreeman/notebook/mbed-dashboard---obdii/

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed-rtos mbed

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?

UserRevisionLine numberNew 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 }