-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
118 lines (106 loc) · 2.66 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <Arduino.h>
#include <M5Stack.h>
#include <M5StackUpdater.h>
#include <Free_Fonts.h> // From M5Stack/docs/examples/Advanced/Display/All_Free_Fonts_Demo
#include <Usb.h>
#include <PaSoRi.h>
PaSoRi pasori;
int readSFC()
{
byte b[16];
char toLCD[32];
int ret = -1;
for (int i = 0; i < 1; i++)
{ // 直近の記録のみ
int rcode = pasori.read_without_encryption02(0x090f, i, b);
if (rcode)
{
Serial.print("rcode = ");
Serial.println(rcode, HEX);
break;
}
Serial.print(i, DEC);
Serial.print(": ");
Serial.print(b[11] * 256 + b[10]);
Serial.print(" YEN ");
M5.Lcd.fillScreen(TFT_GREEN);
M5.Lcd.setTextDatum(MC_DATUM);
// Set text colour to orange with black background
M5.Lcd.setTextColor(TFT_BLACK, TFT_GREEN);
sprintf(toLCD, "%d YEN", b[11] * 256 + b[10]);
M5.Lcd.setFreeFont(FF32); // Select the font
M5.Lcd.drawString(toLCD, 160, 60, GFXFF); // Print the string name of the font
if (i == 0)
ret = (unsigned int)b[11] * 256 + b[10];
// date
Serial.print(2000 + ((b[4] >> 1) & 0x7f), DEC);
Serial.print(".");
Serial.print(((b[4] & 0x01) << 3) | ((b[5] >> 5) & 0x07), DEC);
Serial.print(".");
Serial.print(b[5] & 0x1F, DEC);
// from/to
Serial.print(" from:");
Serial.print(b[6], HEX);
Serial.print("-");
Serial.print(b[7], HEX);
Serial.print(" to:");
Serial.print(b[8], HEX);
Serial.print("-");
Serial.print(b[9], HEX);
Serial.println("");
}
return ret;
}
void setup() {
M5.begin();
if (digitalRead(BUTTON_A_PIN) == 0)
{
Serial.println("Will Load menu binary");
updateFromFS(SD);
ESP.restart();
}
Serial.begin(115200);
Serial.println("Start");
delay(5); // ★5ms遅らす
byte rcode = pasori.begin(); // initialize PaSoRi
if (rcode != 0)
{
Serial.print("PaSoRi initialization failed! : rcode = ");
Serial.println(rcode, HEX);
while (1)
; // stop
}
M5.Lcd.fillScreen(GREEN);
}
void loop() {
byte rcode, i;
pasori.task(); // call this at every loop
static short syscode = POLLING_SUICA;
rcode = pasori.poll(syscode);
if (rcode)
{
M5.Lcd.fillScreen(TFT_BLUE);
delay(100);
}
else
{
// Polling successful
Serial.println("FeliCa detected. IDm=");
for (i = 0; i < 8; i++)
{
Serial.print(pasori.getIDm()[i], HEX);
Serial.print(" ");
}
Serial.print(" PMm=");
for (i = 0; i < 8; i++)
{
Serial.print(pasori.getPMm()[i], HEX);
Serial.println(" ");
}
Serial.println("");
// Read SFC (Suica etc.)
Serial.println("<< SFC >>");
readSFC();
delay(5000);
}
}