2 * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
6 * Thanks to Afatech who kindly provided information.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #ifndef _DVB_USB_AF9015_H_
25 #define _DVB_USB_AF9015_H_
27 #define DVB_USB_LOG_PREFIX "af9015"
30 #define deb_info(args...) dprintk(dvb_usb_af9015_debug, 0x01, args)
31 #define deb_rc(args...) dprintk(dvb_usb_af9015_debug, 0x02, args)
32 #define deb_xfer(args...) dprintk(dvb_usb_af9015_debug, 0x04, args)
33 #define deb_reg(args...) dprintk(dvb_usb_af9015_debug, 0x08, args)
34 #define deb_i2c(args...) dprintk(dvb_usb_af9015_debug, 0x10, args)
35 #define deb_fw(args...) dprintk(dvb_usb_af9015_debug, 0x20, args)
37 #define AF9015_I2C_EEPROM 0xa0
38 #define AF9015_I2C_DEMOD 0x38
39 #define AF9015_USB_TIMEOUT 2000
41 /* EEPROM locations */
42 #define AF9015_EEPROM_IR_MODE 0x18
43 #define AF9015_EEPROM_IR_REMOTE_TYPE 0x34
44 #define AF9015_EEPROM_TS_MODE 0x31
45 #define AF9015_EEPROM_DEMOD2_I2C 0x32
47 #define AF9015_EEPROM_SAW_BW1 0x35
48 #define AF9015_EEPROM_XTAL_TYPE1 0x36
49 #define AF9015_EEPROM_SPEC_INV1 0x37
50 #define AF9015_EEPROM_IF1L 0x38
51 #define AF9015_EEPROM_IF1H 0x39
52 #define AF9015_EEPROM_MT2060_IF1L 0x3a
53 #define AF9015_EEPROM_MT2060_IF1H 0x3b
54 #define AF9015_EEPROM_TUNER_ID1 0x3c
56 #define AF9015_EEPROM_SAW_BW2 0x45
57 #define AF9015_EEPROM_XTAL_TYPE2 0x46
58 #define AF9015_EEPROM_SPEC_INV2 0x47
59 #define AF9015_EEPROM_IF2L 0x48
60 #define AF9015_EEPROM_IF2H 0x49
61 #define AF9015_EEPROM_MT2060_IF2L 0x4a
62 #define AF9015_EEPROM_MT2060_IF2H 0x4b
63 #define AF9015_EEPROM_TUNER_ID2 0x4c
65 #define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1)
67 #define AF9015_GPIO_ON (1 << 0)
68 #define AF9015_GPIO_EN (1 << 1)
69 #define AF9015_GPIO_O (1 << 2)
70 #define AF9015_GPIO_I (1 << 3)
72 #define AF9015_GPIO_TUNER_ON (AF9015_GPIO_ON|AF9015_GPIO_EN)
73 #define AF9015_GPIO_TUNER_OFF (AF9015_GPIO_ON|AF9015_GPIO_EN|AF9015_GPIO_O)
78 u8 i2c_addr; /* [2] */
81 u8 addr_len; /* [6] */
82 u8 data_len; /* [7] */
88 DOWNLOAD_FIRMWARE = 0x11,
92 READ_WRITE_I2C = 0x22,
95 WRITE_VIRTUAL_MEMORY = 0x26,
101 enum af9015_ir_mode {
102 AF9015_IR_MODE_DISABLED = 0,
108 struct af9015_state {
109 struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */
112 struct af9015_config {
116 u16 firmware_checksum;
122 AF9015_REMOTE_NONE = 0,
123 AF9015_REMOTE_A_LINK_DTU_M,
124 AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
125 AF9015_REMOTE_MYGICTV_U718,
126 AF9015_REMOTE_DIGITTRADE_DVB_T,
127 AF9015_REMOTE_AVERMEDIA_KS,
130 /* Leadtek WinFast DTV Dongle Gold */
131 static struct dvb_usb_rc_key af9015_rc_keys_leadtek[] = {
132 { 0x00, 0x1e, KEY_1 },
133 { 0x00, 0x1f, KEY_2 },
134 { 0x00, 0x20, KEY_3 },
135 { 0x00, 0x21, KEY_4 },
136 { 0x00, 0x22, KEY_5 },
137 { 0x00, 0x23, KEY_6 },
138 { 0x00, 0x24, KEY_7 },
139 { 0x00, 0x25, KEY_8 },
140 { 0x00, 0x26, KEY_9 },
141 { 0x00, 0x27, KEY_0 },
142 { 0x00, 0x28, KEY_ENTER },
143 { 0x00, 0x4f, KEY_VOLUMEUP },
144 { 0x00, 0x50, KEY_VOLUMEDOWN },
145 { 0x00, 0x51, KEY_CHANNELDOWN },
146 { 0x00, 0x52, KEY_CHANNELUP },
149 static u8 af9015_ir_table_leadtek[] = {
150 0x03, 0xfc, 0x00, 0xff, 0x1a, 0x01, 0x00,
151 0x03, 0xfc, 0x56, 0xa9, 0x00, 0x00, 0x00,
152 0x03, 0xfc, 0x4b, 0xb4, 0x00, 0x00, 0x00,
153 0x03, 0xfc, 0x4c, 0xb3, 0xb2, 0x04, 0x00,
154 0x03, 0xfc, 0x4d, 0xb2, 0x00, 0x00, 0x00,
155 0x03, 0xfc, 0x4e, 0xb1, 0x00, 0x00, 0x00,
156 0x03, 0xfc, 0x1f, 0xe0, 0x3d, 0x00, 0x00,
157 0x03, 0xfc, 0x40, 0xbf, 0x13, 0x01, 0x00,
158 0x03, 0xfc, 0x14, 0xeb, 0x10, 0x00, 0x00,
159 0x03, 0xfc, 0x49, 0xb6, 0x05, 0x01, 0x00,
160 0x03, 0xfc, 0x50, 0xaf, 0x29, 0x00, 0x00,
161 0x03, 0xfc, 0x0c, 0xf3, 0x52, 0x00, 0x00,
162 0x03, 0xfc, 0x03, 0xfc, 0x09, 0x00, 0x00,
163 0x03, 0xfc, 0x08, 0xf7, 0x50, 0x00, 0x00,
164 0x03, 0xfc, 0x13, 0xec, 0x28, 0x00, 0x00,
165 0x03, 0xfc, 0x04, 0xfb, 0x4f, 0x00, 0x00,
166 0x03, 0xfc, 0x4f, 0xb0, 0x0f, 0x01, 0x00,
167 0x03, 0xfc, 0x10, 0xef, 0x51, 0x00, 0x00,
168 0x03, 0xfc, 0x51, 0xae, 0x3f, 0x00, 0x00,
169 0x03, 0xfc, 0x42, 0xbd, 0x13, 0x00, 0x00,
170 0x03, 0xfc, 0x43, 0xbc, 0x00, 0x00, 0x00,
171 0x03, 0xfc, 0x44, 0xbb, 0x11, 0x00, 0x00,
172 0x03, 0xfc, 0x52, 0xad, 0x19, 0x00, 0x00,
173 0x03, 0xfc, 0x54, 0xab, 0x05, 0x00, 0x00,
174 0x03, 0xfc, 0x46, 0xb9, 0x29, 0x00, 0x00,
175 0x03, 0xfc, 0x55, 0xaa, 0x2b, 0x00, 0x00,
176 0x03, 0xfc, 0x53, 0xac, 0x41, 0x00, 0x00,
177 0x03, 0xfc, 0x05, 0xfa, 0x1e, 0x00, 0x00,
178 0x03, 0xfc, 0x06, 0xf9, 0x1f, 0x00, 0x00,
179 0x03, 0xfc, 0x07, 0xf8, 0x20, 0x00, 0x00,
180 0x03, 0xfc, 0x1e, 0xe1, 0x19, 0x00, 0x00,
181 0x03, 0xfc, 0x09, 0xf6, 0x21, 0x00, 0x00,
182 0x03, 0xfc, 0x0a, 0xf5, 0x22, 0x00, 0x00,
183 0x03, 0xfc, 0x0b, 0xf4, 0x23, 0x00, 0x00,
184 0x03, 0xfc, 0x1b, 0xe4, 0x16, 0x00, 0x00,
185 0x03, 0xfc, 0x0d, 0xf2, 0x24, 0x00, 0x00,
186 0x03, 0xfc, 0x0e, 0xf1, 0x25, 0x00, 0x00,
187 0x03, 0xfc, 0x0f, 0xf0, 0x26, 0x00, 0x00,
188 0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00,
189 0x03, 0xfc, 0x41, 0xbe, 0x37, 0x00, 0x00,
190 0x03, 0xfc, 0x12, 0xed, 0x27, 0x00, 0x00,
191 0x03, 0xfc, 0x11, 0xee, 0x2a, 0x00, 0x00,
192 0x03, 0xfc, 0x48, 0xb7, 0x2c, 0x00, 0x00,
193 0x03, 0xfc, 0x4a, 0xb5, 0x3c, 0x00, 0x00,
194 0x03, 0xfc, 0x47, 0xb8, 0x15, 0x01, 0x00,
195 0x03, 0xfc, 0x45, 0xba, 0x0b, 0x01, 0x00,
196 0x03, 0xfc, 0x5e, 0xa1, 0x43, 0x00, 0x00,
197 0x03, 0xfc, 0x5a, 0xa5, 0x42, 0x00, 0x00,
198 0x03, 0xfc, 0x5b, 0xa4, 0x4b, 0x00, 0x00,
199 0x03, 0xfc, 0x5f, 0xa0, 0x4e, 0x00, 0x00,
202 /* TwinHan AzureWave AD-TU700(704J) */
203 static struct dvb_usb_rc_key af9015_rc_keys_twinhan[] = {
204 { 0x05, 0x3f, KEY_POWER },
205 { 0x00, 0x19, KEY_FAVORITES }, /* Favorite List */
206 { 0x00, 0x04, KEY_TEXT }, /* Teletext */
207 { 0x00, 0x0e, KEY_POWER },
208 { 0x00, 0x0e, KEY_INFO }, /* Preview */
209 { 0x00, 0x08, KEY_EPG }, /* Info/EPG */
210 { 0x00, 0x0f, KEY_LIST }, /* Record List */
211 { 0x00, 0x1e, KEY_1 },
212 { 0x00, 0x1f, KEY_2 },
213 { 0x00, 0x20, KEY_3 },
214 { 0x00, 0x21, KEY_4 },
215 { 0x00, 0x22, KEY_5 },
216 { 0x00, 0x23, KEY_6 },
217 { 0x00, 0x24, KEY_7 },
218 { 0x00, 0x25, KEY_8 },
219 { 0x00, 0x26, KEY_9 },
220 { 0x00, 0x27, KEY_0 },
221 { 0x00, 0x29, KEY_CANCEL }, /* Cancel */
222 { 0x00, 0x4c, KEY_CLEAR }, /* Clear */
223 { 0x00, 0x2a, KEY_BACK }, /* Back */
224 { 0x00, 0x2b, KEY_TAB }, /* Tab */
225 { 0x00, 0x52, KEY_UP }, /* up arrow */
226 { 0x00, 0x51, KEY_DOWN }, /* down arrow */
227 { 0x00, 0x4f, KEY_RIGHT }, /* right arrow */
228 { 0x00, 0x50, KEY_LEFT }, /* left arrow */
229 { 0x00, 0x28, KEY_ENTER }, /* Enter / ok */
230 { 0x02, 0x52, KEY_VOLUMEUP },
231 { 0x02, 0x51, KEY_VOLUMEDOWN },
232 { 0x00, 0x4e, KEY_CHANNELDOWN },
233 { 0x00, 0x4b, KEY_CHANNELUP },
234 { 0x00, 0x4a, KEY_RECORD },
235 { 0x01, 0x11, KEY_PLAY },
236 { 0x00, 0x17, KEY_PAUSE },
237 { 0x00, 0x0c, KEY_REWIND }, /* FR << */
238 { 0x00, 0x11, KEY_FASTFORWARD }, /* FF >> */
239 { 0x01, 0x15, KEY_PREVIOUS }, /* Replay */
240 { 0x01, 0x0e, KEY_NEXT }, /* Skip */
241 { 0x00, 0x13, KEY_CAMERA }, /* Capture */
242 { 0x01, 0x0f, KEY_LANGUAGE }, /* SAP */
243 { 0x01, 0x13, KEY_TV2 }, /* PIP */
244 { 0x00, 0x1d, KEY_ZOOM }, /* Full Screen */
245 { 0x01, 0x17, KEY_SUBTITLE }, /* Subtitle / CC */
246 { 0x00, 0x10, KEY_MUTE },
247 { 0x01, 0x19, KEY_AUDIO }, /* L/R */ /* TODO better event */
248 { 0x01, 0x16, KEY_SLEEP }, /* Hibernate */
249 { 0x01, 0x16, KEY_SWITCHVIDEOMODE },
250 /* A/V */ /* TODO does not work */
251 { 0x00, 0x06, KEY_AGAIN }, /* Recall */
252 { 0x01, 0x16, KEY_KPPLUS }, /* Zoom+ */ /* TODO does not work */
253 { 0x01, 0x16, KEY_KPMINUS }, /* Zoom- */ /* TODO does not work */
254 { 0x02, 0x15, KEY_RED },
255 { 0x02, 0x0a, KEY_GREEN },
256 { 0x02, 0x1c, KEY_YELLOW },
257 { 0x02, 0x05, KEY_BLUE },
260 static u8 af9015_ir_table_twinhan[] = {
261 0x00, 0xff, 0x16, 0xe9, 0x3f, 0x05, 0x00,
262 0x00, 0xff, 0x07, 0xf8, 0x16, 0x01, 0x00,
263 0x00, 0xff, 0x14, 0xeb, 0x11, 0x01, 0x00,
264 0x00, 0xff, 0x1a, 0xe5, 0x4d, 0x00, 0x00,
265 0x00, 0xff, 0x4c, 0xb3, 0x17, 0x00, 0x00,
266 0x00, 0xff, 0x12, 0xed, 0x11, 0x00, 0x00,
267 0x00, 0xff, 0x40, 0xbf, 0x0c, 0x00, 0x00,
268 0x00, 0xff, 0x11, 0xee, 0x4a, 0x00, 0x00,
269 0x00, 0xff, 0x54, 0xab, 0x13, 0x00, 0x00,
270 0x00, 0xff, 0x41, 0xbe, 0x15, 0x01, 0x00,
271 0x00, 0xff, 0x42, 0xbd, 0x0e, 0x01, 0x00,
272 0x00, 0xff, 0x43, 0xbc, 0x17, 0x01, 0x00,
273 0x00, 0xff, 0x50, 0xaf, 0x0f, 0x01, 0x00,
274 0x00, 0xff, 0x4d, 0xb2, 0x1d, 0x00, 0x00,
275 0x00, 0xff, 0x47, 0xb8, 0x13, 0x01, 0x00,
276 0x00, 0xff, 0x05, 0xfa, 0x4b, 0x00, 0x00,
277 0x00, 0xff, 0x02, 0xfd, 0x4e, 0x00, 0x00,
278 0x00, 0xff, 0x0e, 0xf1, 0x06, 0x00, 0x00,
279 0x00, 0xff, 0x1e, 0xe1, 0x52, 0x02, 0x00,
280 0x00, 0xff, 0x0a, 0xf5, 0x51, 0x02, 0x00,
281 0x00, 0xff, 0x10, 0xef, 0x10, 0x00, 0x00,
282 0x00, 0xff, 0x49, 0xb6, 0x19, 0x01, 0x00,
283 0x00, 0xff, 0x15, 0xea, 0x27, 0x00, 0x00,
284 0x00, 0xff, 0x03, 0xfc, 0x1e, 0x00, 0x00,
285 0x00, 0xff, 0x01, 0xfe, 0x1f, 0x00, 0x00,
286 0x00, 0xff, 0x06, 0xf9, 0x20, 0x00, 0x00,
287 0x00, 0xff, 0x09, 0xf6, 0x21, 0x00, 0x00,
288 0x00, 0xff, 0x1d, 0xe2, 0x22, 0x00, 0x00,
289 0x00, 0xff, 0x1f, 0xe0, 0x23, 0x00, 0x00,
290 0x00, 0xff, 0x0d, 0xf2, 0x24, 0x00, 0x00,
291 0x00, 0xff, 0x19, 0xe6, 0x25, 0x00, 0x00,
292 0x00, 0xff, 0x1b, 0xe4, 0x26, 0x00, 0x00,
293 0x00, 0xff, 0x00, 0xff, 0x2b, 0x00, 0x00,
294 0x00, 0xff, 0x4a, 0xb5, 0x4c, 0x00, 0x00,
295 0x00, 0xff, 0x4b, 0xb4, 0x52, 0x00, 0x00,
296 0x00, 0xff, 0x51, 0xae, 0x51, 0x00, 0x00,
297 0x00, 0xff, 0x52, 0xad, 0x4f, 0x00, 0x00,
298 0x00, 0xff, 0x4e, 0xb1, 0x50, 0x00, 0x00,
299 0x00, 0xff, 0x0c, 0xf3, 0x29, 0x00, 0x00,
300 0x00, 0xff, 0x4f, 0xb0, 0x28, 0x00, 0x00,
301 0x00, 0xff, 0x13, 0xec, 0x2a, 0x00, 0x00,
302 0x00, 0xff, 0x17, 0xe8, 0x19, 0x00, 0x00,
303 0x00, 0xff, 0x04, 0xfb, 0x0f, 0x00, 0x00,
304 0x00, 0xff, 0x48, 0xb7, 0x0e, 0x00, 0x00,
305 0x00, 0xff, 0x0f, 0xf0, 0x04, 0x00, 0x00,
306 0x00, 0xff, 0x1c, 0xe3, 0x08, 0x00, 0x00,
307 0x00, 0xff, 0x18, 0xe7, 0x15, 0x02, 0x00,
308 0x00, 0xff, 0x53, 0xac, 0x0a, 0x02, 0x00,
309 0x00, 0xff, 0x5e, 0xa1, 0x1c, 0x02, 0x00,
310 0x00, 0xff, 0x5f, 0xa0, 0x05, 0x02, 0x00,
314 static struct dvb_usb_rc_key af9015_rc_keys_a_link[] = {
315 { 0x00, 0x1e, KEY_1 },
316 { 0x00, 0x1f, KEY_2 },
317 { 0x00, 0x20, KEY_3 },
318 { 0x00, 0x21, KEY_4 },
319 { 0x00, 0x22, KEY_5 },
320 { 0x00, 0x23, KEY_6 },
321 { 0x00, 0x24, KEY_7 },
322 { 0x00, 0x25, KEY_8 },
323 { 0x00, 0x26, KEY_9 },
324 { 0x00, 0x27, KEY_0 },
325 { 0x00, 0x2e, KEY_CHANNELUP },
326 { 0x00, 0x2d, KEY_CHANNELDOWN },
327 { 0x04, 0x28, KEY_ZOOM },
328 { 0x00, 0x41, KEY_MUTE },
329 { 0x00, 0x42, KEY_VOLUMEDOWN },
330 { 0x00, 0x43, KEY_VOLUMEUP },
331 { 0x00, 0x44, KEY_GOTO }, /* jump */
332 { 0x05, 0x45, KEY_POWER },
335 static u8 af9015_ir_table_a_link[] = {
336 0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */
337 0x08, 0xf7, 0x1a, 0xe5, 0x41, 0x00, 0x00, /* mute */
338 0x08, 0xf7, 0x01, 0xfe, 0x1e, 0x00, 0x00, /* 1 */
339 0x08, 0xf7, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
340 0x08, 0xf7, 0x03, 0xfc, 0x24, 0x00, 0x00, /* 7 */
341 0x08, 0xf7, 0x05, 0xfa, 0x28, 0x04, 0x00, /* zoom */
342 0x08, 0xf7, 0x00, 0xff, 0x43, 0x00, 0x00, /* volume up */
343 0x08, 0xf7, 0x16, 0xe9, 0x42, 0x00, 0x00, /* volume down */
344 0x08, 0xf7, 0x0f, 0xf0, 0x1f, 0x00, 0x00, /* 2 */
345 0x08, 0xf7, 0x0d, 0xf2, 0x22, 0x00, 0x00, /* 5 */
346 0x08, 0xf7, 0x1b, 0xe4, 0x25, 0x00, 0x00, /* 8 */
347 0x08, 0xf7, 0x06, 0xf9, 0x27, 0x00, 0x00, /* 0 */
348 0x08, 0xf7, 0x14, 0xeb, 0x2e, 0x00, 0x00, /* channel up */
349 0x08, 0xf7, 0x1d, 0xe2, 0x2d, 0x00, 0x00, /* channel down */
350 0x08, 0xf7, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
351 0x08, 0xf7, 0x18, 0xe7, 0x23, 0x00, 0x00, /* 6 */
352 0x08, 0xf7, 0x04, 0xfb, 0x26, 0x00, 0x00, /* 9 */
353 0x08, 0xf7, 0x07, 0xf8, 0x44, 0x00, 0x00, /* jump */
356 /* MSI DIGIVOX mini II V3.0 */
357 static struct dvb_usb_rc_key af9015_rc_keys_msi[] = {
358 { 0x00, 0x1e, KEY_1 },
359 { 0x00, 0x1f, KEY_2 },
360 { 0x00, 0x20, KEY_3 },
361 { 0x00, 0x21, KEY_4 },
362 { 0x00, 0x22, KEY_5 },
363 { 0x00, 0x23, KEY_6 },
364 { 0x00, 0x24, KEY_7 },
365 { 0x00, 0x25, KEY_8 },
366 { 0x00, 0x26, KEY_9 },
367 { 0x00, 0x27, KEY_0 },
368 { 0x03, 0x0f, KEY_CHANNELUP },
369 { 0x03, 0x0e, KEY_CHANNELDOWN },
370 { 0x00, 0x42, KEY_VOLUMEDOWN },
371 { 0x00, 0x43, KEY_VOLUMEUP },
372 { 0x05, 0x45, KEY_POWER },
373 { 0x00, 0x52, KEY_UP }, /* up */
374 { 0x00, 0x51, KEY_DOWN }, /* down */
375 { 0x00, 0x28, KEY_ENTER },
378 static u8 af9015_ir_table_msi[] = {
379 0x03, 0xfc, 0x17, 0xe8, 0x45, 0x05, 0x00, /* power */
380 0x03, 0xfc, 0x0d, 0xf2, 0x51, 0x00, 0x00, /* down */
381 0x03, 0xfc, 0x03, 0xfc, 0x52, 0x00, 0x00, /* up */
382 0x03, 0xfc, 0x1a, 0xe5, 0x1e, 0x00, 0x00, /* 1 */
383 0x03, 0xfc, 0x02, 0xfd, 0x1f, 0x00, 0x00, /* 2 */
384 0x03, 0xfc, 0x04, 0xfb, 0x20, 0x00, 0x00, /* 3 */
385 0x03, 0xfc, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
386 0x03, 0xfc, 0x08, 0xf7, 0x22, 0x00, 0x00, /* 5 */
387 0x03, 0xfc, 0x1d, 0xe2, 0x23, 0x00, 0x00, /* 6 */
388 0x03, 0xfc, 0x11, 0xee, 0x24, 0x00, 0x00, /* 7 */
389 0x03, 0xfc, 0x0b, 0xf4, 0x25, 0x00, 0x00, /* 8 */
390 0x03, 0xfc, 0x10, 0xef, 0x26, 0x00, 0x00, /* 9 */
391 0x03, 0xfc, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
392 0x03, 0xfc, 0x14, 0xeb, 0x43, 0x00, 0x00, /* volume up */
393 0x03, 0xfc, 0x1f, 0xe0, 0x42, 0x00, 0x00, /* volume down */
394 0x03, 0xfc, 0x15, 0xea, 0x0f, 0x03, 0x00, /* channel up */
395 0x03, 0xfc, 0x05, 0xfa, 0x0e, 0x03, 0x00, /* channel down */
396 0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* enter */
400 static struct dvb_usb_rc_key af9015_rc_keys_mygictv[] = {
401 { 0x00, 0x3d, KEY_SWITCHVIDEOMODE },
403 { 0x05, 0x45, KEY_POWER },
404 { 0x00, 0x1e, KEY_1 },
405 { 0x00, 0x1f, KEY_2 },
406 { 0x00, 0x20, KEY_3 },
407 { 0x00, 0x21, KEY_4 },
408 { 0x00, 0x22, KEY_5 },
409 { 0x00, 0x23, KEY_6 },
410 { 0x00, 0x24, KEY_7 },
411 { 0x00, 0x25, KEY_8 },
412 { 0x00, 0x26, KEY_9 },
413 { 0x00, 0x27, KEY_0 },
414 { 0x00, 0x41, KEY_MUTE },
415 { 0x00, 0x2a, KEY_ESC }, /* Esc */
416 { 0x00, 0x2e, KEY_CHANNELUP },
417 { 0x00, 0x2d, KEY_CHANNELDOWN },
418 { 0x00, 0x42, KEY_VOLUMEDOWN },
419 { 0x00, 0x43, KEY_VOLUMEUP },
420 { 0x00, 0x52, KEY_UP }, /* up arrow */
421 { 0x00, 0x51, KEY_DOWN }, /* down arrow */
422 { 0x00, 0x4f, KEY_RIGHT }, /* right arrow */
423 { 0x00, 0x50, KEY_LEFT }, /* left arrow */
424 { 0x00, 0x28, KEY_ENTER }, /* ok */
425 { 0x01, 0x15, KEY_RECORD },
426 { 0x03, 0x13, KEY_PLAY },
427 { 0x01, 0x13, KEY_PAUSE },
428 { 0x01, 0x16, KEY_STOP },
429 { 0x03, 0x07, KEY_REWIND }, /* FR << */
430 { 0x03, 0x09, KEY_FASTFORWARD }, /* FF >> */
431 { 0x00, 0x3b, KEY_TIME }, /* TimeShift */
432 { 0x00, 0x3e, KEY_CAMERA }, /* Snapshot */
433 { 0x03, 0x16, KEY_CYCLEWINDOWS }, /* yellow, min / max */
434 { 0x00, 0x00, KEY_ZOOM }, /* 'select' (?) */
435 { 0x03, 0x16, KEY_SHUFFLE }, /* Shuffle */
436 { 0x03, 0x45, KEY_POWER },
439 static u8 af9015_ir_table_mygictv[] = {
440 0x02, 0xbd, 0x0c, 0xf3, 0x3d, 0x00, 0x00, /* TV / AV */
441 0x02, 0xbd, 0x14, 0xeb, 0x45, 0x05, 0x00, /* power */
442 0x02, 0xbd, 0x00, 0xff, 0x1e, 0x00, 0x00, /* 1 */
443 0x02, 0xbd, 0x01, 0xfe, 0x1f, 0x00, 0x00, /* 2 */
444 0x02, 0xbd, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
445 0x02, 0xbd, 0x03, 0xfc, 0x21, 0x00, 0x00, /* 4 */
446 0x02, 0xbd, 0x04, 0xfb, 0x22, 0x00, 0x00, /* 5 */
447 0x02, 0xbd, 0x05, 0xfa, 0x23, 0x00, 0x00, /* 6 */
448 0x02, 0xbd, 0x06, 0xf9, 0x24, 0x00, 0x00, /* 7 */
449 0x02, 0xbd, 0x07, 0xf8, 0x25, 0x00, 0x00, /* 8 */
450 0x02, 0xbd, 0x08, 0xf7, 0x26, 0x00, 0x00, /* 9 */
451 0x02, 0xbd, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
452 0x02, 0xbd, 0x0a, 0xf5, 0x41, 0x00, 0x00, /* mute */
453 0x02, 0xbd, 0x1c, 0xe3, 0x2a, 0x00, 0x00, /* esc */
454 0x02, 0xbd, 0x1f, 0xe0, 0x43, 0x00, 0x00, /* volume up */
455 0x02, 0xbd, 0x12, 0xed, 0x52, 0x00, 0x00, /* up arrow */
456 0x02, 0xbd, 0x11, 0xee, 0x50, 0x00, 0x00, /* left arrow */
457 0x02, 0xbd, 0x15, 0xea, 0x28, 0x00, 0x00, /* ok */
458 0x02, 0xbd, 0x10, 0xef, 0x4f, 0x00, 0x00, /* right arrow */
459 0x02, 0xbd, 0x13, 0xec, 0x51, 0x00, 0x00, /* down arrow */
460 0x02, 0xbd, 0x0e, 0xf1, 0x42, 0x00, 0x00, /* volume down */
461 0x02, 0xbd, 0x19, 0xe6, 0x15, 0x01, 0x00, /* record */
462 0x02, 0xbd, 0x1e, 0xe1, 0x13, 0x03, 0x00, /* play */
463 0x02, 0xbd, 0x16, 0xe9, 0x16, 0x01, 0x00, /* stop */
464 0x02, 0xbd, 0x0b, 0xf4, 0x28, 0x04, 0x00, /* yellow, min / max */
465 0x02, 0xbd, 0x0f, 0xf0, 0x3b, 0x00, 0x00, /* time shift */
466 0x02, 0xbd, 0x18, 0xe7, 0x2e, 0x00, 0x00, /* channel up */
467 0x02, 0xbd, 0x1a, 0xe5, 0x2d, 0x00, 0x00, /* channel down */
468 0x02, 0xbd, 0x17, 0xe8, 0x3e, 0x00, 0x00, /* snapshot */
469 0x02, 0xbd, 0x40, 0xbf, 0x13, 0x01, 0x00, /* pause */
470 0x02, 0xbd, 0x41, 0xbe, 0x09, 0x03, 0x00, /* FF >> */
471 0x02, 0xbd, 0x42, 0xbd, 0x07, 0x03, 0x00, /* FR << */
472 0x02, 0xbd, 0x43, 0xbc, 0x00, 0x00, 0x00, /* 'select' (?) */
473 0x02, 0xbd, 0x44, 0xbb, 0x16, 0x03, 0x00, /* shuffle */
474 0x02, 0xbd, 0x45, 0xba, 0x45, 0x03, 0x00, /* power */
477 /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */
478 static u8 af9015_ir_table_kworld[] = {
479 0x86, 0x6b, 0x0c, 0xf3, 0x2e, 0x07, 0x00,
480 0x86, 0x6b, 0x16, 0xe9, 0x2d, 0x07, 0x00,
481 0x86, 0x6b, 0x1d, 0xe2, 0x37, 0x07, 0x00,
482 0x86, 0x6b, 0x00, 0xff, 0x1e, 0x07, 0x00,
483 0x86, 0x6b, 0x01, 0xfe, 0x1f, 0x07, 0x00,
484 0x86, 0x6b, 0x02, 0xfd, 0x20, 0x07, 0x00,
485 0x86, 0x6b, 0x03, 0xfc, 0x21, 0x07, 0x00,
486 0x86, 0x6b, 0x04, 0xfb, 0x22, 0x07, 0x00,
487 0x86, 0x6b, 0x05, 0xfa, 0x23, 0x07, 0x00,
488 0x86, 0x6b, 0x06, 0xf9, 0x24, 0x07, 0x00,
489 0x86, 0x6b, 0x07, 0xf8, 0x25, 0x07, 0x00,
490 0x86, 0x6b, 0x08, 0xf7, 0x26, 0x07, 0x00,
491 0x86, 0x6b, 0x09, 0xf6, 0x4d, 0x07, 0x00,
492 0x86, 0x6b, 0x0a, 0xf5, 0x4e, 0x07, 0x00,
493 0x86, 0x6b, 0x14, 0xeb, 0x4f, 0x07, 0x00,
494 0x86, 0x6b, 0x1e, 0xe1, 0x50, 0x07, 0x00,
495 0x86, 0x6b, 0x17, 0xe8, 0x52, 0x07, 0x00,
496 0x86, 0x6b, 0x1f, 0xe0, 0x51, 0x07, 0x00,
497 0x86, 0x6b, 0x0e, 0xf1, 0x0b, 0x07, 0x00,
498 0x86, 0x6b, 0x20, 0xdf, 0x0c, 0x07, 0x00,
499 0x86, 0x6b, 0x42, 0xbd, 0x0d, 0x07, 0x00,
500 0x86, 0x6b, 0x0b, 0xf4, 0x0e, 0x07, 0x00,
501 0x86, 0x6b, 0x43, 0xbc, 0x0f, 0x07, 0x00,
502 0x86, 0x6b, 0x10, 0xef, 0x10, 0x07, 0x00,
503 0x86, 0x6b, 0x21, 0xde, 0x11, 0x07, 0x00,
504 0x86, 0x6b, 0x13, 0xec, 0x12, 0x07, 0x00,
505 0x86, 0x6b, 0x11, 0xee, 0x13, 0x07, 0x00,
506 0x86, 0x6b, 0x12, 0xed, 0x14, 0x07, 0x00,
507 0x86, 0x6b, 0x19, 0xe6, 0x15, 0x07, 0x00,
508 0x86, 0x6b, 0x1a, 0xe5, 0x16, 0x07, 0x00,
509 0x86, 0x6b, 0x1b, 0xe4, 0x17, 0x07, 0x00,
510 0x86, 0x6b, 0x4b, 0xb4, 0x18, 0x07, 0x00,
511 0x86, 0x6b, 0x40, 0xbf, 0x19, 0x07, 0x00,
512 0x86, 0x6b, 0x44, 0xbb, 0x1a, 0x07, 0x00,
513 0x86, 0x6b, 0x41, 0xbe, 0x1b, 0x07, 0x00,
514 0x86, 0x6b, 0x22, 0xdd, 0x1c, 0x07, 0x00,
515 0x86, 0x6b, 0x15, 0xea, 0x1d, 0x07, 0x00,
516 0x86, 0x6b, 0x0f, 0xf0, 0x3f, 0x07, 0x00,
517 0x86, 0x6b, 0x1c, 0xe3, 0x40, 0x07, 0x00,
518 0x86, 0x6b, 0x4a, 0xb5, 0x41, 0x07, 0x00,
519 0x86, 0x6b, 0x48, 0xb7, 0x42, 0x07, 0x00,
520 0x86, 0x6b, 0x49, 0xb6, 0x43, 0x07, 0x00,
521 0x86, 0x6b, 0x18, 0xe7, 0x44, 0x07, 0x00,
522 0x86, 0x6b, 0x23, 0xdc, 0x45, 0x07, 0x00,
525 /* AverMedia Volar X */
526 static struct dvb_usb_rc_key af9015_rc_keys_avermedia[] = {
527 { 0x05, 0x3d, KEY_PROG1 }, /* SOURCE */
528 { 0x05, 0x12, KEY_POWER }, /* POWER */
529 { 0x05, 0x1e, KEY_1 }, /* 1 */
530 { 0x05, 0x1f, KEY_2 }, /* 2 */
531 { 0x05, 0x20, KEY_3 }, /* 3 */
532 { 0x05, 0x21, KEY_4 }, /* 4 */
533 { 0x05, 0x22, KEY_5 }, /* 5 */
534 { 0x05, 0x23, KEY_6 }, /* 6 */
535 { 0x05, 0x24, KEY_7 }, /* 7 */
536 { 0x05, 0x25, KEY_8 }, /* 8 */
537 { 0x05, 0x26, KEY_9 }, /* 9 */
538 { 0x05, 0x3f, KEY_LEFT }, /* L / DISPLAY */
539 { 0x05, 0x27, KEY_0 }, /* 0 */
540 { 0x05, 0x0f, KEY_RIGHT }, /* R / CH RTN */
541 { 0x05, 0x18, KEY_PROG2 }, /* SNAP SHOT */
542 { 0x05, 0x1c, KEY_PROG3 }, /* 16-CH PREV */
543 { 0x05, 0x2d, KEY_VOLUMEDOWN }, /* VOL DOWN */
544 { 0x05, 0x3e, KEY_ZOOM }, /* FULL SCREEN */
545 { 0x05, 0x2e, KEY_VOLUMEUP }, /* VOL UP */
546 { 0x05, 0x10, KEY_MUTE }, /* MUTE */
547 { 0x05, 0x04, KEY_AUDIO }, /* AUDIO */
548 { 0x05, 0x15, KEY_RECORD }, /* RECORD */
549 { 0x05, 0x11, KEY_PLAY }, /* PLAY */
550 { 0x05, 0x16, KEY_STOP }, /* STOP */
551 { 0x05, 0x0c, KEY_PLAYPAUSE }, /* TIMESHIFT / PAUSE */
552 { 0x05, 0x05, KEY_BACK }, /* << / RED */
553 { 0x05, 0x09, KEY_FORWARD }, /* >> / YELLOW */
554 { 0x05, 0x17, KEY_TEXT }, /* TELETEXT */
555 { 0x05, 0x0a, KEY_EPG }, /* EPG */
556 { 0x05, 0x13, KEY_MENU }, /* MENU */
558 { 0x05, 0x0e, KEY_CHANNELUP }, /* CH UP */
559 { 0x05, 0x0d, KEY_CHANNELDOWN }, /* CH DOWN */
560 { 0x05, 0x19, KEY_FIRST }, /* |<< / GREEN */
561 { 0x05, 0x08, KEY_LAST }, /* >>| / BLUE */
564 static u8 af9015_ir_table_avermedia[] = {
565 0x02, 0xfd, 0x00, 0xff, 0x12, 0x05, 0x00,
566 0x02, 0xfd, 0x01, 0xfe, 0x3d, 0x05, 0x00,
567 0x02, 0xfd, 0x03, 0xfc, 0x17, 0x05, 0x00,
568 0x02, 0xfd, 0x04, 0xfb, 0x0a, 0x05, 0x00,
569 0x02, 0xfd, 0x05, 0xfa, 0x1e, 0x05, 0x00,
570 0x02, 0xfd, 0x06, 0xf9, 0x1f, 0x05, 0x00,
571 0x02, 0xfd, 0x07, 0xf8, 0x20, 0x05, 0x00,
572 0x02, 0xfd, 0x09, 0xf6, 0x21, 0x05, 0x00,
573 0x02, 0xfd, 0x0a, 0xf5, 0x22, 0x05, 0x00,
574 0x02, 0xfd, 0x0b, 0xf4, 0x23, 0x05, 0x00,
575 0x02, 0xfd, 0x0d, 0xf2, 0x24, 0x05, 0x00,
576 0x02, 0xfd, 0x0e, 0xf1, 0x25, 0x05, 0x00,
577 0x02, 0xfd, 0x0f, 0xf0, 0x26, 0x05, 0x00,
578 0x02, 0xfd, 0x11, 0xee, 0x27, 0x05, 0x00,
579 0x02, 0xfd, 0x08, 0xf7, 0x04, 0x05, 0x00,
580 0x02, 0xfd, 0x0c, 0xf3, 0x3e, 0x05, 0x00,
581 0x02, 0xfd, 0x10, 0xef, 0x1c, 0x05, 0x00,
582 0x02, 0xfd, 0x12, 0xed, 0x3f, 0x05, 0x00,
583 0x02, 0xfd, 0x13, 0xec, 0x0f, 0x05, 0x00,
584 0x02, 0xfd, 0x14, 0xeb, 0x10, 0x05, 0x00,
585 0x02, 0xfd, 0x15, 0xea, 0x13, 0x05, 0x00,
586 0x02, 0xfd, 0x17, 0xe8, 0x18, 0x05, 0x00,
587 0x02, 0xfd, 0x18, 0xe7, 0x11, 0x05, 0x00,
588 0x02, 0xfd, 0x19, 0xe6, 0x15, 0x05, 0x00,
589 0x02, 0xfd, 0x1a, 0xe5, 0x0c, 0x05, 0x00,
590 0x02, 0xfd, 0x1b, 0xe4, 0x16, 0x05, 0x00,
591 0x02, 0xfd, 0x1c, 0xe3, 0x09, 0x05, 0x00,
592 0x02, 0xfd, 0x1d, 0xe2, 0x05, 0x05, 0x00,
593 0x02, 0xfd, 0x1e, 0xe1, 0x2d, 0x05, 0x00,
594 0x02, 0xfd, 0x1f, 0xe0, 0x2e, 0x05, 0x00,
595 0x03, 0xfc, 0x00, 0xff, 0x08, 0x05, 0x00,
596 0x03, 0xfc, 0x01, 0xfe, 0x19, 0x05, 0x00,
597 0x03, 0xfc, 0x02, 0xfd, 0x0d, 0x05, 0x00,
598 0x03, 0xfc, 0x03, 0xfc, 0x0e, 0x05, 0x00,
601 static u8 af9015_ir_table_avermedia_ks[] = {
602 0x05, 0xfa, 0x01, 0xfe, 0x12, 0x05, 0x00,
603 0x05, 0xfa, 0x02, 0xfd, 0x0e, 0x05, 0x00,
604 0x05, 0xfa, 0x03, 0xfc, 0x0d, 0x05, 0x00,
605 0x05, 0xfa, 0x04, 0xfb, 0x2e, 0x05, 0x00,
606 0x05, 0xfa, 0x05, 0xfa, 0x2d, 0x05, 0x00,
607 0x05, 0xfa, 0x06, 0xf9, 0x10, 0x05, 0x00,
608 0x05, 0xfa, 0x07, 0xf8, 0x0f, 0x05, 0x00,
609 0x05, 0xfa, 0x08, 0xf7, 0x3d, 0x05, 0x00,
610 0x05, 0xfa, 0x09, 0xf6, 0x1e, 0x05, 0x00,
611 0x05, 0xfa, 0x0a, 0xf5, 0x1f, 0x05, 0x00,
612 0x05, 0xfa, 0x0b, 0xf4, 0x20, 0x05, 0x00,
613 0x05, 0xfa, 0x0c, 0xf3, 0x21, 0x05, 0x00,
614 0x05, 0xfa, 0x0d, 0xf2, 0x22, 0x05, 0x00,
615 0x05, 0xfa, 0x0e, 0xf1, 0x23, 0x05, 0x00,
616 0x05, 0xfa, 0x0f, 0xf0, 0x24, 0x05, 0x00,
617 0x05, 0xfa, 0x10, 0xef, 0x25, 0x05, 0x00,
618 0x05, 0xfa, 0x11, 0xee, 0x26, 0x05, 0x00,
619 0x05, 0xfa, 0x12, 0xed, 0x27, 0x05, 0x00,
620 0x05, 0xfa, 0x13, 0xec, 0x04, 0x05, 0x00,
621 0x05, 0xfa, 0x15, 0xea, 0x0a, 0x05, 0x00,
622 0x05, 0xfa, 0x16, 0xe9, 0x11, 0x05, 0x00,
623 0x05, 0xfa, 0x17, 0xe8, 0x15, 0x05, 0x00,
624 0x05, 0xfa, 0x18, 0xe7, 0x16, 0x05, 0x00,
625 0x05, 0xfa, 0x1c, 0xe3, 0x05, 0x05, 0x00,
626 0x05, 0xfa, 0x1d, 0xe2, 0x09, 0x05, 0x00,
627 0x05, 0xfa, 0x4d, 0xb2, 0x3f, 0x05, 0x00,
628 0x05, 0xfa, 0x56, 0xa9, 0x3e, 0x05, 0x00
631 /* Digittrade DVB-T USB Stick */
632 static struct dvb_usb_rc_key af9015_rc_keys_digittrade[] = {
633 { 0x01, 0x0f, KEY_LAST }, /* RETURN */
634 { 0x05, 0x17, KEY_TEXT }, /* TELETEXT */
635 { 0x01, 0x08, KEY_EPG }, /* EPG */
636 { 0x05, 0x13, KEY_POWER }, /* POWER */
637 { 0x01, 0x09, KEY_ZOOM }, /* FULLSCREEN */
638 { 0x00, 0x40, KEY_AUDIO }, /* DUAL SOUND */
639 { 0x00, 0x2c, KEY_PRINT }, /* SNAPSHOT */
640 { 0x05, 0x16, KEY_SUBTITLE }, /* SUBTITLE */
641 { 0x00, 0x52, KEY_CHANNELUP }, /* CH Up */
642 { 0x00, 0x51, KEY_CHANNELDOWN },/* Ch Dn */
643 { 0x00, 0x57, KEY_VOLUMEUP }, /* Vol Up */
644 { 0x00, 0x56, KEY_VOLUMEDOWN }, /* Vol Dn */
645 { 0x01, 0x10, KEY_MUTE }, /* MUTE */
646 { 0x00, 0x27, KEY_0 },
647 { 0x00, 0x1e, KEY_1 },
648 { 0x00, 0x1f, KEY_2 },
649 { 0x00, 0x20, KEY_3 },
650 { 0x00, 0x21, KEY_4 },
651 { 0x00, 0x22, KEY_5 },
652 { 0x00, 0x23, KEY_6 },
653 { 0x00, 0x24, KEY_7 },
654 { 0x00, 0x25, KEY_8 },
655 { 0x00, 0x26, KEY_9 },
656 { 0x01, 0x17, KEY_PLAYPAUSE }, /* TIMESHIFT */
657 { 0x01, 0x15, KEY_RECORD }, /* RECORD */
658 { 0x03, 0x13, KEY_PLAY }, /* PLAY */
659 { 0x01, 0x16, KEY_STOP }, /* STOP */
660 { 0x01, 0x13, KEY_PAUSE }, /* PAUSE */
663 static u8 af9015_ir_table_digittrade[] = {
664 0x00, 0xff, 0x06, 0xf9, 0x13, 0x05, 0x00,
665 0x00, 0xff, 0x4d, 0xb2, 0x17, 0x01, 0x00,
666 0x00, 0xff, 0x1f, 0xe0, 0x2c, 0x00, 0x00,
667 0x00, 0xff, 0x0a, 0xf5, 0x15, 0x01, 0x00,
668 0x00, 0xff, 0x0e, 0xf1, 0x16, 0x01, 0x00,
669 0x00, 0xff, 0x09, 0xf6, 0x09, 0x01, 0x00,
670 0x00, 0xff, 0x01, 0xfe, 0x08, 0x01, 0x00,
671 0x00, 0xff, 0x05, 0xfa, 0x10, 0x01, 0x00,
672 0x00, 0xff, 0x02, 0xfd, 0x56, 0x00, 0x00,
673 0x00, 0xff, 0x40, 0xbf, 0x57, 0x00, 0x00,
674 0x00, 0xff, 0x19, 0xe6, 0x52, 0x00, 0x00,
675 0x00, 0xff, 0x17, 0xe8, 0x51, 0x00, 0x00,
676 0x00, 0xff, 0x10, 0xef, 0x0f, 0x01, 0x00,
677 0x00, 0xff, 0x54, 0xab, 0x27, 0x00, 0x00,
678 0x00, 0xff, 0x1b, 0xe4, 0x1e, 0x00, 0x00,
679 0x00, 0xff, 0x11, 0xee, 0x1f, 0x00, 0x00,
680 0x00, 0xff, 0x15, 0xea, 0x20, 0x00, 0x00,
681 0x00, 0xff, 0x12, 0xed, 0x21, 0x00, 0x00,
682 0x00, 0xff, 0x16, 0xe9, 0x22, 0x00, 0x00,
683 0x00, 0xff, 0x4c, 0xb3, 0x23, 0x00, 0x00,
684 0x00, 0xff, 0x48, 0xb7, 0x24, 0x00, 0x00,
685 0x00, 0xff, 0x04, 0xfb, 0x25, 0x00, 0x00,
686 0x00, 0xff, 0x00, 0xff, 0x26, 0x00, 0x00,
687 0x00, 0xff, 0x1e, 0xe1, 0x13, 0x03, 0x00,
688 0x00, 0xff, 0x1a, 0xe5, 0x13, 0x01, 0x00,
689 0x00, 0xff, 0x03, 0xfc, 0x17, 0x05, 0x00,
690 0x00, 0xff, 0x0d, 0xf2, 0x16, 0x05, 0x00,
691 0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00,