Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NFC_Eink #245

Closed
wants to merge 29 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
003a618
Initial commit of Nfc Eink
RebornedBrain Sep 26, 2024
979e452
Assets added
RebornedBrain Sep 29, 2024
421d820
nfc_eink_app_i.h added
RebornedBrain Sep 29, 2024
eb6f8e3
All screen types are now aligned
RebornedBrain Sep 29, 2024
de3d95e
New goodisplay poller logic
RebornedBrain Sep 29, 2024
a7bc6d5
Merge branch 'dev' into nfc_eink
skotopes Oct 19, 2024
4e001b0
Merge branch 'dev' into nfc_eink
skotopes Oct 19, 2024
cd24df9
New api fix
RebornedBrain Oct 21, 2024
950decf
New error processing logic and api
RebornedBrain Oct 21, 2024
84f9ae5
Waceshare poller fixes and retry mechanism
RebornedBrain Oct 21, 2024
86beeca
Scenes adjustments according to new error logic in eink screens
RebornedBrain Oct 21, 2024
72d4933
Merge branch 'nfc_eink' of github.com:RebornedBrain/flipperzero-good-…
RebornedBrain Oct 21, 2024
4ac1053
Merge branch 'dev' into nfc_eink
skotopes Nov 1, 2024
00fed42
strcat replaced to strlcat
RebornedBrain Nov 14, 2024
e6b5ad1
Reworked logic of descriptors handling and filtering
RebornedBrain Nov 25, 2024
dffa04d
Now eink screen inits using name instead of screen type
RebornedBrain Nov 25, 2024
3540281
Waveshare screen config logic reworked
RebornedBrain Nov 25, 2024
b95d462
Goodisplay screen config logic reworked
RebornedBrain Nov 25, 2024
108064c
Now file load function can return 3 different states, depending on us…
RebornedBrain Nov 25, 2024
01c89f2
All scenes with init screen adjusted
RebornedBrain Nov 25, 2024
3e54943
Scene transition logic adjusted to show error if failed to load
RebornedBrain Nov 25, 2024
f15b9d5
Waveshare poller send data functions now return three statuses instea…
RebornedBrain Nov 26, 2024
5711a11
Additional poller state for reading some pages, possibly might help t…
RebornedBrain Nov 26, 2024
879a8c9
Removed read steps
RebornedBrain Nov 27, 2024
7d6f64a
Delays adjusted and some cmd fixes
RebornedBrain Nov 27, 2024
d87d7e2
Select type cmd now uses bigger timeout for big displays
RebornedBrain Nov 27, 2024
17ffe06
Some cleanups
RebornedBrain Nov 27, 2024
fc9babe
Merge branch 'dev' into nfc_eink
skotopes Jan 16, 2025
2d67d17
Fixed 3.71 inch issue when phone app sends more data then needed, now…
RebornedBrain Jan 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Waveshare poller send data functions now return three statuses instea…
…d of true/ false
RebornedBrain committed Nov 26, 2024
commit f15b9d50cdfcf8e9471bc08a1933e6757e5606a9
56 changes: 35 additions & 21 deletions nfc_eink/nfc_eink_screen/waveshare/eink_waveshare_poller.c
Original file line number Diff line number Diff line change
@@ -7,6 +7,12 @@
#define EINK_WAVESHARE_POLLER_FWT (60000)
#define EINK_WAVESHARE_POLLER_FWT_INFINITE (0)

typedef enum {
EinkWaveshareSendStatusSuccess,
EinkWaveshareSendStatusFail,
EinkWaveshareSendStatusTransportError,
} EinkWaveshareSendStatus;

typedef NfcCommand (
*EinkWavesharePollerStateHandler)(Iso14443_3aPoller* poller, NfcEinkScreen* screen);

@@ -45,20 +51,22 @@ static bool eink_waveshare_send_data(
Iso14443_3aError error =
iso14443_3a_poller_send_standard_frame(poller, screen->tx_buf, screen->rx_buf, timeout);

bool result = false;
EinkWaveshareSendStatus result = EinkWaveshareSendStatusFail;
if(error == Iso14443_3aErrorNone) {
size_t response_len = bit_buffer_get_size_bytes(screen->rx_buf);
const uint8_t* response = bit_buffer_get_data(screen->rx_buf);

result = validator(response, response_len);
result = validator(response, response_len) ? EinkWaveshareSendStatusSuccess :
EinkWaveshareSendStatusFail;

} else {
FURI_LOG_E(TAG, "Iso14443_3aError: %02X", error);
result = EinkWaveshareSendStatusTransportError;
}
return result;
}

