Skip to content

Commit

Permalink
renaulttwizy: Fix deprecated operations on volatile
Browse files Browse the repository at this point in the history
Extract the duplicated code to a helper method.

Do the flag setting via a local variable to make it explicit when the
volatile variable is accessed.

The sensors state really should use atomics if it may be accessed from
different contexts (threads/interrupts), or otherwise just remove
volatile since it's not doing anything useful.
  • Loading branch information
nattgris committed Jan 12, 2025
1 parent e336b4d commit 2225937
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 27 deletions.
14 changes: 14 additions & 0 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_battmon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,20 @@ void OvmsVehicleRenaultTwizy::BatteryUpdate()
}


/**
* BatterySetSensorAndUpdate: Set sensor state and update if all done
*/
void OvmsVehicleRenaultTwizy::BatterySetSensorAndUpdate(uint8_t flag)
{
uint8_t batt_sensors_state = twizy_batt_sensors_state;
batt_sensors_state |= flag;
twizy_batt_sensors_state = batt_sensors_state;
if ((batt_sensors_state & BATT_SENSORS_READY) >= BATT_SENSORS_GOTALL) {
BatteryUpdate();
}
}


/**
* BatteryReset: reset deviations, alerts & watches
*/
Expand Down
33 changes: 6 additions & 27 deletions vehicle/OVMS.V3/components/vehicle_renaulttwizy/src/rt_can.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,6 @@ void OvmsVehicleRenaultTwizy::CanResponder(const CAN_frame_t* p_frame)
}
}


/**
* Asynchronous CAN RX handler
*/
Expand Down Expand Up @@ -353,12 +352,8 @@ void OvmsVehicleRenaultTwizy::IncomingFrameCan1(CAN_frame_t* p_frame)
}
}
}

// detect fetch completion:
twizy_batt_sensors_state |= BATT_SENSORS_GOT554;
if ((twizy_batt_sensors_state & BATT_SENSORS_READY) >= BATT_SENSORS_GOTALL) {
BatteryUpdate();
}

BatterySetSensorAndUpdate(BATT_SENSORS_GOT554);
}
break;

Expand Down Expand Up @@ -409,11 +404,7 @@ void OvmsVehicleRenaultTwizy::IncomingFrameCan1(CAN_frame_t* p_frame)
twizy_cell[8].volt_new = ((UINT) CAN_NIBL(4) << 8) | ((UINT) CAN_BYTE(5));
twizy_cell[9].volt_new = ((UINT) CAN_BYTE(6) << 4) | ((UINT) CAN_NIBH(7));

// detect fetch completion:
twizy_batt_sensors_state |= BATT_SENSORS_GOT557;
if ((twizy_batt_sensors_state & BATT_SENSORS_READY) >= BATT_SENSORS_GOTALL) {
BatteryUpdate();
}
BatterySetSensorAndUpdate(BATT_SENSORS_GOT557);
}
break;

Expand All @@ -428,11 +419,7 @@ void OvmsVehicleRenaultTwizy::IncomingFrameCan1(CAN_frame_t* p_frame)
twizy_cell[12].volt_new = ((UINT) CAN_BYTE(3) << 4) | ((UINT) CAN_NIBH(4));
twizy_cell[13].volt_new = ((UINT) CAN_NIBL(4) << 8) | ((UINT) CAN_BYTE(5));

// detect fetch completion:
twizy_batt_sensors_state |= BATT_SENSORS_GOT55E;
if ((twizy_batt_sensors_state & BATT_SENSORS_READY) >= BATT_SENSORS_GOTALL) {
BatteryUpdate();
}
BatterySetSensorAndUpdate(BATT_SENSORS_GOT55E);
}
break;

Expand All @@ -449,11 +436,7 @@ void OvmsVehicleRenaultTwizy::IncomingFrameCan1(CAN_frame_t* p_frame)
v2 = ((UINT) CAN_NIBL(6) << 8) | ((UINT) CAN_BYTE(7));
twizy_batt[0].volt_new = (v1 + v2 + 1) >> 1;

// detect fetch completion:
twizy_batt_sensors_state |= BATT_SENSORS_GOT55F;
if ((twizy_batt_sensors_state & BATT_SENSORS_READY) >= BATT_SENSORS_GOTALL) {
BatteryUpdate();
}
BatterySetSensorAndUpdate(BATT_SENSORS_GOT55F);
}
break;

Expand Down Expand Up @@ -757,11 +740,7 @@ void OvmsVehicleRenaultTwizy::IncomingFrameCan1(CAN_frame_t* p_frame)
}
}

// detect fetch completion:
twizy_batt_sensors_state |= BATT_SENSORS_GOT700;
if ((twizy_batt_sensors_state & BATT_SENSORS_READY) >= BATT_SENSORS_GOTALL) {
BatteryUpdate();
}
BatterySetSensorAndUpdate(BATT_SENSORS_GOT700);
}
break;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ class OvmsVehicleRenaultTwizy : public OvmsVehicle
void BatteryUpdate();
void BatteryReset();
void BatterySendDataUpdate(bool force = false);
void BatterySetSensorAndUpdate(uint8_t flag);
vehicle_command_t CommandBatt(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, const char* const* argv);

protected:
Expand Down

0 comments on commit 2225937

Please sign in to comment.