Subversion Repositories Kolibri OS

Rev

Rev 1161 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1159 hidnplayr 1
 
2
{
3
  .fd                       dd  ?
4
  .bk                       dd  ?
5
  .dev                      dd  ?    ; pointer to associated device
6
  .pipe                     dd  ?    ; pipe information
7
  .status                   dd  ?    ; non-ISO status
8
  .transfer_flags           dd  ?    ; URB_SHORT_NOT_OK | ...
9
  .transfer_buffer          dd  ?    ; associated data buffer
10
  .transfer_dma             dd  ?    ; dma addr for transfer_buffer
11
  .transfer_buffer_length   dd  ?    ; data buffer length
12
  .actual_length            dd  ?    ; actual transfer length
13
  .setup_packet             dd  ?    ; setup packet (control only)
14
  .setup_dma                dd  ?    ; dma addr for setup_packet
15
  .start_frame              dd  ?    ; start frame (ISO)
16
  .number_of_packets        dd  ?    ; number of ISO packets
17
  .interval                 dd  ?    ; transfer interval
18
19
 
20
  .context                  dd  ?    ; context for completion
21
  .complete                 dd  ?    ; (in) completion routine
22
  .iso_frame_desc:
23
}
24
25
 
26
  URB URB
27
end virtual
28
29
 
30
 
31
{
32
  .request_type             db ?
33
  .request                  db ?
34
  .value                    dw ?
35
  .index                    dw ?
36
  .length                   dw ?
37
}
38
39
 
40
  REQ REQ
41
end virtual
42
43
 
44
proc usb_control_msg stdcall, dev:dword, pipe:dword, request:dword,\
45
                         requesttype:dword, value:dword, index:dword,\
46
                         data:dword, size:dword, timeout:dword
47
48
 
49
             req    REQ
50
           endl
51
52
 
53
           mov ecx, [request]
54
           mov ebx, [requesttupe]
55
           mov edx, [value]
56
           mov esi, [index]
57
           mov edi, [size]
58
59
 
60
           mov [eax+REQ.request], cl
61
           mov [eax+REQ.value], dx
62
           mov [eax+REQ.index], si
63
           mov [eax+REQ.length], di
64
65
 
66
                   eax, [data], [size], [timeout]
67
68
 
69
endp
70
71
 
72
 
73
static int usb_internal_control_msg(struct usb_device *usb_dev,
74
                                     unsigned int pipe,
75
                                     struct usb_ctrlrequest *cmd,
76
                                     void *data, int len, int timeout)
77
{
78
   struct urb *urb;
79
   int retv;
80
   int length;
81
82
 
83
   if (!urb)
84
      return -ENOMEM;
85
   usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char *)cmd, data,
86
                        len, usb_api_blocking_completion, NULL);
87
88
 
89
   if (retv < 0)
90
      return retv;
91
   else
92
   return length;
93
}
94
95
 
96
 
97
                           struct usb_device *dev,
98
                           unsigned int pipe,
99
                           unsigned char *setup_packet,
100
                           void *transfer_buffer,
101
                           int buffer_length,
102
                           usb_complete_t complete_fn,
103
                           void *context)
104
{
105
106
 
107
   urb->pipe = pipe;
108
   urb->setup_packet = setup_packet;
109
   urb->transfer_buffer = transfer_buffer;
110
   urb->transfer_buffer_length = buffer_length;
111
   urb->complete = complete_fn;
112
   urb->context = context;
113
}
114