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

Now generates tmp.sub file for transmission

David Lee 2 лет назад
Родитель
Сommit
8f4d942022

+ 4 - 0
README.md

@@ -19,6 +19,10 @@ This app triggers restaurant pagers in a brute force manner, useful to test if d
 - Plug your Flipper Zero in via USB. <br>
 - Copy the contents of this folder into the applications_user folder of your firmware. <br> 
 
+## Can this Brute-Force Attacks
+In Theory yes, but I wouldn't recommend trying it. Most pagers support 8191 Stations. Triggering ~30 Pagers per station would easily take over 2h. That when only sending each trigger once. It is recommended is to repeat the signal approx 10x, so that would already take all day. 
+Chances are also, that your Flipper Zero will crash in that time.
+
 Then run the command: 
  ```
 .\fbt launch APPSRC=applications_user/meal_pager

+ 1 - 0
application.fam

@@ -14,4 +14,5 @@ App(
     fap_icon="icons/meal_pager_10px.png",
     fap_icon_assets="icons",
     fap_category="Sub-Ghz",
+    fap_version="0.1",
 )

+ 9 - 0
docs/README.md

@@ -0,0 +1,9 @@
+## Meal Pager Trigger App
+
+Can make a range of Restaurant Pagers ring. 
+
+## Features
+- Support for Retekess T119, TD157, TD165, TD174
+- Select Range of Station Ids
+- Select Range of Pager Ids
+

+ 3 - 0
docs/changelog.md

@@ -0,0 +1,3 @@
+## v0.1
+
+Can now generate a temporary .sub file for Retekess T119 Pager triggers. Must still be run via SubGhz App

+ 58 - 0
helpers/meal_pager_storage.c

@@ -15,6 +15,64 @@ static void meal_pager_close_config_file(FlipperFormat* file) {
     flipper_format_free(file);
 }
 
+FlipperFormat* meal_pager_save_subghz_buffer_file_start(void* context) {
+    // SubGhz TXRX can only be loaded with files, makes sense as to save RAM
+    Meal_Pager* app = context;
+    UNUSED(app);
+    FURI_LOG_D(TAG, "Creating Temp File");
+    Storage* storage = furi_record_open(RECORD_STORAGE);
+    FlipperFormat* ff = flipper_format_file_alloc(storage);
+
+    // Overwrite wont work, so delete first
+    if(storage_file_exists(storage, MEAL_PAGER_TMP_FILE)) {
+        storage_simply_remove(storage, MEAL_PAGER_TMP_FILE);
+    }
+
+    // Open File, create if not exists
+    if(!storage_common_stat(storage, MEAL_PAGER_TMP_FILE, NULL) == FSE_OK) {
+        FURI_LOG_D(TAG, "Config file %s is not found. Will create new.", MEAL_PAGER_SETTINGS_SAVE_PATH);
+        if(storage_common_stat(storage, CONFIG_FILE_DIRECTORY_PATH, NULL) == FSE_NOT_EXIST) {
+            FURI_LOG_D(
+                TAG,
+                "Directory %s doesn't exist. Will create new.",
+                CONFIG_FILE_DIRECTORY_PATH);
+            if(!storage_simply_mkdir(storage, CONFIG_FILE_DIRECTORY_PATH)) {
+                FURI_LOG_D(TAG, "Error creating directory %s", CONFIG_FILE_DIRECTORY_PATH);
+            }
+        }
+    }
+
+    if(!flipper_format_file_open_new(ff, MEAL_PAGER_TMP_FILE)) {
+        //totp_close_config_file(fff_file);
+        FURI_LOG_D(TAG, "Error creating new file %s", MEAL_PAGER_TMP_FILE);
+        meal_pager_close_storage();
+        return ff;
+    }
+    
+    bool success = flipper_format_write_header_cstr(ff, MEAL_PAGER_SUBGHZ_FILE_TYPE, MEAL_PAGER_SUBGHZ_FILE_VERSION) &&
+                   flipper_format_write_string_cstr(ff, "Frequency", MEAL_PAGER_SUBGHZ_FILE_FREQUENCY) &&
+                   flipper_format_write_string_cstr(ff, "Preset", MEAL_PAGER_SUBGHZ_FILE_PRESET) &&
+                   flipper_format_write_string_cstr(ff, "Protocol", MEAL_PAGER_SUBGHZ_FILE_Protocol);
+    UNUSED(success);            
+
+    return ff;
+}
+
+void meal_pager_save_subghz_buffer_stop(void* context, FlipperFormat* ff) {
+    Meal_Pager* app = context;
+    UNUSED(app);
+    FURI_LOG_D(TAG, "Closing Temp File");
+    if(!flipper_format_rewind(ff)) {
+        meal_pager_close_config_file(ff);
+        FURI_LOG_E(TAG, "Rewind error");
+        meal_pager_close_storage();
+        return;
+    }
+
+    meal_pager_close_config_file(ff);
+    meal_pager_close_storage();
+}
+
 void meal_pager_save_settings(void* context) {
     Meal_Pager* app = context;
     if (app->save_settings == 0) {

+ 10 - 0
helpers/meal_pager_storage.h

@@ -20,6 +20,16 @@
 #define MEAL_PAGER_SETTINGS_KEY_LED "Led"
 #define MEAL_PAGER_SETTINGS_KEY_SPEAKER "Speaker"
 #define MEAL_PAGER_SETTINGS_KEY_SAVE_SETTINGS "SaveSettings"
+#define MEAL_PAGER_TMP_FILE CONFIG_FILE_DIRECTORY_PATH "/tmp.sub"
+#define MEAL_PAGER_SUBGHZ_FILE_TYPE "Flipper SubGhz RAW File"
+#define MEAL_PAGER_SUBGHZ_FILE_VERSION 1
+#define MEAL_PAGER_SUBGHZ_FILE_FREQUENCY "433920000"
+#define MEAL_PAGER_SUBGHZ_FILE_PRESET "FuriHalSubGhzPresetOok650Async"
+#define MEAL_PAGER_SUBGHZ_FILE_Protocol "RAW"
+
+FlipperFormat* meal_pager_save_subghz_buffer_file_start(void* context);
+
+void meal_pager_save_subghz_buffer_stop(void* context, FlipperFormat* ff);
 
 void meal_pager_save_settings(void* context);
 void meal_pager_read_settings(void* context);

+ 10 - 5
helpers/retekess/meal_pager_retekess_t119.c

@@ -124,7 +124,7 @@ void reverse(char* str) {
     }
 }
  
-void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager) {
+static void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager, FlipperFormat* ff) {
     Meal_Pager* app = context;
     char pagerId[11];
     //char stationPagerId[25];
@@ -156,12 +156,13 @@ void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uin
     char* manchester = encManchester(fullId, 0);
     FURI_LOG_D(TAG, "Manchester: %s", manchester);
     char* rawSignal = genRawData(200, 600, manchester);
-    FURI_LOG_D(TAG, "Raw Data: %s", rawSignal);
+    FURI_LOG_D(TAG, "RAW_Data: %s", rawSignal);
+    flipper_format_write_string_cstr(ff, "RAW_Data", rawSignal);
     free(manchester);
     free(rawSignal);
 }
 
-void meal_pager_retekess_t119_generate_station(void* context, uint32_t station) {
+static void meal_pager_retekess_t119_generate_station(void* context, uint32_t station, FlipperFormat* ff) {
     Meal_Pager* app = context;
     FURI_LOG_D(TAG, "Generating T119 Data for Station %lu", station);
     app->current_station = station;
@@ -171,7 +172,7 @@ void meal_pager_retekess_t119_generate_station(void* context, uint32_t station)
     reverse(stationId);
     meal_pager_transmit_model_set_station(app->meal_pager_transmit, app->current_station);
     for (u_int32_t i = app->current_pager;i <= app->last_pager; i++) {
-        meal_pager_retekess_t119_generate_pager(app, stationId, i);
+        meal_pager_retekess_t119_generate_pager(app, stationId, i, ff);
         //furi_thread_flags_wait(0, FuriFlagWaitAny, 1);
     }
 }
@@ -182,9 +183,13 @@ void meal_pager_retekess_t119_generate_all(void* context) {
     app->current_pager = 1;
     app->current_station = app->first_station;
 
+    FlipperFormat* ff = meal_pager_save_subghz_buffer_file_start(app);
+
     for (u_int32_t i = app->current_station;i <= app->last_station; i++) {
-        meal_pager_retekess_t119_generate_station(app, i);
+        meal_pager_retekess_t119_generate_station(app, i, ff);
         //furi_thread_flags_wait(0, FuriFlagWaitAny, 100);
     }
+
+    meal_pager_save_subghz_buffer_stop(app, ff);
 }
 

+ 2 - 2
helpers/retekess/meal_pager_retekess_t119.h

@@ -11,8 +11,8 @@ void reverse(char* str);
 
 void customConcat(char* dest, const char* src);
 
-void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager);
+//void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager);
 
-void meal_pager_retekess_t119_generate_station(void* context, uint32_t station);
+//void meal_pager_retekess_t119_generate_station(void* context, uint32_t station);
 
 void meal_pager_retekess_t119_generate_all(void* context);