Source Code Files
Contents
USB08 Evaluation Board Designer Reference Manual
MOTOROLA Source Code Files 107
// GET_DESCRIPTOR Stand ard Device Request Handl er
// called by handleSETU P();
//
void getDescriptor() {
uchar n;
uchar *dest;
switch(SetupBuffer.wVal ue .hi ) {
case DT_DEVICE: // Get Device Descripto r
SetupDataPtr = (uchar *)&Devic eD es c;
SetupSize = DeviceDesc.bLength;
break;
case DT_CONFIGURATION: // Get Configuration De scriptor
SetupDataPtr = (uchar *)&Confi gD es c;
SetupSize = ConfigDesc. wTotalLength.lo;
break;
case DT_STRING: // Get String Descripto r
// ### Table Index Boundary should be ch ec ked
SetupDataPtr = StringDescTab le [S etupBuffer.wValue.lo];
SetupSize = *SetupDataPtr;
break;
default:
forceSTALL();
break;
}
if( SetupBuffer.wValue. hi == DT_DEVICE ||
SetupBuffer.wValue.hi = = DT_CONFIGURATION ||
SetupBuffer.wValue.hi == DT_ ST RI NG) {
// check if requested Length is less than Descriptor Length
if((SetupBuffer.wLength .lo < SetupSize) && (Set upBuffer.wLength.hi == 0))
SetupSize = SetupBuffer .wLength.lo;
// copy (up to) 8 Bytes to EP0 Data Registers
n = 0;
dest = (uchar *)&UE0D0;
while(SetupSize!=0 && n <8) {
*dest = *SetupDataPtr;
dest++;
SetupDataPtr++;
SetupSize--;
n++;
}
// prepare to send n Bytes as DATA1 at next IN Tr an saction
// Rem: RX0E (currently disabled) will be re-en abled at end of handleS ETUP()
UCR0 = BM_T0SEQ + BM_TX 0E + n;
// check if this is the last DATA packet to send
if(n < 8) SetupBuffer.bRequest = REQUEST_COMPLETE;
}
}
//--------------------- ------------------------ ----------------------- --------