sniffer_view.c 3.0 KB

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