[FL-1396] Mifare Classic read (#1034)

* rfal: add new data exchange function
* core: add FURI_BIT to common defines
* furi_hal_nfc: add data exchange with custom patiry bits
* lib: extend nfc common API
* assets: add mf classic dictionary
* lib: introduce mifare classic library
* nfc: add dictionary reader helper
* nfc worker: add worker events, add mifare classic read
* nfc: rework scenes with worker events
* nfc: add read mifare classic GUI
* nfc device: add mifare classic save
* nfc: add dictionary open fail scene
* nfc: mention resources
* stream: fix stream read line
* subghz: rework file read with fixed stream_read_line
* furi_hal_nfc: decrease communication timeout
* nfc: rework keys load from dictionary with file_stream
* nfc: add read mifare classic suggestion
* nfc: fix mifare classic read view
* nfc: fix index size
* nfc: add switch to no dictionary found scene
* nfc: add mifare classic load
* nfc: improve read mifare classic design
* mifare_classic: add proxmark3 mention
* nfc: format sources
* nfc: fix typos, add documentation
This commit is contained in:
gornekich
2022-03-24 01:14:34 +03:00
committed by GitHub
parent 46a894bc5c
commit eafeefb843
46 changed files with 3113 additions and 111 deletions

View File

@@ -74,18 +74,17 @@ bool stream_read_line(Stream* stream, string_t str_result) {
do {
uint16_t bytes_were_read = stream_read(stream, buffer, buffer_size);
// TODO process EOF
if(bytes_were_read == 0) break;
bool result = false;
bool error = false;
for(uint16_t i = 0; i < bytes_were_read; i++) {
if(buffer[i] == '\n') {
if(!stream_seek(stream, i - bytes_were_read, StreamOffsetFromCurrent)) {
if(!stream_seek(stream, i - bytes_were_read + 1, StreamOffsetFromCurrent)) {
error = true;
break;
}
string_push_back(str_result, buffer[i]);
result = true;
break;
} else if(buffer[i] == '\r') {
@@ -100,7 +99,7 @@ bool stream_read_line(Stream* stream, string_t str_result) {
}
} while(true);
return string_size(str_result) != 0;
return stream_eof(stream);
}
bool stream_rewind(Stream* stream) {