u8g2_qrcode.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "u8g2/u8g2.h"
  2. #include "qrcode/qrcode.h"
  3. #include "flipper.h"
  4. void u8g2_DrawPixelSize(u8g2_t* u8g2, uint8_t x, uint8_t y, uint8_t size) {
  5. for(uint8_t px = 0; px < size; px++) {
  6. for(uint8_t py = 0; py < size; py++) {
  7. u8g2_DrawPixel(u8g2, x + px, y + py);
  8. }
  9. }
  10. }
  11. void u8g2_qrcode(void* p) {
  12. FuriRecordSubscriber* log = get_default_log();
  13. // open record
  14. FuriRecordSubscriber* fb_record = furi_open("u8g2_fb", false, false, NULL, NULL, NULL);
  15. // Allocate a chunk of memory to store the QR code
  16. // https://github.com/ricmoo/QRCode
  17. // we init version 1, 21x21 px, 16 alphanumeric chars with
  18. // QUARTILE error correction
  19. const uint8_t qr_version = 1;
  20. const uint8_t qr_error_correction = ECC_QUARTILE;
  21. const uint8_t qr_x = 32;
  22. const uint8_t qr_y = 0;
  23. const uint8_t qr_size = 3;
  24. // The structure to manage the QR code
  25. QRCode qrcode;
  26. // QR Code init
  27. uint8_t qrcodeBytes[qrcode_getBufferSize(qr_version)];
  28. qrcode_initText(&qrcode, qrcodeBytes, qr_version, qr_error_correction, "HELLO FLIPPER");
  29. if(fb_record == NULL) {
  30. fuprintf(log, "[widget] cannot create fb record\n");
  31. furiac_exit(NULL);
  32. }
  33. u8g2_t* fb = furi_take(fb_record);
  34. // clear display
  35. if(fb != NULL) {
  36. u8g2_ClearBuffer(fb);
  37. }
  38. while(1) {
  39. if(fb != NULL) {
  40. // draw qr code
  41. for(uint8_t y = 0; y < qrcode.size; y++) {
  42. for(uint8_t x = 0; x < qrcode.size; x++) {
  43. if(qrcode_getModule(&qrcode, x, y)) {
  44. u8g2_SetDrawColor(fb, 1);
  45. u8g2_DrawPixelSize(fb, qr_x + x * qr_size, qr_y + y * qr_size, qr_size);
  46. } else {
  47. u8g2_SetDrawColor(fb, 0);
  48. u8g2_DrawPixelSize(fb, qr_x + x * qr_size, qr_y + y * qr_size, qr_size);
  49. }
  50. }
  51. }
  52. } else {
  53. furiac_exit(NULL);
  54. }
  55. furi_commit(fb_record);
  56. delay(1);
  57. }
  58. }