static bool eink_waveshare_send_command_ex(
static EinkWaveshareSendStatus eink_waveshare_send_command_ex(
Iso14443_3aPoller* poller,
NfcEinkScreen* screen,
const uint8_t command,
@@ -77,13 +85,14 @@ static bool eink_waveshare_send_command_ex(
memcpy(&data[2], command_data, command_data_length);
}

bool result = eink_waveshare_send_data(poller, screen, data, data_len, validator, timeout);
EinkWaveshareSendStatus result =
eink_waveshare_send_data(poller, screen, data, data_len, validator, timeout);
free(data);

return result;
}

static bool eink_waveshare_send_command(
static EinkWaveshareSendStatus eink_waveshare_send_command(
Iso14443_3aPoller* poller,
NfcEinkScreen* screen,
const uint8_t command,
@@ -96,16 +105,18 @@ static bool eink_waveshare_send_command(
command_data,
command_data_length,
eink_waveshare_default_validator,
EINK_WAVESHARE_POLLER_FWT_INFINITE);
EINK_WAVESHARE_POLLER_FWT);
}

static EinkWavesharePollerState eink_waveshare_poller_state_generic_handler(
Iso14443_3aPoller* poller,
NfcEinkScreen* screen,
uint8_t command,
EinkWavesharePollerState success_state) {
bool result = eink_waveshare_send_command(poller, screen, command, NULL, 0);
return result ? success_state : EinkWavesharePollerStateError;
EinkWaveshareSendStatus result = eink_waveshare_send_command(poller, screen, command, NULL, 0);
return (result == EinkWaveshareSendStatusSuccess) ? success_state :
EinkWavesharePollerStateError;
}
}

static NfcCommand
@@ -131,9 +142,9 @@ static NfcCommand
do {
EinkScreenTypeWaveshare screen_type =
eink_waveshare_config_get_protocol_screen_type_by_name(screen->name);
bool result = eink_waveshare_send_command(
EinkWaveshareSendStatus result = eink_waveshare_send_command(
poller, screen, EINK_WAVESHARE_COMMAND_SELECT_TYPE, &screen_type, sizeof(screen_type));
if(!result) break;
if(result != EinkWaveshareSendStatusSuccess) break;

ctx->poller_state = EinkWavesharePollerStateSetNormalMode;
} while(false);
@@ -223,15 +234,15 @@ static NfcCommand
ctx->poller_state = EinkWavesharePollerStateRetry;

do {
bool result = eink_waveshare_send_data(
EinkWaveshareSendStatus result = eink_waveshare_send_data(
poller,
screen,
data,
data_len,
eink_waveshare_default_validator,
EINK_WAVESHARE_POLLER_FWT);

if(!result) break;
if(result != EinkWaveshareSendStatusSuccess) break;

ctx->data_index += block_size;
ctx->block_number++;
@@ -280,18 +291,21 @@ static NfcCommand
FURI_LOG_D(TAG, "Wait ready");
NfcEinkWaveshareSpecificContext* ctx = screen->device->screen_context;

if(eink_waveshare_send_command_ex(
poller,
screen,
EINK_WAVESHARE_COMMAND_WAIT_FOR_READY,
NULL,
0,
eink_waveshare_refresh_cmd_validator,
EINK_WAVESHARE_POLLER_FWT)) {
EinkWaveshareSendStatus status = eink_waveshare_send_command_ex(
poller,
screen,
EINK_WAVESHARE_COMMAND_WAIT_FOR_READY,
NULL,
0,
eink_waveshare_refresh_cmd_validator,
EINK_WAVESHARE_POLLER_FWT);
if(status == EinkWaveshareSendStatusSuccess) {
ctx->poller_state = EinkWavesharePollerStateFinish;
} else {
} else if(status == EinkWaveshareSendStatusFail) {
ctx->poller_state = EinkWavesharePollerStateWaitReady;
furi_delay_ms(100);
} else if(status == EinkWaveshareSendStatusTransportError) {
ctx->poller_state = EinkWavesharePollerStateError;
}
return NfcCommandContinue;
}