const definition_error InterfaceGroup::is_defined(__u8 configId) { if (!alternateCount) {return definition_error(DE_ERR_NULL_OBJECT,0x0, DE_OBJ_INTERFACE,configId,number,0);} int i; for(i=0;i<alternateCount;i++) { if (!interfaces[i]) {return definition_error(DE_ERR_NULL_OBJECT,0x0, DE_OBJ_INTERFACE,configId,number,i);} if (interfaces[i]->get_descriptor()->bInterfaceNumber!=number) {return definition_error(DE_ERR_MISPLACED_IF_NUM,interfaces[i]->get_descriptor()->bAlternateSetting, DE_OBJ_INTERFACE,configId,number,i);} if (interfaces[i]->get_descriptor()->bAlternateSetting!=i) {return definition_error(DE_ERR_MISPLACED_OBJECT,interfaces[i]->get_descriptor()->bAlternateSetting, DE_OBJ_INTERFACE,configId,number,i);} definition_error rc=interfaces[i]->is_defined(configId,number); if (rc.error) {return rc;} } return definition_error(); }
const definition_error Endpoint::is_defined(__u8 configId,__u8 interfaceNum,__u8 interfaceAlternate) { if (descriptor.bLength!=7) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x01, DE_OBJ_ENDPOINT,configId,interfaceNum,interfaceAlternate,descriptor.bEndpointAddress);} if (descriptor.bDescriptorType!=USB_DT_ENDPOINT) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x02, DE_OBJ_ENDPOINT,configId,interfaceNum,interfaceAlternate,descriptor.bEndpointAddress);} if (descriptor.bEndpointAddress&0x70) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x03, DE_OBJ_ENDPOINT,configId,interfaceNum,interfaceAlternate,descriptor.bEndpointAddress);} if ( (descriptor.bmAttributes&0xC0) || (((descriptor.bmAttributes&0x03)!=1) && (descriptor.bmAttributes&0xFC)) ) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x04, DE_OBJ_ENDPOINT,configId,interfaceNum,interfaceAlternate,descriptor.bEndpointAddress);} //__u8 wMaxPacketSize if ( (((descriptor.bmAttributes&0x03)==1) && descriptor.bInterval!=1) || (((descriptor.bmAttributes&0x03)==3) && descriptor.bInterval==1) ) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x05, DE_OBJ_ENDPOINT,configId,interfaceNum,interfaceAlternate,descriptor.bEndpointAddress);} return definition_error(); }
const definition_error DeviceQualifier::is_defined() { if (descriptor.bLength!=10) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x01, DE_OBJ_QUALIFIER);} if (descriptor.bDescriptorType!=USB_DT_DEVICE_QUALIFIER) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x02, DE_OBJ_QUALIFIER);} //__le16 bcdUSB; //__u8 bDeviceClass; //__u8 bDeviceSubClass; //__u8 bDeviceProtocol; if (descriptor.bMaxPacketSize0!=8&&descriptor.bMaxPacketSize0!=16&&descriptor.bMaxPacketSize0!=32&&descriptor.bMaxPacketSize0!=64) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x08, DE_OBJ_QUALIFIER);} if (!descriptor.bNumConfigurations) {return definition_error(DE_ERR_INVALID_DESCRIPTOR,0x09, DE_OBJ_QUALIFIER);} //__u8 bRESERVED; int i; for (i=0;i<descriptor.bNumConfigurations;i++) { if (!configurations[i]) {return definition_error(DE_ERR_NULL_OBJECT,0x0, DE_OBJ_OS_CONFIG,i+1);} if (configurations[i]->get_descriptor()->bConfigurationValue!=(i+1)) {return definition_error(DE_ERR_MISPLACED_OBJECT,configurations[i]->get_descriptor()->bConfigurationValue, DE_OBJ_OS_CONFIG,i+1);} definition_error rc=configurations[i]->is_defined(true); if (rc.error) {return rc;} } return definition_error(); }