Skip to content

Commit

Permalink
Improve bar chart visibility, working can
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremycote committed Mar 24, 2024
1 parent d453234 commit 2841844
Show file tree
Hide file tree
Showing 5 changed files with 183 additions and 231 deletions.
110 changes: 56 additions & 54 deletions Core/Modules/CANCallbacks.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,63 +20,65 @@ void CAN_Dummy_RPM(velocity_t v) {
SetMotorRPM(aggregatorWrapper, v);
LogCanMessage(aggregatorWrapper, MOTOR_RPM_DATA_ID, v, CAN_DECIMAL);
}

void MotorRPMDataCallback(iCommsMessage_t* msg) {
if (!CAN_Enabled()) {
return;
}

velocity_t rpm = readMsg(msg);
DebugPrint("CAN rpm received: %d", rpm);
SetMotorRPM(aggregatorWrapper, rpm * -1);
LogCanMessage(aggregatorWrapper, MOTOR_RPM_DATA_ID, rpm, CAN_DECIMAL);
}

void ThrottleDataCallback(iCommsMessage_t* msg) {
if (!CAN_Enabled()) {
return;
}

percentage_t throttle = readMsg(msg);
DebugPrint("CAN throttle received: %d", throttle);
SetThrottlePosition(aggregatorWrapper, throttle);
LogCanMessage(aggregatorWrapper, THROTTLE_DATA_ID, throttle, CAN_DECIMAL);
}

void ErrorDataCallback(iCommsMessage_t* msg) {
if (msg->dataLength == CANMessageLookUpTable[ERROR_DATA_ID].numberOfBytes) {
ErrorCode code = msg->data[1];
flag_status_t status = msg->data[0];
LogCanMessagePairValue(aggregatorWrapper, ERROR_DATA_ID, code, status, CAN_DECIMAL);
} else {
DebugPrint("Received corrupted error CAN message.");
}
}

void SpeedDataCallback(iCommsMessage_t* msg) {
speed_t speed = readMsg(msg);
LogCanMessage(aggregatorWrapper, SPEED_DATA_ID, speed, CAN_DECIMAL);
}

void EventDataCallback(iCommsMessage_t* msg) {
if (msg->dataLength == CANMessageLookUpTable[EVENT_DATA_ID].numberOfBytes) {
EventCode code = (EventCode) msg->data[1];
LogCanMessagePairValue(aggregatorWrapper, EVENT_DATA_ID, code, msg->data[0], CAN_DECIMAL);
} else {
DebugPrint("Received corrupted event CAN message.");
}
}

void CurrentVoltageDataCallback(iCommsMessage_t* msg) {
uint16_pair_t pair = readMsgPairUInt16Bit(msg);
SetBatteryVoltage(aggregatorWrapper, pair.b);
SetCurrent(aggregatorWrapper, pair.a);
LogCanMessagePairValue(aggregatorWrapper, CURRENT_VOLTAGE_DATA_ID, pair.a, pair.b, CAN_DECIMAL);
}
//
//void MotorRPMDataCallback(iCommsMessage_t* msg) {
// if (!CAN_Enabled()) {
// return;
// }
//
// velocity_t rpm = readMsg(msg);
// DebugPrint("CAN rpm received: %d", rpm);
// SetMotorRPM(aggregatorWrapper, rpm * -1);
// LogCanMessage(aggregatorWrapper, MOTOR_RPM_DATA_ID, rpm, CAN_DECIMAL);
//}
//
//void ThrottleDataCallback(iCommsMessage_t* msg) {
// if (!CAN_Enabled()) {
// return;
// }
//
// percentage_t throttle = readMsg(msg);
// DebugPrint("CAN throttle received: %d", throttle);
// SetThrottlePosition(aggregatorWrapper, throttle);
// LogCanMessage(aggregatorWrapper, THROTTLE_DATA_ID, throttle, CAN_DECIMAL);
//}
//
//void ErrorDataCallback(iCommsMessage_t* msg) {
// if (msg->dataLength == CANMessageLookUpTable[ERROR_DATA_ID].numberOfBytes) {
// ErrorCode code = msg->data[1];
// flag_status_t status = msg->data[0];
// LogCanMessagePairValue(aggregatorWrapper, ERROR_DATA_ID, code, status, CAN_DECIMAL);
// } else {
// DebugPrint("Received corrupted error CAN message.");
// }
//}
//
//void SpeedDataCallback(iCommsMessage_t* msg) {
// speed_t speed = readMsg(msg);
// LogCanMessage(aggregatorWrapper, SPEED_DATA_ID, speed, CAN_DECIMAL);
//}
//
//void EventDataCallback(iCommsMessage_t* msg) {
// if (msg->dataLength == CANMessageLookUpTable[EVENT_DATA_ID].numberOfBytes) {
// EventCode code = (EventCode) msg->data[1];
// LogCanMessagePairValue(aggregatorWrapper, EVENT_DATA_ID, code, msg->data[0], CAN_DECIMAL);
// } else {
// DebugPrint("Received corrupted event CAN message.");
// }
//}
//
//void CurrentVoltageDataCallback(iCommsMessage_t* msg) {
// uint16_pair_t pair = readMsgPairUInt16Bit(msg);
// SetBatteryVoltage(aggregatorWrapper, pair.b);
// SetCurrent(aggregatorWrapper, pair.a);
// LogCanMessagePairValue(aggregatorWrapper, CURRENT_VOLTAGE_DATA_ID, pair.a, pair.b, CAN_DECIMAL);
//}

