Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ibutton-app.h « ibutton « applications - github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9751191fdad497251a27abbad8219822f36f5a9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#pragma once
#include <map>
#include <list>

#include "ibutton-view-manager.h"
#include "scene/ibutton-scene-generic.h"
#include "scene/ibutton-scene-start.h"
#include "scene/ibutton-scene-read.h"
#include "scene/ibutton-scene-read-crc-error.h"
#include "scene/ibutton-scene-read-not-key-error.h"
#include "scene/ibutton-scene-read-success.h"
#include "scene/ibutton-scene-readed-key-menu.h"
#include "scene/ibutton-scene-write.h"
#include "scene/ibutton-scene-write-success.h"
#include "scene/ibutton-scene-saved-key-menu.h"
#include "scene/ibutton-scene-delete-confirm.h"
#include "scene/ibutton-scene-delete-success.h"
#include "scene/ibutton-scene-emulate.h"
#include "scene/ibutton-scene-save-name.h"
#include "scene/ibutton-scene-save-success.h"
#include "scene/ibutton-scene-info.h"
#include "scene/ibutton-scene-select-key.h"
#include "scene/ibutton-scene-add-type.h"
#include "scene/ibutton-scene-add-value.h"

#include "helpers/key-worker.h"

#include "one_wire_master.h"
#include "maxim_crc.h"
#include "ibutton-key.h"

#include <notification/notification-messages.h>
#include <storage/storage.h>
#include <dialogs/dialogs.h>

#include <record-controller.hpp>

class iButtonApp {
public:
    void run(void* args);

    iButtonApp();
    ~iButtonApp();

    enum class Scene : uint8_t {
        SceneExit,
        SceneStart,
        SceneRead,
        SceneReadNotKeyError,
        SceneReadCRCError,
        SceneReadSuccess,
        SceneReadedKeyMenu,
        SceneWrite,
        SceneWriteSuccess,
        SceneEmulate,
        SceneSavedKeyMenu,
        SceneDeleteConfirm,
        SceneDeleteSuccess,
        SceneSaveName,
        SceneSaveSuccess,
        SceneInfo,
        SceneSelectKey,
        SceneAddType,
        SceneAddValue,
    };

    iButtonAppViewManager* get_view_manager();
    void switch_to_next_scene(Scene index);
    void search_and_switch_to_previous_scene(std::initializer_list<Scene> scenes_list);
    bool switch_to_previous_scene(uint8_t count = 1);
    Scene get_previous_scene();

    const GpioPin* get_ibutton_pin();
    KeyWorker* get_key_worker();
    iButtonKey* get_key();

    void notify_green_blink();
    void notify_yellow_blink();
    void notify_red_blink();

    void notify_error();
    void notify_success();
    void notify_green_on();
    void notify_green_off();
    void notify_red_on();
    void notify_red_off();

    void set_text_store(const char* text...);
    char* get_text_store();
    uint8_t get_text_store_size();

    char* get_file_name();
    uint8_t get_file_name_size();

    bool save_key(const char* key_name);
    bool load_key();
    bool load_key(const char* key_name);
    bool delete_key();

private:
    std::list<Scene> previous_scenes_list = {Scene::SceneExit};
    Scene current_scene = Scene::SceneStart;
    iButtonAppViewManager view;

    std::map<Scene, iButtonScene*> scenes = {
        {Scene::SceneStart, new iButtonSceneStart()},
        {Scene::SceneRead, new iButtonSceneRead()},
        {Scene::SceneReadCRCError, new iButtonSceneReadCRCError()},
        {Scene::SceneReadNotKeyError, new iButtonSceneReadNotKeyError()},
        {Scene::SceneReadSuccess, new iButtonSceneReadSuccess()},
        {Scene::SceneReadedKeyMenu, new iButtonSceneReadedKeyMenu()},
        {Scene::SceneWrite, new iButtonSceneWrite()},
        {Scene::SceneWriteSuccess, new iButtonSceneWriteSuccess()},
        {Scene::SceneEmulate, new iButtonSceneEmulate()},
        {Scene::SceneSavedKeyMenu, new iButtonSceneSavedKeyMenu()},
        {Scene::SceneDeleteConfirm, new iButtonSceneDeleteConfirm()},
        {Scene::SceneDeleteSuccess, new iButtonSceneDeleteSuccess()},
        {Scene::SceneSaveName, new iButtonSceneSaveName()},
        {Scene::SceneSaveSuccess, new iButtonSceneSaveSuccess()},
        {Scene::SceneInfo, new iButtonSceneInfo()},
        {Scene::SceneSelectKey, new iButtonSceneSelectKey()},
        {Scene::SceneAddType, new iButtonSceneAddType()},
        {Scene::SceneAddValue, new iButtonSceneAddValue()},
    };

    KeyWorker* key_worker;

    iButtonKey key;

    RecordController<NotificationApp> notification;
    RecordController<Storage> storage;
    RecordController<DialogsApp> dialogs;

    static const uint8_t file_name_size = 100;
    char file_name[file_name_size];

    static const uint8_t text_store_size = 128;
    char text_store[text_store_size + 1];

    static const char* app_folder;
    static const char* app_extension;
    static const char* app_filetype;

    bool load_key_data(string_t key_path);
    void make_app_folder();
};