示例#1
0
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();
}
示例#2
0
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();
}
示例#3
0
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();
}