From 875e27f417f8b6630461d58f43633718a6e8ec37 Mon Sep 17 00:00:00 2001 From: mspider65 Date: Tue, 15 Sep 2020 22:28:33 +0200 Subject: [PATCH] v2.1.3 - Override Street Mode from app - New Power assist level values (2% resolition) - Added Max speed parameters - Fix Bluetooth setup when device is already paired --- app/build.gradle | 4 +- .../ebike/tsdz2_esp32/MainActivity.java | 44 ++++++++- .../spider65/ebike/tsdz2_esp32/TSDZConst.java | 5 + .../activities/BluetoothSetupActivity.java | 16 ++- .../activities/LevelsSetupActivity.java | 24 ++--- .../activities/SystemSetupActivity.java | 12 +++ .../ebike/tsdz2_esp32/data/TSDZ_Config.java | 92 +++++++++--------- .../main/res/layout/activity_levels_setup.xml | 8 +- app/src/main/res/layout/activity_main.xml | 2 +- .../main/res/layout/activity_system_setup.xml | 42 ++++++++ app/src/main/res/menu/menu_street_mode.xml | 9 ++ .../main/res/mipmap-hdpi/street_icon_off.png | Bin 0 -> 3623 bytes .../{street_icon.png => street_icon_on.png} | Bin .../main/res/mipmap-mdpi/street_icon_off.png | Bin 0 -> 1896 bytes .../{street_icon.png => street_icon_on.png} | Bin .../main/res/mipmap-xhdpi/street_icon_off.png | Bin 0 -> 4996 bytes .../{street_icon.png => street_icon_on.png} | Bin .../res/mipmap-xxhdpi/street_icon_off.png | Bin 0 -> 9079 bytes .../{street_icon.png => street_icon_on.png} | Bin .../res/mipmap-xxxhdpi/street_icon_off.png | Bin 0 -> 12009 bytes .../{street_icon.png => street_icon_on.png} | Bin app/src/main/res/values/strings.xml | 5 + 22 files changed, 193 insertions(+), 70 deletions(-) create mode 100644 app/src/main/res/menu/menu_street_mode.xml create mode 100644 app/src/main/res/mipmap-hdpi/street_icon_off.png rename app/src/main/res/mipmap-hdpi/{street_icon.png => street_icon_on.png} (100%) create mode 100644 app/src/main/res/mipmap-mdpi/street_icon_off.png rename app/src/main/res/mipmap-mdpi/{street_icon.png => street_icon_on.png} (100%) create mode 100644 app/src/main/res/mipmap-xhdpi/street_icon_off.png rename app/src/main/res/mipmap-xhdpi/{street_icon.png => street_icon_on.png} (100%) create mode 100644 app/src/main/res/mipmap-xxhdpi/street_icon_off.png rename app/src/main/res/mipmap-xxhdpi/{street_icon.png => street_icon_on.png} (100%) create mode 100644 app/src/main/res/mipmap-xxxhdpi/street_icon_off.png rename app/src/main/res/mipmap-xxxhdpi/{street_icon.png => street_icon_on.png} (100%) diff --git a/app/build.gradle b/app/build.gradle index 2ca2476..7190079 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "spider65.ebike.tsdz2_esp32" minSdkVersion 23 targetSdkVersion 28 - versionCode 9 - versionName "2.1.2" + versionCode 10 + versionName "2.1.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/spider65/ebike/tsdz2_esp32/MainActivity.java b/app/src/main/java/spider65/ebike/tsdz2_esp32/MainActivity.java index df0ba3d..b08687b 100644 --- a/app/src/main/java/spider65/ebike/tsdz2_esp32/MainActivity.java +++ b/app/src/main/java/spider65/ebike/tsdz2_esp32/MainActivity.java @@ -36,8 +36,10 @@ import spider65.ebike.tsdz2_esp32.utils.OnSwipeListener; import android.util.Log; +import android.view.ContextMenu; import android.view.GestureDetector; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; @@ -196,6 +198,7 @@ public boolean onSwipe(Direction direction) { }); brakeIV = findViewById(R.id.brakeIV); streetModeIV = findViewById(R.id.streetModeIV); + registerForContextMenu(streetModeIV); fabButton = findViewById(R.id.fab); fabButton.setOnClickListener((View) -> { @@ -230,6 +233,43 @@ public boolean onSwipe(Direction direction) { checkBT(); } + @Override + public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + if (v.getId() != R.id.streetModeIV) + return; + TSDZBTService service = TSDZBTService.getBluetoothService(); + if (service == null || service.getConnectionStatus() != TSDZBTService.ConnectionState.CONNECTED) + return; + + // create context menu for Street Mode Icon long press + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_street_mode, menu); + menu.setHeaderTitle(getResources().getString(R.string.street_mode)); + } + + @Override + public boolean onContextItemSelected(MenuItem item){ + // manage Street Mode icon context menu selection + TSDZBTService service = TSDZBTService.getBluetoothService(); + if (service == null || service.getConnectionStatus() != TSDZBTService.ConnectionState.CONNECTED) + return false; + + switch (item.getItemId()) { + case R.id.lcd_master: + service.writeCommand(new byte[] {TSDZConst.CMD_STREET_MODE, TSDZConst.STREET_MODE_LCD_MASTER}); + break; + case R.id.force_off: + service.writeCommand(new byte[] {TSDZConst.CMD_STREET_MODE, TSDZConst.STREET_MODE_FORCE_OFF}); + break; + case R.id.force_on: + service.writeCommand(new byte[] {TSDZConst.CMD_STREET_MODE, TSDZConst.STREET_MODE_FORCE_ON}); + break; + default: + return false; + } + return true; + } + private boolean checkDevice() { String mac = MyApp.getPreferences().getString(KEY_DEVICE_MAC, null); if (mac != null) { @@ -370,9 +410,9 @@ private void refreshView() { statusTV.setVisibility(View.INVISIBLE); if (status.streetMode) - streetModeIV.setVisibility(View.VISIBLE); + streetModeIV.setImageResource(R.mipmap.street_icon_on); else - streetModeIV.setVisibility(View.INVISIBLE); + streetModeIV.setImageResource(R.mipmap.street_icon_off); switch (status.ridingMode) { case OFF_MODE: diff --git a/app/src/main/java/spider65/ebike/tsdz2_esp32/TSDZConst.java b/app/src/main/java/spider65/ebike/tsdz2_esp32/TSDZConst.java index d25550b..d0c50ca 100644 --- a/app/src/main/java/spider65/ebike/tsdz2_esp32/TSDZConst.java +++ b/app/src/main/java/spider65/ebike/tsdz2_esp32/TSDZConst.java @@ -23,6 +23,11 @@ public interface TSDZConst { byte CMD_ESP_OTA_STATUS = 0x05; byte CMD_STM8_OTA_STATUS = 0x06; byte CMD_ESP32_CONFIG = 0x08; + byte CMD_STREET_MODE = 0x09; + + byte STREET_MODE_LCD_MASTER = 0; + byte STREET_MODE_FORCE_OFF = 1; + byte STREET_MODE_FORCE_ON = 2; // sub commands of CMD_ESP32_CONFIG byte CONFIG_GET = 0; diff --git a/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/BluetoothSetupActivity.java b/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/BluetoothSetupActivity.java index 2afcb2d..df263e7 100644 --- a/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/BluetoothSetupActivity.java +++ b/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/BluetoothSetupActivity.java @@ -80,9 +80,18 @@ public void onClick(View v) { okButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopScanning(); - if (selectedDevice != null && (selectedDevice.getBondState() != BluetoothDevice.BOND_BONDED)) { - if (!selectedDevice.createBond()) - showDialog(getString(R.string.error), getString(R.string.pairing_error),true); + if (selectedDevice != null) { + if (selectedDevice.getBondState() != BluetoothDevice.BOND_BONDED) { + if (!selectedDevice.createBond()) + showDialog(getString(R.string.error), getString(R.string.pairing_error), true); + } else { + // device is already bonded + SharedPreferences.Editor editor = MyApp.getPreferences().edit(); + editor.putString(KEY_DEVICE_NAME, selectedDeviceString); + editor.putString(KEY_DEVICE_MAC, selectedDevice.getAddress()); + editor.apply(); + BluetoothSetupActivity.this.showDialog(null, getString(R.string.pairing_done),true); + } } else finish(); } @@ -105,7 +114,6 @@ public void onItemClick(AdapterView parent, View view, int position, long id) selectedDeviceString = deviceList.get(position); selectedDevice = btDeviceList.get(position); updateDeviceTV(); - stopScanning(); } }); diff --git a/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/LevelsSetupActivity.java b/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/LevelsSetupActivity.java index f80447b..1ea28bc 100644 --- a/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/LevelsSetupActivity.java +++ b/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/LevelsSetupActivity.java @@ -100,27 +100,27 @@ private void saveCfg() { return; } - if ((val1 = checkRange(binding.powerAssist1ET, 1, 100)) == null) { - showDialog(getString(R.string.power_assist_level_1), getString(R.string.range_error, 1, 100)); + if ((val1 = checkRange(binding.powerAssist1ET, 10, 500)) == null) { + showDialog(getString(R.string.power_assist_level_1), getString(R.string.range_error, 10, 500)); return; } - if ((val2 = checkRange(binding.powerAssist2ET, 1, 100)) == null) { - showDialog(getString(R.string.power_assist_level_2), getString(R.string.range_error, 1, 100)); + if ((val2 = checkRange(binding.powerAssist2ET, 10, 500)) == null) { + showDialog(getString(R.string.power_assist_level_2), getString(R.string.range_error, 10, 500)); return; } - if ((val3 = checkRange(binding.powerAssist3ET, 1, 100)) == null) { - showDialog(getString(R.string.power_assist_level_3), getString(R.string.range_error, 1, 100)); + if ((val3 = checkRange(binding.powerAssist3ET, 10, 500)) == null) { + showDialog(getString(R.string.power_assist_level_3), getString(R.string.range_error, 10, 500)); return; } - if ((val4 = checkRange(binding.powerAssist4ET, 1, 100)) == null) { - showDialog(getString(R.string.power_assist_level_4), getString(R.string.range_error, 1, 100)); + if ((val4 = checkRange(binding.powerAssist4ET, 10, 500)) == null) { + showDialog(getString(R.string.power_assist_level_4), getString(R.string.range_error, 10, 500)); return; } if (val2>val1 && val3>val2 && val4>val3) { - cfg.ui8_power_assist_level[0] = val1; - cfg.ui8_power_assist_level[1] = val2; - cfg.ui8_power_assist_level[2] = val3; - cfg.ui8_power_assist_level[3] = val4; + cfg.ui8_power_assist_level[0] = val1/2; + cfg.ui8_power_assist_level[1] = val2/2; + cfg.ui8_power_assist_level[2] = val3/2; + cfg.ui8_power_assist_level[3] = val4/2; } else { showDialog(getString(R.string.power_mode), getString(R.string.level_error)); return; diff --git a/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/SystemSetupActivity.java b/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/SystemSetupActivity.java index f4f9429..29b91a7 100644 --- a/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/SystemSetupActivity.java +++ b/app/src/main/java/spider65/ebike/tsdz2_esp32/activities/SystemSetupActivity.java @@ -155,9 +155,21 @@ private void saveCfg() { } cfg.ui16_wheel_perimeter = val; + if ((val = checkRange(binding.maxSpeedET, 10, 60)) == null) { + showDialog(getString(R.string.max_speed), getString(R.string.range_error, 10, 60)); + return; + } + cfg.ui8_max_speed = val; + checked = binding.cruiseModeCB.isChecked(); cfg.ui8_cruise_enabled = checked; + if ((val = checkRange(binding.maxStreetSpeedET, 10, 45)) == null) { + showDialog(getString(R.string.max_speed), getString(R.string.range_error, 10, 45)); + return; + } + cfg.ui8_street_max_speed = val; + checked = binding.streetPowerCB.isChecked(); if (checked) { if ((val = checkRange(binding.streetPowerET, 50, 1000)) == null) { diff --git a/app/src/main/java/spider65/ebike/tsdz2_esp32/data/TSDZ_Config.java b/app/src/main/java/spider65/ebike/tsdz2_esp32/data/TSDZ_Config.java index 21c53c3..88f0c17 100644 --- a/app/src/main/java/spider65/ebike/tsdz2_esp32/data/TSDZ_Config.java +++ b/app/src/main/java/spider65/ebike/tsdz2_esp32/data/TSDZ_Config.java @@ -40,7 +40,8 @@ public int getValue() { public int ui8_motor_temperature_max_value_to_limit; public int ui8_motor_acceleration; public int ui8_dummy; - public int ui16_dummy; + public int ui8_max_speed; + public int ui8_street_max_speed; public int ui8_pedal_torque_per_10_bit_ADC_step_x100; public TempControl temperature_control; public boolean throttleEnabled; @@ -59,7 +60,7 @@ public int getValue() { public int ui8_li_io_cell_full_bars_x100; public int ui8_li_io_cell_one_bar_x100; public int ui8_li_io_cell_empty_x100; - public boolean ui8_street_mode_enabled; + public boolean ui8_dummy2; public boolean ui8_street_mode_power_limit_enabled; public boolean ui8_street_mode_throttle_enabled; public int ui8_street_mode_power_limit_div25; @@ -74,43 +75,43 @@ public int getValue() { /* #pragma pack(1) - typedef struct _tsdz_cfg - { - volatile uint8_t ui8_motor_type; - volatile uint8_t ui8_motor_temperature_min_value_to_limit; - volatile uint8_t ui8_motor_temperature_max_value_to_limit; - volatile uint8_t ui8_motor_acceleration; - volatile uint8_t ui8_cadence_sensor_mode; - volatile uint16_t ui16_cadence_sensor_pulse_high_percentage_x10; - volatile uint8_t ui8_pedal_torque_per_10_bit_ADC_step_x100; - volatile uint8_t ui8_optional_ADC_function; - volatile uint8_t ui8_assist_without_pedal_rotation_threshold; - volatile uint8_t ui8_lights_configuration; - volatile uint16_t ui16_wheel_perimeter; - volatile uint8_t ui8_cruise_enabled; - volatile uint16_t ui16_battery_voltage_reset_wh_counter_x10; - volatile uint8_t ui8_battery_max_current; - volatile uint8_t ui8_target_max_battery_power_div25; - volatile uint8_t ui8_battery_cells_number; - volatile uint16_t ui16_battery_pack_resistance_x1000; - volatile uint16_t ui16_battery_low_voltage_cut_off_x10; - volatile uint8_t ui8_li_io_cell_overvolt_x100; - volatile uint8_t ui8_li_io_cell_full_bars_x100; - volatile uint8_t ui8_li_io_cell_one_bar_x100; - volatile uint8_t ui8_li_io_cell_empty_x100; - volatile uint8_t ui8_street_mode_enabled; - volatile uint8_t ui8_street_mode_power_limit_enabled; - volatile uint8_t ui8_street_mode_throttle_enabled; - volatile uint8_t ui8_street_mode_power_limit_div25; - volatile uint8_t ui8_street_mode_speed_limit; - volatile uint8_t ui8_esp32_temp_control; - volatile uint8_t ui8_cadence_assist_level[4]; - volatile uint8_t ui8_power_assist_level[4]; - volatile uint8_t ui8_torque_assist_level[4]; - volatile uint8_t ui8_eMTB_assist_level[4]; - volatile uint8_t ui8_walk_assist_level[4]; - volatile uint8_t ui8_torque_offset_fix; - volatile uint16_t ui16_torque_offset_value; + typedef struct _tsdz_cfg { + volatile uint8_t ui8_motor_inductance_x1048576; + volatile uint8_t ui8_motor_temperature_min_value_to_limit; + volatile uint8_t ui8_motor_temperature_max_value_to_limit; + volatile uint8_t ui8_motor_acceleration; + volatile uint8_t ui8_dummy; + volatile uint8_t ui8_max_speed; + volatile uint8_t ui8_street_max_speed; + volatile uint8_t ui8_pedal_torque_per_10_bit_ADC_step_x100; + volatile uint8_t ui8_optional_ADC_function; + volatile uint8_t ui8_assist_without_pedal_rotation_threshold; + volatile uint8_t ui8_lights_configuration; + volatile uint16_t ui16_wheel_perimeter; + volatile uint8_t ui8_cruise_mode_enabled; + volatile uint16_t ui16_battery_voltage_reset_wh_counter_x10; + volatile uint8_t ui8_battery_max_current; + volatile uint8_t ui8_target_max_battery_power_div25; + volatile uint8_t ui8_battery_cells_number; + volatile uint16_t ui16_battery_pack_resistance_x1000; + volatile uint16_t ui16_battery_low_voltage_cut_off_x10; + volatile uint8_t ui8_li_io_cell_overvolt_x100; + volatile uint8_t ui8_li_io_cell_full_bars_x100; + volatile uint8_t ui8_li_io_cell_one_bar_x100; + volatile uint8_t ui8_li_io_cell_empty_x100; + volatile uint8_t ui8_dummy2; + volatile uint8_t ui8_street_mode_power_limit_enabled; + volatile uint8_t ui8_street_mode_throttle_enabled; + volatile uint8_t ui8_street_mode_power_limit_div25; + volatile uint8_t ui8_street_mode_speed_limit; + volatile uint8_t ui8_esp32_temp_control; + volatile uint8_t ui8_cadence_assist_level[4]; + volatile uint8_t ui8_power_assist_level[4]; + volatile uint8_t ui8_torque_assist_level[4]; + volatile uint8_t ui8_eMTB_assist_sensitivity[4]; + volatile uint8_t ui8_walk_assist_level[4]; + volatile uint8_t ui8_torque_offset_fix; + volatile uint16_t ui16_torque_offset_value; } struct_tsdz_cfg; */ @@ -124,7 +125,8 @@ public boolean setData(byte[] data) { ui8_motor_temperature_max_value_to_limit = (data[2] & 255); ui8_motor_acceleration = (data[3] & 255); ui8_dummy = (data[4] & 255 ); // ui8_cadence_sensor_mode - ui16_dummy = (data[5] & 255) + ((data[6] & 255) << 8); + ui8_max_speed = (data[5] & 255); + ui8_street_max_speed = (data[6] & 255); ui8_pedal_torque_per_10_bit_ADC_step_x100 = (data[7] & 255); throttleEnabled = (data[8] & 255) == 2; ui8_assist_without_pedal_rotation_threshold = (data[9] & 255); @@ -142,7 +144,7 @@ public boolean setData(byte[] data) { ui8_li_io_cell_full_bars_x100 = (data[24] & 255) + 200; ui8_li_io_cell_one_bar_x100 = (data[25] & 255) + 200; ui8_li_io_cell_empty_x100 = (data[26] & 255) + 200; - ui8_street_mode_enabled = (data[27] & 255) != 0; + ui8_dummy2 = (data[27] & 255) != 0; ui8_street_mode_power_limit_enabled = (data[28] & 255) != 0; ui8_street_mode_throttle_enabled = (data[29] & 255) != 0; ui8_street_mode_power_limit_div25 = (data[30] & 255) * 25; @@ -174,9 +176,9 @@ public byte[] toByteArray() { data[1] = (byte)ui8_motor_temperature_min_value_to_limit; data[2] = (byte)ui8_motor_temperature_max_value_to_limit; data[3] = (byte)ui8_motor_acceleration; - data[4] = (byte)ui8_dummy; // ui8_cadence_sensor_mode - data[5] = (byte)ui16_dummy; - data[6] = (byte)(ui16_dummy >>> 8); + data[4] = (byte)ui8_dummy; + data[5] = (byte)ui8_max_speed; + data[6] = (byte)(ui8_street_max_speed); data[7] = (byte)ui8_pedal_torque_per_10_bit_ADC_step_x100; data[8] = (byte)(throttleEnabled ? 2:0); // ui8_optional_ADC_function data[8] = temperature_control == TempControl.tempADC ? (byte)1:data[8]; // ui8_optional_ADC_function @@ -198,7 +200,7 @@ public byte[] toByteArray() { data[24] = (byte)(ui8_li_io_cell_full_bars_x100 - 200); data[25] = (byte)(ui8_li_io_cell_one_bar_x100 - 200); data[26] = (byte)(ui8_li_io_cell_empty_x100 - 200); - data[27] = (byte)(ui8_street_mode_enabled? 1:0); + data[27] = (byte)(ui8_dummy2 ? 1:0); data[28] = (byte)(ui8_street_mode_power_limit_enabled? 1:0); data[29] = (byte)(ui8_street_mode_throttle_enabled? 1:0); data[30] = (byte)(ui8_street_mode_power_limit_div25/25); diff --git a/app/src/main/res/layout/activity_levels_setup.xml b/app/src/main/res/layout/activity_levels_setup.xml index e587bf4..78c34bb 100644 --- a/app/src/main/res/layout/activity_levels_setup.xml +++ b/app/src/main/res/layout/activity_levels_setup.xml @@ -169,7 +169,7 @@ android:layout_height="wrap_content" android:layout_marginStart="5dp" android:ems="4" - android:text="@{String.valueOf(cfg.ui8_power_assist_level[0])}" + android:text="@{String.valueOf(cfg.ui8_power_assist_level[0]*2)}" android:inputType="number" /> @@ -190,7 +190,7 @@ android:layout_height="wrap_content" android:layout_marginStart="5dp" android:ems="4" - android:text="@{String.valueOf(cfg.ui8_power_assist_level[1])}" + android:text="@{String.valueOf(cfg.ui8_power_assist_level[1]*2)}" android:inputType="number" /> @@ -211,7 +211,7 @@ android:layout_height="wrap_content" android:layout_marginStart="5dp" android:ems="4" - android:text="@{String.valueOf(cfg.ui8_power_assist_level[2])}" + android:text="@{String.valueOf(cfg.ui8_power_assist_level[2]*2)}" android:inputType="number" /> @@ -232,7 +232,7 @@ android:layout_height="wrap_content" android:layout_marginStart="5dp" android:ems="4" - android:text="@{String.valueOf(cfg.ui8_power_assist_level[3])}" + android:text="@{String.valueOf(cfg.ui8_power_assist_level[3]*2)}" android:inputType="number" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d77f36c..7686fe5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -115,7 +115,7 @@ android:id="@+id/streetModeIV" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@mipmap/street_icon" /> + android:src="@mipmap/street_icon_on" /> + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/street_icon_off.png b/app/src/main/res/mipmap-hdpi/street_icon_off.png new file mode 100644 index 0000000000000000000000000000000000000000..8e04209c46c2637c1ade78d88b8b16983904575e GIT binary patch literal 3623 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 e1^*vrC&vAs#aSgwh$wpg&*lAo#nyXa}j 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 d|K8*A-)AaG#lhhXDWpW?dZ^obuiD-v>-b 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 Assist Level + Force On + Force Off + LCD Master + Max Speed + HAL 1 HAL 2 HAL 3