Subversion Repositories Kolibri OS

Rev

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]