Просмотр исходного кода

reinitialize history for each parsing

zinongli 11 месяцев назад
Родитель
Сommit
f900e38eb0
3 измененных файлов с 22 добавлено и 17 удалено
  1. 14 14
      api/suica/suica_drawings.h
  2. 2 2
      example_file/suica_example.metro
  3. 6 1
      scenes/plugins/suica.c

+ 14 - 14
api/suica/suica_drawings.h

@@ -169,7 +169,7 @@ static void
         canvas_draw_str(canvas, 13, 54, furi_string_get_cstr(buffer));
         break;
     case SuicaTokyoMonorail:
-        canvas_draw_rbox(canvas, 9, 23, 32, 32, 5);
+        canvas_draw_rbox(canvas, 8, 22, 34, 34, 7);
         canvas_set_color(canvas, ColorWhite);
         canvas_draw_box(canvas, 12, 26, 26, 26);
         canvas_set_color(canvas, ColorBlack);
@@ -182,7 +182,7 @@ static void
         break;
     case SuicaJR:
         if(!furi_string_equal_str(history.entry_station.jr_header, "0")) {
-            canvas_draw_rbox(canvas, 6, 14, 38, 48, 7);
+            canvas_draw_rbox(canvas, 4, 13, 42, 51, 10);
             canvas_set_color(canvas, ColorWhite);
             canvas_set_font(canvas, FontPrimary);
             canvas_draw_str_aligned(
@@ -192,17 +192,17 @@ static void
                 AlignCenter,
                 AlignBottom,
                 furi_string_get_cstr(history.entry_station.jr_header));
-            canvas_draw_rbox(canvas, 9, 26, 32, 32, 5);
+            canvas_draw_rbox(canvas, 8, 26, 34, 34, 7);
             canvas_set_color(canvas, ColorBlack);
-            canvas_draw_frame(canvas, 12, 29, 26, 26);
+            canvas_draw_frame(canvas, 12, 30, 26, 26);
             canvas_set_font(canvas, FontKeyboard);
             canvas_draw_str_aligned(
-                canvas, 25, 38, AlignCenter, AlignBottom, history.entry_line.short_name);
+                canvas, 25, 39, AlignCenter, AlignBottom, history.entry_line.short_name);
             canvas_set_font(canvas, FontBigNumbers);
             furi_string_printf(buffer, "%02d", history.entry_station.station_number);
