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] |