[FL-2433, FL-2408] Get rid of file_worker in archive and various fixes (#1105)
* Archive: get rid of file_worker and various fixes * USB init moved to CLI service
This commit is contained in:
parent
fed18f7c42
commit
72a6bbb8ad
@ -21,13 +21,23 @@ bool archive_app_is_available(void* context, const char* path) {
|
|||||||
ArchiveAppTypeEnum app = archive_get_app_type(path);
|
ArchiveAppTypeEnum app = archive_get_app_type(path);
|
||||||
|
|
||||||
if(app == ArchiveAppTypeU2f) {
|
if(app == ArchiveAppTypeU2f) {
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
|
||||||
bool file_exists = false;
|
bool file_exists = false;
|
||||||
file_worker_is_file_exist(file_worker, "/any/u2f/key.u2f", &file_exists);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
|
file_exists = storage_file_open(file, "/any/u2f/key.u2f", FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
if(file_exists) {
|
if(file_exists) {
|
||||||
file_worker_is_file_exist(file_worker, "/any/u2f/cnt.u2f", &file_exists);
|
storage_file_close(file);
|
||||||
|
file_exists =
|
||||||
|
storage_file_open(file, "/any/u2f/cnt.u2f", FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
|
if(file_exists) {
|
||||||
|
storage_file_close(file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
file_worker_free(file_worker);
|
|
||||||
|
storage_file_free(file);
|
||||||
|
furi_record_close("storage");
|
||||||
|
|
||||||
return file_exists;
|
return file_exists;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -60,10 +70,10 @@ void archive_app_delete_file(void* context, const char* path) {
|
|||||||
bool res = false;
|
bool res = false;
|
||||||
|
|
||||||
if(app == ArchiveAppTypeU2f) {
|
if(app == ArchiveAppTypeU2f) {
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
res = file_worker_remove(file_worker, "/any/u2f/key.u2f");
|
res = (storage_common_remove(fs_api, "/any/u2f/key.u2f") == FSE_OK);
|
||||||
res |= file_worker_remove(file_worker, "/any/u2f/cnt.u2f");
|
res |= (storage_common_remove(fs_api, "/any/u2f/cnt.u2f") == FSE_OK);
|
||||||
file_worker_free(file_worker);
|
furi_record_close("storage");
|
||||||
|
|
||||||
if(archive_is_favorite("/app:u2f/U2F Token")) {
|
if(archive_is_favorite("/app:u2f/U2F Token")) {
|
||||||
archive_favorites_delete("/app:u2f/U2F Token");
|
archive_favorites_delete("/app:u2f/U2F Token");
|
||||||
|
@ -392,6 +392,17 @@ void archive_enter_dir(ArchiveBrowserView* browser, string_t name) {
|
|||||||
furi_assert(browser);
|
furi_assert(browser);
|
||||||
furi_assert(name);
|
furi_assert(name);
|
||||||
|
|
||||||
|
uint8_t browser_depth = 0;
|
||||||
|
with_view_model(
|
||||||
|
browser->view, (ArchiveBrowserViewModel * model) {
|
||||||
|
browser_depth = idx_last_array_size(model->idx_last);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
if(browser_depth > BROWSER_DEPTH_MAX) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
archive_dir_count_items(browser, string_get_cstr(name));
|
archive_dir_count_items(browser, string_get_cstr(name));
|
||||||
|
|
||||||
with_view_model(
|
with_view_model(
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#define TAB_RIGHT InputKeyRight //default tab swith direction
|
#define TAB_RIGHT InputKeyRight //default tab swith direction
|
||||||
#define FILE_LIST_BUF_LEN 100
|
#define FILE_LIST_BUF_LEN 100
|
||||||
|
#define BROWSER_DEPTH_MAX 8
|
||||||
|
|
||||||
static const char* tab_default_paths[] = {
|
static const char* tab_default_paths[] = {
|
||||||
[ArchiveTabFavorites] = "/any/favorites",
|
[ArchiveTabFavorites] = "/any/favorites",
|
||||||
|
@ -4,20 +4,63 @@
|
|||||||
#include "archive_apps.h"
|
#include "archive_apps.h"
|
||||||
#include "archive_browser.h"
|
#include "archive_browser.h"
|
||||||
|
|
||||||
|
#define ARCHIVE_FAV_FILE_BUF_LEN 32
|
||||||
|
|
||||||
|
static bool archive_favorites_read_line(File* file, string_t str_result) {
|
||||||
|
string_reset(str_result);
|
||||||
|
uint8_t buffer[ARCHIVE_FAV_FILE_BUF_LEN];
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
do {
|
||||||
|
uint16_t read_count = storage_file_read(file, buffer, ARCHIVE_FAV_FILE_BUF_LEN);
|
||||||
|
if(storage_file_get_error(file) != FSE_OK) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(uint16_t i = 0; i < read_count; i++) {
|
||||||
|
if(buffer[i] == '\n') {
|
||||||
|
uint32_t position = storage_file_tell(file);
|
||||||
|
if(storage_file_get_error(file) != FSE_OK) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
position = position - read_count + i + 1;
|
||||||
|
|
||||||
|
storage_file_seek(file, position, true);
|
||||||
|
if(storage_file_get_error(file) != FSE_OK) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
string_push_back(str_result, buffer[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result || read_count == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while(true);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t archive_favorites_count(void* context) {
|
uint16_t archive_favorites_count(void* context) {
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
|
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
string_t buffer;
|
string_t buffer;
|
||||||
string_init(buffer);
|
string_init(buffer);
|
||||||
|
|
||||||
bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
uint16_t lines = 0;
|
uint16_t lines = 0;
|
||||||
|
|
||||||
if(result) {
|
if(result) {
|
||||||
while(1) {
|
while(1) {
|
||||||
if(!file_worker_read_until(file_worker, buffer, '\n')) {
|
if(!archive_favorites_read_line(file, buffer)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!string_size(buffer)) {
|
if(!string_size(buffer)) {
|
||||||
@ -27,21 +70,26 @@ uint16_t archive_favorites_count(void* context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
storage_file_close(file);
|
||||||
|
|
||||||
string_clear(buffer);
|
string_clear(buffer);
|
||||||
file_worker_close(file_worker);
|
storage_file_free(file);
|
||||||
file_worker_free(file_worker);
|
furi_record_close("storage");
|
||||||
|
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool archive_favourites_rescan() {
|
static bool archive_favourites_rescan() {
|
||||||
string_t buffer;
|
string_t buffer;
|
||||||
string_init(buffer);
|
string_init(buffer);
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
File* fav_item_file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
if(result) {
|
if(result) {
|
||||||
while(1) {
|
while(1) {
|
||||||
if(!file_worker_read_until(file_worker, buffer, '\n')) {
|
if(!archive_favorites_read_line(file, buffer)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!string_size(buffer)) {
|
if(!string_size(buffer)) {
|
||||||
@ -53,9 +101,10 @@ static bool archive_favourites_rescan() {
|
|||||||
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
|
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bool file_exists = false;
|
bool file_exists = storage_file_open(
|
||||||
file_worker_is_file_exist(file_worker, string_get_cstr(buffer), &file_exists);
|
fav_item_file, string_get_cstr(buffer), FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
if(file_exists) {
|
if(file_exists) {
|
||||||
|
storage_file_close(fav_item_file);
|
||||||
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
|
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,11 +113,13 @@ static bool archive_favourites_rescan() {
|
|||||||
|
|
||||||
string_clear(buffer);
|
string_clear(buffer);
|
||||||
|
|
||||||
file_worker_close(file_worker);
|
storage_file_close(file);
|
||||||
file_worker_remove(file_worker, ARCHIVE_FAV_PATH);
|
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
|
||||||
file_worker_rename(file_worker, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
||||||
|
|
||||||
file_worker_free(file_worker);
|
storage_file_free(file);
|
||||||
|
storage_file_free(fav_item_file);
|
||||||
|
furi_record_close("storage");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -77,7 +128,9 @@ bool archive_favorites_read(void* context) {
|
|||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
|
|
||||||
ArchiveBrowserView* browser = context;
|
ArchiveBrowserView* browser = context;
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
File* fav_item_file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
string_t buffer;
|
string_t buffer;
|
||||||
FileInfo file_info;
|
FileInfo file_info;
|
||||||
@ -88,11 +141,11 @@ bool archive_favorites_read(void* context) {
|
|||||||
|
|
||||||
archive_file_array_rm_all(browser);
|
archive_file_array_rm_all(browser);
|
||||||
|
|
||||||
bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
|
|
||||||
if(result) {
|
if(result) {
|
||||||
while(1) {
|
while(1) {
|
||||||
if(!file_worker_read_until(file_worker, buffer, '\n')) {
|
if(!archive_favorites_read_line(file, buffer)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!string_size(buffer)) {
|
if(!string_size(buffer)) {
|
||||||
@ -107,10 +160,10 @@ bool archive_favorites_read(void* context) {
|
|||||||
need_refresh = true;
|
need_refresh = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bool file_exists = false;
|
bool file_exists = storage_file_open(
|
||||||
file_worker_is_file_exist(file_worker, string_get_cstr(buffer), &file_exists);
|
fav_item_file, string_get_cstr(buffer), FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
|
|
||||||
if(file_exists) {
|
if(file_exists) {
|
||||||
|
storage_file_close(fav_item_file);
|
||||||
archive_add_file_item(browser, &file_info, string_get_cstr(buffer));
|
archive_add_file_item(browser, &file_info, string_get_cstr(buffer));
|
||||||
file_count++;
|
file_count++;
|
||||||
} else {
|
} else {
|
||||||
@ -121,9 +174,11 @@ bool archive_favorites_read(void* context) {
|
|||||||
string_reset(buffer);
|
string_reset(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
storage_file_close(file);
|
||||||
string_clear(buffer);
|
string_clear(buffer);
|
||||||
file_worker_close(file_worker);
|
storage_file_free(file);
|
||||||
file_worker_free(file_worker);
|
storage_file_free(fav_item_file);
|
||||||
|
furi_record_close("storage");
|
||||||
|
|
||||||
archive_set_item_count(browser, file_count);
|
archive_set_item_count(browser, file_count);
|
||||||
|
|
||||||
@ -143,12 +198,14 @@ bool archive_favorites_delete(const char* format, ...) {
|
|||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
string_init(buffer);
|
string_init(buffer);
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
|
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
|
|
||||||
bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
|
||||||
if(result) {
|
if(result) {
|
||||||
while(1) {
|
while(1) {
|
||||||
if(!file_worker_read_until(file_worker, buffer, '\n')) {
|
if(!archive_favorites_read_line(file, buffer)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!string_size(buffer)) {
|
if(!string_size(buffer)) {
|
||||||
@ -164,11 +221,12 @@ bool archive_favorites_delete(const char* format, ...) {
|
|||||||
string_clear(buffer);
|
string_clear(buffer);
|
||||||
string_clear(filename);
|
string_clear(filename);
|
||||||
|
|
||||||
file_worker_close(file_worker);
|
storage_file_close(file);
|
||||||
file_worker_remove(file_worker, ARCHIVE_FAV_PATH);
|
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
|
||||||
file_worker_rename(file_worker, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
||||||
|
|
||||||
file_worker_free(file_worker);
|
storage_file_free(file);
|
||||||
|
furi_record_close("storage");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -182,14 +240,15 @@ bool archive_is_favorite(const char* format, ...) {
|
|||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
string_init(buffer);
|
string_init(buffer);
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
|
|
||||||
if(result) {
|
if(result) {
|
||||||
while(1) {
|
while(1) {
|
||||||
if(!file_worker_read_until(file_worker, buffer, '\n')) {
|
if(!archive_favorites_read_line(file, buffer)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!string_size(buffer)) {
|
if(!string_size(buffer)) {
|
||||||
@ -202,10 +261,11 @@ bool archive_is_favorite(const char* format, ...) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
storage_file_close(file);
|
||||||
string_clear(buffer);
|
string_clear(buffer);
|
||||||
string_clear(filename);
|
string_clear(filename);
|
||||||
file_worker_close(file_worker);
|
storage_file_free(file);
|
||||||
file_worker_free(file_worker);
|
furi_record_close("storage");
|
||||||
|
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
@ -214,7 +274,8 @@ bool archive_favorites_rename(const char* src, const char* dst) {
|
|||||||
furi_assert(src);
|
furi_assert(src);
|
||||||
furi_assert(dst);
|
furi_assert(dst);
|
||||||
|
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
string_t path;
|
string_t path;
|
||||||
string_t buffer;
|
string_t buffer;
|
||||||
@ -223,11 +284,11 @@ bool archive_favorites_rename(const char* src, const char* dst) {
|
|||||||
string_init(path);
|
string_init(path);
|
||||||
|
|
||||||
string_printf(path, "%s", src);
|
string_printf(path, "%s", src);
|
||||||
bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
|
||||||
|
|
||||||
if(result) {
|
if(result) {
|
||||||
while(1) {
|
while(1) {
|
||||||
if(!file_worker_read_until(file_worker, buffer, '\n')) {
|
if(!archive_favorites_read_line(file, buffer)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!string_size(buffer)) {
|
if(!string_size(buffer)) {
|
||||||
@ -244,11 +305,12 @@ bool archive_favorites_rename(const char* src, const char* dst) {
|
|||||||
string_clear(buffer);
|
string_clear(buffer);
|
||||||
string_clear(path);
|
string_clear(path);
|
||||||
|
|
||||||
file_worker_close(file_worker);
|
storage_file_close(file);
|
||||||
file_worker_remove(file_worker, ARCHIVE_FAV_PATH);
|
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
|
||||||
file_worker_rename(file_worker, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
||||||
|
|
||||||
file_worker_free(file_worker);
|
storage_file_free(file);
|
||||||
|
furi_record_close("storage");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -263,15 +325,17 @@ void archive_favorites_save(void* context) {
|
|||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
|
|
||||||
ArchiveBrowserView* browser = context;
|
ArchiveBrowserView* browser = context;
|
||||||
FileWorker* file_worker = file_worker_alloc(true);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
for(size_t i = 0; i < archive_file_get_array_size(browser); i++) {
|
for(size_t i = 0; i < archive_file_get_array_size(browser); i++) {
|
||||||
ArchiveFile_t* item = archive_get_file_at(browser, i);
|
ArchiveFile_t* item = archive_get_file_at(browser, i);
|
||||||
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(item->name));
|
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(item->name));
|
||||||
}
|
}
|
||||||
|
|
||||||
file_worker_remove(file_worker, ARCHIVE_FAV_PATH);
|
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
|
||||||
file_worker_rename(file_worker, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
|
||||||
|
|
||||||
file_worker_free(file_worker);
|
storage_file_free(file);
|
||||||
}
|
furi_record_close("storage");
|
||||||
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "file_worker.h"
|
|
||||||
|
#include <storage/storage.h>
|
||||||
|
|
||||||
#define ARCHIVE_FAV_PATH "/any/favorites.txt"
|
#define ARCHIVE_FAV_PATH "/any/favorites.txt"
|
||||||
#define ARCHIVE_FAV_TEMP_PATH "/any/favorites.tmp"
|
#define ARCHIVE_FAV_TEMP_PATH "/any/favorites.tmp"
|
||||||
|
@ -201,18 +201,18 @@ void archive_file_append(const char* path, const char* format, ...) {
|
|||||||
string_init_vprintf(string, format, args);
|
string_init_vprintf(string, format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
FileWorker* file_worker = file_worker_alloc(false);
|
Storage* fs_api = furi_record_open("storage");
|
||||||
|
File* file = storage_file_alloc(fs_api);
|
||||||
|
|
||||||
if(!file_worker_open(file_worker, path, FSAM_WRITE, FSOM_OPEN_APPEND)) {
|
bool res = storage_file_open(file, path, FSAM_WRITE, FSOM_OPEN_APPEND);
|
||||||
FURI_LOG_E(TAG, "Append open error");
|
|
||||||
|
if(res) {
|
||||||
|
storage_file_write(file, string_get_cstr(string), string_size(string));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!file_worker_write(file_worker, string_get_cstr(string), string_size(string))) {
|
storage_file_close(file);
|
||||||
FURI_LOG_E(TAG, "Append write error");
|
storage_file_free(file);
|
||||||
}
|
furi_record_close("storage");
|
||||||
|
|
||||||
file_worker_close(file_worker);
|
|
||||||
file_worker_free(file_worker);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void archive_delete_file(void* context, const char* format, ...) {
|
void archive_delete_file(void* context, const char* format, ...) {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "file_worker.h"
|
|
||||||
#include <m-array.h>
|
#include <m-array.h>
|
||||||
|
#include <m-string.h>
|
||||||
|
#include <storage/storage.h>
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ArchiveFileTypeIButton,
|
ArchiveFileTypeIButton,
|
||||||
|
@ -54,6 +54,10 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) {
|
|||||||
|
|
||||||
ArchiveFile_t* selected = files_array_get(model->files, model->item_idx - model->array_offset);
|
ArchiveFile_t* selected = files_array_get(model->files, model->item_idx - model->array_offset);
|
||||||
|
|
||||||
|
if((selected->fav) || (model->tab_idx == ArchiveTabFavorites)) {
|
||||||
|
string_set_str(menu[1], "Unpin");
|
||||||
|
}
|
||||||
|
|
||||||
if(!archive_is_known_app(selected->type)) {
|
if(!archive_is_known_app(selected->type)) {
|
||||||
string_set_str(menu[0], "---");
|
string_set_str(menu[0], "---");
|
||||||
string_set_str(menu[1], "---");
|
string_set_str(menu[1], "---");
|
||||||
@ -67,10 +71,6 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if((selected->fav) || (model->tab_idx == ArchiveTabFavorites)) {
|
|
||||||
string_set_str(menu[1], "Unpin");
|
|
||||||
}
|
|
||||||
|
|
||||||
for(size_t i = 0; i < MENU_ITEMS; i++) {
|
for(size_t i = 0; i < MENU_ITEMS; i++) {
|
||||||
canvas_draw_str(canvas, 82, 27 + i * 11, string_get_cstr(menu[i]));
|
canvas_draw_str(canvas, 82, 27 + i * 11, string_get_cstr(menu[i]));
|
||||||
string_clear(menu[i]);
|
string_clear(menu[i]);
|
||||||
|
@ -401,6 +401,8 @@ void cli_delete_command(Cli* cli, const char* name) {
|
|||||||
int32_t cli_srv(void* p) {
|
int32_t cli_srv(void* p) {
|
||||||
Cli* cli = cli_alloc();
|
Cli* cli = cli_alloc();
|
||||||
|
|
||||||
|
furi_hal_vcp_init();
|
||||||
|
|
||||||
// Init basic cli commands
|
// Init basic cli commands
|
||||||
cli_commands_init(cli);
|
cli_commands_init(cli);
|
||||||
|
|
||||||
|
@ -55,10 +55,9 @@ void furi_hal_init() {
|
|||||||
furi_hal_crypto_init();
|
furi_hal_crypto_init();
|
||||||
furi_hal_crc_init(true);
|
furi_hal_crc_init(true);
|
||||||
|
|
||||||
// VCP + USB
|
// USB
|
||||||
#ifndef FURI_RAM_EXEC
|
#ifndef FURI_RAM_EXEC
|
||||||
furi_hal_usb_init();
|
furi_hal_usb_init();
|
||||||
furi_hal_vcp_init();
|
|
||||||
FURI_LOG_I(TAG, "USB OK");
|
FURI_LOG_I(TAG, "USB OK");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -268,8 +268,8 @@ static int32_t furi_hal_usb_thread(void* context) {
|
|||||||
usbd_reg_event(&udev, usbd_evt_reset, reset_evt);
|
usbd_reg_event(&udev, usbd_evt_reset, reset_evt);
|
||||||
FURI_LOG_I(TAG, "USB Mode change done");
|
FURI_LOG_I(TAG, "USB Mode change done");
|
||||||
usb.enabled = true;
|
usb.enabled = true;
|
||||||
usb.if_cur = if_new;
|
|
||||||
}
|
}
|
||||||
|
usb.if_cur = if_new;
|
||||||
}
|
}
|
||||||
if(flags & EventEnable) {
|
if(flags & EventEnable) {
|
||||||
if((!usb.enabled) && (usb.if_cur != NULL)) {
|
if((!usb.enabled) && (usb.if_cur != NULL)) {
|
||||||
|
@ -12,15 +12,14 @@
|
|||||||
#define VCP_IF_NUM 0
|
#define VCP_IF_NUM 0
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VcpEvtReserved = (1 << 0), // Reserved for StreamBuffer internal event
|
VcpEvtEnable = (1 << 0),
|
||||||
VcpEvtEnable = (1 << 1),
|
VcpEvtDisable = (1 << 1),
|
||||||
VcpEvtDisable = (1 << 2),
|
VcpEvtConnect = (1 << 2),
|
||||||
VcpEvtConnect = (1 << 3),
|
VcpEvtDisconnect = (1 << 3),
|
||||||
VcpEvtDisconnect = (1 << 4),
|
VcpEvtStreamRx = (1 << 4),
|
||||||
VcpEvtStreamRx = (1 << 5),
|
VcpEvtRx = (1 << 5),
|
||||||
VcpEvtRx = (1 << 6),
|
VcpEvtStreamTx = (1 << 6),
|
||||||
VcpEvtStreamTx = (1 << 7),
|
VcpEvtTx = (1 << 7),
|
||||||
VcpEvtTx = (1 << 8),
|
|
||||||
} WorkerEvtFlags;
|
} WorkerEvtFlags;
|
||||||
|
|
||||||
#define VCP_THREAD_FLAG_ALL \
|
#define VCP_THREAD_FLAG_ALL \
|
||||||
|
@ -1225,7 +1225,7 @@ osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks) {
|
|||||||
stat = osErrorParameter;
|
stat = osErrorParameter;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (xTimerChangePeriod (hTimer, ticks, 0) == pdPASS) {
|
if (xTimerChangePeriod (hTimer, ticks, portMAX_DELAY) == pdPASS) {
|
||||||
stat = osOK;
|
stat = osOK;
|
||||||
} else {
|
} else {
|
||||||
stat = osErrorResource;
|
stat = osErrorResource;
|
||||||
@ -1254,7 +1254,7 @@ osStatus_t osTimerStop (osTimerId_t timer_id) {
|
|||||||
stat = osErrorResource;
|
stat = osErrorResource;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (xTimerStop (hTimer, 0) == pdPASS) {
|
if (xTimerStop (hTimer, portMAX_DELAY) == pdPASS) {
|
||||||
stat = osOK;
|
stat = osOK;
|
||||||
} else {
|
} else {
|
||||||
stat = osError;
|
stat = osError;
|
||||||
@ -1305,7 +1305,7 @@ osStatus_t osTimerDelete (osTimerId_t timer_id) {
|
|||||||
callb = (TimerCallback_t *)pvTimerGetTimerID (hTimer);
|
callb = (TimerCallback_t *)pvTimerGetTimerID (hTimer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (xTimerDelete (hTimer, 0) == pdPASS) {
|
if (xTimerDelete (hTimer, portMAX_DELAY) == pdPASS) {
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
||||||
if ((uint32_t)callb & 1U) {
|
if ((uint32_t)callb & 1U) {
|
||||||
/* Callback memory was allocated from dynamic pool, clear flag */
|
/* Callback memory was allocated from dynamic pool, clear flag */
|
||||||
|
Loading…
Reference in New Issue
Block a user