Skip to content

Commit

Permalink
Twizy: full cleanup on module unloading
Browse files Browse the repository at this point in the history
  • Loading branch information
dexterbg committed Dec 21, 2020
1 parent 2455c1e commit fb77c2a
Show file tree
Hide file tree
Showing 11 changed files with 199 additions and 5 deletions.
30 changes: 30 additions & 0 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_battmon.cpp
Expand Up @@ -130,6 +130,36 @@ void OvmsVehicleRenaultTwizy::BatteryInit()
}


/**
* BatteryShutdown:
*/
void OvmsVehicleRenaultTwizy::BatteryShutdown()
{
ESP_LOGI(TAG, "battmon subsystem shutdown");

// commands
cmd_xrt->UnregisterCommand("batt");

// metrics
MyMetrics.DeregisterMetric(m_batt_use_soc_min);
MyMetrics.DeregisterMetric(m_batt_use_soc_max);
MyMetrics.DeregisterMetric(m_batt_use_volt_min);
MyMetrics.DeregisterMetric(m_batt_use_volt_max);
MyMetrics.DeregisterMetric(m_batt_use_temp_min);
MyMetrics.DeregisterMetric(m_batt_use_temp_max);

MyMetrics.DeregisterMetric(m_bms_type);
MyMetrics.DeregisterMetric(m_bms_state1);
MyMetrics.DeregisterMetric(m_bms_state2);
MyMetrics.DeregisterMetric(m_bms_error);
MyMetrics.DeregisterMetric(m_bms_balancing);
MyMetrics.DeregisterMetric(m_bms_balancetime);
MyMetrics.DeregisterMetric(m_bms_temp);

vSemaphoreDelete(m_batt_sensors);
}


bool OvmsVehicleRenaultTwizy::BatteryLock(int maxwait_ms)
{
if (m_batt_sensors && xSemaphoreTake(m_batt_sensors, pdMS_TO_TICKS(maxwait_ms)) == pdTRUE)
Expand Down
11 changes: 11 additions & 0 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_charge.cpp
Expand Up @@ -74,6 +74,17 @@ void OvmsVehicleRenaultTwizy::ChargeInit()
}


/**
* ChargeShutdown:
*/
void OvmsVehicleRenaultTwizy::ChargeShutdown()
{
ESP_LOGI(TAG, "charge subsystem shutdown");

cmd_xrt->UnregisterCommand("ca");
}


OvmsVehicleRenaultTwizy::vehicle_command_t OvmsVehicleRenaultTwizy::CommandCA(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, const char* const* argv)
{
metric_unit_t rangeUnit = (MyConfig.GetParamValue("vehicle", "units.distance") == "M") ? Miles : Kilometers;
Expand Down
14 changes: 14 additions & 0 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_obd2.cpp
Expand Up @@ -71,6 +71,8 @@ const OvmsVehicle::poll_pid_t twizy_poll_default[] = {

void OvmsVehicleRenaultTwizy::ObdInit()
{
ESP_LOGI(TAG, "obd subsystem init");

// init poller:
PollSetPidList(m_can1, twizy_poll_default);
PollSetState(0);
Expand Down Expand Up @@ -114,6 +116,18 @@ void OvmsVehicleRenaultTwizy::ObdInit()
}


void OvmsVehicleRenaultTwizy::ObdShutdown()
{
ESP_LOGI(TAG, "obd subsystem shutdown");

cmd_xrt->UnregisterCommand("obd");

twizy_obd_rxwait.Take(portMAX_DELAY);
PollSetPidList(m_can1, NULL);
twizy_obd_rxwait.Give();
}


void OvmsVehicleRenaultTwizy::ObdTicker1()
{
// skip ticker when ObdRequest is waiting for response:
Expand Down
35 changes: 35 additions & 0 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_pwrmon.cpp
Expand Up @@ -92,6 +92,25 @@ void OvmsVehicleRenaultTwizy::PowerInit()
}


/**
* PowerShutdown:
*/
void OvmsVehicleRenaultTwizy::PowerShutdown()
{
ESP_LOGI(TAG, "pwrmon subsystem shutdown");

// commands
cmd_xrt->UnregisterCommand("power");

// metrics
twizy_speedpwr[0].DeleteMetrics();
twizy_speedpwr[1].DeleteMetrics();
twizy_speedpwr[2].DeleteMetrics();
twizy_levelpwr[0].DeleteMetrics();
twizy_levelpwr[1].DeleteMetrics();
}


/**
* PowerUpdateMetrics: publish metrics
*/
Expand Down Expand Up @@ -281,6 +300,14 @@ void speedpwr::InitMetrics(int i, metric_unit_t spdunit)
m_spdunit = spdunit;
}

void speedpwr::DeleteMetrics()
{
MyMetrics.DeregisterMetric(m_dist);
MyMetrics.DeregisterMetric(m_used);
MyMetrics.DeregisterMetric(m_recd);
MyMetrics.DeregisterMetric(m_spdavg);
}

void speedpwr::UpdateMetrics()
{
*m_dist = (float) dist / 10000;
Expand Down Expand Up @@ -311,6 +338,14 @@ void levelpwr::InitMetrics(int i)
m_recd = MyMetrics.InitFloat(x_rt_p_stats_level_recd[i], SM_STALE_HIGH, 0, kWh);
}

void levelpwr::DeleteMetrics()
{
MyMetrics.DeregisterMetric(m_dist);
MyMetrics.DeregisterMetric(m_hsum);
MyMetrics.DeregisterMetric(m_used);
MyMetrics.DeregisterMetric(m_recd);
}

void levelpwr::UpdateMetrics()
{
*m_dist = (float) dist / 1000;
Expand Down
Expand Up @@ -45,6 +45,7 @@ struct speedpwr // speed+power usage statistics for const/accel/decel
// Metrics

void InitMetrics(int i, metric_unit_t spdunit);
void DeleteMetrics();
void UpdateMetrics();
bool IsModified(size_t modifier);

Expand All @@ -53,8 +54,6 @@ struct speedpwr // speed+power usage statistics for const/accel/decel
OvmsMetricFloat *m_used;
OvmsMetricFloat *m_recd;
OvmsMetricFloat *m_spdavg;


};

struct levelpwr // power usage statistics for level up/down
Expand All @@ -69,14 +68,14 @@ struct levelpwr // power usage statistics for level up/down
// Metrics

void InitMetrics(int i);
void DeleteMetrics();
void UpdateMetrics();
bool IsModified(size_t modifier);

OvmsMetricFloat *m_dist;
OvmsMetricFloat *m_hsum;
OvmsMetricFloat *m_used;
OvmsMetricFloat *m_recd;

};


