frux-c пре 2 година
родитељ
комит
3adf3ded52
11 измењених фајлова са 96 додато и 141 уклоњено
  1. 1 0
      scenes/uhf_scene_config.h
  2. 44 0
      scenes/uhf_scene_settings.c
  3. 5 7
      scenes/uhf_scene_start.c
  4. 6 0
      uhf_app.c
  5. 3 0
      uhf_app_i.h
  6. 1 1
      uhf_buffer.h
  7. 0 0
      uhf_cmd.c
  8. 0 114
      uhf_cmd.h
  9. 5 0
      uhf_module.c
  10. 5 19
      uhf_module.h
  11. 26 0
      uhf_module_settings.h

+ 1 - 0
scenes/uhf_scene_config.h

@@ -12,6 +12,7 @@ ADD_SCENE(uhf, delete, Delete)
 ADD_SCENE(uhf, delete_success, DeleteSuccess)
 ADD_SCENE(uhf, write_tag, WriteTag)
 ADD_SCENE(uhf, write_tag_success, WriteTagSuccess)
+ADD_SCENE(uhf, settings, Settings)
 // ADD_SCENE(uhf, read_factory_success, ReadFactorySuccess)
 // ADD_SCENE(uhf, write_key, WriteKey)
 // ADD_SCENE(uhf, key_menu, KeyMenu)

+ 44 - 0
scenes/uhf_scene_settings.c

@@ -0,0 +1,44 @@
+#include "../uhf_app_i.h"
+#include "../uhf_module.h"
+
+void uhf_settings_set_module_baudrate(VariableItem* item) {
+    UNUSED(item);
+}
+
+void uhf_scene_settings_on_enter(void* ctx) {
+    UHFApp* uhf_app = ctx;
+    VariableItem* item;
+    uint8_t value_index = 0;
+    M100Module* uhf_module = uhf_app->worker->module;
+
+    item = variable_item_list_add(
+        uhf_app->variable_item_list,
+        "Baud Rate:",
+        get_baudrate_count(),
+        uhf_settings_set_module_baudrate,
+        uhf_module);
+    // value_index = subghz_scene_receiver_config_next_frequency(preset.frequency, subghz);
+    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);
+}
+
+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;
+}
+
+void uhf_scene_settings_on_exit(void* ctx) {
+    UHFApp* uhf_app = ctx;
+    submenu_reset(uhf_app->submenu);
+}

+ 5 - 7
scenes/uhf_scene_start.c

@@ -38,14 +38,12 @@ bool uhf_scene_start_on_event(void* ctx, SceneManagerEvent event) {
                 uhf_app->scene_manager, UHFSceneStart, SubmenuIndexSaved);
             scene_manager_next_scene(uhf_app->scene_manager, UHFSceneFileSelect);
             consumed = true;
+        } else if(event.event == SubmenuIndexSettings) {
+            scene_manager_set_scene_state(
+                uhf_app->scene_manager, UHFSceneStart, SubmenuIndexSettings);
+            scene_manager_next_scene(uhf_app->scene_manager, UHFSceneSettings);
+            consumed = true;
         }
-        // } else if(event.event == SubmenuIndexEliteDictAttack) {
-        //     scene_manager_set_scene_state(
-        //         uhf_app->scene_manager, UHFSceneStart, SubmenuIndexEliteDictAttack);
-        //     scene_manager_next_scene(uhf_app->scene_manager, UHFSceneEliteDictAttack);
-        //     consumed = true;
-        // }
-        // consumed = true;
     }
     return consumed;
 }

+ 6 - 0
uhf_app.c

