[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:
@@ -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);
|
||||
};
|
||||
Reference in New Issue
Block a user