|
Работа с радиомышкой в МХ6, Куда копать - без понятия.. |
|
|
|
Aug 11 2015, 14:15
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Приветствую. Всю башку сломал по поводу этих композитных устройств, будь они не ладны! Вообщем суть вопроса такая - есть обычная проводная мышь, у которой 1 интерфейс-дескриптор, все работает норм, а есть радио, у которой их 2, причем первый, с которым работает моя прога - клавиатура, а мышь - следующий. В драйвере усб этого камня, есть список, в котором считывается конфиг. дескр., затем интерфейс 1, хид1, контр. точка1, затем интерфейс 2, хид2, контр. точка2, и тд., если есть еще. Вопрос, как заставить прогу поллить не 1, а второй интерфейс? В драйвере от фрискейла только магические цифры...Может кто в курсе?? Хотя, о чем я спрашиваю - в тренде же линукс-онли
|
|
|
|
|
 |
Ответов
|
Aug 12 2015, 13:46
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(aaarrr @ Aug 12 2015, 15:28)  Не нужно в вашем случае никакой специфической инициализации. У вас есть какой-нибудь пример инициализации? Вот, что у меня- CODE int emuerateDevice(usb_module_t *port, usbhQueueHead_t *usb_qh_ep0, usbDeviceDescriptor_t *device_descriptor,uint8_t *config_descriptor,uint8_t *interface_descriptor, uint8_t *hid_descriptor,uint8_t *ep_descriptor,uint8_t *report_descriptor ) { usbh_bus_reset(port); hal_delay_us(500); //printf("Device reset.\n"); /*! * Read the first 8 bytes of the device descriptor as we do not yet know the max packet size\n * Our new device has address 0 at this time. */
usbh_get_dev_desc(port, usb_qh_ep0, device_descriptor); /*! * Update the maximum packet size in the queue head */
// Stop schedule to avoid contention with controller usbh_disable_asynchronous_schedule(port); // printf("Device 2\n"); /* Set the max packet size in the QH to the max packet size in the device descriptor */ usb_qh_ep0->endpointCharacteristics = ((usb_qh_ep0->endpointCharacteristics & ~USB_QH_EP_CHAR_MAX_PACKET(0x7FF)) | USB_QH_EP_CHAR_MAX_PACKET(device_descriptor->bMaxPacketSize));
usb_qh_ep0->endpointCharacteristics &= ~(0x7FF << 16); // clear max packet size usb_qh_ep0->endpointCharacteristics |= ((uint32_t)(device_descriptor->bMaxPacketSize)) << 16;
// Restart asynchronous schedule usbh_enable_asynchronous_schedule(port); /* Send set address command */ usbh_set_device_address(port, usb_qh_ep0, DEVICE_ADDRESS); /* Read in the full device descriptor */ usbh_get_dev_desc(port, usb_qh_ep0, device_descriptor); /* Read in the configuration descriptor */ usbh_get_config_desc(port, usb_qh_ep0, config_descriptor); /* Read in the interface, HID, and endpoint descriptors */ usbh_get_interface_desc(port, usb_qh_ep0, interface_descriptor,hid_descriptor,ep_descriptor); /* Test the interface descriptor parameters to check if the attached * device is in the HID class and that it is also a mouse. */ /* if( (interface_descriptor[5] != 0x3) | (interface_descriptor[7] != 0x2)) { //printf("Device enumerated.\n"); return 0; // not a mouse; return } */ /* Set the configuration for the device */ /* We already know the device is a USB mouse, so there is only one possible * configuration for the device. */
// Эт строка для смены интерфейса usbh_set_interface_desc(port, usb_qh_ep0, DEVICE_ADDRESS); usbh_set_configuration(port, usb_qh_ep0, CONFIG_VALUE); usbh_get_report_desc(port, usb_qh_ep0, report_descriptor); return 1; }
//сама процедура, по логике интерфейс должен измениться на 1 с 0го, но по факту ничего не работает
void usbh_set_interface_desc(usb_module_t *port, usbhQueueHead_t *usb_qh_ep0, uint32_t device_address) { usbhTransferDescriptor_t * usb_qtd1, *usb_qtd2; uint32_t temp; //uint32_t usbhSetupCommand[2]; uint32_t core = (uint32_t)port->controllerID; usbhSetupCommand[0] = 0x00011100; usbhSetupCommand[1] = 0x00000001; usb_qtd1 = usbh_qtd_init(0x8, 0, SETUP_PID, usbhSetupCommand); usb_qtd2 = usbh_qtd_init(0x0, 1, IN_PID, 0);
usb_qtd1->nextQtd = (uint32_t)usb_qtd2; TmpUSB_wait=0; while(usb_qh_ep0->qtdToken & 0x80) /* wait for active bit to clear */ {if (TmpUSB_wait++>100000) break;} /* Point the QH to the linked list of qTDs */ usb_qh_ep0->nextQtd = (uint32_t)usb_qtd1; /* Wait for transaction to complete and clear interrpt flag */ #ifdef USB_USE_INT while (usb_utmi_int_flag == 0); usb_utmi_int_flag = 0; #else TmpUSB_wait=0; while(!(HW_USBC_USBSTS_RD(core) & BM_USBC_UH1_USBSTS_UI)) {if (TmpUSB_wait++>100000) break;} HW_USBC_USBSTS_WR(core, HW_USBC_USBSTS_RD(core) | BM_USBC_UH1_USBSTS_UI); #endif /* Wait until the active bit is cleared in the last qtd. */ TmpUSB_wait=0; while(usb_qtd2->qtdToken & 0x80) {if (TmpUSB_wait++>100000) break;}
/* Check for errors */ if(HW_USBC_USBSTS_RD(core) & BM_USBC_UH1_USBSTS_UEI) { printf("ERROR!!!\n"); temp = *(uint32_t *)((HW_USBC_ASYNCLISTADDR_RD(core)) + 0x18); printf("qTD status = 0x%08x\n",temp); } else { printf("Set configuration command complete!!\n\n"); #ifdef DEBUG_PRINT //printf("USBSTS = 0x%08x\n",(HW_USBC_USBSTS_RD(core))); #endif } /* Clear the USB error bit */ HW_USBC_USBSTS_WR(core, HW_USBC_USBSTS_RD(core) | BM_USBC_UH1_USBSTS_UEI); }
Сообщение отредактировал mantech - Aug 12 2015, 13:53
|
|
|
|
Сообщений в этой теме
mantech Работа с радиомышкой в МХ6 Aug 11 2015, 14:15 prottoss Цитата(mantech @ Aug 11 2015, 20:15) В др... Aug 11 2015, 17:01 mantech Цитата(prottoss @ Aug 11 2015, 20:01) Есл... Aug 11 2015, 17:14  mantech Цитата(mantech @ Aug 11 2015, 20:14) Если... Aug 12 2015, 08:56 aaarrr Цитата(mantech @ Aug 12 2015, 11:56) Тут ... Aug 12 2015, 09:09 mantech Цитата(aaarrr @ Aug 12 2015, 12:09) Обычн... Aug 12 2015, 10:37  aaarrr Цитата(mantech @ Aug 12 2015, 13:37) Ну э... Aug 12 2015, 10:51 Golikov A. ЦитатаВам просто нужно работать с конечными точкам... Aug 12 2015, 11:00 aaarrr Цитата(Golikov A. @ Aug 12 2015, 14:00) к... Aug 12 2015, 11:25 Golikov A. А мне то откуда знать беспроводная мышь, которая е... Aug 12 2015, 11:45 kovigor Цитата(Golikov A. @ Aug 12 2015, 14:45) А... Aug 12 2015, 11:49  mantech Цитата(kovigor @ Aug 12 2015, 14:49) Почт... Aug 12 2015, 12:03   kovigor Цитата(mantech @ Aug 12 2015, 15:03) Ну в... Aug 12 2015, 12:05     mantech Цитата(aaarrr @ Aug 12 2015, 17:20) Для р... Aug 12 2015, 15:04      aaarrr Цитата(mantech @ Aug 12 2015, 18:04) Ещеб... Aug 12 2015, 15:26       mantech Цитата(aaarrr @ Aug 12 2015, 18:26) Начни... Aug 12 2015, 15:40        aaarrr Цитата(mantech @ Aug 12 2015, 18:40) ЗЫ. ... Aug 12 2015, 17:12         mantech Цитата(aaarrr @ Aug 12 2015, 20:12) Адрес... Aug 12 2015, 18:46          aaarrr Цитата(mantech @ Aug 12 2015, 21:46) Вооб... Aug 12 2015, 18:58           mantech Цитата(aaarrr @ Aug 12 2015, 21:58) По-ум... Aug 12 2015, 19:02            mantech Закрываю тему, похоже никто тут с этими контроллер... Aug 13 2015, 09:55 Golikov A. сильно зависит от того на чем там хост сделан. LPC... Aug 13 2015, 10:17 mantech Цитата(Golikov A. @ Aug 13 2015, 13:17) М... Aug 13 2015, 11:20  mantech Перенес тему в - http://electronix.ru/forum/index... Aug 16 2015, 16:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|