[FL-1643] NFC emv assets (#661)

* assets: add EMV AID table for NFC app
* file-worker: add searching for value by the key
* nfc: add emv parser helpers
* assets: add country and currency codes
* nfc: add country and currency code parsing
* emv_decoder: add country and currency code support
* nfc: add AID. currency and country display
* nfc: rework bank_card view
* nfc: add currency and country save
* assets: change emv chip asset
* nfc: change asset in bank card
* gui: add frame element to widget
* nfc: add bank card frame, add documentation
* rfal: fix long APDU command emulation
* nfc: fix typos
* Scripts ReadMe: assets delivery command

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: DrZlo13 <who.just.the.doctor@gmail.com>
This commit is contained in:
gornekich
2021-08-20 22:56:43 +03:00
committed by GitHub
parent b1bbf1730c
commit ecff31d228
31 changed files with 1251 additions and 319 deletions

View File

@@ -71,6 +71,10 @@ bool FileWorkerCpp::read_until_buffered(string_t str_result, char* file_buf, siz
return file_worker_read_until_buffered(file_worker, str_result, file_buf, file_buf_cnt, max_length, separator);
}
bool FileWorkerCpp::get_value_from_key(string_t key, char delimiter, string_t value) {
return file_worker_get_value_from_key(file_worker, key, delimiter, value);
}
bool FileWorkerCpp::is_file_exist(const char* filename, bool* exist) {
return file_worker_is_file_exist(file_worker, filename, exist);
}

View File

@@ -143,6 +143,17 @@ public:
*/
bool read_until_buffered(string_t str_result, char* file_buf, size_t* file_buf_cnt, size_t max_length, char separator = '\n');
/**
* @brief Gets value from key
*
* @param file_worker FileWorker instance
* @param key key
* @param delimeter key-value delimeter
* @param value value for given key
* @return true on success
*/
bool get_value_from_key(string_t key, char delimiter, string_t value);
/**
* @brief Check whether file exist or not
*

View File

@@ -355,6 +355,34 @@ bool file_worker_read_until_buffered(
return string_size(str_result) || *file_buf_cnt;
}
bool file_worker_get_value_from_key(FileWorker* file_worker, string_t key, char delimiter, string_t value) {
bool found = false;
string_t next_line;
string_t next_key;
string_init(next_line);
string_init(next_key);
size_t delim_pos = 0;
while(file_worker_read_until(file_worker, next_line, '\n')) {
delim_pos = string_search_char(next_line, delimiter);
if(delim_pos == STRING_FAILURE) {
break;
}
string_set_n(next_key, next_line, 0, delim_pos);
if(string_equal_p(next_key, key)) {
string_right(next_line, delim_pos);
string_strim(next_line);
string_set(value, next_line);
found = true;
break;
}
}
string_clear(next_line);
string_clear(next_key);
return found;
}
bool file_worker_rename(FileWorker* file_worker, const char* old_path, const char* new_path) {
FS_Error fs_result = storage_common_rename(file_worker->api, old_path, new_path);

View File

@@ -185,6 +185,17 @@ bool file_worker_read_until_buffered(
size_t max_length,
char separator);
/**
* @brief Gets value from key
*
* @param file_worker FileWorker instance
* @param key key
* @param delimeter key-value delimeter
* @param value value for given key
* @return true on success
*/
bool file_worker_get_value_from_key(FileWorker* file_worker, string_t key, char delimiter, string_t value);
/**
* @brief Check whether file exist or not
*