forked from Sucareto/Arduino-Aime-Reader
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathDevice.h
More file actions
230 lines (207 loc) · 6.61 KB
/
Device.h
File metadata and controls
230 lines (207 loc) · 6.61 KB
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include <stdlib.h>
//#if defined(__AVR_ATmega32U4__)
//#pragma message "当前的开发板是 ATmega32U4"
//#define SerialDevice SerialUSB
//#define NUM_LEDS 11
//#define LED_PIN A3
//#define BOARD_VISION 1
//#include "lib/WS2812_FastLed.h"
//#define PN532_SPI_SS 10
#if defined(ARDUINO_SAMD_ZERO)
#define CDC
#pragma message "当前的开发板是 SAMD21 "
//#include "wiring_private.h"
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
#define NUM_LEDS 11
#define LED_PIN 4
#define BOARD_VISION 2
#include "lib/LED/WS2812_NeoPixel.h"
// Uart SerialPN532(&sercom4, A2, A1, SERCOM_RX_PAD_1, UART_TX_PAD_0);
// void SERCOM4_Handler()
// {
// SerialPN532.IrqHandler();
// }
#define SerialNFC Serial1
//please install FlashStorage library
#elif defined(ESP8266)
#pragma message "当前的开发板是 ESP8266"
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
#define NUM_LEDS 11
//#define LED_PIN D5 //NodeMCU 1.0(ESP12E-Mod)
#define LED_PIN 14 //Generic ESP8266 Module
#define BOARD_VISION 3
#include "lib/LED/WS2812_FastLed.h"
#include "SoftwareSerial.h"
SoftwareSerial SoftSerialNFC(4, 5); // RX, TX
#elif defined(CONFIG_IDF_TARGET_ESP32)
#pragma message "当前的开发板是 ESP32"
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
#define NUM_LEDS 11
#define LED_PIN 1
#define BOARD_VISION 4
#include "lib/LED/WS2812_FastLed.h"
SoftwareSerial SoftSerialNFC(1, 2); // RX, TX
#elif defined(AIR001xx)
#pragma message "当前的开发板是 AIR001"
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
//LED灯的个数
#define NUM_LEDS 11
//LED引脚为PA7,不支持更改,不需要定义
#define BOARD_VISION 5
#include "lib/LED/WS2812_Air001.h"
HardwareSerial SerialPN532(PF0, PF1);
#define SerialNFC SerialPN532
#elif defined(_BOARD_GENERIC_STM32F103C_H_)
#define CDC
//for f103c8/B
#define EEPROM_PAGE_SIZE (uint16)0x400 /* Page size = 1KByte */
#pragma message "当前的开发板是 STM32F103C8"
#define FLASH_SIZE 64
//for f103c6
//#pragma message "当前的开发板是 STM32F103C6"
// #define EEPROM_PAGE_SIZE (uint16)0x200 /* Page size = 1KByte */
// #define FLASH_SIZE 32
#define EEPROM_START_ADDRESS ((uint32)(0x8000000 + FLASH_SIZE * 1024 - 2 * EEPROM_PAGE_SIZE))
#define EEPROM_PAGE0_BASE ((uint32)(EEPROM_START_ADDRESS + 0x000))
#define EEPROM_PAGE1_BASE ((uint32)(EEPROM_START_ADDRESS + EEPROM_PAGE_SIZE))
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
#define BOARD_VISION 6
// #define LED_PIN_RED PB11
// #define LED_PIN_GREEN PB10
// #define LED_PIN_BLUE PB1
// #include "lib/LED/LED_analogwrite.h"
//旧版使用共阳LED
#define NUM_LEDS 11
#include "lib/LED/WS2812_STM32F1.h"
//新版使用WS2812
#define SerialNFC Serial1
#elif defined(ARDUINO_GENERIC_F072C8TX)
#define CDC
#pragma message "当前的开发板是 STM32F072C8"
//Generic STM32F1 series
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
#define BOARD_VISION 7
// #define LED_PIN_RED PB_11
// #define LED_PIN_GREEN PB_10
// #define LED_PIN_BLUE PB_1
// #include "lib/LED/LED_analogwrite.h"
//旧版使用共阳rgbLED
#define LED_PIN PA_7
#include "lib/LED/WS2812_NeoPixel.h"
//#include "lib/LED/WS2812_FastLed.h"
//新版使用WS2812
#define SerialNFC Serial1
HardwareSerial Serial1(PB_7, PB_6);
#elif defined(ARDUINO_ARCH_RP2040)
#define CDC
#pragma message "当前的开发板是 RP2040"
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
#define BOARD_VISION 8
//#define LED_PIN D5
#define SerialNFC Serial1
//#elif defined(__AVR_ATmega328P__)
//#pragma message "当前的开发板是 ATmega328P"
//#define SerialDevice Serial
//#define NUM_LEDS 11
//#define LED_PIN 13
//#define BOARD_VISION 9
//#include "lib/WS2812_FastLed.h"
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
#define CDC 1
#pragma message "当前的开发板是 ESP32C3"
#define SerialDevice Serial
#define sysled 2
#define nfccommled 3
#define beeperpin 6
#define NUM_LEDS 11
#define LED_PIN 10
#define BOARD_VISION 10
#define SerialNFC Serial0
#include "lib/LED/WS2812_FastLed.h"
#elif defined(__AVR_ATtiny85__)
#pragma message "当前的开发板是 ATtiny85"
#define SerialDevice Serial
#define SPICEAPI_INTERFACE Serial
#define NUM_LEDS 11
#define LED_PIN 0
#define BOARD_VISION 11
#include "lib/LED/WS2812_NeoPixel.h"
#include <TinyPinChange.h>
#include <SoftSerial.h>
SoftSerial SoftSerialNFC(2, 1,false); // RX, TX
#else
#error "未经测试的开发板,请检查串口和针脚定义"
#endif
#if defined(SerialNFC)
#pragma message "使用 UART 连接 PN532"
#include <PN532_HSU.h>
PN532_HSU pn532(SerialNFC);
#else
#pragma message "使用 SWUART 连接 PN532"
#if defined(__AVR_ATtiny85__)
#include <PN532_SWHSU_Tiny85.h>
#else
#include <PN532_SWHSU.h>
#endif
PN532_SWHSU pn532(SoftSerialNFC);
#define SerialNFC SoftSerialNFC
#endif
#include "PN532.h"
PN532 nfc(pn532);
#if defined(ARDUINO_SAMD_ZERO)
#include <FlashAsEEPROM.h>
#else
#include <EEPROM.h>
#endif
//EEPROM
//1:系统设置,第0位保留,第1位是否开启高波特率,第二位是否开启LED,第三位是否启用AIC卡号映射,第四位是否开启扩展读卡,第五位SPICE模式是否使用真实卡号
//第六位表示SPICE模式是否使用2P刷卡
//读卡兼容:在sega与spice模式下增加对nesica(mifare ultralight)的支持(暂定,后续可能会增加其他卡片的支持)
//SPICE模式下默认使用UID作为卡号,如果开启了使用真实卡号,将尝试传入aime卡的真实卡号。部分版本SPICE可能会报错,不接受卡号
//2:LED亮度
//3:固件版本号
//4-11:被映射AIC卡号IDM
//12-22:目标卡号
//23:当前使用的系统模式:0为SEGA模式,1为SpiceTool模式,2为Namco模式,3为Test模式,4为RAW直通模式
uint8_t system_setting[3] = {0};
uint8_t mapped_card_IDm[8] = {0};
const uint8_t default_system_setting[3] = {0b00000100,128,10};
extern uint8_t system_mode;
void EEPROM_get_sysconfig(){
#if defined(ESP8266)
EEPROM.begin(32);
#elif defined(ESP32)
EEPROM.begin(32);
#elif defined(_BOARD_GENERIC_STM32F103C_H_)
EEPROM.init(EEPROM_PAGE0_BASE,EEPROM_PAGE1_BASE,EEPROM_PAGE_SIZE);
#endif
for(uint8_t i = 0;i<3;i++){
system_setting[i] = EEPROM.read(i);
}
if(system_setting[2] != default_system_setting[2]){//固件版本号不同,刷入默认设置
for(uint8_t i = 0;i<3;i++) {
EEPROM.write(i, default_system_setting[i]);
system_setting[i] = default_system_setting[i];
}
EEPROM.write(23, 0);
system_mode = 0;
}else{
system_mode = EEPROM.read(23);
if(system_mode>4){
system_mode = 0;
EEPROM.write(23,0);
}
}
#if defined(ESP8266)
EEPROM.commit();
#elif defined(ESP32)
EEPROM.commit();
#endif
}