76 lines
2.9 KiB
C
76 lines
2.9 KiB
C
#include "../wiegand.h"
|
|
|
|
void wiegand_load_scene_on_enter(void* context) {
|
|
App* app = context;
|
|
bit_count = 0;
|
|
DialogsFileBrowserOptions browser_options;
|
|
dialog_file_browser_set_basic_options(&browser_options, WIEGAND_SAVE_EXTENSION, NULL);
|
|
browser_options.base_path = WIEGAND_SAVE_FOLDER;
|
|
|
|
furi_string_set(app->file_path, browser_options.base_path);
|
|
|
|
FuriString* buffer = furi_string_alloc(1024);
|
|
|
|
if(dialog_file_browser_show(app->dialogs, app->file_path, app->file_path, &browser_options)) {
|
|
Storage* storage = furi_record_open(RECORD_STORAGE);
|
|
File* data_file = storage_file_alloc(storage);
|
|
if(storage_file_open(
|
|
data_file, furi_string_get_cstr(app->file_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
|
|
while(!storage_file_eof(data_file)) {
|
|
char ch;
|
|
furi_string_reset(buffer);
|
|
while(storage_file_read(data_file, &ch, 1) && !storage_file_eof(data_file)) {
|
|
furi_string_push_back(buffer, ch);
|
|
if(ch == '\n') {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(furi_string_start_with(buffer, "RAW_Data: ")) {
|
|
bit_count = 0;
|
|
int length = furi_string_size(buffer);
|
|
uint32_t temp;
|
|
char ch;
|
|
for(int i = 8; i < length - 1; i++) {
|
|
if(furi_string_get_char(buffer, i) == 'D') {
|
|
i++;
|
|
data[bit_count] = furi_string_get_char(buffer, i) == '1';
|
|
i += 2; // Skip space
|
|
temp = 0;
|
|
|
|
while(i < length && (ch = furi_string_get_char(buffer, i)) != ' ') {
|
|
temp = temp * 10 + (ch - '0');
|
|
i++;
|
|
}
|
|
data_fall[bit_count] = temp;
|
|
i++; // Skip space
|
|
|
|
temp = 0;
|
|
while(i < length && (ch = furi_string_get_char(buffer, i)) != ' ' &&
|
|
ch != '\n') {
|
|
temp = temp * 10 + (ch - '0');
|
|
i++;
|
|
}
|
|
data_rise[bit_count] = temp;
|
|
bit_count++;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
storage_file_close(data_file);
|
|
}
|
|
storage_file_free(data_file);
|
|
furi_record_close(RECORD_STORAGE);
|
|
}
|
|
|
|
if(bit_count == 0) {
|
|
scene_manager_search_and_switch_to_previous_scene(
|
|
app->scene_manager, WiegandMainMenuScene);
|
|
} else {
|
|
data_saved = true;
|
|
scene_manager_next_scene(app->scene_manager, WiegandDataScene);
|
|
}
|
|
}
|