-            canvas_draw_str(canvas, 14, 53, furi_string_get_cstr(buffer));
+            canvas_draw_str(canvas, 14, 54, furi_string_get_cstr(buffer));
         } else {
-            canvas_draw_rframe(canvas, 9, 23, 32, 32, 5);
+            canvas_draw_rframe(canvas, 8, 22, 34, 34, 7);
             canvas_draw_frame(canvas, 12, 26, 26, 26);
             canvas_set_font(canvas, FontKeyboard);
             canvas_draw_str_aligned(
@@ -267,7 +267,7 @@ static void
         canvas_draw_str(canvas, 92, 54, furi_string_get_cstr(buffer));
         break;
     case SuicaTokyoMonorail:
-        canvas_draw_rbox(canvas, 86, 23, 32, 32, 5);
+        canvas_draw_rbox(canvas, 85, 22, 34, 34, 7);
         canvas_set_color(canvas, ColorWhite);
         canvas_draw_box(canvas, 89, 26, 26, 26);
         canvas_set_color(canvas, ColorBlack);
@@ -280,7 +280,7 @@ static void
         break;
     case SuicaJR:
         if(!furi_string_equal_str(history.exit_station.jr_header, "0")) {
-            canvas_draw_rbox(canvas, 83, 14, 38, 48, 7);
+            canvas_draw_rbox(canvas, 81, 13, 42, 51, 10);
             canvas_set_color(canvas, ColorWhite);
             canvas_set_font(canvas, FontPrimary);
             canvas_draw_str_aligned(
@@ -290,17 +290,17 @@ static void
                 AlignCenter,
                 AlignBottom,
                 furi_string_get_cstr(history.exit_station.jr_header));
-            canvas_draw_rbox(canvas, 86, 26, 32, 32, 5);
+            canvas_draw_rbox(canvas, 85, 26, 34, 34, 7);
             canvas_set_color(canvas, ColorBlack);
-            canvas_draw_frame(canvas, 89, 29, 26, 26);
+            canvas_draw_frame(canvas, 89, 30, 26, 26);
             canvas_set_font(canvas, FontKeyboard);
             canvas_draw_str_aligned(
-                canvas, 102, 38, AlignCenter, AlignBottom, history.exit_line.short_name);
+                canvas, 102, 39, AlignCenter, AlignBottom, history.exit_line.short_name);
             canvas_set_font(canvas, FontBigNumbers);
             furi_string_printf(buffer, "%02d", history.exit_station.station_number);
-            canvas_draw_str(canvas, 91, 53, furi_string_get_cstr(buffer));
+            canvas_draw_str(canvas, 91, 54, furi_string_get_cstr(buffer));
         } else {
-            canvas_draw_rframe(canvas, 86, 23, 32, 32, 5);
+            canvas_draw_rframe(canvas, 85, 22, 34, 34, 7);
             canvas_draw_frame(canvas, 89, 26, 26, 26);
             canvas_set_font(canvas, FontKeyboard);
             canvas_draw_str_aligned(

+ 2 - 2
example_file/suica_example.metro

@@ -4,8 +4,8 @@ Card Type: suica
 Travel History: 
 Travel 00: C8 46 00 00 31 55 85 63 0E B8 00 00 00 00 07 00
 Travel 01: C7 46 00 00 31 55 67 4B EE A9 8C 00 00 00 06 00
-Travel 02: 16 01 00 05 31 54 FA 03 01 1A 1B 00 00 00 05 00
-Travel 03: 16 01 00 05 31 53 F1 02 E3 32 1B 00 00 00 04 00
+Travel 02: 16 01 00 05 31 54 FA 01 01 1A 1B 00 00 00 05 00
+Travel 03: 16 01 00 05 31 53 01 18 31 00 1B 00 00 00 04 00
 Travel 04: 16 01 00 05 31 47 82 04 E4 25 1B 00 00 00 03 00
 Travel 05: 1D 01 00 02 31 46 D5 14 01 12 62 01 00 00 02 00
 Travel 06: 12 07 00 00 31 45 82 08 00 00 E8 03 00 00 01 00

+ 6 - 1
scenes/plugins/suica.c

@@ -36,7 +36,6 @@ const char* suica_service_names[] = {
     "Taps Log",
 };
 
-
 static void suica_model_initialize(SuicaHistoryViewModel* model, size_t initial_capacity) {
     model->travel_history =
         (uint8_t*)malloc(initial_capacity * FELICA_DATA_BLOCK_SIZE); // Each entry is 16 bytes
@@ -159,6 +158,9 @@ static void suica_parse_train_code(
 
     switch(ride_type) {
     case SuicaTrainRideEntry:
+        model->history.entry_station.name = furi_string_alloc_set("Unknown");
+        model->history.entry_station.jr_header = furi_string_alloc_set("0");
+        model->history.entry_line = RailwaysList[SUICA_RAILWAY_NUM];
         for(size_t i = 0; i < SUICA_RAILWAY_NUM; i++) {
             if(furi_string_equal_str(line_candidate, RailwaysList[i].long_name)) {
                 model->history.entry_line = RailwaysList[i];
@@ -172,6 +174,9 @@ static void suica_parse_train_code(
         }
         break;
     case SuicaTrainRideExit:
+        model->history.exit_station.name = furi_string_alloc_set("Unknown");
+        model->history.exit_station.jr_header = furi_string_alloc_set("0");
+        model->history.exit_line = RailwaysList[SUICA_RAILWAY_NUM];
         for(size_t i = 0; i < SUICA_RAILWAY_NUM; i++) {
             if(furi_string_equal_str(line_candidate, RailwaysList[i].long_name)) {
                 model->history.exit_line = RailwaysList[i];