@@ -54,6 +54,9 @@ UHFApp* uhf_alloc() {
     view_dispatcher_attach_to_gui(
         uhf_app->view_dispatcher, uhf_app->gui, ViewDispatcherTypeFullscreen);
 
+    // Variable Item List
+    uhf_app->variable_item_list = variable_item_list_alloc();
+
     //worker
     uhf_app->worker = uhf_worker_alloc();
 
@@ -112,6 +115,9 @@ void uhf_free(UHFApp* uhf_app) {
     view_dispatcher_remove_view(uhf_app->view_dispatcher, UHFViewLoading);
     loading_free(uhf_app->loading);
 
+    // Variable Item List
+    variable_item_list_free(uhf_app->variable_item_list);
+
     // TextInput
     view_dispatcher_remove_view(uhf_app->view_dispatcher, UHFViewTextInput);
     text_input_free(uhf_app->text_input);

+ 3 - 0
uhf_app_i.h

@@ -11,6 +11,7 @@
 #include <gui/modules/loading.h>
 #include <gui/modules/text_input.h>
 #include <gui/modules/widget.h>
+#include <gui/modules/variable_item_list.h>
 
 #include <input/input.h>
 
@@ -42,6 +43,7 @@ enum UHFCustomEvent {
     UHFCustomEventWorkerExit,
     UHFCustomEventByteInputDone,
     UHFCustomEventTextInputDone,
+    UHFCustomEventSceneSettingLock,
 };
 
 typedef enum {
@@ -55,6 +57,7 @@ struct UHFApp {
     Gui* gui;
     NotificationApp* notifications;
     SceneManager* scene_manager;
+    VariableItemList* variable_item_list;
     // Storage* storage;
     UHFDevice* uhf_device;
     char text_store[UHF_TEXT_STORE_SIZE + 1];

+ 1 - 1
uhf_buffer.h

@@ -3,7 +3,7 @@
 #include <stdbool.h>
 #include <stddef.h>
 
-#define MAX_BUFFER_SIZE 128
+#define MAX_BUFFER_SIZE 100
 
 typedef struct Buffer {
     uint8_t* data;


+ 0 - 114
uhf_cmd.h

@@ -1,114 +0,0 @@
-// #ifndef UHF_CMD_H
-// #define UHF_CMD_H
-
-// #include <stdint.h>
-// #include <stdlib.h>
-
-// typedef struct UHF_RFID_CMD {
-//     uint8_t* cmd;
-//     size_t length;
-// }UHF_RFID_CMD;
-
-// typedef enum{
-//     COMMAND_FRAME = 0x00,
-//     RESPONSE_FRAME,
-//     NOTIFICATION_FRAME
-// }UHFFrameType;
-
-// typedef enum{
-//     RFU_BANK,
-//     EPC_BANK,
-//     TID_BANK,
-//     USER_BANK
-// }UHFBank;
-
-// typedef enum{
-//     CHINA_900MHZ = 1,
-//     CHINA_800MHZ = 4,
-//     US = 2,
-//     EU = 3,
-//     KOREA = 6
-// }UHFWorkArea;
-
-// #define DEFAULT_BAUD_RATE 115200
-// #define FRAME_START 0xBB
-// #define FRAME_END 0x7E
-// #define ERROR 0x15
-
-// UHF_RFID_CMD CMD_HARDWARE_VERSION = {.cmd = (uint8_t[]){0xBB, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_SOFTWARE_VERSION = {.cmd = (uint8_t[]){0xBB, 0x00, 0x03, 0x00, 0x01, 0x01, 0x05, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_MANUFACTURERS = {.cmd = (uint8_t[]){0xBB, 0x00, 0x03, 0x00, 0x01, 0x02, 0x06, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_SINGLE_POLLING = {.cmd = (uint8_t[]){0xBB, 0x00, 0x22, 0x00, 0x00, 0x22, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_MULTIPLE_POLLING = {.cmd = (uint8_t[]){0xBB, 0x00, 0x27, 0x00, 0x03, 0x22, 0x27, 0x10, 0x83, 0x7E}, .length = 10};
-
-// UHF_RFID_CMD CMD_STOP_MULTIPLE_POLLING = {.cmd = (uint8_t[]){0xBB, 0x00, 0x28, 0x00, 0x00, 0x28, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_SET_SELECT_PARAMETER = {.cmd = (uint8_t[]){0xBB, 0x00, 0x0C, 0x00, 0x13, 0x01, 0x00, 0x00, 0x00, 0x20, 0x60, 0x00, 0x30, 0x75, 0x1F, 0xEB, 0x70, 0x5C, 0x59, 0x04, 0xE3, 0xD5, 0x0D, 0x70, 0xAD, 0x7E }, .length = 26};
-
-// UHF_RFID_CMD CMD_GET_SELECT_PARAMETER = {.cmd = (uint8_t[]){0xBB, 0x00, 0x0B, 0x00, 0x00, 0x0B, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_SET_SELECT_MODE = {.cmd = (uint8_t[]){0xBB, 0x00, 0x12, 0x00, 0x01, 0x01, 0x14, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_READ_LABEL_DATA_STORAGE = {.cmd = (uint8_t[]){0xBB, 0x00, 0x39, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x4D, 0x7E}, .length = 16};
-
-// UHF_RFID_CMD CMD_WRITE_LABEL_DATA_STORAGE = {.cmd = (uint8_t[]){0xBB, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x71, 0x7E}, .length = 24};
-
-// UHF_RFID_CMD CMD_LOCK_LABEL_DATA_STORAGE = {.cmd = (uint8_t[]){0xBB, 0x00, 0x82, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0x09, 0x7E}, .length = 13};
-
-// UHF_RFID_CMD CMD_INACTIVATE_KILL_TAG = {.cmd = (uint8_t[]){0xBB, 0x00, 0x65, 0x00, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x67, 0x7E}, .length = 11};
-
-// UHF_RFID_CMD CMD_SET_COMMUNICATION_BAUD_RATE = {.cmd = (uint8_t[]){0xBB, 0x00, 0x11, 0x00, 0x02, 0x00, 0xC0, 0xD3, 0x7E}, .length = 9};
-
-// UHF_RFID_CMD CMD_GET_QUERY_PARAMETERS = {.cmd = (uint8_t[]){0xBB, 0x00, 0x0D, 0x00, 0x00, 0x0D, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_SET_QUERY_PARAMETER = {.cmd = (uint8_t[]){0xBB, 0x00, 0x0E, 0x00, 0x02, 0x10, 0x20, 0x40, 0x7E}, .length = 9};
-
-// UHF_RFID_CMD CMD_SETUP_WORK_AREA = {.cmd = (uint8_t[]){0xBB, 0x00, 0x07, 0x00, 0x01, 0x01, 0x09, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_ACQUIRE_WORK_LOCATIONS = {.cmd = (uint8_t[]){0xBB, 0x00, 0x08, 0x00, 0x00, 0x08, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_SETUP_WORKING_CHANNEL = {.cmd = (uint8_t[]){0xBB, 0x00, 0xAB, 0x00, 0x01, 0x01, 0xAC, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_GET_WORKING_CHANNEL = {.cmd = (uint8_t[]){0xBB, 0x00, 0xAA, 0x00, 0x00, 0xAA, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_SET_AUTO_FREQUENCY_HOPPING = {.cmd = (uint8_t[]){0xBB, 0x00, 0xAD, 0x00, 0x01, 0xFF, 0xAD, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_INSERT_WORKING_CHANNEL = {.cmd = (uint8_t[]){0xBB, 0x00, 0xA9, 0x00, 0x06, 0x05, 0x01, 0x02,0x03, 0x04, 0x05, 0xC3, 0x7E}, .length = 13};
-
-// UHF_RFID_CMD CMD_ACQUIRE_TRANSMITTING_POWER = {.cmd = (uint8_t[]){0xBB, 0x00, 0xB7, 0x00, 0x00, 0xB7, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_SET_TRANSMITTING_POWER = {.cmd = (uint8_t[]){0xBB, 0x00, 0xB6, 0x00, 0x02, 0x07, 0xD0, 0x8F, 0x7E}, .length = 9};
-
-// UHF_RFID_CMD CMD_SET_CONTINUOUS_CARRIER = {.cmd = (uint8_t[]){0xBB, 0x00, 0xB0, 0x00, 0x01, 0xFF, 0xB0, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_GET_DEMODULATOR_PARAMETERS = {.cmd = (uint8_t[]){0xBB, 0x00, 0xF1, 0x00, 0x00, 0xF1, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_SET_DEMODULATOR_PARAMETERS = {.cmd = (uint8_t[]){0xBB, 0x00, 0xF0, 0x00, 0x04, 0x03, 0x06, 0x01, 0xB0, 0xAE, 0x7E}, .length = 11};
-
-// UHF_RFID_CMD CMD_TEST_RF_INPUT_BLOCK_SIGNAL = {.cmd = (uint8_t[]){0xBB, 0x00, 0xF2, 0x00, 0x00, 0xF2, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_TEST_RSSI_SIGNAL = {.cmd = (uint8_t[]){0xBB, 0x00, 0xF3, 0x00, 0x00, 0xF3, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_MODULE_HIBERNATION = {.cmd = (uint8_t[]){0xBB, 0x00, 0x17, 0x00, 0x00, 0x17, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_IDLE_HIBERNATION_TIME = {.cmd = (uint8_t[]){0xBB, 0x00, 0x1D, 0x00, 0x01, 0x02, 0x20, 0x7E}, .length = 8};
-
-// UHF_RFID_CMD CMD_IDLE_MODE = {.cmd = (uint8_t[]){0xBB, 0x00, 0x04, 0x00, 0x03, 0x01, 0x01, 0x03, 0x0C, 0x7E}, .length = 10};
-
-// UHF_RFID_CMD CMD_NXP_READPROTECT = {.cmd = (uint8_t[]){0xBB, 0x00, 0xE1, 0x00, 0x05, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xE4, 0x7E}, .length = 12};
-
-// UHF_RFID_CMD CMD_NXP_CHANGE_EAS = {.cmd = (uint8_t[]){0xBB, 0x00, 0xE3, 0x00, 0x05, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0xE7, 0x7E}, .length = 12};
-
-// UHF_RFID_CMD CMD_NXP_EAS_ALARM = {.cmd = (uint8_t[]){0xBB, 0x00, 0xE4, 0x00, 0x00, 0xE4, 0x7E}, .length = 7};
-
-// UHF_RFID_CMD CMD_NXP_CONFIG_WORD = {.cmd = (uint8_t[]){0xBB, 0x00, 0xE0, 0x00, 0x06, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xE4, 0x7E}, .length = 13};
-
-// UHF_RFID_CMD CMD_IMPINJ_MONZA4_QT = {.cmd = (uint8_t[]){0xBB, 0x00, 0xE5, 0x00, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x01, 0x40, 0x00, 0x2D, 0x7E}, .length = 15};
-
-// UHF_RFID_CMD CMD_BLOCK_PERMALOCK = {.cmd = (uint8_t[]){0xBB, 0x00, 0xD3, 0x00, 0x0B, 0x00, 0x00, 0xFF,0xFF, 0x01, 0x03, 0x00, 0x00, 0x01, 0x07, 0x00, 0xE8, 0x7E}, .length = 18};
-
-// #endif /* UHF_CMD_H */

+ 5 - 0
uhf_module.c

@@ -67,6 +67,10 @@ uint16_t crc16_genibus(const uint8_t* data, size_t length) {
     return crc ^ 0xFFFF; // Post-inversion
 }
 
+uint8_t get_baudrate_count() {
+    return sizeof(BAUD_RATES);
+}
+
 char* m100_get_hardware_version(M100Module* module) {
     if(module->info->hw_version != NULL) {
         free(module->info->hw_version);
@@ -223,6 +227,7 @@ UHFTag* m100_get_select_param(M100Module* module) {
     // uint8_t* data = buffer_get_data(module->buf);
     // size_t mask_length =
     // uhf_tag_set_epc(uhf_tag, data + 12, )
+    // TODO : implement
     return NULL;
 }
 

+ 5 - 19
uhf_module.h

@@ -1,11 +1,12 @@
 #pragma once
 
+#include <stddef.h>
 #include <stdint.h>
 #include <stdbool.h>
-#include <stddef.h>
-#include "uhf_buffer.h"
-#include "uhf_tag.h"
 #include <furi_hal.h>
+#include "uhf_tag.h"
+#include "uhf_buffer.h"
+#include "uhf_module_settings.h"
 
 #define FRAME_END 0x7E
 #define DEFAULT_BAUDRATE 115200
@@ -16,22 +17,6 @@ typedef struct {
     char* manufacturer;
 } M100ModuleInfo;
 
-typedef enum {
-    WA_CHINA_900 = 1,   // Freq_CH-920.125M
-    WA_US,              // Freq_CH-902.25M
-    WA_EU,              // Freq_CH-865.1M
-    WA_CHINA_800,       // Freq_CH-840.125M
-    WA_KOREA = 6        // Freq_CH-917.1M
-} WorkingArea;
-
-typedef enum {
-    WC_CHINA_900 = 1,   // CH_Index(CN,900MHz) = (Freq_CH-920.125M)/0.25M
-    WC_US,              // CH_Index(US) = (Freq_CH-902.25M)/0.5M
-    WC_EU,              // CH_Index(EU) = (Freq_CH-865.1M)/0.2M
-    WC_CHINA_800,       // CH_Index(CN,800MHz) = (Freq_CH-840.125M)/0.25M
-    WC_KOREA = 6        // CH_Index(Korea) = (Freq_CH-917.1M)/0.2M
-} WorkingChannel;
-
 typedef enum {
     M100Success,
     M100ValidationFail,
@@ -56,6 +41,7 @@ M100Module* m100_module_alloc();
 void m100_module_free(M100Module* module);
 uint16_t crc16_genibus(const uint8_t* data, size_t length);
 uint8_t checksum(const uint8_t* data, size_t length);
+uint8_t get_baudrate_count();
 
 // Function prototypes
 char* m100_get_hardware_version(M100Module* module);

+ 26 - 0
uhf_module_settings.h

@@ -0,0 +1,26 @@
+#pragma once
+
+#include <stdint.h>
+
+// UHF module baudrates
+static const uint32_t BAUD_RATES[] = {9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600};
+
+// UHF module regions
+typedef enum {
+    WA_CHINA_900 = 1, // Freq_CH-920.125M
+    WA_US, // Freq_CH-902.25M
+    WA_EU, // Freq_CH-865.1M
+    WA_CHINA_800, // Freq_CH-840.125M
+    WA_KOREA = 6 // Freq_CH-917.1M
+} WorkingArea;
+
+typedef enum {
+    WC_CHINA_900 = 1, // CH_Index(CN,900MHz) = (Freq_CH-920.125M)/0.25M
+    WC_US, // CH_Index(US) = (Freq_CH-902.25M)/0.5M
+    WC_EU, // CH_Index(EU) = (Freq_CH-865.1M)/0.2M
+    WC_CHINA_800, // CH_Index(CN,800MHz) = (Freq_CH-840.125M)/0.25M
+    WC_KOREA = 6 // CH_Index(Korea) = (Freq_CH-917.1M)/0.2M
+} WorkingChannel;
+
+// RF Power Setting
+static const uint8_t POWER_DBM[] = {12, 14, 17, 20}; // To be determined ...