zinongli 10 месяцев назад
Родитель
Сommit
e04431772c

+ 2 - 0
api/metroflip/metroflip_api.h

@@ -230,6 +230,8 @@ extern const Icon I_Suica_VendingThankYou;
 extern const Icon I_Suica_YenKanji;
 extern const Icon I_Suica_YenSign;
 extern const Icon I_Suica_YurakuchoY;
+extern const Icon I_Suica_YurikamomeLogo;
+extern const Icon I_Suica_YurikamomeU;
 extern const Icon I_Suica_CardIcon;
 extern const Icon I_Suica_ShopIcon;
 extern const Icon I_Suica_VendingIcon;

+ 2 - 0
api/metroflip/metroflip_api_table_i.h

@@ -158,6 +158,8 @@ static constexpr auto metroflip_api_table = sort(create_array_t<sym_entry>(
     API_VARIABLE(I_Suica_YenKanji, Icon),
     API_VARIABLE(I_Suica_YenSign, Icon),
     API_VARIABLE(I_Suica_YurakuchoY, Icon),
+    API_VARIABLE(I_Suica_YurikamomeLogo, Icon),
+    API_VARIABLE(I_Suica_YurikamomeU, Icon),
     API_VARIABLE(I_Suica_CardIcon, Icon),
     API_VARIABLE(I_Suica_ShopIcon, Icon),
     API_VARIABLE(I_Suica_VendingIcon, Icon),

+ 2 - 1
api/suica/suica_assets.h

@@ -5,7 +5,7 @@
 #include "suica_structs_i.h"
 
 
-#define SUICA_RAILWAY_NUM 24 // Don't count Unknown
+#define SUICA_RAILWAY_NUM 25 // Don't count Unknown
 
 #define SUICA_RAILWAY_UNKNOWN_NAME "Unknown"
 // Railway
@@ -21,6 +21,7 @@ static const Railway RailwaysList[] = {
 
     // Tokyo Waterfront Area Rapid Transit TWR
     {0x82, {0, 0}, "Rinkai", 8, SuicaTWR, "R", &I_Suica_RinkaiR},
+    {0x82, {0, 0}, "Yurikamome", 16, SuicaYurikamome, "U", &I_Suica_YurikamomeU},
 
     // Tokyo Monorail
     {0xFA, {0, 0}, "Tokyo Monorail", 11, SuicaTokyoMonorail, "MO", 0},

+ 29 - 1
api/suica/suica_drawings.h

@@ -62,6 +62,9 @@ static void suica_draw_train_page_1(
     case SuicaTWR:
         canvas_draw_icon(canvas, 0, 12, &I_Suica_TWRLogo);
         break;
+    case SuicaYurikamome:
+        canvas_draw_icon(canvas, 0, 12, &I_Suica_YurikamomeLogo);
+        break;
     case SuicaTokyoMonorail:
         canvas_draw_icon(canvas, 0, 11, &I_Suica_TokyoMonorailLogo);
         break;
@@ -102,6 +105,9 @@ static void suica_draw_train_page_1(
         case SuicaTWR:
             canvas_draw_icon(canvas, 0, 40, &I_Suica_TWRLogo);
             break;
+        case SuicaYurikamome:
+            canvas_draw_icon(canvas, 0, 40, &I_Suica_YurikamomeLogo);
+            break;
         case SuicaTokyoMonorail:
             canvas_draw_icon(canvas, 0, 39, &I_Suica_TokyoMonorailLogo);
             break;
@@ -253,6 +259,17 @@ static void
         canvas_draw_str(canvas, 13, 53, furi_string_get_cstr(buffer));
         canvas_set_color(canvas, ColorBlack);
         break;
+    case SuicaYurikamome:
+        canvas_draw_circle(canvas, 24, 38, 24);
+        canvas_draw_disc(canvas, 24, 38, 21);
+
+        canvas_set_color(canvas, ColorWhite);
+        canvas_draw_icon(canvas, 20, 22, history.entry_line.logo_icon);
+        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_set_color(canvas, ColorBlack);
+        break;
     case SuicaRailwayTypeMax:
         canvas_draw_circle(canvas, 24, 38, 24);
         canvas_draw_circle(canvas, 24, 38, 19);
@@ -351,6 +368,17 @@ static void
         canvas_draw_str(canvas, 92, 53, furi_string_get_cstr(buffer));
         canvas_set_color(canvas, ColorBlack);
         break;
+    case SuicaYurikamome:
+        canvas_draw_circle(canvas, 103, 38, 24);
+        canvas_draw_disc(canvas, 103, 38, 21);
+
+        canvas_set_color(canvas, ColorWhite);
+        canvas_draw_icon(canvas, 99, 22, history.exit_line.logo_icon);
+        canvas_set_font(canvas, FontBigNumbers);
+        furi_string_printf(buffer, "%02d", history.exit_station.station_number);
+        canvas_draw_str(canvas, 93, 53, furi_string_get_cstr(buffer));
+        canvas_set_color(canvas, ColorBlack);
+        break;
     case SuicaRailwayTypeMax:
         canvas_draw_circle(canvas, 103, 38, 24);
         canvas_draw_circle(canvas, 103, 38, 19);
@@ -944,7 +972,7 @@ static void suica_history_draw_callback(Canvas* canvas, void* model) {
     furi_string_free(buffer);
 }
 
-static void suica_view_history_timer_callback(void* context) { 
+static void suica_view_history_timer_callback(void* context) {
     Metroflip* app = (Metroflip*)context;
     view_dispatcher_send_custom_event(app->view_dispatcher, 0);
 }

+ 1 - 0
api/suica/suica_structs_i.h

@@ -9,6 +9,7 @@ typedef enum {
     SuicaJR,
     SuicaMobile,
     SuicaTWR,
+    SuicaYurikamome,
     SuicaTokyoMonorail,
     SuicaRailwayTypeMax,
 } SuicaRailwayCompany;

+ 1 - 1
example_file/suica_example.nfc

@@ -7,7 +7,7 @@ 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 01 18 FA 01 1B 00 00 00 05 00
 Travel 03: 16 01 00 05 31 53 E3 55 1D 08 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 04: 16 01 00 05 31 47 82 04 82 49 1B 00 00 00 03 00
 Travel 05: 1D 01 00 02 31 46 D5 14 EF 0D 62 01 00 00 02 00
 Travel 06: 12 07 00 00 31 45 02 FD 00 00 E8 03 00 00 01 00
 Travel 07: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+ 18 - 1
files/suica/line_0x82.txt

@@ -5,4 +5,21 @@
 0x82,0x06,Rinkai,Tennozu Isle,5,0
 0x82,0x07,Rinkai,Shinagawa Seaside,6,0
 0x82,0x08,Rinkai,Oimachi,7,0
-0x82,0x0A,Rinkai,Osaki,8,0
+0x82,0x0A,Rinkai,Osaki,8,0
+
+0x82,0x41,Yurikamome,Shimbashi,1,0
+0x82,0x42,Yurikamome,Shiodome,2,0
+0x82,0x44,Yurikamome,Takeshiba,3,0
+0x82,0x45,Yurikamome,Hinode,4,0
+0x82,0x46,Yurikamome,Shibaura-futo,5,0
+0x82,0x48,Yurikamome,Odaiba-kaihinkoen,6,0
+0x82,0x49,Yurikamome,Daiba,7,0
+0x82,0x4a,Yurikamome,TYO Int'l Cruise Terminal,8,0
+0x82,0x4b,Yurikamome,Telecom Center,9,0
+0x82,0x4c,Yurikamome,Aomi,10,0
+0x82,0x4e,Yurikamome,Tokyo Big Sight,11,0
+0x82,0x4f,Yurikamome,Ariake,12,0
+0x82,0x50,Yurikamome,Ariake-Tennis-no-mori,13,0
+0x82,0x52,Yurikamome,Shijo-mae,14,0
+0x82,0x54,Yurikamome,Shin-toyosu,15,0
+0x82,0x56,Yurikamome,Toyosu,16,0

BIN
images/suica/Suica_YurikamomeLogo.png


BIN
images/suica/Suica_YurikamomeU.png