Цитата(cebotor @ Apr 20 2007, 15:41)

если Винда не дает выбрать инф файл для устройства , говоря о том , что в нем подходящих данных нет , то это означтать может только два варианта - либо не совпадают VID и PID , вашего дескриптора с теми , которые лежат в инф файле , либо есть кардинальное несоответствие интерфейсов указываемых ваши дескриптором с двайверами . у Вас какой вариант ?
Теперь я поняла, что у меня как раз первый вариант:
мое Неизвестное устройство отображается в Диспетчере устройств с PID и VID = 0.
Смотрю в отладчике передачу дескриптора устройства по запросу от хоста.
Может быть код моей функции неверен?
Код
void AT91F_SVC_USBCTL_DataIn(
AT91PS_SVC_USBCTL pSvcUdp, // \arg Pointer to an USBCTL service
AT91PS_UDP pUdp) // \arg Pointer to UDP registers
{
char *pBuffer;
unsigned int i;
// If bufferSize == 0 Send a Zero length packet
if (pSvcUdp->bufferSize == 0)
AT91F_UDP_EpEndOfWr(pUdp, 0); // pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY; - data in FIFI is ready to be sent
// else initialize DPR
else {
printf ("-I- In %d \r", pSvcUdp->bufferSize );
pBuffer = pSvcUdp->pBuffer;
do{// while (pSvcUdp->bufferSize){
if (pSvcUdp->bufferSize >= 8) { // bank 0 = 8 byte ?
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
pSvcUdp->bufferSize -= 8;
}
else {
for (i=0;i<pSvcUdp->bufferSize;i++)
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
pSvcUdp->bufferSize = 0;
}
pSvcUdp->pBuffer = pBuffer;
AT91F_UDP_EpEndOfWr(pUdp, 0); // pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY; - data in FIFI is ready to be sent
} while (pSvcUdp->bufferSize);
}
pSvcUdp->eot = !(pSvcUdp->bufferSize);
}
В исходном примере код был такой:
Код
...
// If bufferSize == 0 Send a Zero length packet
if (pSvcUdp->bufferSize == 0)
AT91F_UDP_EpEndOfWr(pUdp, 0);
// else initialize DPR
else {
pBuffer = pSvcUdp->pBuffer;
if (pSvcUdp->bufferSize >= 8) {
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
pSvcUdp->bufferSize -= 8;
}
else while (pSvcUdp->bufferSize--)
AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
pSvcUdp->pBuffer = pBuffer;
AT91F_UDP_EpEndOfWr(pUdp, 0);
}
pSvcUdp->eot = !(pSvcUdp->bufferSize);
...
Но только вот я не понимаю, как с помощью этой функции можно передать 18-байтный дескриптор, если реально передается только 8?
Спасибо.