sniffer_view.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "sniffer_view.h"
  2. void draw_sniffer_view(Canvas* canvas, i2cSniffer* i2c_sniffer) {
  3. canvas_clear(canvas);
  4. canvas_set_color(canvas, ColorBlack);
  5. canvas_draw_rframe(canvas, 0, 0, 128, 64, 3);
  6. //canvas_draw_icon(canvas, 2, 13, &I_passport_happy2_46x49);
  7. //canvas_set_font(canvas, FontPrimary);
  8. //canvas_draw_str_aligned(canvas, 3, 3, AlignLeft, AlignTop, SNIFF_TEXT);
  9. canvas_set_font(canvas, FontSecondary);
  10. // Button
  11. canvas_draw_rbox(canvas, 40, 48, 45, 13, 3);
  12. canvas_set_color(canvas, ColorWhite);
  13. canvas_draw_icon(canvas, 45, 50, &I_Ok_btn_9x9);
  14. if(!i2c_sniffer->started) {
  15. canvas_draw_str_aligned(canvas, 57, 51, AlignLeft, AlignTop, "Start");
  16. } else {
  17. canvas_draw_str_aligned(canvas, 57, 51, AlignLeft, AlignTop, "Stop");
  18. }
  19. canvas_set_color(canvas, ColorBlack);
  20. if(i2c_sniffer->first) {
  21. canvas_draw_str_aligned(canvas, 30, 3, AlignLeft, AlignTop, "Nothing Recorded");
  22. return;
  23. }
  24. char text_buffer[10];
  25. // nbFrame text
  26. canvas_draw_str_aligned(canvas, 3, 3, AlignLeft, AlignTop, "Frame: ");
  27. snprintf(
  28. text_buffer,
  29. sizeof(text_buffer),
  30. "%d/%d",
  31. (int)i2c_sniffer->menu_index + 1,
  32. (int)i2c_sniffer->frame_index + 1);
  33. canvas_draw_str_aligned(canvas, 38, 3, AlignLeft, AlignTop, text_buffer);
  34. // Address text
  35. snprintf(
  36. text_buffer,
  37. sizeof(text_buffer),
  38. "0x%02x",
  39. (int)(i2c_sniffer->frames[i2c_sniffer->menu_index].data[0] >> 1));
  40. canvas_draw_str_aligned(canvas, 3, 13, AlignLeft, AlignTop, "Addr: ");
  41. canvas_draw_str_aligned(canvas, 30, 13, AlignLeft, AlignTop, text_buffer);
  42. // R/W
  43. if((int)(i2c_sniffer->frames[i2c_sniffer->menu_index].data[0]) % 2 == 0) {
  44. canvas_draw_str_aligned(canvas, 58, 13, AlignLeft, AlignTop, "Write");
  45. } else {
  46. canvas_draw_str_aligned(canvas, 58, 13, AlignLeft, AlignTop, "Read");
  47. }
  48. // ACK
  49. if(i2c_sniffer->frames[i2c_sniffer->menu_index].ack[0]) {
  50. canvas_draw_str_aligned(canvas, 90, 13, AlignLeft, AlignTop, "ACK");
  51. } else {
  52. canvas_draw_str_aligned(canvas, 90, 13, AlignLeft, AlignTop, "NACK");
  53. }
  54. // Frames content
  55. const uint8_t x_min = 3;
  56. const uint8_t y_min = 23;
  57. uint8_t x_pos = 0;
  58. uint8_t y_pos = 0;
  59. uint8_t row = 1;
  60. uint8_t column = 1;
  61. uint8_t frame_size = i2c_sniffer->frames[i2c_sniffer->menu_index].data_index;
  62. uint8_t offset = i2c_sniffer->row_index;
  63. if(i2c_sniffer->row_index > 0) {
  64. offset += 1;
  65. }
  66. canvas_draw_str_aligned(canvas, x_min, y_min, AlignLeft, AlignTop, "Data:");
  67. for(uint8_t i = 1 + offset; i < frame_size; i++) {
  68. snprintf(
  69. text_buffer,
  70. sizeof(text_buffer),
  71. "0x%02x",
  72. (int)i2c_sniffer->frames[i2c_sniffer->menu_index].data[i]);
  73. x_pos = x_min + (column - 1) * 35;
  74. if(row == 1) {
  75. x_pos += 30;
  76. }
  77. y_pos = y_min + (row - 1) * 10;
  78. canvas_draw_str_aligned(canvas, x_pos, y_pos, AlignLeft, AlignTop, text_buffer);
  79. if(i2c_sniffer->frames[i2c_sniffer->menu_index].ack[i]) {
  80. canvas_draw_str_aligned(canvas, x_pos + 24, y_pos, AlignLeft, AlignTop, "A");
  81. } else {
  82. canvas_draw_str_aligned(canvas, x_pos + 24, y_pos, AlignLeft, AlignTop, "N");
  83. }
  84. column++;
  85. if((row > 1 && column > 3) || (row == 1 && column > 2)) {
  86. column = 1;
  87. row++;
  88. }
  89. if(row > 2) {
  90. break;
  91. }
  92. }
  93. }