-
Notifications
You must be signed in to change notification settings - Fork 10
/
protocol.txt
218 lines (179 loc) · 11.3 KB
/
protocol.txt
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
Starting from ESP firmware version 10, we are using new wire protocol.
All messages have a fix-sized header and a variable-sized payload.
Generic message description:
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | Type | Byte | Size |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 | |
~ ~
~ Payload ~
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Intron: Each message is prefixed by 8 bytes. This is used
to ensure synchronization, because we are using
unreliable UART.
Starting value is 'UN\x00\x01\x02\x03\x04\x05'.
Printer may change it, see MSG_CLIENTCONFIG_V2.
Type: This byte indicates type of the message.
Possible values are:
0: MSG_DEVINFO_V2
6: MSG_CLIENTCONFIG_V2
7: MSG_PACKET_V2
8: MSG_SCAN_START
9: MSG_SCAN_STOP
10: MSG_SCAN_AP_CNT
11: MSG_SCAN_AP_GET
Values 1-5 are deprecated and must not be used.
Byte: Meaning of this field depends on the particular Type.
Size: Size of the subsequent Payload, may be zero.
Stored as 2 bytes in network order.
It is not required to be a multiple of 4.
Payload: Message payload of Size bytes, may not be present.
Meaning of this field depends on the particular Type.
MSG_DEVINFO_V2
This message is only sent from ESP to printer.
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | 0 | Version | 6 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 | |
+ MAC +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version: ESP firmware version number. Must be 10 or higher.
MAC: MAC address of the ESP.
MSG_CLIENTCONFIG_V2
This message is only sent from printer to ESP.
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | 6 | 0 | Size |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 | |
+ New intron +
20 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
24 | |
~ ~
~ Client config ~
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
New intron: To prevent prediction attacks, printer sends a new
randomly generated intron. This intron must be used
in all subsequent communication.
Client config: This field contains serialized SSID and password.
Both of them are serialized as 1 byte Length
followed by Length bytes.
MSG_PACKET_V2
This message is sent by both printer and ESP.
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | 7 | Up | Size |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 | |
~ ~
~ Packet ~
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Up: This field is used to indicate connection state
of the Wi-Fi in packets sent by ESP.
The value is ignored in packets sent by the printer.
Packet: This field contains networking packet.
It may also not be present at all. Empty packets
are used as a ping mechanism between printer and ESP.
It keeps the line busy, prevents printer from
reseting ESP and conveys Up field.
MSG_SCAN_START
This message is only sent by the printer to the ESP.
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | 8 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sends a signal to esp to start a wifi scan. The scan is iterative
and number of found ap is send to the printer periodicallu. The
first scan segment is shorter then the others to provide first
results quickly. The results are stored in the esp to save on
printer memory. Currently we are limited to 64 entries in total.
When a new scan is started old result are discarded.
MSG_SCAN_STOP
This message is only sent by the printer to the ESP.
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | 9 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sends a signal to esp to stop a wifi scan. The last scanning segment
is cancelled and the esp sends the last update of scan result.
MSG_SCAN_AP_CNT
This message is only sent by the ESP.
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | 10 | COUNT | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
This message is send every time after the scan segment is
compeleted.
COUNT Number of stored scanned result.
MSG_SCAN_AP_GET
This message is sent by both printer and ESP.
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 | |
+ Intron +
8 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | 11 | AP_INDEX | AP_INFO_LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 | |
~ ~
~ AP_INFO ~
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
AP_INDEX This values should be valid index into the internal ap
storage. It is send by both printer and esp and the
values should match.
AP_INFO_LEN Length of send ap info data in bytes. The value is fixed
in every version (but might change based on the
version). Always 0 when message send from the printer.
AP_INFO Binary representation of the stored ap info in ESP.
For more info check the ScanResult structure in
uart_nic.c. Send only by esp. The printer shouldn't send
this part.