[FL-1064] iButton CLI commands (#407)

* ibutton: add cli commands
* ibutton/scene: add cli event send
* ibutton: make separate scenes for cli commands
* ibutton/scene: add timeout to cli scenes
* ibutton: fix reading key data from cli
* cli: add cli_delete_command to API
* ibutton: delete cli command after app exit
* cli: free allocated string

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
gornekich
2021-04-14 17:24:33 +03:00
committed by GitHub
parent d1f523687e
commit cfcdff8346
10 changed files with 522 additions and 0 deletions

View File

@@ -6,16 +6,19 @@
#include "scene/ibutton-scene-generic.h"
#include "scene/ibutton-scene-start.h"
#include "scene/ibutton-scene-read.h"
#include "scene/ibutton-scene-cli-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-cli-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-cli-emulate.h"
#include "scene/ibutton-scene-save-name.h"
#include "scene/ibutton-scene-save-success.h"
#include "scene/ibutton-scene-info.h"
@@ -26,6 +29,7 @@
#include <sd-card-api.h>
#include <filesystem-api.h>
#include "../cli/cli.h"
#include "one_wire_master.h"
#include "maxim_crc.h"
@@ -42,13 +46,16 @@ public:
SceneExit,
SceneStart,
SceneRead,
SceneCliRead,
SceneReadNotKeyError,
SceneReadCRCError,
SceneReadSuccess,
SceneReadedKeyMenu,
SceneWrite,
SceneCliWrite,
SceneWriteSuccess,
SceneEmulate,
SceneCliEmulate,
SceneSavedKeyMenu,
SceneDeleteConfirm,
SceneDeleteSuccess,
@@ -59,6 +66,16 @@ public:
SceneAddValue,
};
enum class CliEvent : uint8_t {
CliReadSuccess,
CliReadCRCError,
CliReadNotKeyError,
CliWriteSuccess,
CliWriteFail,
CliTimeout,
CliInterrupt,
};
iButtonAppViewManager* get_view_manager();
void switch_to_next_scene(Scene index);
void search_and_switch_to_previous_scene(std::initializer_list<Scene> scenes_list);
@@ -93,23 +110,30 @@ public:
char* get_file_name();
uint8_t get_file_name_size();
void cli_cmd_callback(string_t args, void* context);
void cli_send_event(CliEvent scene);
void generate_random_name(char* name, uint8_t max_name_size);
private:
std::list<Scene> previous_scenes_list = {Scene::SceneExit};
Scene current_scene = Scene::SceneStart;
iButtonAppViewManager view;
osMessageQueueId_t cli_event_result;
std::map<Scene, iButtonScene*> scenes = {
{Scene::SceneStart, new iButtonSceneStart()},
{Scene::SceneRead, new iButtonSceneRead()},
{Scene::SceneCliRead, new iButtonSceneCliRead()},
{Scene::SceneReadCRCError, new iButtonSceneReadCRCError()},
{Scene::SceneReadNotKeyError, new iButtonSceneReadNotKeyError()},
{Scene::SceneReadSuccess, new iButtonSceneReadSuccess()},
{Scene::SceneReadedKeyMenu, new iButtonSceneReadedKeyMenu()},
{Scene::SceneWrite, new iButtonSceneWrite()},
{Scene::SceneCliWrite, new iButtonSceneCliWrite()},
{Scene::SceneWriteSuccess, new iButtonSceneWriteSuccess()},
{Scene::SceneEmulate, new iButtonSceneEmulate()},
{Scene::SceneCliEmulate, new iButtonSceneCliEmulate()},
{Scene::SceneSavedKeyMenu, new iButtonSceneSavedKeyMenu()},
{Scene::SceneDeleteConfirm, new iButtonSceneDeleteConfirm()},
{Scene::SceneDeleteSuccess, new iButtonSceneDeleteSuccess()},
@@ -126,6 +150,7 @@ private:
SdCard_Api* sd_ex_api;
FS_Api* fs_api;
Cli* cli;
static const uint8_t file_name_size = 100;
char file_name[file_name_size];
@@ -133,4 +158,6 @@ private:
char text_store[text_store_size + 1];
void notify_init();
bool read_hex_byte(string_t arg, uint8_t* byte);
void print_key_data(void);
};