Skip to content

Commit

Permalink
feat: add views for speed detector
Browse files Browse the repository at this point in the history
  • Loading branch information
AdonaiDiazEsparza committed Dec 10, 2024
1 parent 3f68d1a commit c73538c
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 10 deletions.
Binary file modified Canbus_app/dist/canbus_app.fap
Binary file not shown.
Binary file modified Canbus_app/dist/debug/canbus_app_d.elf
Binary file not shown.
70 changes: 60 additions & 10 deletions Canbus_app/scenes/DetectorSpeedOption.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,34 +18,70 @@ MCP_BITRATE bitrates[] = {

uint32_t time = 0;

// Thread to work with the speed detector
static int32_t thread_to_detect_speed(void* context);

// Scene On enter
void app_scene_speed_detector_on_enter(void* context) {
App* app = context;
widget_reset(app->widget);
app->thread = furi_thread_alloc_ex("Auto-detector Speed", 1024, thread_to_detect_speed, app);
furi_thread_start(app->thread);

draw_in_development(app);

view_dispatcher_switch_to_view(app->view_dispatcher, ViewWidget);
}

// Scene On event
bool app_scene_speed_detector_on_event(void* context, SceneManagerEvent event) {
App* app = context;
UNUSED(app);
UNUSED(event);
bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event) {
scene_manager_previous_scene(app->scene_manager);
return true;
}
}
return consumed;
}

// Scene On Exit
void app_scene_speed_detector_on_exit(void* context) {
App* app = context;
furi_thread_join(app->thread);
furi_thread_free(app->thread);
widget_reset(app->widget);
}

// Draw detecting widget
void draw_detecting_speed(App* app) {
Widget* widget = app->widget;
widget_reset(widget);

widget_add_string_multiline_element(
widget, 64, 32, AlignCenter, AlignCenter, FontPrimary, "Detecting Canbus\nSpeed...");
}

// Draw when the bitrate is not detected
void draw_speed_not_detected(App* app) {
Widget* widget = app->widget;
widget_reset(widget);

widget_add_string_multiline_element(
widget, 64, 32, AlignCenter, AlignCenter, FontPrimary, "Canbus Speed \nNot Detected");
}

// Draw the detected bitrate
void draw_speed_detected(App* app, const char* bitrate) {
Widget* widget = app->widget;
widget_reset(widget);

furi_string_reset(app->text);
furi_string_cat_printf(app->text, "Canbsu Speed \nDetected\n%s", bitrate);

widget_add_string_multiline_element(
widget, 64, 32, AlignCenter, AlignCenter, FontPrimary, furi_string_get_cstr(app->text));
}

// Callback for the timer
void timer_callback(void* context) {
UNUSED(context);
Expand All @@ -72,9 +108,13 @@ static int32_t thread_to_detect_speed(void* context) {
uint32_t counter = 0;
uint32_t bitrate_selector = 0;

bool was_break = false;

ERROR_CAN response = ERROR_NOMSG;

while(furi_hal_gpio_read(&gpio_button_back) && debug) {
draw_detecting_speed(app);

while(debug) {
response = is_this_bitrate(mcp_can, bitrates[bitrate_selector]);

if(response == ERROR_OK) {
Expand All @@ -93,20 +133,30 @@ static int32_t thread_to_detect_speed(void* context) {

if(time > 10) break;

if(!furi_hal_gpio_read(&gpio_button_back)) {
was_break = true;
break;
}

furi_delay_ms(1);
}

if(response == ERROR_NOMSG && debug) {
log_exception("Bitrate no detected");
} else {
if(response == ERROR_NOMSG && debug && !was_break) {
draw_speed_not_detected(app);
}

if(response != ERROR_NOMSG && debug && !was_break) {
if(bitrate_selector > 3) {
log_exception("No bitrate detected");
draw_speed_not_detected(app);
}

if(bitrate_selector <= 3) {
log_info("The Bitrate is: %s", bitrates_names[bitrate_selector]);
mcp_can->bitRate = bitrates[bitrate_selector];
draw_speed_detected(app, bitrates_names[bitrate_selector]);
}
furi_delay_ms(3000);

view_dispatcher_send_custom_event(app->view_dispatcher, 0xff);
}

time = 0;
Expand Down

0 comments on commit c73538c

Please sign in to comment.