Expand Down
16 changes: 16 additions & 0 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_sevcon.cpp
Expand Up @@ -141,12 +141,28 @@ SevconClient::SevconClient(OvmsVehicleRenaultTwizy* twizy)

SevconClient::~SevconClient()
{
ESP_LOGI(TAG, "sevcon subsystem shutdown");

m_twizy->cmd_xrt->UnregisterCommand("mon");
m_twizy->cmd_xrt->UnregisterCommand("cfg");

if (m_kickdown_timer)
xTimerDelete(m_kickdown_timer, 0);
if (m_faultqueue)
vQueueDelete(m_faultqueue);
if (m_asynctask)
vTaskDelete(m_asynctask);

ShutdownMonitoring();

// metrics:
MyMetrics.DeregisterMetric(ms_cfg_profile);
MyMetrics.DeregisterMetric(ms_cfg_user);
MyMetrics.DeregisterMetric(ms_cfg_base);
MyMetrics.DeregisterMetric(ms_cfg_ws);
MyMetrics.DeregisterMetric(ms_cfg_unsaved);
MyMetrics.DeregisterMetric(ms_cfg_applied);
MyMetrics.DeregisterMetric(ms_cfg_type);
}

SevconClient* SevconClient::GetInstance(OvmsWriter* writer /*=NULL*/)
Expand Down
Expand Up @@ -211,6 +211,7 @@ class SevconClient : public InternalRamAllocated
public:
// Monitoring:
void InitMonitoring();
void ShutdownMonitoring();
void QueryMonitoringData();
void ProcessMonitoringData(CANopenJob &job);
void SendMonitoringData();
Expand Down
Expand Up @@ -204,6 +204,46 @@ void SevconClient::InitMonitoring()
}


/**
* ShutdownMonitoring:
*/
void SevconClient::ShutdownMonitoring()
{
// close file:
if (m_mon_enable) {
FILE* fp = (FILE*)m_mon_file;
m_mon_enable = false;
if (fp) {
OvmsMutexLock lock(&m_mon_mutex);
m_mon_file = NULL;
fclose(fp);
}
}

// delete metrics:
MyMetrics.DeregisterMetric(m_mon.mot_current);
MyMetrics.DeregisterMetric(m_mon.mot_voltage);
MyMetrics.DeregisterMetric(m_mon.mot_power);
MyMetrics.DeregisterMetric(m_mon.mot_voltmod);

MyMetrics.DeregisterMetric(m_mon.mot_slipfreq);
MyMetrics.DeregisterMetric(m_mon.mot_outputfreq);

MyMetrics.DeregisterMetric(m_mon.mot_torque_demand);
MyMetrics.DeregisterMetric(m_mon.mot_torque);
MyMetrics.DeregisterMetric(m_mon.mot_torque_limit);

MyMetrics.DeregisterMetric(m_mon.bat_voltage);
MyMetrics.DeregisterMetric(m_mon.cap_voltage);

MyMetrics.DeregisterMetric(m_mon.m_bat_power_drv);
MyMetrics.DeregisterMetric(m_mon.m_bat_power_rec);

MyMetrics.DeregisterMetric(m_mon.m_mot_torque_drv);
MyMetrics.DeregisterMetric(m_mon.m_mot_torque_rec);
}


