Subversion Repositories freemyipod

Rev

Rev 949 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 949 Rev 950
Line 115... Line 115...
115
{
115
{
116
    dbgenabled = false;
116
    dbgenabled = false;
117
    dbgstate = DBGSTATE_IDLE;
117
    dbgstate = DBGSTATE_IDLE;
118
}
118
}
119
 
119
 
120
void usbdebug_bus_reset(const struct usb_instance* data, int highspeed)
120
void usbdebug_bus_reset(const struct usb_instance* data, int configuration, int interface, int highspeed)
121
{
121
{
122
    maxpacket = highspeed ? 512 : 64;
122
    maxpacket = highspeed ? 512 : 64;
123
}
123
}
124
 
124
 
125
void usbdebug_bulk_enable(const struct usb_instance* data, int interface, int altsetting)
125
void usbdebug_bulk_enable(const struct usb_instance* data, int interface, int altsetting)
Line 148... Line 148...
148
        int size;
148
        int size;
149
        if (endpoint)
149
        if (endpoint)
150
        {
150
        {
151
            union usb_endpoint_number ep = { .number = USBDEBUG_ENDPOINT_IN, .direction = USB_ENDPOINT_DIRECTION_IN };
151
            union usb_endpoint_number ep = { .number = USBDEBUG_ENDPOINT_IN, .direction = USB_ENDPOINT_DIRECTION_IN };
152
            size = MIN(state->size, maxpacket * usb_get_max_transfer_size(data, ep));
152
            size = MIN(state->size, maxpacket * usb_get_max_transfer_size(data, ep));
153
            usb_start_rx(data, ep, state->addr, size);
153
            usb_start_tx(data, ep, state->addr, size);
154
        }
154
        }
155
        else
155
        else
156
        {
156
        {
157
            union usb_endpoint_number ep = { .number = USBDEBUG_ENDPOINT_OUT, .direction = USB_ENDPOINT_DIRECTION_OUT };
157
            union usb_endpoint_number ep = { .number = USBDEBUG_ENDPOINT_OUT, .direction = USB_ENDPOINT_DIRECTION_OUT };
158
            size = MIN(state->size, maxpacket * usb_get_max_transfer_size(data, ep));
158
            size = MIN(state->size, maxpacket * usb_get_max_transfer_size(data, ep));
159
            usb_start_tx(data, ep, state->addr, size);
159
            usb_start_rx(data, ep, state->addr, size);
160
        }
160
        }
161
        state->addr += size;
161
        state->addr += size;
162
        state->size -= size;
162
        state->size -= size;
163
    }
163
    }
164
}
164
}
165
 
165
 
166
bool usbdebug_bulk_handle_data(const struct usb_instance* data, union usb_endpoint_number epnum, int bytesleft)
166
bool usbdebug_bulk_handle_data(const struct usb_instance* data, union usb_endpoint_number epnum, int bytesleft)
167
{
167
{
168
    uint32_t* buf = (uint32_t*)data->buffer->raw;
168
    uint32_t* buf = (uint32_t*)data->buffer->raw;
169
    int len = 64 - bytesleft;
-
 
170
    union usb_endpoint_number ep0out = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_OUT };
169
    union usb_endpoint_number ep0out = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_OUT };
171
    union usb_endpoint_number ep0in = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN };
170
    union usb_endpoint_number ep0in = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN };
172
    usb_ep0_start_rx(data, false, 0, NULL);
171
    usb_ep0_start_rx(data, false, 0, NULL);
173
    switch (buf[0])
172
    switch (buf[0])
174
    {
173
    {
175
    case 1:  // START MEMORY TRANSFER
174
    case 1:  // START MEMORY TRANSFER
176
        if (len == 12)
-
 
177
        {
-
 
178
            bulk_state[bulk_ctrlreq_ep].addr = (void*)buf[1];
175
            bulk_state[bulk_ctrlreq_ep].addr = (void*)buf[1];
179
            bulk_state[bulk_ctrlreq_ep].size = buf[2];
176
            bulk_state[bulk_ctrlreq_ep].size = buf[2];
180
            usbdebug_bulk_xfer_complete(data, 0, bulk_ctrlreq_ep, 0);  // Convenient way to start a transfer.
177
            usbdebug_bulk_xfer_complete(data, 0, bulk_ctrlreq_ep, 0);  // Convenient way to start a transfer.
181
            usb_set_stall(data, ep0out, true);
178
            usb_set_stall(data, ep0out, true);
182
            usb_ep0_start_tx(data, NULL, 0, NULL);
179
            usb_ep0_start_tx(data, NULL, 0, NULL);
183
            break;
180
            break;
184
        }
-
 
185
    default:
181
    default:
186
        usb_set_stall(data, ep0out, true);
182
        usb_set_stall(data, ep0out, true);
187
        usb_set_stall(data, ep0in, true);
183
        usb_set_stall(data, ep0in, true);
188
        break;
184
        break;
189
    }
185
    }
Line 204... Line 200...
204
            {
200
            {
205
            case USB_SETUP_BMREQUESTTYPE_DIRECTION_OUT:
201
            case USB_SETUP_BMREQUESTTYPE_DIRECTION_OUT:
206
                bulk_ctrlreq_ep = endpoint;
202
                bulk_ctrlreq_ep = endpoint;
207
                usb_ep0_start_rx(data, true, 64, usbdebug_bulk_handle_data);
203
                usb_ep0_start_rx(data, true, 64, usbdebug_bulk_handle_data);
208
                return -3;
204
                return -3;
209
            case USB_SETUP_BMREQUESTTYPE_DIRECTION_IN:
-
 
210
                return -2;
205
            default: break;
211
            }
206
            }
212
            break;
207
            break;
213
        default: break;
208
        default: break;
214
        }
209
        }
215
        break;
210
        break;