Rev 4984 | Rev 4992 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4984 | Rev 4985 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 2 | ;; ;; |
|
- | 3 | ;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;; |
|
- | 4 | ;; Distributed under terms of the GNU General Public License ;; |
|
- | 5 | ;; ;; |
|
- | 6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 7 | ||
1 | ; standard driver stuff |
8 | ; standard driver stuff |
2 | format MS COFF |
9 | format MS COFF |
Line 3... | Line 10... | ||
3 | 10 | ||
Line 221... | Line 228... | ||
221 | DEBUGF 1,'K : FTDI got the request: %d\n', eax |
228 | DEBUGF 1,'K : FTDI got the request: %d\n', eax |
222 | test eax, eax ;0 |
229 | test eax, eax ;0 |
223 | jz .version |
230 | jz .version |
224 | dec eax ;1 |
231 | dec eax ;1 |
225 | jz .ftdi_get_list |
232 | jz .ftdi_get_list |
- | 233 | ||
- | 234 | push eax edi |
|
- | 235 | xor ecx, ecx |
|
- | 236 | xor esi, esi |
|
- | 237 | call CreateEvent |
|
- | 238 | mov [EventData], eax |
|
- | 239 | mov [EventData+4], edx |
|
- | 240 | pop edi eax |
|
- | 241 | ||
226 | dec eax ;2 |
242 | dec eax ;2 |
227 | jz .ftdi_set_bitmode |
243 | jz .ftdi_set_bitmode |
228 | dec eax ;3 |
244 | dec eax ;3 |
229 | jz .ftdi_setrtshigh |
245 | jz .ftdi_setrtshigh |
230 | dec eax ;4 |
246 | dec eax ;4 |
Line 233... | Line 249... | ||
233 | .version: |
249 | .version: |
234 | .endswitch: |
250 | .endswitch: |
235 | xor eax, eax |
251 | xor eax, eax |
236 | ret |
252 | ret |
Line 237... | Line 253... | ||
237 | 253 | ||
238 | .ftdi_set_bitmode: |
- | |
239 | DEBUGF 1,'K : FTDI Seting bitmode\n' |
- | |
240 | xor ecx, ecx |
- | |
241 | xor esi, esi |
- | |
242 | call CreateEvent |
- | |
243 | mov edi, [ioctl] |
- | |
244 | mov [EventData], eax |
- | |
245 | mov [EventData+4], edx |
- | |
246 | mov word[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_BITMODE_REQUEST shl 8) |
- | |
247 | mov edi, [edi+input] |
- | |
248 | mov dx, word[edi+4] |
- | |
249 | mov word[ConfPacket+2], dx |
- | |
250 | mov dword[ConfPacket+4], 0 |
254 | .ftdi_out_control_transfer: |
- | 255 | DEBUGF 1,'K : ConfPacket %x %x\n', [ConfPacket], [ConfPacket+4] |
|
251 | DEBUGF 1,'K : ConfPacket %x %x\n', [ConfPacket], [ConfPacket+4] |
256 | mov ecx, [edi+input] |
252 | mov ebx, [edi] |
257 | mov ebx, [ecx] |
253 | lea esi, [ConfPacket] |
258 | lea esi, [ConfPacket] |
254 | lea edi, [EventData] |
259 | lea edi, [EventData] |
255 | stdcall USBControlTransferAsync, [ebx + ftdi_context.nullP], esi, 0, 0, control_callback, edi, 0 |
260 | stdcall USBControlTransferAsync, [ebx + ftdi_context.nullP], esi, 0, 0, control_callback, edi, 0 |
256 | DEBUGF 1, 'K : Returned value is %d\n', eax |
261 | DEBUGF 1, 'K : Returned value is %d\n', eax |
257 | mov eax, [EventData] |
262 | mov eax, [EventData] |
258 | mov ebx, [EventData+4] |
263 | mov ebx, [EventData+4] |
259 | call WaitEvent |
264 | call WaitEvent |
Line -... | Line 265... | ||
- | 265 | jmp .endswitch |
|
- | 266 | ||
- | 267 | .ftdi_set_bitmode: |
|
- | 268 | DEBUGF 1,'K : FTDI Seting bitmode\n' |
|
- | 269 | mov word[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_BITMODE_REQUEST shl 8) |
|
- | 270 | mov edi, [edi+input] |
|
- | 271 | mov dx, word[edi+4] |
|
- | 272 | mov word[ConfPacket+2], dx |
|
- | 273 | mov dword[ConfPacket+4], 0 |
|
- | 274 | jmp .ftdi_out_control_transfer |
|
260 | jmp .endswitch |
275 | jmp .endswitch |
261 | 276 | ||
262 | .ftdi_setrtshigh: |
- | |
263 | DEBUGF 1,'K : FTDI Setting RTS pin HIGH\n' |
- | |
264 | xor ecx, ecx |
- | |
265 | xor esi, esi |
- | |
266 | call CreateEvent |
- | |
267 | mov edi, [ioctl] |
- | |
268 | mov [EventData], eax |
277 | .ftdi_setrtshigh: |
269 | mov [EventData+4], edx |
278 | DEBUGF 1,'K : FTDI Setting RTS pin HIGH\n' |
270 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_HIGH shl 16) |
- | |
271 | mov dword[ConfPacket+4], 0 |
- | |
272 | DEBUGF 1,'K : ConfPacket %x %x\n', [ConfPacket], [ConfPacket+4] |
- | |
273 | mov edi, [edi+input] |
- | |
274 | mov ebx, [edi] |
279 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_HIGH shl 16) |
275 | lea esi, [ConfPacket] |
- | |
276 | lea edi, [EventData] |
- | |
277 | stdcall USBControlTransferAsync, [ebx + ftdi_context.nullP], esi, 0, 0, control_callback, edi, 0 |
- | |
278 | DEBUGF 1, 'K : Returned value is %d\n', eax |
- | |
279 | mov eax, [EventData] |
- | |
280 | mov ebx, [EventData+4] |
280 | mov dword[ConfPacket+4], 0 |
Line 281... | Line 281... | ||
281 | call WaitEvent |
281 | jmp .ftdi_out_control_transfer |
282 | jmp .endswitch |
282 | jmp .endswitch |
283 | - | ||
284 | .ftdi_setrtslow: |
- | |
285 | DEBUGF 1,'K : FTDI Setting RTS pin HIGH\n' |
- | |
286 | xor ecx, ecx |
- | |
287 | xor esi, esi |
- | |
288 | call CreateEvent |
- | |
289 | mov edi, [ioctl] |
283 | |
290 | mov [EventData], eax |
284 | .ftdi_setrtslow: |
- | 285 | DEBUGF 1,'K : FTDI Setting RTS pin LOW\n' |
|
- | 286 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_LOW shl 16) |
|
- | 287 | mov dword[ConfPacket+4], 0 |
|
- | 288 | jmp .ftdi_out_control_transfer |
|
291 | mov [EventData+4], edx |
289 | jmp .endswitch |
- | 290 | ||
- | 291 | .ftdi_setdtrhigh: |
|
- | 292 | DEBUGF 1,'K : FTDI Setting DTR pin HIGH\n' |
|
- | 293 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_DTR_HIGH shl 16) |
|
- | 294 | mov dword[ConfPacket+4], 0 |
|
- | 295 | jmp .ftdi_out_control_transfer |
|
- | 296 | jmp .endswitch |
|
- | 297 | ||
- | 298 | .ftdi_setdtrlow: |
|
- | 299 | DEBUGF 1,'K : FTDI Setting DTR pin LOW\n' |
|
- | 300 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_DTR_LOW shl 16) |
|
- | 301 | mov dword[ConfPacket+4], 0 |
|
- | 302 | jmp .ftdi_out_control_transfer |
|
- | 303 | jmp .endswitch |
|
- | 304 | ||
- | 305 | .ftdi_usb_reset: |
|
- | 306 | DEBUGF 1,'K : FTDI Reseting\n' |
|
- | 307 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_RESET_REQUEST shl 8) + (SIO_RESET_SIO shl 16) |
|
- | 308 | mov dword[ConfPacket+4], 0 |
|
- | 309 | jmp .ftdi_out_control_transfer |
|
- | 310 | jmp .endswitch |
|
- | 311 | ||
- | 312 | .ftdi_purge_rx_buf: |
|
- | 313 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_RESET_REQUEST shl 8) + (SIO_RESET_PURGE_RX shl 16) |
|
- | 314 | mov dword[ConfPacket+4], 0 |
|
- | 315 | jmp .ftdi_out_control_transfer |
|
- | 316 | jmp .endswitch |
|
- | 317 | ||
- | 318 | .ftdi_purge_tx_buf: |
|
- | 319 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_RESET_REQUEST shl 8) + (SIO_RESET_PURGE_TX shl 16) |
|
- | 320 | mov dword[ConfPacket+4], 0 |
|
- | 321 | jmp .ftdi_out_control_transfer |
|
- | 322 | jmp .endswitch |
|
- | 323 | ||
- | 324 | .ftdi_set_baudrate: |
|
- | 325 | ;!!!!!!!!!!!!!!!!!!!! |
|
- | 326 | ;jmp .ftdi_out_control_transfer |
|
- | 327 | jmp .endswitch |
|
- | 328 | ||
- | 329 | .ftdi_set_line_property: |
|
- | 330 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_DATA_REQUEST shl 8) |
|
- | 331 | mov edi, [edi+input] |
|
- | 332 | mov dx, word[edi+4] |
|
- | 333 | mov word[ConfPacket+2], dx |
|
- | 334 | mov dword[ConfPacket+4], 0 |
|
- | 335 | jmp .ftdi_out_control_transfer |
|
- | 336 | jmp .endswitch |
|
- | 337 | ||
- | 338 | .ftdi_set_latency_timer: |
|
- | 339 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_LATENCY_TIMER_REQUEST shl 8) |
|
- | 340 | mov edi, [edi+input] |
|
- | 341 | mov dx, word[edi+4] |
|
- | 342 | mov word[ConfPacket+2], dx |
|
- | 343 | mov dword[ConfPacket+4], 0 |
|
- | 344 | jmp .ftdi_out_control_transfer |
|
- | 345 | jmp .endswitch |
|
- | 346 | ||
- | 347 | .ftdi_set_event_char: |
|
- | 348 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_EVENT_CHAR_REQUEST shl 8) |
|
- | 349 | mov edi, [edi+input] |
|
- | 350 | mov dx, word[edi+4] |
|
- | 351 | mov word[ConfPacket+2], dx |
|
- | 352 | mov dword[ConfPacket+4], 0 |
|
- | 353 | jmp .ftdi_out_control_transfer |
|
- | 354 | jmp .endswitch |
|
- | 355 | ||
- | 356 | .ftdi_set_error_char: |
|
- | 357 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_ERROR_CHAR_REQUEST shl 8) |
|
- | 358 | mov edi, [edi+input] |
|
- | 359 | mov dx, word[edi+4] |
|
- | 360 | mov word[ConfPacket+2], dx |
|
- | 361 | mov dword[ConfPacket+4], 0 |
|
- | 362 | jmp .ftdi_out_control_transfer |
|
- | 363 | jmp .endswitch |
|
- | 364 | ||
- | 365 | ||
- | 366 | .ftdi_read_pins: |
|
292 | mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_LOW shl 16) |
367 | DEBUGF 1,'K : FTDI Reading pins\n' |
293 | mov dword[ConfPacket+4], 0 |
368 | mov dword[ConfPacket], FTDI_DEVICE_IN_REQTYPE + (SIO_READ_PINS_REQUEST shl 8) + (0 shl 16) |
294 | DEBUGF 1,'K : ConfPacket %x %x\n', [ConfPacket], [ConfPacket+4] |
369 | mov dword[ConfPacket+4], 0x00000001 |
295 | mov edi, [edi+input] |
370 | mov edi, [edi+input] |
- | 371 | mov ebx, [edi] |
|
- | 372 | lea esi, [ConfPacket] |
|
296 | mov ebx, [edi] |
373 | lea edi, [EventData] |
297 | lea esi, [ConfPacket] |
374 | mov ecx, [ioctl] |
298 | lea edi, [EventData] |
375 | mov ecx, [ecx+output] |
299 | stdcall USBControlTransferAsync, [ebx + ftdi_context.nullP], esi, 0, 0, control_callback, edi, 0 |
376 | stdcall USBControlTransferAsync, [ebx + ftdi_context.nullP], esi, ecx, 1, control_callback, edi, 0 |
300 | DEBUGF 1, 'K : Returned value is %d\n', eax |
377 | DEBUGF 1, 'K : Returned value is %d\n', eax |
301 | mov eax, [EventData] |
378 | mov eax, [EventData] |
Line 302... | Line 379... | ||
302 | mov ebx, [EventData+4] |
379 | mov ebx, [EventData+4] |
303 | call WaitEvent |
- | |
304 | jmp .endswitch |
- | |
305 | - | ||
306 | .ftdi_read_pins: |
- | |
307 | DEBUGF 1,'K : FTDI Reading pins\n' |
380 | call WaitEvent |
308 | call CreateEvent |
- | |
309 | mov [EventData], eax |
- | |
Line 310... | Line 381... | ||
310 | mov [EventData+4], edx |
381 | jmp .endswitch |
311 | mov eax, FTDI_DEVICE_IN_REQTYPE + (SIO_READ_PINS_REQUEST shl 8) |
382 | |
312 | mov dword[ConfPacket], eax |
383 | .ftdi_read_data: |
313 | jmp .endswitch |
384 | ;stdcall USBNormalTransferAsync, [ebx + ftdi_context.inEP], [ebx + ftdi_context.readBufPtr], [ebx + 1] |
314 | 385 | ||
315 | .ftdi_get_list: |
386 | .ftdi_get_list: |
316 | call linkedlist.gethead |
387 | call linkedlist.gethead |
317 | mov edi, [edi+output] |
388 | mov edi, [edi+output] |
- | 389 | mov [edi], eax |
|
318 | mov [edi], eax |
390 | DEBUGF 1, 'K : FTDI Device pointer %x\n', [edi] |
319 | DEBUGF 1, 'K : FTDI Device pointer %x\n', [edi] |
391 | mov eax, 4 |
320 | mov eax, 4 |
392 | mov [edi+out_size], eax |
321 | mov [edi+out_size], eax |
393 | jmp .endswitch |
322 | jmp .endswitch |
394 | |
Line 330... | Line 402... | ||
330 | 402 | ||
331 | 403 | ||
Line 332... | Line 404... | ||
332 | align 4 |
404 | align 4 |
333 | proc control_callback stdcall uses ebx edi esi, .pipe:DWORD, .status:DWORD, .buffer:DWORD, .length:DWORD, .calldata:DWORD |
405 | proc control_callback stdcall uses ebx edi esi, .pipe:DWORD, .status:DWORD, .buffer:DWORD, .length:DWORD, .calldata:DWORD |
334 | 406 | ||
335 | DEBUGF 1, 'K : status is %d\n', [.status+24h] |
407 | DEBUGF 1, 'K : status is %d\n', [.status] |
336 | mov ecx, [.calldata] |
408 | mov ecx, [.calldata] |
337 | mov eax, [ecx] |
409 | mov eax, [ecx] |