sniffer_view.c 3.3 KB

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