/**
* QueryMonitoringData: request monitored SDOs from SEVCON
* - called by IncomingFrameCan1 (triggered by PDO 0x629, 100ms interval)
Expand Down
22 changes: 22 additions & 0 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_web.cpp
Expand Up @@ -69,6 +69,28 @@ void OvmsVehicleRenaultTwizy::WebInit()
}


/**
* WebShutdown: deregister pages
*/
void OvmsVehicleRenaultTwizy::WebShutdown()
{
// vehicle menu:
MyWebServer.DeregisterPage("/xrt/features");
MyWebServer.DeregisterPage("/xrt/brakelight");
MyWebServer.DeregisterPage("/xrt/profed");
MyWebServer.DeregisterPage("/xrt/dmconfig");
MyWebServer.DeregisterPage("/xrt/battery");
MyWebServer.DeregisterPage("/xrt/battmon");
MyWebServer.DeregisterPage("/xrt/scmon");

// main menu:
MyWebServer.DeregisterPage("/xrt/drivemode");

// page callbacks:
MyWebServer.DeregisterCallbacks("xrt");
}


/**
* WebCfgFeatures: configure general parameters (URL /xrt/config)
*/
Expand Down
Expand Up @@ -26,7 +26,7 @@
#include "ovms_log.h"
static const char *TAG = "v-twizy";

#define VERSION "1.11.0"
#define VERSION "1.12.0"

#include <stdio.h>
#include <string>
Expand Down Expand Up @@ -148,11 +148,32 @@ OvmsVehicleRenaultTwizy::~OvmsVehicleRenaultTwizy()
{
ESP_LOGI(TAG, "Shutdown Renault Twizy vehicle module");

// unregister event listeners:
// deregister from framework:
MyEvents.DeregisterEvent(TAG);
MyCan.DeregisterCallback(TAG);

// shutdown subsystems:
ObdShutdown();
if (m_sevcon)
delete m_sevcon;
WebShutdown();
ChargeShutdown();
PowerShutdown();
BatteryShutdown();

// delete metrics:
MyMetrics.DeregisterMetric(m_version);
MyMetrics.DeregisterMetric(mt_charger_status);
MyMetrics.DeregisterMetric(mt_bms_status);
MyMetrics.DeregisterMetric(mt_sevcon_status);
MyMetrics.DeregisterMetric(mt_bms_alert_12v);
MyMetrics.DeregisterMetric(mt_bms_alert_batt);
MyMetrics.DeregisterMetric(mt_bms_alert_temp);
MyMetrics.DeregisterMetric(m_lock_speed);
MyMetrics.DeregisterMetric(m_valet_odo);

// deregister command root:
MyCommandApp.UnregisterCommand("xrt");
}

const char* OvmsVehicleRenaultTwizy::VehicleShortName()
Expand Down
Expand Up @@ -315,6 +315,7 @@ class OvmsVehicleRenaultTwizy : public OvmsVehicle

public:
void PowerInit();
void PowerShutdown();
void PowerUpdateMetrics();
void PowerUpdate();
void PowerReset();
Expand Down Expand Up @@ -365,6 +366,7 @@ class OvmsVehicleRenaultTwizy : public OvmsVehicle

public:
void BatteryInit();
void BatteryShutdown();
bool BatteryLock(int maxwait_ms);
void BatteryUnlock();
void BatteryUpdateMetrics();
Expand Down Expand Up @@ -448,6 +450,7 @@ class OvmsVehicleRenaultTwizy : public OvmsVehicle

public:
void ChargeInit();
void ChargeShutdown();
vehicle_command_t CommandCA(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, const char* const* argv);
vehicle_command_t MsgCommandCA(std::string &result, int command, const char* args);
vehicle_command_t CommandSetChargeMode(vehicle_mode_t mode);
Expand Down Expand Up @@ -505,6 +508,7 @@ class OvmsVehicleRenaultTwizy : public OvmsVehicle

public:
void ObdInit();
void ObdShutdown();
void ObdTicker1();
void ObdTicker10();
int ObdRequest(uint16_t txid, uint16_t rxid, string request, string& response, int timeout_ms=3000);
Expand Down Expand Up @@ -544,6 +548,7 @@ class OvmsVehicleRenaultTwizy : public OvmsVehicle

public:
void WebInit();
void WebShutdown();
static void WebCfgFeatures(PageEntry_t& p, PageContext_t& c);
static void WebCfgBattery(PageEntry_t& p, PageContext_t& c);
static void WebConsole(PageEntry_t& p, PageContext_t& c);
Expand Down

0 comments on commit fb77c2a

Please sign in to comment.