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

Encoded Subghz works with standard 500ms setup

David Lee 1 год назад
Родитель
Сommit
6cf5fb9052
3 измененных файлов с 37 добавлено и 34 удалено
  1. 28 10
      helpers/subghz/subghz.c
  2. 5 22
      helpers/subghz/subghz_i.c
  3. 4 2
      helpers/subghz/subghz_i.h

+ 28 - 10
helpers/subghz/subghz.c

@@ -9,6 +9,7 @@ SubGhz* subghz_alloc() {
 
 
     subghz->file_path = furi_string_alloc();
     subghz->file_path = furi_string_alloc();
     subghz->txrx = subghz_txrx_alloc();
     subghz->txrx = subghz_txrx_alloc();
+    subghz->dialogs = furi_record_open(RECORD_DIALOGS);
 
 
     return subghz;
     return subghz;
 }
 }
@@ -16,6 +17,7 @@ SubGhz* subghz_alloc() {
 void subghz_free(SubGhz* subghz) {
 void subghz_free(SubGhz* subghz) {
     subghz_txrx_free(subghz->txrx);
     subghz_txrx_free(subghz->txrx);
     furi_string_free(subghz->file_path);
     furi_string_free(subghz->file_path);
+    furi_record_close(RECORD_DIALOGS);
 
 
     // The rest
     // The rest
     free(subghz);
     free(subghz);
@@ -38,16 +40,32 @@ void subghz_scene_transmit_callback_end_tx(void* context) {
 void subghz_send(void* context, const char* path) {
 void subghz_send(void* context, const char* path) {
     XRemote* app = context;
     XRemote* app = context;
 
 
-    subghz_load_protocol_from_file(app->subghz, path);
-    FURI_LOG_D(TAG, "Starting Transmission");
-    subghz_txrx_tx_start(
-        app->subghz->txrx,
-        subghz_txrx_get_fff_data(app->subghz->txrx)); //Seems like it must be done this way
+    if(!subghz_load_protocol_from_file(app->subghz, path)) {
+        xremote_cross_remote_set_transmitting(app->cross_remote, XRemoteTransmittingStop);
+        app->transmitting = false;
+        return;
+    }
 
 
-    FURI_LOG_D(TAG, "setting sugbhz raw file encoder worker callback");
-    subghz_txrx_set_raw_file_encoder_worker_callback_end(
-        app->subghz->txrx, subghz_scene_transmit_callback_end_tx, app);
-    app->state_notifications = SubGhzNotificationStateTx;
+    if(subghz_get_load_type_file(app->subghz) == SubGhzLoadTypeFileRaw) {
+        FURI_LOG_D(TAG, "Starting Transmission");
+        subghz_txrx_tx_start(
+            app->subghz->txrx,
+            subghz_txrx_get_fff_data(app->subghz->txrx)); //Seems like it must be done this way
 
 
-    FURI_LOG_D(TAG, "Finished Transmitting");
+        FURI_LOG_D(TAG, "setting sugbhz raw file encoder worker callback");
+        subghz_txrx_set_raw_file_encoder_worker_callback_end(
+            app->subghz->txrx, subghz_scene_transmit_callback_end_tx, app);
+        app->state_notifications = SubGhzNotificationStateTx;
+
+        FURI_LOG_D(TAG, "Finished Transmitting");
+    } else {
+        subghz_tx_start(app->subghz, subghz_txrx_get_fff_data(app->subghz->txrx));
+        app->state_notifications = SubGhzNotificationStateTx;
+        furi_thread_flags_wait(0, FuriFlagWaitAny, 500);
+        app->state_notifications = SubGhzNotificationStateIDLE;
+        subghz_txrx_stop(app->subghz->txrx);
+
+        xremote_cross_remote_set_transmitting(app->cross_remote, XRemoteTransmittingStop);
+        app->transmitting = false;
+    }
 }
 }

+ 5 - 22
helpers/subghz/subghz_i.c

@@ -26,14 +26,14 @@ void subghz_set_default_preset(SubGhz* subghz) {
         0);
         0);
 }*/
 }*/
 
 
-/*bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format) {
+bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format) {
     switch(subghz_txrx_tx_start(subghz->txrx, flipper_format)) {
     switch(subghz_txrx_tx_start(subghz->txrx, flipper_format)) {
     case SubGhzTxRxStartTxStateErrorParserOthers:
     case SubGhzTxRxStartTxStateErrorParserOthers:
         dialog_message_show_storage_error(
         dialog_message_show_storage_error(
             subghz->dialogs, "Error in protocol\nparameters\ndescription");
             subghz->dialogs, "Error in protocol\nparameters\ndescription");
         break;
         break;
     case SubGhzTxRxStartTxStateErrorOnlyRx:
     case SubGhzTxRxStartTxStateErrorOnlyRx:
-        FURI_LOG_D(TAG, 'Cannot send, only RX possible');
+       // FURI_LOG_D(TAG, 'Cannot send, only RX possible');
         break;
         break;
 
 
     default:
     default:
@@ -41,7 +41,7 @@ void subghz_set_default_preset(SubGhz* subghz) {
         break;
         break;
     }
     }
     return false;
     return false;
-}*/
+}
 
 
 bool subghz_key_load(SubGhz* subghz, const char* file_path) { //, bool show_dialog) {
 bool subghz_key_load(SubGhz* subghz, const char* file_path) { //, bool show_dialog) {
     furi_assert(subghz);
     furi_assert(subghz);
@@ -182,34 +182,17 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path) { //, bool show_dial
     return false;
     return false;
 }
 }
 
 
