Subversion Repositories Kolibri OS

Rev

Rev 4975 | Rev 4980 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4975 Rev 4979
Line 8... Line 8...
8
__DEBUG_LEVEL__ = 1
8
__DEBUG_LEVEL__ = 1
Line 9... Line 9...
9
 
9
 
10
include '../proc32.inc'
10
include '../proc32.inc'
11
include '../imports.inc'
11
include '../imports.inc'
12
include '../fdo.inc'
12
include '../fdo.inc'
Line 13... Line 13...
13
include '../../struct.inc'
13
include '../struct.inc'
14
 
14
 
Line 15... Line 15...
15
public START
15
public START
Line 124... Line 124...
124
output                  dd      ?
124
output                  dd      ?
125
out_size                dd      ?
125
out_size                dd      ?
126
ends
126
ends
Line 127... Line 127...
127
 
127
 
-
 
128
struct usb_descr
-
 
129
bLength                 db      ?
128
struct usb_descr
130
bDescriptorType         db      ?
129
bcdUSB                  dw      ?
131
bcdUSB                  dw      ?
130
bDeviceClass            db      ?
132
bDeviceClass            db      ?
131
bDeviceSubClass         db      ?
133
bDeviceSubClass         db      ?
132
bDeviceProtocol         db      ?
134
bDeviceProtocol         db      ?
Line 138... Line 140...
138
iProduct                db      ?
140
iProduct                db      ?
139
iSerialNumber           db      ?
141
iSerialNumber           db      ?
140
bNumConfigurations      db      ?
142
bNumConfigurations      db      ?
141
ends
143
ends
Line -... Line 144...
-
 
144
 
-
 
145
struct conf_packet
-
 
146
bmRequestType           db      ?
-
 
147
bRequest                db      ?
-
 
148
wValue                  dw      ?
-
 
149
wIndex                  dw      ?
-
 
150
wLength                 dw      ?
-
 
151
ends
142
 
152
 
143
section '.flat' code readable align 16
153
section '.flat' code readable align 16
144
; The start procedure.
154
; The start procedure.
Line 145... Line 155...
145
proc START stdcall, .reason:DWORD
155
proc START stdcall, .reason:DWORD
146
 
156
 
147
        xor     eax, eax        ; initialize return value
157
        xor     eax, eax        ; initialize return value
148
        cmp     [.reason], 1    ; compare the argument
-
 
149
        jnz     .nothing                
158
        cmp     [.reason], 1    ; compare the argument
Line 150... Line 159...
150
        call    linkedlist.init
159
        jnz     .nothing                
151
        stdcall RegUSBDriver, my_driver, service_proc, usb_functions
160
        stdcall RegUSBDriver, my_driver, service_proc, usb_functions
152
 
161
 
Line 153... Line 162...
153
.nothing:
162
.nothing:
Line 154... Line 163...
154
        ret     4
163
        ret
-
 
164
endp
155
endp
165
 
156
 
166
 
157
 
167
proc AddDevice stdcall uses ebx, .config_pipe:DWORD, .config_descr:DWORD, .interface:DWORD
158
proc AddDevice stdcall uses ebx, .config_pipe:DWORD, .config_descr:DWORD, .interface:DWORD
168
        
159
        
169
        stdcall USBGetParam, [.config_pipe], 0
160
        stdcall USBGetParam, [.config_pipe], 0
170
        DEBUGF 1,'K : Device detected Vendor: %x\n', [eax+usb_descr.idVendor]
Line 221... Line 231...
221
        xor eax, eax
231
        xor     eax, eax
222
	    ret 
232
	    ret 
Line 223... Line 233...
223
 
233
 
224
  .ftdi_set_bitmode:
234
  .ftdi_set_bitmode:
-
 
235
        DEBUGF 1,'K : FTDI Seting bitmode\n'        
-
 
236
        xor     ecx, ecx
225
        DEBUGF 1,'K : FTDI Seting bitmode\n'        
237
        xor     esi, esi
-
 
238
        call    CreateEvent
226
        call    CreateEvent
239
        mov     edi, [ioctl]
227
        DEBUGF 1,'K : Event created %x %x\n' , eax, edx
240
        DEBUGF 1,'K : Event created %x %x\n' , eax, edx
228
        mov     [EventData], eax
241
        mov     [EventData], eax
229
        mov     [EventData+1], edx         
242
        mov     [EventData+4], edx               
230
        mov     si, (FTDI_DEVICE_IN_REQTYPE) + (SIO_SET_BITMODE_REQUEST shl 8)                
-
 
231
        mov     word[ConfPacket], si
243
        mov     dword[ConfPacket], (FTDI_DEVICE_IN_REQTYPE) + (SIO_SET_BITMODE_REQUEST shl 8) + (0x0000 shl 16)