void EfficiencyDataCallback(iCommsMessage_t* msg) {
lap_efficiencies_t e;
DebugPrint("Received efficiencies");
IComms_ReadEfficiencyMessage(msg, &e);
SetEfficiency(aggregatorWrapper, &e);
DebugPrint("Lap Efficiency: %d %d %d %d", e.lap_0, e.lap_1, e.lap_2, e.lap_3);

SetEfficiency(aggregatorWrapper, &e);
}
89 changes: 14 additions & 75 deletions Core/UI/HomeView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,93 +95,32 @@ HomeView::HomeView(lv_obj_t* parent, DataAggregator& aggregator) : View(parent,

lv_obj_t* efficiency_chart;
efficiency_chart = lv_chart_create(bottomRow);
lv_obj_set_size(efficiency_chart, 800, 472);
lv_obj_set_size(efficiency_chart, 800, 460);
lv_obj_center(efficiency_chart);
lv_chart_set_type(efficiency_chart, LV_CHART_TYPE_LINE);
lv_chart_set_type(efficiency_chart, LV_CHART_TYPE_BAR);
lv_chart_set_update_mode(efficiency_chart, LV_CHART_UPDATE_MODE_CIRCULAR);
lv_chart_set_point_count(efficiency_chart, 4);
lv_chart_set_range(efficiency_chart, LV_CHART_AXIS_PRIMARY_Y, 0, 200);

lv_style_t style;
lv_style_set_line_width(&style, 20);

lv_obj_add_style(efficiency_chart, &style, LV_PART_MAIN);

lv_chart_series_t* efficiencies = lv_chart_add_series(efficiency_chart, lv_palette_main(LV_PALETTE_INDIGO),
LV_CHART_AXIS_PRIMARY_Y);
getDataAggregator().efficiency.addListener([&efficiency_chart, &efficiencies](const lap_efficiencies_t& e) {
lv_chart_set_next_value(efficiency_chart, efficiencies, e.lap_0);


getDataAggregator().efficiency.addListener([efficiency_chart, efficiencies](const lap_efficiencies_t& e) {
DebugPrint("Displaying efficiencies: %d %d %d %d", e.lap_0, e.lap_1, e.lap_2, e.lap_3);

lv_chart_set_next_value(efficiency_chart, efficiencies, 200);
lv_chart_set_next_value(efficiency_chart, efficiencies, e.lap_1);
lv_chart_set_next_value(efficiency_chart, efficiencies, e.lap_2);
lv_chart_set_next_value(efficiency_chart, efficiencies, e.lap_3);

lv_chart_refresh(efficiency_chart);
});

//lv_chart_set_next_value(efficiency_chart, efficiencies, joule);




/* lapEfficiencyLabel = lv_label_create(bottomRow);
lv_label_set_text(lapEfficiencyLabel, "+99%");
lv_obj_add_style(lapEfficiencyLabel, styles->GetLargeTextStyle(), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_align(lapEfficiencyLabel, LV_ALIGN_CENTER, 0, 0);*/

/* lapTimeBarGraph = lv_chart_create(bottomRow);
lv_chart_set_type(lapTimeBarGraph, LV_CHART_TYPE_BAR);
lv_obj_set_size(lapTimeBarGraph, 200, 150);
lv_obj_center(lapTimeBarGraph);
lv_chart_set_range(lapTimeBarGraph, LV_CHART_AXIS_PRIMARY_Y, 0, 1010);
lv_chart_set_range(lapTimeBarGraph, LV_CHART_AXIS_SECONDARY_Y, 0, 1010);
lv_chart_set_point_count(lapTimeBarGraph, 12);*/

/* //Add ticks and label to every axis
lv_chart_set_axis_tick(lapTimeBarGraph, LV_CHART_AXIS_PRIMARY_X, 10, 5, 12, 3, true, 40);
lv_chart_set_axis_tick(lapTimeBarGraph, LV_CHART_AXIS_PRIMARY_Y, 10, 5, 6, 2, true, 50);
lv_chart_set_axis_tick(lapTimeBarGraph, LV_CHART_AXIS_SECONDARY_Y, 10, 5, 3, 4, true, 50);
//Zoom in a little in X
lv_chart_set_zoom_x(lapTimeBarGraph, 800);
//Add two data series
lv_chart_series_t * ser1 = lv_chart_add_series(lapTimeBarGraph, lv_palette_lighten(LV_PALETTE_GREEN, 2), LV_CHART_AXIS_PRIMARY_Y);
lv_chart_set_point_count(lapTimeBarGraph, getDataAggregator().lapTimes.getNumberOfElements());
lv_chart_set_ext_y_array(lapTimeBarGraph, ser1,
reinterpret_cast<lv_coord_t *>(aggregator.lapTimes.getValues()));
lv_chart_refresh(lapTimeBarGraph); Required after direct set
getDataAggregator().batteryVoltages.addListenerForLatest([this](const voltage_t& voltage) {
uint32_t n = voltage * 33 * 185 / 40960;
lv_label_set_text_fmt(batteryVoltageLabel, "%d.%d Volts", n / 10, n % 10);
});

viewModel.GetAggregator().motorVelocities.addListenerForLatest([this](const velocity_t& velocity) {
lv_label_set_text_fmt(motorRPMLabel, "%d RPM", velocity);
});*/

/* getDataAggregator().lapTimes.addListenerForLatest([this](const ms_t& time) {
lv_label_set_text_fmt(lapTimeLabel, "%dm %ds", time / 60000, time / 1000);
});*/

/* getDataAggregator().lapTimes.addListener([this](const DataQueue<ms_t>& queue) {
lv_chart_set_point_count(lapTimeBarGraph, queue.getNumberOfElements());
lv_chart_refresh(lapTimeBarGraph);
});*/

/* getDataAggregator().throttlePositions.addListenerForLatest([this](const percentage_t& throttle) {
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, throttleArc);
lv_anim_set_exec_cb(&a, reinterpret_cast<lv_anim_exec_xcb_t>(setArcValue));
lv_anim_set_time(&a, 100);
lv_anim_set_values(&a, lv_arc_get_value(throttleArc), throttle);
lv_anim_start(&a);
lv_label_set_text_fmt(lapTimeLabel, "%d", throttle);
});*/


/* lv_timer_t * timer = lv_timer_create([](lv_timer_t * timer) {lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, ai);
lv_anim_set_exec_cb(&a, reinterpret_cast<lv_anim_exec_xcb_t>(setArcValue));
lv_anim_set_time(&a, 100);
lv_anim_set_values(&a, lv_arc_get_value(ai), 10+rand()%80);
lv_anim_start(&a);
}, 500, nullptr);*/
}
49 changes: 29 additions & 20 deletions UOSM-Core/Modules/CANMessageLookUpModule.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,41 @@
#include "CANMessageLookUpModule.h"
#include "CANDriver.h"

extern __weak void ThrottleDataCallback(iCommsMessage_t *msg);
extern __weak void ErrorDataCallback(iCommsMessage_t *msg);
extern __weak void SpeedDataCallback(iCommsMessage_t *msg);
extern __weak void EventDataCallback(iCommsMessage_t *msg);
extern __weak void MotorRPMDataCallback(iCommsMessage_t *msg);
extern __weak void CurrentVoltageDataCallback(iCommsMessage_t *msg);
extern __weak void PressureTemperatureDataCallback(iCommsMessage_t *msg);
extern __weak void LightsDataCallback(iCommsMessage_t *msg);
extern __weak void EfficiencyDataCallback(iCommsMessage_t *msg);
__weak void ThrottleDataCallback(iCommsMessage_t* msg) {};

__weak void ErrorDataCallback(iCommsMessage_t* msg) {};

__weak void SpeedDataCallback(iCommsMessage_t* msg) {};

__weak void EventDataCallback(iCommsMessage_t* msg) {};

__weak void MotorRPMDataCallback(iCommsMessage_t* msg) {};

__weak void CurrentVoltageDataCallback(iCommsMessage_t* msg) {};

__weak void PressureTemperatureDataCallback(iCommsMessage_t* msg) {};

__weak void LightsDataCallback(iCommsMessage_t* msg) {};

__weak void EfficiencyDataCallback(iCommsMessage_t* msg) {};

/*********************************************************************************
*
* Look up table for CAN ID and meta data about its payload
*
**********************************************************************************/
const ICommsMessageInfo CANMessageLookUpTable[NUMBER_CAN_MESSAGE_IDS] = {
// Message Index CAN ID Num of Bytes Callback
{THROTTLE_DATA_ID, 0x0001, 2, &ThrottleDataCallback},
{SPEED_DATA_ID, 0x0002, 4, &SpeedDataCallback},
{MOTOR_RPM_DATA_ID, 0x0003, 4, &MotorRPMDataCallback},
{EVENT_DATA_ID, 0x0400, 2, &EventDataCallback},
{ERROR_DATA_ID, 0x0401, 2, &ErrorDataCallback},
{CURRENT_VOLTAGE_DATA_ID, 0x0004, 2, &CurrentVoltageDataCallback},
{LIGHT_DATA_ID,0x0305,4,&LightsDataCallback},
{PRESSURE_TEMPERATURE_DATA_ID, 0x0005, 8, &PressureTemperatureDataCallback},
{EFFICIENCY_DATA_ID, 0x0007, 4, &EfficiencyDataCallback}
// Message Index CAN ID Num of Bytes Callback
{THROTTLE_DATA_ID, 0x0001, 2, &ThrottleDataCallback},
{SPEED_DATA_ID, 0x0002, 4, &SpeedDataCallback},
{MOTOR_RPM_DATA_ID, 0x0003, 4, &MotorRPMDataCallback},
{EVENT_DATA_ID, 0x0400, 2, &EventDataCallback},
{ERROR_DATA_ID, 0x0401, 2, &ErrorDataCallback},
{CURRENT_VOLTAGE_DATA_ID, 0x0004, 2, &CurrentVoltageDataCallback},
{LIGHT_DATA_ID, 0x0305, 4, &LightsDataCallback},
{PRESSURE_TEMPERATURE_DATA_ID, 0x0005, 8, &PressureTemperatureDataCallback},
{EFFICIENCY_DATA_ID, 0x0007, 4, &EfficiencyDataCallback}
};

PUBLIC const ICommsMessageInfo *CANMessageLookUpGetInfo(ICommsMessageLookUpIndex id) { return &CANMessageLookUpTable[id]; }
PUBLIC const ICommsMessageInfo*
CANMessageLookUpGetInfo(ICommsMessageLookUpIndex id) { return &CANMessageLookUpTable[id]; }
4 changes: 2 additions & 2 deletions UOSM-Core/Modules/CANMessageLookUpModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ extern "C" {

// CAN Message IDs for each piece of data
// Details can be found on the CAN Reference Document
#define NUMBER_CAN_MESSAGE_IDS 10
#define NUMBER_CAN_MESSAGE_IDS 9

typedef enum ICommsMessageLookUpIndex {
THROTTLE_DATA_ID,
Expand All @@ -38,7 +38,7 @@ typedef struct {
uint8_t numberOfBytes;

// Lambda Function. Instructions to execute when a message of this type is received.
void (*canMessageCallback)(iCommsMessage_t* msg);
void (* canMessageCallback)(iCommsMessage_t* msg);

} ICommsMessageInfo;

Expand Down
Loading

0 comments on commit 2841844

Please sign in to comment.