Skip to content

Commit

Permalink
Encoded Subghz works with standard 500ms setup
Browse files Browse the repository at this point in the history
  • Loading branch information
David Lee committed Feb 5, 2024
1 parent 8520f4c commit 6cf5fb9
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 34 deletions.
38 changes: 28 additions & 10 deletions helpers/subghz/subghz.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ SubGhz* subghz_alloc() {

subghz->file_path = furi_string_alloc();
subghz->txrx = subghz_txrx_alloc();
subghz->dialogs = furi_record_open(RECORD_DIALOGS);

return subghz;
}

void subghz_free(SubGhz* subghz) {
subghz_txrx_free(subghz->txrx);
furi_string_free(subghz->file_path);
furi_record_close(RECORD_DIALOGS);

// The rest
free(subghz);
Expand All @@ -38,16 +40,32 @@ void subghz_scene_transmit_callback_end_tx(void* context) {
void subghz_send(void* context, const char* path) {
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;
}
}
27 changes: 5 additions & 22 deletions helpers/subghz/subghz_i.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,22 @@ void subghz_set_default_preset(SubGhz* subghz) {
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)) {
case SubGhzTxRxStartTxStateErrorParserOthers:
dialog_message_show_storage_error(
subghz->dialogs, "Error in protocol\nparameters\ndescription");
break;
case SubGhzTxRxStartTxStateErrorOnlyRx:
FURI_LOG_D(TAG, 'Cannot send, only RX possible');
// FURI_LOG_D(TAG, 'Cannot send, only RX possible');
break;

default:
return true;
break;
}
return false;
}*/
}

bool subghz_key_load(SubGhz* subghz, const char* file_path) { //, bool show_dialog) {
furi_assert(subghz);
Expand Down Expand Up @@ -182,34 +182,17 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path) { //, bool show_dial
return false;
}

/*SubGhzLoadTypeFile subghz_get_load_type_file(SubGhz* subghz) {
SubGhzLoadTypeFile subghz_get_load_type_file(SubGhz* subghz) {
furi_assert(subghz);
return subghz->load_type_file;
}*/
}

bool subghz_load_protocol_from_file(SubGhz* subghz, const char* path) {
furi_assert(subghz);

//FuriString* file_path = furi_string_alloc();

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);
//}

//furi_string_free(file_path);

return res;
}

Expand Down
6 changes: 4 additions & 2 deletions helpers/subghz/subghz_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ typedef struct SubGhz SubGhz;
struct SubGhz {
SubGhzTxRx* txrx;
FuriString* file_path;
DialogsApp* dialogs;
//FuriString* file_path_tmp;
//char file_name_tmp[SUBGHZ_MAX_LEN_NAME]; // just left it in to make the object not empty
//SubGhzNotificationState state_notifications;
Expand All @@ -67,13 +68,14 @@ struct SubGhz {
//void subghz_blink_start(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);

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_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_unlock(SubGhz* subghz);
Expand Down

0 comments on commit 6cf5fb9

Please sign in to comment.