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

NFC_Eink #245

wants to merge 29 commits into from

Conversation

RebornedBrain
Copy link
Contributor

@RebornedBrain RebornedBrain commented Sep 26, 2024

What's new

  • This app allows emulation and writing of NFC Eink tags from Waveshare and Goodisplay
  • Image saved as one screen type can be then loaded to screen of another type

Here is the list of displays wich app supports now:
Waveshare:

  • Waveshare 2.13 inch
  • Waveshare 2.7 inch
  • Waveshare 2.9 inch
  • Waveshare 4.2 inch
  • Waveshare 7.5 inch

Goodisplay:

  • GDEY0154D67
  • GDEY0213B74
  • GDEY029T94
  • GDEY037T03

Verification

Emulation

Goodisplay emulation verification:

  1. Install Goodisplay NFC-D1 application from here (scan QR code)
  2. Choose screen type and select any image from gallery, or use predefined one
  3. On Flipper select Emulate->Goodisplay
  4. Apply phone to Flippers back

Waveshare emulation verification:

  1. Install Waveshare NFCTag application from here
  2. Choose screen type and select any image from gallery
  3. On Flipper select Emulate->Waveshare
  4. Apply phone to Flippers back

Waveshare emulation verification using Proxmark:

  1. On Flipper select Emulate->Waveshare
  2. Put Flipper close to Proxmark
  3. On proxmark use such command hf waveshare loadbmp -f <path_to_file.bmp> -m 0

Writing

  1. Choose saved image on Flipper
  2. Choose Write
  3. Select screen type you want to write
  4. Apply Eink tag of that type, or another Flipper with emulation.

Writing depends on 'Writing mode' on Settings menu:

  • Strict - image can be written only to that type of screen which was used during emulation (initial screen).
  • Size - image can be written to any screen with the same resolution (example Waveshare 2.13 inch to GDEY0213B74)
  • Vendor - image can be written to any screen with the same vendor as in initial screen.
  • Free - image can be written to any screen without restrictions.

When initial image is smaller then target screen, then it will be copied to target and other part in target will be filled with black color.
When initial image is larger then target screen, then it will be cropped to fit target screen size.

Checklist (For Reviewer)

  • PR has description of feature/bug or link to Confluence/Jira task
  • Description contains actions to verify feature/bugfix
  • I've built this code, uploaded it to the device and verified feature/bugfix

@RebornedBrain RebornedBrain marked this pull request as ready for review September 30, 2024 09:48
@Xbxjdjdjd
Copy link

Will this work on Pricer brand tags?

here

@RebornedBrain
Copy link
Contributor Author

Will this work on Pricer brand tags?

here

I don't think so, because each vendor has it's own protocol over NFC which needs to be investigated and implemented separately. In order to do that some protocol traces are required, I had tags of mentioned vendors only. But anyway app is done in the way, which assume adding new vendors and screens.

@skotopes
Copy link
Member

skotopes commented Nov 1, 2024

Good display: No reaction and eventual out of memory on trying to write with original app(https://www.good-display.com/product/423.html using GDEY037T03 config)
Wave share: works but not super stable.

@skotopes skotopes marked this pull request as draft November 1, 2024 05:57
@RebornedBrain RebornedBrain marked this pull request as ready for review November 27, 2024 19:13
@skotopes
Copy link
Member

(gdb) bt
#0  0x080125ac in __furi_crash_implementation () at furi/core/check.c:170
#1  0x20011e92 in image_scroll_set_image (instance=0x2000d8c8, width=width@entry=0, height=height@entry=0, image=0x0, invert_image=false) at /Users/aku/Work/Flipper/flipperzero-good-faps/nfc_eink/views/image_scroll.c:148
#2  0x200114a2 in nfc_eink_scene_show_image_on_enter (context=0x2000a828) at /Users/aku/Work/Flipper/flipperzero-good-faps/nfc_eink/scenes/scene_show_image.c:24
#3  0x08082fb2 in scene_manager_next_scene (scene_manager=scene_manager@entry=0x20013ca0, next_scene_id=4) at applications/services/gui/scene_manager.c:106
#4  0x200112bc in nfc_eink_scene_screen_menu_on_event (context=<optimized out>, event=...) at /Users/aku/Work/Flipper/flipperzero-good-faps/nfc_eink/scenes/scene_screen_menu.c:80
#5  0x08082f1e in scene_manager_handle_custom_event (scene_manager=<optimized out>, custom_event=0) at applications/services/gui/scene_manager.c:53
#6  0x2001212a in nfc_eink_app_custom_event_callback (context=<optimized out>, event=<optimized out>) at /Users/aku/Work/Flipper/flipperzero-good-faps/nfc_eink/nfc_eink_app.c:32
#7  0x08083afc in view_dispatcher_handle_custom_event (view_dispatcher=view_dispatcher@entry=0x2000c230, event=0) at applications/services/gui/view_dispatcher.c:323
#8  0x08083b20 in view_dispatcher_run_event_callback (object=<optimized out>, context=0x2000c230) at applications/services/gui/view_dispatcher.c:386
#9  0x0801342e in furi_event_loop_process_level_event (item=0x2000c590) at furi/core/event_loop.c:115
#10 furi_event_loop_process_event (item=0x2000c590, instance=0x2000c1a8) at furi/core/event_loop.c:136
#11 furi_event_loop_process_waiting_list (instance=0x2000c1a8) at furi/core/event_loop.c:179
#12 furi_event_loop_run (instance=0x2000c1a8) at furi/core/event_loop.c:235
#13 0x0808396e in view_dispatcher_run (view_dispatcher=0x2000c230) at applications/services/gui/view_dispatcher.c:123
#14 0x2001244a in nfc_eink () at /Users/aku/Work/Flipper/flipperzero-good-faps/nfc_eink/nfc_eink_app.c:275
#15 0x0805c8c4 in flipper_application_thread (context=0x20003168) at lib/flipper_application/flipper_application.c:239
#16 0x08016232 in furi_thread_body (context=<optimized out>) at furi/core/thread.c:108
#17 0x080161de in furi_thread_catch () at furi/core/thread.c:80
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

emulate, good-display, 2 color

… app shows "Unable to write" error and stops
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants