Просмотр исходного кода

need to fix module_set_baudrate function

Chaka 2 лет назад
Родитель
Сommit
4b1c16153f
5 измененных файлов с 55 добавлено и 24 удалено
  1. 34 19
      scenes/uhf_scene_settings.c
  2. 4 0
      uhf_app.c
  3. 1 0
      uhf_app_i.h
  4. 11 2
      uhf_module.c
  5. 5 3
      uhf_module.h

+ 34 - 19
scenes/uhf_scene_settings.c

@@ -2,42 +2,57 @@
 #include "../uhf_module.h"
 
 void uhf_settings_set_module_baudrate(VariableItem* item) {
-    UNUSED(item);
+    M100Module* uhf_module = variable_item_get_context(item);
+    uint8_t index = variable_item_get_current_value_index(item);
+    uint32_t baudrate = BAUD_RATES[index];
+    m100_set_baudrate(uhf_module, baudrate);
+    char text_buf[10];
+    snprintf(text_buf, sizeof(text_buf), "%lu", uhf_module->baudrate);
+    variable_item_set_current_value_text(item, text_buf);
+}
+
+uint8_t uhf_settings_get_module_baudrate_index(M100Module* module) {
+    uint32_t baudrate = module->baudrate;
+    for(uint8_t i = 0; i < sizeof(BAUD_RATES); i++) {
+        if(BAUD_RATES[i] == baudrate) {
+            return i;
+        }
+    }
+    return 0;
 }
 
 void uhf_scene_settings_on_enter(void* ctx) {
+    furi_assert(ctx != NULL, "ctx is NULL in uhf_scene_settings_on_enter");
     UHFApp* uhf_app = ctx;
-    VariableItem* item;
-    uint8_t value_index = 0;
     M100Module* uhf_module = uhf_app->worker->module;
+    VariableItem* item;
+    VariableItemList* variable_item_list = uhf_app->variable_item_list;
+
+    uint8_t value_index = uhf_settings_get_module_baudrate_index(uhf_module);
+    char text_buf[10];
+    snprintf(text_buf, sizeof(text_buf), "%lu", uhf_module->baudrate);
 
     item = variable_item_list_add(
-        uhf_app->variable_item_list,
-        "Baud Rate:",
+        variable_item_list,
+        "Baudrate:",
         sizeof(BAUD_RATES),
         uhf_settings_set_module_baudrate,
         uhf_module);
-    scene_manager_set_scene_state(uhf_app->scene_manager, UHFSceneSettings, (uint32_t)item);
-    variable_item_set_current_value_index(item, value_index);
-    char text_buf[10] = {0};
-    snprintf(text_buf, sizeof(text_buf), "%d", uhf_module->baudrate);
+
     variable_item_set_current_value_text(item, text_buf);
-    view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewMenu);
+    variable_item_set_current_value_index(item, value_index);
+    view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewVariableItemList);
 }
 
 bool uhf_scene_settings_on_event(void* ctx, SceneManagerEvent event) {
     UHFApp* uhf_app = ctx;
-    bool consumed = false;
-    if(event.type == SceneManagerEventTypeCustom) {
-        if(event.event == UHFCustomEventSceneSettingLock) {
-            scene_manager_previous_scene(uhf_app->scene_manager);
-            consumed = true;
-        }
-    }
-    return consumed;
+    UNUSED(uhf_app);
+    UNUSED(event);
+    return false;
 }
 
 void uhf_scene_settings_on_exit(void* ctx) {
     UHFApp* uhf_app = ctx;
-    submenu_reset(uhf_app->submenu);
+    variable_item_list_set_selected_item(uhf_app->variable_item_list, 0);
+    variable_item_list_reset(uhf_app->variable_item_list);
 }

+ 4 - 0
uhf_app.c

@@ -71,6 +71,10 @@ UHFApp* uhf_alloc() {
 
     // Variable Item List
     uhf_app->variable_item_list = variable_item_list_alloc();
+    view_dispatcher_add_view(
+        uhf_app->view_dispatcher,
+        UHFViewVariableItemList,
+        variable_item_list_get_view(uhf_app->variable_item_list));
 
     // Submenu
     uhf_app->submenu = submenu_alloc();

+ 1 - 0
uhf_app_i.h

@@ -76,6 +76,7 @@ typedef enum {
     UHFViewLoading,
     UHFViewTextInput,
     UHFViewWidget,
+    UHFViewVariableItemList,
 } UHFView;
 
 UHFApp* uhf_app_alloc();

+ 11 - 2
uhf_module.c

@@ -261,7 +261,12 @@ M100ResponseType m100_read_label_data_storage(
     size_t ptr_offset = 5 /*<-ptr offset*/ + uhf_tag->epc->size + 3 /*<-pc + ul*/;
     size_t bank_data_length = payload_len - (ptr_offset - 5 /*dont include the offset*/);
     // print paylod length ptr offset and bank data length
-    FURI_LOG_E("TAG", "payload_len: %d, ptr_offset: %d, bank_data_length: %d", payload_len, ptr_offset, bank_data_length);
+    FURI_LOG_E(
+        "TAG",
+        "payload_len: %d, ptr_offset: %d, bank_data_length: %d",
+        payload_len,
+        ptr_offset,
+        bank_data_length);
     if(data[2] == 0xFF) {
         if(payload_len == 0x0001) return M100NoTagResponse;
         return M100MemoryOverrun;
@@ -348,7 +353,7 @@ M100ResponseType m100_write_label_data_storage(
         return M100ValidationFail;
     return M100Success;
 }
-void m100_set_baudrate(M100Module* module, uint16_t baudrate) {
+void m100_set_baudrate(M100Module* module, uint32_t baudrate) {
     size_t length = CMD_SET_COMMUNICATION_BAUD_RATE.length;
     uint8_t cmd[length];
     memcpy(cmd, CMD_SET_COMMUNICATION_BAUD_RATE.cmd, length);
@@ -386,3 +391,7 @@ bool m100_set_freq_hopping(M100Module* module, bool hopping) {
     UNUSED(hopping);
     return true;
 }
+
+uint32_t m100_get_baudrate(M100Module* module) {
+    return module->baudrate;
+}

+ 5 - 3
uhf_module.h

@@ -26,7 +26,7 @@ typedef enum {
 
 typedef struct {
     M100ModuleInfo* info;
-    uint16_t baudrate;
+    uint32_t baudrate;
     WorkingArea area;
     WorkingChannel channel;
     uint16_t transmitting_power;
@@ -47,7 +47,7 @@ char* m100_get_hardware_version(M100Module* module);
 char* m100_get_software_version(M100Module* module);
 char* m100_get_manufacturers(M100Module* module);
 
-void m100_set_baudrate(M100Module* module, uint16_t baudrate);
+void m100_set_baudrate(M100Module* module, uint32_t baudrate);
 bool m100_set_working_area(M100Module* module, WorkingArea area);
 bool m100_set_working_channel(M100Module* module, WorkingChannel channel);
 bool m100_set_transmitting_power(M100Module* module, uint16_t power);
@@ -69,4 +69,6 @@ M100ResponseType m100_write_label_data_storage(
     UHFTag* selected_tag,
     BankType bank,
     uint16_t source_address,
-    uint32_t access_pwd);
+    uint32_t access_pwd);
+
+uint32_t m100_get_baudrate(M100Module* module);