1 module libpafe4d.libpafe;
2 import libusb;
3 
4 extern (C) {
5   enum PASORI_TYPE {
6     PASORI_TYPE_S310,
7     PASORI_TYPE_S320,
8     PASORI_TYPE_S330
9   }
10 
11   struct pasori {
12     libusb_device **devs;
13     libusb_context *ctx;
14     libusb_device_handle *dh;
15     libusb_device_descriptor desc;
16 
17     int b_ep_in, b_ep_out, i_ep_in;
18     int timeout;
19     PASORI_TYPE type;
20   }
21 
22 
23   struct felica_area {
24     ushort code, attr, bin;
25     felica_area *next;
26   }
27 
28   /* DEFINE felica */
29   struct felica {
30     pasori *p;
31     ushort systemcode;
32     ubyte[8] IDm;
33     ubyte[8] PMm;
34     ushort area_num;
35     felica_area[256] area;
36     ushort service_num;
37     felica_area[256] service;
38     felica *next;
39   }
40 
41   struct felica_block {
42     ubyte[8] data;
43   }
44 
45   struct felica_block_info {
46     ushort service;
47     ubyte mode;
48     ushort block;
49   }
50 
51   /* DEFINE constants */
52 
53   enum FELICA_IDM_LENGTH = 8;
54   enum FELICA_PMM_LENGTH = 8;
55   enum FELICA_BLOCK_LENGTH = 16;
56 
57   enum FELICA_AREA_NUM_MAX = 121;
58 
59   enum FELICA_POLLING_ANY   = 0xffff;
60   enum FELICA_POLLING_SUICA = 0x0003;
61   enum FELICA_POLLING_EDY   = 0xfe00;
62 
63 
64   enum FELICA_SERVICE_SUICA_IN_OUT  = 0x108f;
65   enum FELICA_SERVICE_SUICA_HISTORY = 0x090f;
66   enum FELICA_SERVICE_IRUCA_HISTORY = 0xde80;
67   enum FELICA_SERVICE_EDY_NUMBER  = 0x110b;
68   enum FELICA_SERVICE_EDY_HISTORY = 0x170f;
69 
70 
71   enum FELICA_CMD_POLLING = 0;
72   enum FELICA_ANS_POLLING = 1;
73 
74   enum FELICA_CMD_REQUEST_SERVICE = 2;
75   enum FELICA_ANS_REQUEST_SERVCCE = 3;
76 
77   enum FELICA_CMD_REQUEST_RESPONSE = 4;
78   enum FELICA_ANS_REQUEST_RESPONSE = 5;
79 
80   enum FELICA_CMD_READ_WITHOUT_ENCRYPTION = 6;
81   enum FELICA_ANS_READ_WITHOUT_ENCRYPTION = 7;
82 
83   enum FELICA_CMD_WRITE_WITHOUT_ENCRYPTION = 8;
84   enum FELICA_ANS_WRITE_WITHOUT_ENCRYPTION = 9;
85 
86   enum FELICA_CMD_AUTHENTICATION1 = 0x10;
87   enum FELICA_ANS_AUTHENTICATION1 = 0x11;
88 
89   enum FELICA_CMD_AUTHENTICATION2 = 0x12;
90   enum FELICA_ANS_AUTHENTICATION2 = 0x13;
91 
92   enum FELICA_CMD_READ_FROM_SECURE_FILE = 0x14;
93   enum FELICA_ANS_READ_FROM_SECURE_FILE = 0x15;
94 
95   enum FELICA_CMD_WRITE_TO_SECURE_FILE = 0x16;
96   enum FELICA_ANS_WRITE_TO_SECURE_FILE = 0x17;
97 
98 
99   enum FELICA_CMD_SEARCH_SERVICE_CODE = 0x0a;
100   enum FELICA_ANS_SEARCH_SERVICE_CODE = 0x0b;
101 
102   enum FELICA_CMD_REQUEST_SYSTEM = 0x0c;
103   enum FELICA_ANS_REQUEST_SYSTEM = 0x0d;
104 
105 
106   enum PASORI2_CMD_SELF_DIAGNOSIS = 0x52;
107   enum PASORI2_ANS_SELF_DIAGNOSIS = 0x53;
108 
109   enum PASORI2_CMD_GET_FIRMWARE_VERSION = 0x58;
110   enum PASORI2_ANS_GET_FIRMWARE_VERSION = 0x59;
111 
112   enum PASORI2_CMD_SEND_PACKET = 0x5c;
113   enum PASORI2_ANS_SEND_PACKET = 0x5d;
114 
115   enum PASORI2_DIAG_COMMUNICATION_LINE_TEST = 0x00;
116   enum PASORI2_DIAG_EEPROM_TEST = 0x01;
117   enum PASORI2_DIAG_RAM_TEST = 0x02;
118   enum PASORI2_DIAG_CPU_FUNCTION_TEST = 0x03;
119   enum PASORI2_DIAG_CPU_FANCTION_TEST = 0x03;
120   enum PASORI2_DIAG_POLLING_TEST_TO_CARD = 0x10;
121 
122 
123   enum PASORI_ERR_PARM = 1;
124   enum PASORI_ERR_MEM  = 2;
125   enum PASORI_ERR_COM  = 3;
126   enum PASORI_ERR_DATA = 4;
127   enum PASORI_ERR_CHKSUM = 5;
128   enum PASORI_ERR_FORMAT = 6;
129   enum PASORI_ERR_TYPE = 7;
130 }