-/*SubGhzLoadTypeFile subghz_get_load_type_file(SubGhz* subghz) {
+SubGhzLoadTypeFile subghz_get_load_type_file(SubGhz* subghz) {
     furi_assert(subghz);
     furi_assert(subghz);
     return subghz->load_type_file;
     return subghz->load_type_file;
-}*/
+}
 
 
 bool subghz_load_protocol_from_file(SubGhz* subghz, const char* path) {
 bool subghz_load_protocol_from_file(SubGhz* subghz, const char* path) {
     furi_assert(subghz);
     furi_assert(subghz);
 
 
-    //FuriString* file_path = furi_string_alloc();
-
     bool res = false;
     bool res = false;
 
 
-    /*DialogsFileBrowserOptions browser_options;
-    dialog_file_browser_set_basic_options(
-        &browser_options, SUBGHZ_APP_FILENAME_EXTENSION, &I_sub1_10px);
-    browser_options.base_path = SUBGHZ_APP_FOLDER;
-
-    // Input events and views are managed by file_select
-    bool res = dialog_file_browser_show(
-        subghz->dialogs, subghz->file_path, subghz->file_path, &browser_options);
-
-    if(res) {*/
-    //res = subghz_key_load(subghz, furi_string_get_cstr(subghz->file_path), true);
     res = subghz_key_load(subghz, path); //, true);
     res = subghz_key_load(subghz, path); //, true);
-    //}
-
-    //furi_string_free(file_path);
-
     return res;
     return res;
 }
 }
 
 

+ 4 - 2
helpers/subghz/subghz_i.h

@@ -43,6 +43,7 @@ typedef struct SubGhz SubGhz;
 struct SubGhz {
 struct SubGhz {
     SubGhzTxRx* txrx;
     SubGhzTxRx* txrx;
     FuriString* file_path;
     FuriString* file_path;
+    DialogsApp* dialogs;
     //FuriString* file_path_tmp;
     //FuriString* file_path_tmp;
     //char file_name_tmp[SUBGHZ_MAX_LEN_NAME]; // just left it in to make the object not empty
     //char file_name_tmp[SUBGHZ_MAX_LEN_NAME]; // just left it in to make the object not empty
     //SubGhzNotificationState state_notifications;
     //SubGhzNotificationState state_notifications;
@@ -67,13 +68,14 @@ struct SubGhz {
 //void subghz_blink_start(SubGhz* subghz);
 //void subghz_blink_start(SubGhz* subghz);
 //void subghz_blink_stop(SubGhz* subghz);
 //void subghz_blink_stop(SubGhz* subghz);
 
 
-//bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format);
+// Used on Encoded SubGhz
+bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format);
 //void subghz_dialog_message_show_only_rx(SubGhz* subghz);
 //void subghz_dialog_message_show_only_rx(SubGhz* subghz);
 
 
 bool subghz_key_load(SubGhz* subghz, const char* file_path); //, bool show_dialog);
 bool subghz_key_load(SubGhz* subghz, const char* file_path); //, bool show_dialog);
 bool subghz_load_protocol_from_file(SubGhz* subghz, const char* path);
 bool subghz_load_protocol_from_file(SubGhz* subghz, const char* path);
 //bool subghz_file_available(SubGhz* subghz);
 //bool subghz_file_available(SubGhz* subghz);
-//SubGhzLoadTypeFile subghz_get_load_type_file(SubGhz* subghz);
+SubGhzLoadTypeFile subghz_get_load_type_file(SubGhz* subghz);
 
 
 //void subghz_lock(SubGhz* subghz);
 //void subghz_lock(SubGhz* subghz);
 //void subghz_unlock(SubGhz* subghz);
 //void subghz_unlock(SubGhz* subghz);