реклама на сайте
подробности

 
 
> Работа с радиомышкой в МХ6, Куда копать - без понятия..
mantech
сообщение Aug 11 2015, 14:15
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Приветствую.
Всю башку сломал по поводу этих композитных устройств, будь они не ладны!
Вообщем суть вопроса такая - есть обычная проводная мышь, у которой 1 интерфейс-дескриптор, все работает норм, а есть радио, у которой их 2, причем первый, с которым работает моя прога - клавиатура, а мышь - следующий.

В драйвере усб этого камня, есть список, в котором считывается конфиг. дескр., затем интерфейс 1, хид1, контр. точка1, затем интерфейс 2, хид2, контр. точка2, и тд., если есть еще. Вопрос, как заставить прогу поллить не 1, а второй интерфейс? В драйвере от фрискейла только магические цифры...Может кто в курсе?? Хотя, о чем я спрашиваю - в тренде же линукс-онли rolleyes.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Aug 12 2015, 12:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Ну вот это я и хочу узнать, например - wValue - это что за поле, в каком месте из 8 байт запроса оно распологается? И остальные..

ну так это не к процессору же... Это к стандарту USB надо обращаться, посмотрите где то он тут был... Там расписаны и команды и структуры и какое поле чего значит.
Оно для того и было сделано USB, чтобы от реализаций не зависеть.
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 12 2015, 12:25
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Golikov A. @ Aug 12 2015, 15:12) *
ну так это не к процессору же... Это к стандарту USB надо обращаться,


Это я понимаю, просто вдруг у кого есть кусочек кода для инициализации 2х или более интерфейсных девайсов...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 12 2015, 12:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mantech @ Aug 12 2015, 15:25) *
Это я понимаю, просто вдруг у кого есть кусочек кода для инициализации 2х или более интерфейсных девайсов...

Не нужно в вашем случае никакой специфической инициализации.
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 12 2015, 13:46
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 12 2015, 14:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mantech @ Aug 12 2015, 16:46) *
Вот, что у меня-

Этим запросом вы пытаетесь выбрать alternate setting 1 для интерфейса 1. У интерфейса 1 вашей мышки НЕТ alternate setting 1.
И код запроса должен быть не 0x11 (такого нет), а 0x0B.

Для работы со вторым интерфейсом нужно всего лишь брать данные с EP 2 IN (82h) вместо 1 IN (81h). Ничего инициализировать НЕ НУЖНО.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 00:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01435 секунд с 7
ELECTRONIX ©2004-2016