52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "ibutton-scene-select-key.h"
 | 
						|
#include "../ibutton-app.h"
 | 
						|
#include "../ibutton-event.h"
 | 
						|
#include "../ibutton-key.h"
 | 
						|
 | 
						|
void iButtonSceneSelectKey::on_enter(iButtonApp* app) {
 | 
						|
    // Input events and views are managed by file_select
 | 
						|
    bool res = app->get_sd_ex_api()->file_select(
 | 
						|
        app->get_sd_ex_api()->context,
 | 
						|
        "ibutton",
 | 
						|
        "*",
 | 
						|
        app->get_file_name(),
 | 
						|
        app->get_file_name_size());
 | 
						|
 | 
						|
    // Process file_select return
 | 
						|
    if(res) {
 | 
						|
        // Get key file path
 | 
						|
        string_t key_str;
 | 
						|
        string_init_set_str(key_str, "ibutton/");
 | 
						|
        string_cat_str(key_str, app->get_file_name());
 | 
						|
 | 
						|
        // Read data from file
 | 
						|
        File key_file;
 | 
						|
        uint8_t key_data[IBUTTON_KEY_DATA_SIZE + 1] = {};
 | 
						|
        // TODO process false result from file system service
 | 
						|
        app->get_fs_api()->file.open(
 | 
						|
            &key_file, string_get_cstr(key_str), FSAM_READ, FSOM_OPEN_EXISTING);
 | 
						|
        app->get_fs_api()->file.read(&key_file, key_data, IBUTTON_KEY_DATA_SIZE + 1);
 | 
						|
        app->get_fs_api()->file.close(&key_file);
 | 
						|
        string_clear(key_str);
 | 
						|
 | 
						|
        // Set key data
 | 
						|
        iButtonKeyType key_type = static_cast<iButtonKeyType>(key_data[0]);
 | 
						|
        if(key_type > iButtonKeyType::KeyMetakom) {
 | 
						|
            app->switch_to_next_scene(iButtonApp::Scene::SceneStart);
 | 
						|
        }
 | 
						|
        app->get_key()->set_name(app->get_file_name());
 | 
						|
        app->get_key()->set_type(key_type);
 | 
						|
        app->get_key()->set_data(key_data + 1, IBUTTON_KEY_DATA_SIZE);
 | 
						|
        app->switch_to_next_scene(iButtonApp::Scene::SceneSavedKeyMenu);
 | 
						|
    } else {
 | 
						|
        app->switch_to_previous_scene();
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
bool iButtonSceneSelectKey::on_event(iButtonApp* app, iButtonEvent* event) {
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
void iButtonSceneSelectKey::on_exit(iButtonApp* app) {
 | 
						|
}
 |