232
        mov     edi, [edi+input]        
244
        mov     edi, [edi+input]        
233
        mov     si, word[edi+1]
245
        mov     dx, word[edi+4]                
234
        DEBUGF 1,'K : Pin value is %x\n', si        
246
        mov     word[ConfPacket+4], dx
235
        mov     word[ConfPacket+4], si                 
247
        DEBUGF 1,'K : ConfPacket %x %x\n', [ConfPacket], [ConfPacket+4]                                 
236
        mov     ebx, [edi]
248
        mov     ebx, [edi] 
237
        lea     esi, [ConfPacket]
249
        lea     esi, [ConfPacket]
238
        lea     edi, [EventData]
250
        lea     edi, [EventData]        
239
        stdcall USBControlTransferAsync, [ebx + ftdi_context.nullP],  esi, 0, 0, control_callback, edi, 0
251
        stdcall USBControlTransferAsync, [ebx + ftdi_context.nullP],  esi, 0, 0, control_callback, edi, 0
-
 
252
        DEBUGF 1, 'K : Returned value is %d\n', eax
-
 
253
        mov     eax, [EventData]
240
        DEBUGF 1, 'K : Returned value is %d\n', eax
254
        mov     ebx, [EventData+4]
241
        call    WaitEvent     
255
        call    WaitEvent     
-
 
256
        jmp     .endswitch
242
        jmp     .endswitch
257
 
243
  .ftdi_read_pins:
258
  .ftdi_read_pins:
244
        DEBUGF 1,'K : FTDI Reading pins\n' 
259
        DEBUGF 1,'K : FTDI Reading pins\n' 
245
        call    CreateEvent
260
        call    CreateEvent
246
        mov     [EventData], eax
261
        mov     [EventData], eax
247
        mov     [EventData+1], edx
262
        mov     [EventData+4], edx
248
        mov     eax, FTDI_DEVICE_IN_REQTYPE + (SIO_READ_PINS_REQUEST shl 8)
263
        mov     eax, FTDI_DEVICE_IN_REQTYPE + (SIO_READ_PINS_REQUEST shl 8)
249
        mov     dword[ConfPacket], eax
264
        mov     dword[ConfPacket], eax
-
 
265
        jmp     .endswitch
250
        jmp     .endswitch
266
 
251
   .ftdi_get_list:
267
   .ftdi_get_list:
252
        call    linkedlist.gethead
-
 
253
        DEBUGF 1, 'K : FTDI Device pointer %x\n' , eax
268
        call    linkedlist.gethead                        
254
        mov     edi, [edi+output]
269
        mov     edi, [edi+output]
-
 
270
        mov     [edi], eax
255
        mov     edi, eax
271
        DEBUGF 1, 'K : FTDI Device pointer %x\n', [edi]
256
        mov     eax, 4
-
 
257
        mov     edi, [ioctl]
272
        mov     eax, 4        
258
        mov     [edi+out_size], eax
273
        mov     [edi+out_size], eax
259
        jmp     .endswitch	   
274
        jmp     .endswitch	   
260
endp 
275
endp 
261
restore   handle
276
restore   handle
Line 268... Line 283...
268
 
283
 
269
align 4
284
align 4
Line 270... Line 285...
270
proc control_callback stdcall uses ebx, .pipe:DWORD, .status:DWORD, .buffer:DWORD, .length:DWORD, .calldata:DWORD   
285
proc control_callback stdcall uses ebx, .pipe:DWORD, .status:DWORD, .buffer:DWORD, .length:DWORD, .calldata:DWORD   
271
   
286
   
-
 
287
        mov     eax, [.calldata]
-
 
288
        mov     ebx, [.calldata+4]
272
        mov     eax, [.calldata]
289
        DEBUGF 1,'K : EventData %x %x', [.calldata], [.calldata+4]
273
        mov     ebx, [.calldata+1]
290
        xor     edx, edx
274
        call    RaiseEvent
291
        call    RaiseEvent
275
        DEBUGF 1, 'K : status is %d\n', [.status+24h]       
292
        DEBUGF 1, 'K : status is %d\n', [.status+24h]       
Line 276... Line 293...
276
        ret
293
        ret
Line 277... Line 294...
277
endp
294
endp
278
 
295
 
279
 
296
 
-
 
297
proc DeviceDisconnected stdcall uses  ebx esi edi, .device_data:DWORD
280
proc DeviceDisconnected stdcall uses  ebx esi edi, .device_data:DWORD
298
 
Line 281... Line 299...
281
 
299
        DEBUGF 1, 'K : FTDI deleting device data\n'
Line 282... Line 300...
282
        DEBUGF 1, 'K : FTDI deleting device data\n'
300
        mov     eax, [.device_data]