diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 35161405..0fc9f9ba 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -113,6 +113,10 @@ android:name=".activities.FluenceKangooTempsActivity" android:label="Fluence Kangoo Temp" > + + diff --git a/app/src/main/java/lu/fisch/canze/activities/ChargingActivity.java b/app/src/main/java/lu/fisch/canze/activities/ChargingActivity.java index 66247ffe..f64743a0 100644 --- a/app/src/main/java/lu/fisch/canze/activities/ChargingActivity.java +++ b/app/src/main/java/lu/fisch/canze/activities/ChargingActivity.java @@ -40,6 +40,7 @@ public class ChargingActivity extends CanzeActivity implements FieldListener { public static final String SID_MaxCharge = "7bb.6101.336"; public static final String SID_SoC = "42e.0"; // user SOC, not raw public static final String SID_AvChargingPower = "427.40"; + public static final String SID_HvTemp = "42e.44"; public static final String SID_SOH = "658.33"; public static final String SID_RangeEstimate = "654.42"; public static final String SID_TractionBatteryVoltage = "7ec.623203.24"; @@ -47,6 +48,7 @@ public class ChargingActivity extends CanzeActivity implements FieldListener { double dcVolt = 0; // holds the DC voltage, so we can calculate the power when the amps come in private ArrayList subscribedFields; + double avChPwr; @Override protected void onCreate(Bundle savedInstanceState) { @@ -98,6 +100,7 @@ private void initListeners() { addListener(SID_MaxCharge); addListener(SID_SoC); + addListener(SID_HvTemp); if(MainActivity.car==MainActivity.CAR_ZOE) addListener(SID_AvChargingPower); addListener(SID_SOH); // state of health gives continious timeouts. This frame is send at a very low rate addListener(SID_RangeEstimate); @@ -121,13 +124,19 @@ public void run() { switch (fieldId) { case SID_MaxCharge: + double maxCharge = field.getValue(); + int color = 0xffc0c0c0; // standard grey + if (maxCharge < (avChPwr * 0.8)) { + color = 0xffffc0c0; + } tv = (TextView) findViewById(R.id.text_max_charge); + tv.setBackgroundColor(color); break; case SID_SoC: tv = (TextView) findViewById(R.id.textSOC); break; - case SID_SOH: - tv = (TextView) findViewById(R.id.textSOH); + case SID_HvTemp: + tv = (TextView) findViewById(R.id.textHvTemp); break; case SID_RangeEstimate: tv = (TextView) findViewById(R.id.textKMA); @@ -153,7 +162,7 @@ public void run() { tv = (TextView) findViewById(R.id.textAmps); break; case SID_AvChargingPower: - double avChPwr = field.getValue(); + avChPwr = field.getValue(); tv = (TextView) findViewById(R.id.textAvChPwr); break; } diff --git a/app/src/main/java/lu/fisch/canze/activities/DrivingActivity.java b/app/src/main/java/lu/fisch/canze/activities/DrivingActivity.java index c1829e41..579ec88d 100644 --- a/app/src/main/java/lu/fisch/canze/activities/DrivingActivity.java +++ b/app/src/main/java/lu/fisch/canze/activities/DrivingActivity.java @@ -47,6 +47,7 @@ public class DrivingActivity extends CanzeActivity implements FieldListener { // for ISO-TP optimization to work, group all identical CAN ID's together when calling addListener // free data + public static final String SID_Consumption = "1fd.40"; //EVC public static final String SID_Pedal = "186.40"; //EVC public static final String SID_MeanEffectiveTorque = "186.16"; //EVC public static final String SID_RealSpeed = "5d7.0"; //ESC-ABS @@ -56,14 +57,15 @@ public class DrivingActivity extends CanzeActivity implements FieldListener { public static final String SID_ElecBrakeWheelsTorqueApplied = "1f8.28"; //UBP 10ms // ISO-TP data -// public static final String SID_EVC_SoC = "7ec.622002.24"; // (EVC) + public static final String SID_MaxCharge = "7bb.6101.336"; + // public static final String SID_EVC_SoC = "7ec.622002.24"; // (EVC) // public static final String SID_EVC_RealSpeed = "7ec.622003.24"; // (EVC) public static final String SID_EVC_Odometer = "7ec.622006.24"; // (EVC) // public static final String SID_EVC_Pedal = "7ec.62202e.24"; // (EVC) - public static final String SID_EVC_TractionBatteryVoltage = "7ec.623203.24"; // (EVC) - public static final String SID_EVC_TractionBatteryCurrent = "7ec.623204.24"; // (EVC) +// public static final String SID_EVC_TractionBatteryVoltage = "7ec.623203.24"; // (EVC) +// public static final String SID_EVC_TractionBatteryCurrent = "7ec.623204.24"; // (EVC) - private double dcVolt = 0; // holds the DC voltage, so we can calculate the power when the amps come in +// private double dcVolt = 0; // holds the DC voltage, so we can calculate the power when the amps come in private int odo = 0; private int destOdo = 0; // have to init from save file private double realSpeed = 0; @@ -155,7 +157,7 @@ private void saveDestOdo (int d) { SharedPreferences settings = getSharedPreferences(MainActivity.PREFERENCES_FILE, 0); SharedPreferences.Editor editor = settings.edit(); editor.putInt("destOdo", d); - editor.commit(); + editor.apply(); destOdo = d; Field field = MainActivity.fields.getBySID(SID_RangeEstimate); int distInBat = (int) field.getValue(); @@ -230,6 +232,7 @@ private void initListeners() { // Make sure to add ISO-TP listeners grouped by ID + addListener(SID_Consumption, 0); addListener(SID_Pedal, 0); addListener(SID_MeanEffectiveTorque, 0); addListener(SID_DriverBrakeWheel_Torque_Request, 0); @@ -237,11 +240,12 @@ private void initListeners() { addListener(SID_RealSpeed, 0); addListener(SID_SoC, 3600); addListener(SID_RangeEstimate, 3600); + addListener(SID_MaxCharge,6000); //addListener(SID_EVC_SoC); addListener(SID_EVC_Odometer, 6000); - addListener(SID_EVC_TractionBatteryVoltage, 5000); - addListener(SID_EVC_TractionBatteryCurrent, 0); + //addListener(SID_EVC_TractionBatteryVoltage, 5000); + //addListener(SID_EVC_TractionBatteryCurrent, 0); //addListener(SID_PEB_Torque); } @@ -279,6 +283,9 @@ public void run() { //odo = (int) Utils.kmOrMiles(field.getValue()); tv = null; break; + case SID_MaxCharge: + tv = (TextView) findViewById(R.id.text_max_charge); + break; case SID_RealSpeed: // case SID_EVC_RealSpeed: //realSpeed = (Math.round(Utils.kmOrMiles(field.getValue()) * 10.0) / 10.0); @@ -288,15 +295,16 @@ public void run() { //case SID_PEB_Torque: // tv = (TextView) findViewById(R.id.textTorque); // break; - case SID_EVC_TractionBatteryVoltage: // DC volts - // save DC voltage for DC power purposes - dcVolt = field.getValue(); - break; - case SID_EVC_TractionBatteryCurrent: // DC amps - // calculate DC power - double dcPwr = Math.round(dcVolt * field.getValue() / 100.0) / 10.0; - tv = (TextView) findViewById(R.id.textDcPwr); - tv.setText("" + (dcPwr)); +// case SID_EVC_TractionBatteryVoltage: // DC volts +// // save DC voltage for DC power purposes +// dcVolt = field.getValue(); +// break; +// case SID_EVC_TractionBatteryCurrent: // DC amps +// // calculate DC power + case SID_Consumption: + double dcPwr = field.getValue(); +// tv = (TextView) findViewById(R.id.textDcPwr); +// tv.setText("" + (dcPwr)); tv = (TextView) findViewById(R.id.textConsumption); if (realSpeed > 5) { tv.setText("" + (Math.round(1000.0 * dcPwr / realSpeed) / 10.0)); diff --git a/app/src/main/java/lu/fisch/canze/activities/TyresActivity.java b/app/src/main/java/lu/fisch/canze/activities/TyresActivity.java new file mode 100644 index 00000000..6c2260a6 --- /dev/null +++ b/app/src/main/java/lu/fisch/canze/activities/TyresActivity.java @@ -0,0 +1,162 @@ +/* + CanZE + Take a closer look at your ZE car + + Copyright (C) 2015 - The CanZE Team + http://canze.fisch.lu + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +package lu.fisch.canze.activities; + +import android.os.Bundle; +import android.widget.TextView; + +import java.util.ArrayList; + +import lu.fisch.canze.R; +import lu.fisch.canze.actors.Field; +import lu.fisch.canze.interfaces.FieldListener; + +// If you want to monitor changes, you must add a FieldListener to the fields. +// For the simple activity, the easiest way is to implement it in the actitviy itself. +public class TyresActivity extends CanzeActivity implements FieldListener { + + public static final String SID_TyreSpdPresMisadaption = "673.0"; + public static final String SID_TyreFLState = "673.11"; + public static final String SID_TyreFLPressure = "673.40"; + public static final String SID_TyreFRState = "673.8"; + public static final String SID_TyreFRPressure = "673.32"; + public static final String SID_TyreRLState = "673.5"; + public static final String SID_TyreRLPressure = "673.24"; + public static final String SID_TyreRRState = "673.2"; + public static final String SID_TyreRRPressure = "673.16"; + + private ArrayList subscribedFields; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tyres); + + initListeners(); + + } + + private void addListener(String sid) { + Field field; + field = MainActivity.fields.getBySID(sid); + if (field != null) { + field.addListener(this); + MainActivity.device.addActivityField(field); + subscribedFields.add(field); + } + else + { + MainActivity.toast("sid " + sid + " does not exist in class Fields"); + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + + // free up the listeners again + for(Field field : subscribedFields) + { + field.removeListener(this); + } + subscribedFields.clear(); + } + + @Override + protected void onResume() { + super.onResume(); + + // initialise the widgets + initListeners(); + } + + private void initListeners() { + + subscribedFields = new ArrayList<>(); + + addListener(SID_TyreSpdPresMisadaption); + addListener(SID_TyreFLState); + addListener(SID_TyreFLPressure); + addListener(SID_TyreFRState); + addListener(SID_TyreFRPressure); + addListener(SID_TyreRLState); + addListener(SID_TyreRLPressure); + addListener(SID_TyreRRState); + addListener(SID_TyreRRPressure); + } + + // This is the event fired as soon as this the registered fields are + // getting updated by the corresponding reader class. + @Override + public void onFieldUpdateEvent(final Field field) { + // the update has to be done in a separate thread + // otherwise the UI will not be repainted + runOnUiThread(new Runnable() { + @Override + public void run() { + String fieldId = field.getSID(); + TextView tv = null; + + // get the text field + switch (fieldId) { + + case SID_TyreSpdPresMisadaption: + tv = (TextView) findViewById(R.id.text_TyreSpdPresMisadaption); + break; + case SID_TyreFLState: + tv = (TextView) findViewById(R.id.text_TyreFLState); + break; + case SID_TyreFLPressure: + tv = (TextView) findViewById(R.id.text_TyreFLPressure); + break; + case SID_TyreFRState: + tv = (TextView) findViewById(R.id.text_TyreFRState); + break; + case SID_TyreFRPressure: + tv = (TextView) findViewById(R.id.text_TyreFRPressure); + break; + case SID_TyreRLState: + tv = (TextView) findViewById(R.id.text_TyreRLState); + break; + case SID_TyreRLPressure: + tv = (TextView) findViewById(R.id.text_TyreRLPressure); + break; + case SID_TyreRRState: + tv = (TextView) findViewById(R.id.text_TyreRRState); + break; + case SID_TyreRRPressure: + tv = (TextView) findViewById(R.id.text_TyreRRPressure); + break; + } + // set regular new content, all exeptions handled above + if (tv != null) { + tv.setText("" + (Math.round(field.getValue() * 10.0) / 10.0)); + } + + tv = (TextView) findViewById(R.id.textDebug); + tv.setText(fieldId); + } + }); + + } +} \ No newline at end of file diff --git a/app/src/main/java/lu/fisch/canze/actors/Fields.java b/app/src/main/java/lu/fisch/canze/actors/Fields.java index f213bc93..a23bd1b5 100644 --- a/app/src/main/java/lu/fisch/canze/actors/Fields.java +++ b/app/src/main/java/lu/fisch/canze/actors/Fields.java @@ -172,7 +172,7 @@ private void fillStatic() String fieldDef = // startBit, endBit, divider, multiplier, offset, decimals, format, requestID, responseID "" /* - // 2015.11.14 + // 2015.11.21 +"0x0c6,0,15,1,0x8000,1,°,,,0\n" // Steering Position +"0x0c6,16,31,1,0x8000,1,°/s,,,0\n" // Steering Acceleration @@ -250,24 +250,42 @@ private void fillStatic() +"0x42e,38,43,1,0,1,A,,,0\n" // Charging Pilot Current +"0x42e,44,50,1,40,0,°C,,,0\n" // HVBatteryTemp +"0x42e,56,63,0.3,0,1,kW,,,0\n" // ChargingPower + +"0x430,40,49,0.1,40,1,°C,,,2\n" // HV Battery Evaporator Temp + +"0x430,50,59,0.1,40,1,°C,,,2\n" // HV Battery Evaporator Setpoint +"0x4f8,0,1,-1,-2,0,,,,0\n" // Start +"0x4f8,4,5,-1,-2,0,,,,0\n" // Parking Break +"0x4f8,24,39,0.01,0,2,,,,2\n" // Speed on Display + +"0x534,32,40,1,40,0,°C,,,1\n" // Temp out +"0x5d7,0,15,0.01,0,2,km/h,,,0\n" // Speed +"0x5d7,16,43,0.01,0,2,km,,,0\n" // Odometer +"0x5d7,44,45,1,0,0,?,,,0\n" // WheelsLockingState +"0x5d7,48,49,1,0,0,?,,,0\n" // VehicleSpeedSign +"0x5d7,50,54,0.04,0,2,cm,,,0\n" // Fine distance + +"0x5da,0,7,1,40,0,ºC,,,1\n" // Water temperature +"0x5de,1,1,1,0,0,,,,0\n" // Right Indicator +"0x5de,2,2,1,0,0,,,,0\n" // Left Indicator + +"0x5de,3,3,1,0,0,,,,0\n" // Rear Fog Light +"0x5de,5,5,1,0,0,,,,0\n" // Park Light +"0x5de,6,6,1,0,0,,,,0\n" // Head Light +"0x5de,7,7,1,0,0,,,,0\n" // Beam Light - +"0x5de,12,12,1,0,0,,,,0\n" // Door Front Left - +"0x5de,14,14,1,0,0,,,,0\n" // Dort Front Right - +"0x5de,17,17,1,0,0,,,,0\n" // Door Rear Left - +"0x5de,19,19,1,0,0,,,,0\n" // Door Rear Right - +"0x5de,59,59,1,0,0,,,,0\n" // Door Hatch + +"0x5de,8,9,1,0,0,,,,0\n" // PositionLightsOmissionWarning + +"0x5de,10,10,1,0,0,,,,0\n" // ALS malfunction + +"0x5de,11,12,1,0,0,,,,0\n" // Door Front Left + +"0x5de,13,14,1,0,0,,,,0\n" // Dort Front Right + +"0x5de,16,17,1,0,0,,,,0\n" // Door Rear Left + +"0x5de,18,19,1,0,0,,,,0\n" // Door Rear Right + +"0x5de,21,22,1,0,0,,,,\n" // Steering Lock Failure + +"0x5de,23,23,1,0,0,,,,\n" // Unlocking Steering Column Warning + +"0x5de,24,24,1,0,0,,,,\n" // Automatic Lock Up Activation State + +"0x5de,25,25,1,0,0,,,,\n" // Badge Battery Low + +"0x5de,28,29,1,0,0,,,,\n" // Trip Display Scrolling Request + +"0x5de,32,35,1,0,0,,,,\n" // Smart Keyless Information Display + +"0x5de,36,36,1,0,0,,,,\n" // Keyless Info Reemission Request + +"0x5de,37,37,1,0,0,,,,\n" // Keyless Card Reader Failure Display + +"0x5de,47,47,1,0,0,,,,\n" // Brake Switch Fault Display + +"0x5de,49,49,1,0,0,,,,\n" // Stop Lamp Failure Display + +"0x5de,56,57,1,0,0,,,,\n" // Rear Wiper Status + +"0x5de,58,59,1,0,0,,,,0\n" // Boot Open Warning +"0x5ee,0,0,1,0,0,,,,0\n" // Park Light +"0x5ee,1,1,1,0,0,,,,0\n" // Head Light +"0x5ee,2,2,1,0,0,,,,0\n" // Beam Light @@ -287,11 +305,11 @@ private void fillStatic() +"0x654,42,51,1,0,0,km,,,0\n" // Available Distance +"0x654,52,61,0.1,0,1,,,,0\n" // AverageConsumption +"0x654,62,62,1,0,0,,,,0\n" // HVBatteryLow - +"0x656,3,3,1,0,0,,,,\n" // Trip Data Reset - +"0x656,21,31,1,0,0,min,,,\n" // Cluste rScheduled Time - +"0x656,32,42,1,0,0,min,,,\n" // Cluster Scheduled Time 2 - +"0x656,48,55,1,40,0,°C,,,\n" // External Temp - +"0x656,56,57,1,0,0,,,,\n" // ClimPCCustomerActiv + +"0x656,3,3,1,0,0,,,,0\n" // Trip Data Reset + +"0x656,21,31,1,0,0,min,,,0\n" // Cluste rScheduled Time + +"0x656,32,42,1,0,0,min,,,0\n" // Cluster Scheduled Time 2 + +"0x656,48,55,1,40,0,°C,,,2\n" // External Temp + +"0x656,56,57,1,0,0,,,,2\n" // ClimPCCustomerActiv +"0x658,0,31,1,0,0,,,,0\n" // Battery Serial N° +"0x658,33,39,1,0,0,%,,,0\n" // Battery Health +"0x658,42,42,1,0,0,,,,0\n" // Charging @@ -340,7 +358,7 @@ private void fillStatic() +"0x763,0,7,1,0,0,,0x14ffff,0x54,0\n" // Reset DTC +"0x763,0,23,1,0,0,,0x19023b,0x5902ff,0\n" // Query DTC +"0x763,24,31,1,0,0,,0x222001,0x622001,0\n" // Parking Break - +"0x763,3,3,1,0,0,,0x2220f0,0x6220f0,0\n" // << UDS replies start at bit 24 - need to recheck + +"0x763,3,3,1,0,0,,0x2220f0,0x6220f0,0\n" // VOL+ +"0x763,4,4,1,0,0,,0x2220f0,0x6220f0,0\n" // VOL- +"0x763,2,2,1,0,0,,0x2220f0,0x6220f0,0\n" // Mute +"0x763,5,5,1,0,0,,0x2220f0,0x6220f0,0\n" // Media @@ -349,6 +367,7 @@ private void fillStatic() +"0x764,128,143,1,0,0,,0x2180,0x6180,0\n" // PG number +"0x764,0,7,1,0,0,,0x14ffff,0x54,0\n" // Reset DTC +"0x764,0,23,1,0,0,,0x19023b,0x5902ff,0\n" // Query DTC + +"0x764,8,15,0.4,40,1,,0x2121,0x6121,1\n" // Interior temperature +"0x765,144,159,1,0,0,,0x2180,0x6180,0\n" // Software version +"0x765,128,143,1,0,0,,0x2180,0x6180,0\n" // PG number +"0x765,0,7,1,0,0,,0x14ffff,0x54,0\n" // Reset DTC @@ -370,11 +389,12 @@ private void fillStatic() +"0x77e,0,7,1,0,0,,0x14ffff,0x54,0\n" // Reset DTC +"0x77e,0,23,1,0,0,,0x19023b,0x5902ff,0\n" // Query DTC +"0x77e,24,31,1,0,0,,0x22300f,0x62300f,0\n" // dcdc state - +"0x77e,24,31,31.25,0,3,V,0x22300e,0x62300e,0\n" // dcdc state - +"0x77e,24,31,0.03125,0,0,Nm,0x223024,0x623024,0\n" // traction battery voltage - +"0x77e,24,31,0.03125,0,0,Nm,0x223025,0x623025,0\n" // torque requested - +"0x77e,24,31,1.5625,0,2,°C,0x22302b,0x62302b,0\n" // torque applied - +"0x77e,24,31,6.25,0,2,A,0x22301d,0x62301d,0\n" // inverter temperature + +"0x77e,24,31,31.25,0,3,V,0x22300e,0x62300e,0\n" // traction battery voltage + +"0x77e,24,39,0.015625,0,2,ºC,0x223018,0x623018,1\n" // DCDC converter temperature + +"0x77e,24,31,0.03125,0,0,Nm,0x223024,0x623024,0\n" // torque requested + +"0x77e,24,31,0.03125,0,0,Nm,0x223025,0x623025,0\n" // torque applied + +"0x77e,24,31,0.015625,0,2,°C,0x22302b,0x62302b,0\n" // inverter temperature + +"0x77e,24,31,6.25,0,2,A,0x22301d,0x62301d,0\n" // Current +"0x793,144,159,1,0,0,,0x2180,0x6180,0\n" // Software version +"0x793,128,143,1,0,0,,0x2180,0x6180,0\n" // PG number %04lx +"0x793,0,7,1,0,0,,0x14ffff,0x54,0\n" // Reset DTC @@ -383,11 +403,11 @@ private void fillStatic() +"0x7b6,128,143,1,0,0,,0x2180,0x6180,0\n" // PG number +"0x7b6,0,7,1,0,0,,0x14ffff,0x54,0\n" // Reset DTC +"0x7b6,0,23,1,0,0,,0x19023b,0x5902ff,0\n" // Query DTC - +"0x7bb,336,351,0.01,0,2,kW,0x2101,0x6101,2\n" // Get regen and other battery data. +"0x7bb,192,207,0.01,0,2,kW,0x2101,0x6101,1\n" // Maximum battery input power +"0x7bb,208,223,0.01,0,2,kW,0x2101,0x6101,1\n" // Maximum battery output power +"0x7bb,348,367,0.0001,0,4,Ah,0x2101,0x6101,1\n" // Ah of the battery +"0x7bb,316,335,0.0001,0,4,%,0x2101,0x6101,1\n" // Real State of Charge + +"0x7bb,336,351,0.01,0,2,kW,0x2101,0x6101,2\n" // Maximum battery input power +"0x7bb,16,31,1,0,0,unknown,0x2104,0x6104,2\n" // Module 1 raw NTC +"0x7bb,32,39,1,40,0,°C,0x2104,0x6104,2\n" // Cell 1 Temperature +"0x7bb,40,55,1,0,0,unknown,0x2104,0x6104,2\n" // Module 2 raw NTC @@ -420,6 +440,8 @@ private void fillStatic() +"0x7bb,80,87,1,0,0,°C,0x2104,0x6104,1\n" // Cell 3 Temperature +"0x7bb,88,103,1,0,0,unknown,0x2104,0x6104,1\n" // Module 4 raw NTC +"0x7bb,104,111,1,0,0,°C,0x2104,0x6104,1\n" // Cell 4 Temperature + +"0x7bb,64,79,0.001,0,3,V,0x2105,0x6105,1\n" // Threshold bad cell + +"0x7bb,80,95,0.001,0,3,V,0x2105,0x6105,1\n" // Threshol weak cell +"0x7bb,16,31,0.001,0,3,V,0x2141,0x6141,0\n" // Cell 01 V +"0x7bb,32,47,0.001,0,3,V,0x2141,0x6141,0\n" // Cell 02 V +"0x7bb,48,63,0.001,0,3,V,0x2141,0x6141,0\n" // Cell 03 V @@ -519,7 +541,7 @@ private void fillStatic() +"0x7bb,60,79,0.0001,0,4,Ah,0x2161,0x6161,1\n" // Ah of the battery +"0x7bb,80,87,0.05,0,2,%,0x2161,0x6161,1\n" // Battery State of Health +"0x7bb,104,119,1,0,0,km,0x2161,0x6161,1\n" // Battery mileage in km - +"0x7bb,136,151,1,0,0,kWh,0x2161,0x6161,1\n" // Energy regenerated into the Battery + +"0x7bb,136,151,1,0,0,kWh,0x2161,0x6161,1\n" // Total energy output of battery? +"0x7bb,144,159,1,0,0,,0x2180,0x6180,0\n" // Software version +"0x7bb,128,143,1,0,0,,0x2180,0x6180,0\n" // PG number %04lx +"0x7bb,0,7,1,0,0,,0x14ffff,0x54,0\n" // Reset DTC @@ -547,11 +569,15 @@ private void fillStatic() +"0x7ec,24,39,0.5,0,2,V,0x223203,0x623203,0\n" // Battery voltage +"0x7ec,24,39,0.25,0x8000,2,A,0x223204,0x623204,0\n" // Battery current +"0x7ec,24,31,1,0,0,%,0x223206,0x623206,0\n" // Battery health in % + +"0x7ec,24,31,1,1,0,,0x223318,0x623318,1\n" // Motor Water pump speed + +"0x7ec,24,31,1,1,0,,0x223319,0x623319,1\n" // Charger pump speed + +"0x7ec,24,31,1,1,0,,0x22331A,0x62331A,1\n" // Heater water pump speed +"0x7ec,24,31,1,40,0,°C,0x2233b1,0x6233b1,0\n" // Ext temp */ - // 2015.11.21 + // 2015-11-28 + +"0x023,0,15,1,0,0,,,,0\n" // AIRBAGCrash +"0x0c6,0,15,1,0x8000,1,°,,,0\n" // Steering Position +"0x0c6,16,31,1,0x8000,1,°/s,,,0\n" // Steering Acceleration +"0x0c6,32,47,1,0x8000,1,°,,,0\n" // SteeringWheelAngle_Offset @@ -571,18 +597,26 @@ private void fillStatic() +"0x130,42,43,1,0,0,,,,0\n" // PressureBuildUp +"0x130,44,55,-3,4094,0,Nm,,,0\n" // DriverBrakeWheelTq_Req +"0x130,56,63,1,0,0,,,,0\n" // CheckSum_UBP + +"0x17a,24,27,1,0,0,,,,0\n" // Transmission Range + +"0x17a,48,63,0.5,12800,1,Nm,,,\n" // Estimated Wheen Torque +"0x17e,40,41,1,0,0,,,,0\n" // CrankingAuthorisation_AT +"0x17e,48,51,1,0,0,,,,0\n" // GearLeverPosition +"0x186,0,15,0.125,0,2,rpm,,,0\n" // Speed +"0x186,16,27,0.5,800,1,Nm,,,0\n" // MeanEffectiveTorque +"0x186,28,39,0.5,800,0,Nm,,,0\n" // RequestedTorqueAfterProc - +"0x186,40,49,0.1,0,1,%,,,0\n" // Throttle - +"0x18a,0,11,1,0,0,%,,,0\n" // RawEngineTorque_WithoutTMReq - +"0x18a,12,12,1,0,0,,,,0\n" // AT_TorqueAcknowledgement - +"0x18a,13,14,1,0,0,,,,0\n" // CruiseControlStatus_forTM + +"0x186,40,49,0.125,0,1,%,,,0\n" // Throttle + +"0x186,50,50,1,0,0,,,,0\n" // ASR_MSRAcknowledgement + +"0x186,51,52,1,0,0,,,,0\n" // ECM_TorqueRequestStatus +"0x18a,16,25,0.125,0,2,%,,,0\n" // Throttle - +"0x18a,26,26,1,0,0,,,,0\n" // KickDownActivated - +"0x18a,27,38,0.5,800,1,Nm,,,0\n" // FrictionTorque + +"0x18a,27,38,0.5,800,1,Nm,,,0\n" // Coasting Torque + +"0x1f6,0,1,1,0,0,,,,0\n" // Engine Fan Speed + +"0x1f6,3,7,100,0,0,W,,,0\n" // Max Electrical Power Allowed + +"0x1f6,8,9,1,0,0,,,,0\n" // ElectricalPowerCutFreeze + +"0x1f6,10,11,1,0,0,,,,0\n" // EngineStatus_R + +"0x1f6,12,15,1,0,0,,,,0\n" // EngineStopRequestOrigine + +"0x1f6,16,17,1,0,0,,,,0\n" // CrankingAuthorization_ECM + +"0x1f6,19,20,1,0,1,,,,0\n" // Break Pedal + +"0x1f6,23,31,0.1,0,1,bar,,,0\n" // AC High Pressure Sensor +"0x1f8,0,7,1,0,0,,,,0\n" // Checksum EVC +"0x1f8,12,13,1,0,0,,,,0\n" // EVCReadyAsActuator +"0x1f8,16,27,1,4096,0,Nm,,,0\n" // TotalPotentialResistiveWheelsTorque @@ -591,20 +625,61 @@ private void fillStatic() +"0x1f8,52,54,1,0,0,,,,0\n" // EVC_Clock +"0x1f8,56,58,1,0,0,,,,0\n" // GearRangeEngagedCurrent +"0x1f8,62,63,1,0,0,,,,0\n" // DeclutchInProgress - +"0x1f6,20,20,0.5,0,1,,,,0\n" // Break Pedal - +"0x1fd,0,7,0.5,0,1,A,,,0\n" // 12V Battery Current + +"0x1fd,0,7,0.390625,0,1,%,,,0\n" // 12V Battery Current? + +"0x1fd,8,9,1,0,0,,,,0\n" // SCH Refuse to Sleep + +"0x1fd,17,18,1,0,0,,,,0\n" // Stop Preheating Counter + +"0x1fd,19,20,1,0,0,,,,0\n" // Start Preheating Counter + +"0x1fd,21,31,1,0,0,min,,,0\n" // Time left before vehicle wakeup + +"0x1fd,32,32,1,0,0,,,,0\n" // Pre heating activation + +"0x1fd,33,39,1,0,0,min,,,0\n" // LeftTimeToScheduledTime + +"0x1fd,40,47,25,0,0,W,,,0\n" // ClimAvailablePower +"0x1fd,48,55,1,0x50,0,kW,,,0\n" // Consumption - +"0x29a,0,15,1,0,0,,,,0\n" // Speed Front Right - +"0x29a,16,31,1,0,0,,,,0\n" // Speed Front Left - +"0x29a,32,47,0.01,0,2,,,,0\n" // - +"0x29c,0,15,1,0,0,,,,0\n" // Speed Rear Right - +"0x29c,16,31,1,0,0,,,,0\n" // Speed Rear Left - +"0x29c,48,63,0.01,0,2,,,,0\n" // + +"0x212,8,9,1,0,0,,,,0\n" // StarterStatus + +"0x212,10,11,1,0,0,,,,0\n" // RearGearEngaged + +"0x242,0,0,1,0,0,,,,\n" // ABSinRegulation + +"0x242,1,1,1,0,0,,,,\n" // ABSMalfunction + +"0x242,2,2,1,0,0,,,,\n" // ASRinRegulation + +"0x242,3,3,1,0,0,,,,\n" // ASRMalfunction + +"0x242,5,5,1,0,0,,,,\n" // AYCinRegulation + +"0x242,6,6,1,0,0,,,,\n" // AYCMalfunction + +"0x242,7,7,1,0,0,,,,\n" // MSRinRegulation + +"0x242,8,8,1,0,0,,,,\n" // MSRMalfunction + +"0x242,9,12,1,0,0,,,,\n" // ESP_Clock + +"0x242,13,15,1,0,0,,,,\n" // ESP_TorqueControlType + +"0x242,16,27,0.5,800,1,Nm,,,\n" // ASRDynamicTorqueRequest + +"0x242,28,39,0.5,800,1,Nm,,,\n" // ASRStaticTorqueRequest + +"0x242,40,51,0.5,800,1,Nm,,,\n" // MSRTorqueRequest + +"0x29a,0,15,0.04166666667,0,2,rpm,,,0\n" // Rpm Front Right + +"0x29a,16,31,0.04166666667,0,2,rpm,,,0\n" // Rpm Front Left + +"0x29a,32,47,0.01,0,2,km/h,,,0\n" // Vehicle Speed + +"0x29a,52,55,1,0,0,,,,0\n" // Vehicle Speed Clock + +"0x29a,56,63,1,0,0,,,,0\n" // Vehicle Speed Checksum + +"0x29c,0,15,0.04166666667,0,2,rpm,,,0\n" // Rpm Rear Right + +"0x29c,16,31,0.04166666667,0,2,rpm,,,0\n" // Rpm Rear Left + +"0x29c,48,63,0.01,0,2,km/h,,,0\n" // Vehicle Speed + +"0x2b7,32,33,1,0,0,,,,0\n" // EBD Active + +"0x2b7,34,35,1,0,0,,,,0\n" // HBA Active + +"0x2b7,36,37,1,0,0,,,,0\n" // ESC HBB Malfunction +"0x352,0,1,1,0,0,,,,0\n" // ABS Warning Request +"0x352,2,3,1,0,0,,,,0\n" // ESP_StopLampRequest +"0x352,24,31,1,0,0,,,,0\n" // Break pressure - +"0x35c,4,15,1,0,0,,,,0\n" // Key-Start + +"0x35c,0,1,1,0,0,,,,0\n" // BCM_WakeUpSleepCommand + +"0x35c,4,4,1,0,0,,,,0\n" // WakeUpType + +"0x35c,5,7,1,0,0,,,,0\n" // VehicleState + +"0x35c,8,8,1,0,0,,,,0\n" // DiagMuxOn_BCM + +"0x35c,9,10,1,0,0,,,,0\n" // StartingMode_BCM_R + +"0x35c,11,11,1,0,0,,,,0\n" // EngineStopDriverRequested + +"0x35c,12,12,1,0,0,,,,0\n" // SwitchOffSESDisturbers + +"0x35c,15,15,1,0,0,,,,0\n" // DeliveryModeInformation +"0x35c,16,39,1,0,0,min,,,0\n" // AbsoluteTimeSince1rstIgnition + +"0x35c,40,42,1,0,0,,,,0\n" // BrakeInfoStatus + +"0x35c,47,47,1,0,0,,,,0\n" // ProbableCustomerFeedBackNeed + +"0x35c,48,51,1,0,0,,,,0\n" // EmergencyEngineStop + +"0x35c,52,52,1,0,0,,,,0\n" // WelcomePhaseState + +"0x35c,53,54,1,0,0,,,,0\n" // SupposedCustomerDeparture + +"0x35c,55,55,1,0,0,,,,0\n" // VehicleOutsideLockedState + +"0x35c,58,59,1,0,0,,,,0\n" // GenericApplicativeDiagEnable + +"0x35c,60,61,1,0,0,,,,0\n" // ParkingBrakeStatus +"0x3f7,2,3,1,0,0,,,,2\n" // Gear? +"0x427,0,1,1,0,0,,,,0\n" // HVConnectionStatus +"0x427,2,3,1,0,0,,,,0\n" // ChargingAlert @@ -632,6 +707,9 @@ private void fillStatic() +"0x430,50,59,0.1,40,1,°C,,,2\n" // HV Battery Evaporator Setpoint +"0x4f8,0,1,-1,-2,0,,,,0\n" // Start +"0x4f8,4,5,-1,-2,0,,,,0\n" // Parking Break + +"0x4f8,8,9,1,0,0,,,,0\n" // AIRBAGMalfunctionLampState + +"0x4f8,12,12,1,0,0,,,,0\n" // ClusterDrivenLampsAutoCheck + +"0x4f8,13,13,1,0,0,,,,0\n" // DisplayedSpeedUnit +"0x4f8,24,39,0.01,0,2,,,,2\n" // Speed on Display +"0x534,32,40,1,40,0,°C,,,1\n" // Temp out +"0x5d7,0,15,0.01,0,2,km/h,,,0\n" // Speed @@ -670,6 +748,7 @@ private void fillStatic() +"0x5ee,16,19,1,0,0,,,,0\n" // Door Locks +"0x5ee,20,24,1,0,0,,,,0\n" // Indicators +"0x5ee,24,27,1,0,0,,,,0\n" // Doors + +"0x5ee,40,40,1,0,0,,,,0\n" // LightSensorStatus +"0x646,8,15,0.1,0,1,kWh/100km,,,0\n" // Average trip B consumpion +"0x646,16,32,0.1,0,1,km,,,0\n" // Trip B distance +"0x646,33,47,0.1,0,1,kWh,,,0\n" // trip B consumption @@ -702,6 +781,15 @@ private void fillStatic() +"0x66a,5,7,1,0,0,,,,0\n" // Cruise Control Mode +"0x66a,8,15,1,0,0,km/h,,,0\n" // Cruise Control Speed +"0x66a,16,16,1,0,0,,,,0\n" // Cruise Control OverSpeed + +"0x673,0,0,1,0,0,,,,0\n" // Speed pressure misadaptation + +"0x673,2,4,1,0,0,,,,0\n" // Rear right wheel state + +"0x673,5,7,1,0,0,,,,0\n" // Rear left wheel state + +"0x673,8,10,1,0,0,,,,0\n" // Front right wheel state + +"0x673,11,13,1,0,0,,,,0\n" // Front left wheel state + +"0x673,16,23,0.07285974499,0,0,mbar,,,0\n" // Rear right wheel pressure + +"0x673,24,31,0.07285974499,0,0,mbar,,,0\n" // Rear left wheel pressure + +"0x673,32,39,0.07285974499,0,0,mbar,,,0\n" // Front right wheel pressure + +"0x673,40,47,0.07285974499,0,0,mbar,,,0\n" // Front left wheel pressure +"0x68b,0,3,1,0,0,,,,0\n" // MM action counter +"0x699,0,1,1,0,0,,,,2\n" // Clima off Request display +"0x699,2,3,1,0,0,,,,2\n" // Clima read defrost Reuqest display @@ -786,37 +874,37 @@ private void fillStatic() +"0x7bb,348,367,0.0001,0,4,Ah,0x2101,0x6101,1\n" // Ah of the battery +"0x7bb,316,335,0.0001,0,4,%,0x2101,0x6101,1\n" // Real State of Charge +"0x7bb,336,351,0.01,0,2,kW,0x2101,0x6101,2\n" // Maximum battery input power - +"0x7bb,16,31,1,0,0,unknown,0x2104,0x6104,2\n" // Module 1 raw NTC + +"0x7bb,16,31,1,0,0,stravinsky1124,0x2104,0x6104,2\n" // Module 1 raw NTC +"0x7bb,32,39,1,40,0,°C,0x2104,0x6104,2\n" // Cell 1 Temperature - +"0x7bb,40,55,1,0,0,unknown,0x2104,0x6104,2\n" // Module 2 raw NTC + +"0x7bb,40,55,1,0,0,,0x2104,0x6104,2\n" // Module 2 raw NTC +"0x7bb,56,63,1,40,0,°C,0x2104,0x6104,2\n" // Cell 2 Temperature - +"0x7bb,64,79,1,0,0,unknown,0x2104,0x6104,2\n" // Module 3 raw NTC + +"0x7bb,64,79,1,0,0,,0x2104,0x6104,2\n" // Module 3 raw NTC +"0x7bb,80,87,1,40,0,°C,0x2104,0x6104,2\n" // Cell 3 Temperature - +"0x7bb,88,103,1,0,0,unknown,0x2104,0x6104,2\n" // Module 4 raw NTC + +"0x7bb,88,103,1,0,0,,0x2104,0x6104,2\n" // Module 4 raw NTC +"0x7bb,104,111,1,40,0,°C,0x2104,0x6104,2\n" // Cell 4 Temperature - +"0x7bb,112,127,1,0,0,unknown,0x2104,0x6104,2\n" // Module 5 raw NTC + +"0x7bb,112,127,1,0,0,,0x2104,0x6104,2\n" // Module 5 raw NTC +"0x7bb,128,135,1,40,0,°C,0x2104,0x6104,2\n" // Cell 5 Temperature - +"0x7bb,136,151,1,0,0,unknown,0x2104,0x6104,2\n" // Module 6 raw NTC + +"0x7bb,136,151,1,0,0,,0x2104,0x6104,2\n" // Module 6 raw NTC +"0x7bb,152,159,1,40,0,°C,0x2104,0x6104,2\n" // Cell 6 Temperature - +"0x7bb,160,175,1,0,0,unknown,0x2104,0x6104,2\n" // Module 7 raw NTC + +"0x7bb,160,175,1,0,0,,0x2104,0x6104,2\n" // Module 7 raw NTC +"0x7bb,176,183,1,40,0,°C,0x2104,0x6104,2\n" // Cell 7 Temperature - +"0x7bb,184,199,1,0,0,unknown,0x2104,0x6104,2\n" // Module 8 raw NTC + +"0x7bb,184,199,1,0,0,,0x2104,0x6104,2\n" // Module 8 raw NTC +"0x7bb,200,207,1,40,0,°C,0x2104,0x6104,2\n" // Cell 8 Temperature - +"0x7bb,208,223,1,0,0,unknown,0x2104,0x6104,2\n" // Module 9 raw NTC + +"0x7bb,208,223,1,0,0,,0x2104,0x6104,2\n" // Module 9 raw NTC +"0x7bb,224,231,1,40,0,°C,0x2104,0x6104,2\n" // Cell 9 Temperature - +"0x7bb,232,247,1,0,0,unknown,0x2104,0x6104,2\n" // Module 10 raw NTC + +"0x7bb,232,247,1,0,0,,0x2104,0x6104,2\n" // Module 10 raw NTC +"0x7bb,248,255,1,40,0,°C,0x2104,0x6104,2\n" // Cell 10 Temperature - +"0x7bb,256,271,1,0,0,unknown,0x2104,0x6104,2\n" // Module 11 raw NTC + +"0x7bb,256,271,1,0,0,,0x2104,0x6104,2\n" // Module 11 raw NTC +"0x7bb,272,279,1,40,0,°C,0x2104,0x6104,2\n" // Cell 11 Temperature - +"0x7bb,280,295,1,0,0,unknown,0x2104,0x6104,2\n" // Module 12 raw NTC + +"0x7bb,280,295,1,0,0,,0x2104,0x6104,2\n" // Module 12 raw NTC +"0x7bb,296,303,1,40,0,°C,0x2104,0x6104,2\n" // Cell 12 Temperature - +"0x7bb,16,31,1,0,0,unknown,0x2104,0x6104,1\n" // Module 1 raw NTC + +"0x7bb,16,31,1,0,0,,0x2104,0x6104,1\n" // Module 1 raw NTC +"0x7bb,32,39,1,0,0,°C,0x2104,0x6104,1\n" // Cell 1 Temperature - +"0x7bb,40,55,1,0,0,unknown,0x2104,0x6104,1\n" // Module 2 raw NTC + +"0x7bb,40,55,1,0,0,,0x2104,0x6104,1\n" // Module 2 raw NTC +"0x7bb,56,63,1,0,0,°C,0x2104,0x6104,1\n" // Cell 2 Temperature - +"0x7bb,64,79,1,0,0,unknown,0x2104,0x6104,1\n" // Module 3 raw NTC + +"0x7bb,64,79,1,0,0,,0x2104,0x6104,1\n" // Module 3 raw NTC +"0x7bb,80,87,1,0,0,°C,0x2104,0x6104,1\n" // Cell 3 Temperature - +"0x7bb,88,103,1,0,0,unknown,0x2104,0x6104,1\n" // Module 4 raw NTC + +"0x7bb,88,103,1,0,0,,0x2104,0x6104,1\n" // Module 4 raw NTC +"0x7bb,104,111,1,0,0,°C,0x2104,0x6104,1\n" // Cell 4 Temperature +"0x7bb,64,79,0.001,0,3,V,0x2105,0x6105,1\n" // Threshold bad cell +"0x7bb,80,95,0.001,0,3,V,0x2105,0x6105,1\n" // Threshol weak cell @@ -978,6 +1066,7 @@ private void fillStatic() MainActivity.debug("frame does not exist:" + tokens[FIELD_ID].trim()); } else { //Create a new field object and fill his data + MainActivity.debug(tokens[FIELD_ID]+","+tokens[FIELD_FROM]); Field field = new Field( frame, Integer.parseInt(tokens[FIELD_FROM].trim()), diff --git a/app/src/main/java/lu/fisch/canze/fragments/ExperimentalFragment.java b/app/src/main/java/lu/fisch/canze/fragments/ExperimentalFragment.java index 9bfb5490..4b943620 100644 --- a/app/src/main/java/lu/fisch/canze/fragments/ExperimentalFragment.java +++ b/app/src/main/java/lu/fisch/canze/fragments/ExperimentalFragment.java @@ -44,6 +44,7 @@ import lu.fisch.canze.activities.StatsActivity; import lu.fisch.canze.activities.TachoActivity; import lu.fisch.canze.activities.TemperatureActivity; +import lu.fisch.canze.activities.TyresActivity; /** * A simple {@link Fragment} subclass. @@ -172,34 +173,30 @@ public void onClick(View v) { } });*/ - button = (Button) view.findViewById(R.id.button_3); + button = (Button) view.findViewById(R.id.buttonFluenceKangooTemps); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(!MainActivity.isSafe()) return; if(MainActivity.device==null) {MainActivity.toast("You first need to adjust the settings ..."); return;} MainActivity.getInstance().leaveBluetoothOn=true; - Intent intent = new Intent(MainActivity.getInstance(), ChargingTechActivity.class); + Intent intent = new Intent(MainActivity.getInstance(), FluenceKangooTempsActivity.class); ExperimentalFragment.this.startActivityForResult(intent, MainActivity.LEAVE_BLUETOOTH_ON); } }); - button = (Button) view.findViewById(R.id.buttonFluenceKangooTemps); + button = (Button) view.findViewById(R.id.buttonTyres); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(!MainActivity.isSafe()) return; if(MainActivity.device==null) {MainActivity.toast("You first need to adjust the settings ..."); return;} MainActivity.getInstance().leaveBluetoothOn=true; - Intent intent = new Intent(MainActivity.getInstance(), FluenceKangooTempsActivity.class); + Intent intent = new Intent(MainActivity.getInstance(), TyresActivity.class); ExperimentalFragment.this.startActivityForResult(intent, MainActivity.LEAVE_BLUETOOTH_ON); } }); - - - - return view; } diff --git a/app/src/main/res/layout/activity_charging.xml b/app/src/main/res/layout/activity_charging.xml index c4a3efc7..a5844fbf 100644 --- a/app/src/main/res/layout/activity_charging.xml +++ b/app/src/main/res/layout/activity_charging.xml @@ -167,13 +167,6 @@ /> - - - - - - - + + + + + diff --git a/app/src/main/res/layout/activity_driving.xml b/app/src/main/res/layout/activity_driving.xml index 53fcafac..e953fa72 100644 --- a/app/src/main/res/layout/activity_driving.xml +++ b/app/src/main/res/layout/activity_driving.xml @@ -164,13 +164,13 @@ diff --git a/app/src/main/res/layout/activity_tyres.xml b/app/src/main/res/layout/activity_tyres.xml new file mode 100644 index 00000000..16b91acc --- /dev/null +++ b/app/src/main/res/layout/activity_tyres.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_experimental.xml b/app/src/main/res/layout/fragment_experimental.xml index baf54115..107a59f9 100644 --- a/app/src/main/res/layout/fragment_experimental.xml +++ b/app/src/main/res/layout/fragment_experimental.xml @@ -190,8 +190,8 @@ android:orientation="vertical" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" - android:text="-" - android:id="@+id/button_3" + android:text="@string/title_activity_tyres" + android:id="@+id/buttonTyres" android:layout_column="1" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8f3f3ea7..ea34e5f4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,6 +21,7 @@ Diagnostic Trouble Codes Battery Compartment heatmap Battery Voltage heatmap + Tyres info @@ -64,6 +65,9 @@ State of charge % #SOC + Mean battery temperature + #HVT + State of health % #SOH @@ -186,6 +190,18 @@ Heating water pump speed Battery cooling fans speed + + + Tyres + Speed-pressure misadaption + Front left state + Front right state + Rear left state + Rear right state + Front left pressure + Front right pressure + Rear left pressure + Rear right pressure Hello blank fragment