mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-29 12:32:28 +02:00
atusb/fw2/ep0.c: make commands needed for sending work
- ep0.c (do_usb_recv, usb_recv): implemented creepy buffer reception - ep0.c (my_setup): added dummy for ATUSB_POLL_INT (always return 0) - ep0.c (my_setup): send a zero-length packet at the end of ATUSB_RF_RESET and ATUSB_REG_WRITE to indicate status stage
This commit is contained in:
parent
dadc683d71
commit
6969e7d689
@ -71,14 +71,33 @@ static void do_usb_send(const uint8_t *data, int len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void do_usb_recv(uint8_t *data, int len, void (*fn)(void *user),
|
||||||
|
void *user)
|
||||||
|
{
|
||||||
|
volatile usb_pcb_t *pcb = usb_pcb_get();
|
||||||
|
uint8_t got;
|
||||||
|
|
||||||
|
/* FreakUSB likes to do things this way. Looks dangerous ... */
|
||||||
|
while (len) {
|
||||||
|
for (got = pcb->fifo[EP_CTRL].len; got; got--) {
|
||||||
|
*data++ = usb_buf_read(EP_CTRL);
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pcb->flags &= ~(1 << SETUP_DATA_AVAIL);
|
||||||
|
fn(user);
|
||||||
|
ep_send_zlp(EP_CTRL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define usb_send(ep, buf, len, arg1, arg2) do_usb_send(buf, len)
|
#define usb_send(ep, buf, len, arg1, arg2) do_usb_send(buf, len)
|
||||||
#define usb_recv(ep, buf, len, fn, arg) /* later */
|
#define usb_recv(ep, buf, len, fn, user) do_usb_recv(buf, len, fn, user)
|
||||||
|
|
||||||
|
|
||||||
#define BUILD_OFFSET 7 /* '#' plus "65535" plus ' ' */
|
#define BUILD_OFFSET 7 /* '#' plus "65535" plus ' ' */
|
||||||
|
|
||||||
|
|
||||||
/* keep things a similar to the original as possible for now */
|
/* keep things as similar to the original as possible for now */
|
||||||
#define setup_request req_t
|
#define setup_request req_t
|
||||||
#define setup req
|
#define setup req
|
||||||
#define bmRequestType type
|
#define bmRequestType type
|
||||||
@ -128,17 +147,16 @@ static int my_setup(struct setup_request *setup) __reentrant
|
|||||||
case ATUSB_TO_DEV(ATUSB_RF_RESET):
|
case ATUSB_TO_DEV(ATUSB_RF_RESET):
|
||||||
debug("ATUSB_RF_RESET\n");
|
debug("ATUSB_RF_RESET\n");
|
||||||
reset_rf();
|
reset_rf();
|
||||||
|
ep_send_zlp(EP_CTRL);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
#ifdef NOTYET
|
|
||||||
case ATUSB_FROM_DEV(ATUSB_POLL_INT):
|
case ATUSB_FROM_DEV(ATUSB_POLL_INT):
|
||||||
debug("ATUSB_POLL_INT\n");
|
debug("ATUSB_POLL_INT\n");
|
||||||
if (setup->wLength < 1)
|
if (setup->wLength < 1)
|
||||||
return 0;
|
return 0;
|
||||||
*buf = IRQ_RF;
|
*buf = 0;//IRQ_RF;
|
||||||
usb_send(&ep0, buf, 1, NULL, NULL);
|
usb_send(&ep0, buf, 1, NULL, NULL);
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
|
||||||
|
|
||||||
case ATUSB_TO_DEV(ATUSB_REG_WRITE):
|
case ATUSB_TO_DEV(ATUSB_REG_WRITE):
|
||||||
debug("ATUSB_REG_WRITE\n");
|
debug("ATUSB_REG_WRITE\n");
|
||||||
@ -146,6 +164,7 @@ static int my_setup(struct setup_request *setup) __reentrant
|
|||||||
spi_send(AT86RF230_REG_WRITE | setup->wIndex);
|
spi_send(AT86RF230_REG_WRITE | setup->wIndex);
|
||||||
spi_send(setup->wValue);
|
spi_send(setup->wValue);
|
||||||
spi_end();
|
spi_end();
|
||||||
|
ep_send_zlp(EP_CTRL);
|
||||||
return 1;
|
return 1;
|
||||||
case ATUSB_FROM_DEV(ATUSB_REG_READ):
|
case ATUSB_FROM_DEV(ATUSB_REG_READ):
|
||||||
debug("ATUSB_REG_READ\n");
|
debug("ATUSB_REG_READ\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user