⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbd.c

📁 smartARM2400 USB host例程
💻 C
📖 第 1 页 / 共 4 页
字号:
       	            USBDEBUG_SENDCHAR(ucBuf[i]);
                }
            } else {  
                for (i = 2; i < usLen; i++) {
       	            USBDEBUG_SENDCHAR(ucBuf[i]);
                }
            } 	        
       	}
    }
}   	    
   	


/*********************************************************************************************************
  以下为 USB 协议中的标准请求
*********************************************************************************************************/

/*********************************************************************************************************
** Function name:       usbGetStatus
** Descriptions:        读取状态请求
** input parameters:    ucType  要读取的状态的对象类型,指设备(0),接口(1),或端点(2)
**                      wIndex  索引,设备号(固定为0),或接口号,或端点号
** output parameters:   pucData 接收数据缓冲区,用于存放读取到的状态值
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbGetStatus (USB_INT8U ucType , USB_INT16U wIndex, USB_INT8U *pucData)
{
    USB_DEV_REQ usbDeviceRequest;
    
    USBDEBUG_SENDSTR("...usbGetStatus\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));              /*  清零usbDeviceRequest        */
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_DEVICE_TO_HOST | __USB_STANDARD_REQUEST | ucType);
                                                                        /*  请求类型                    */
    usbDeviceRequest.bRequest      = __USB_REQUEST_GET_STATUS;          /*  请求号                      */
    usbDeviceRequest.wValue        = 0;
    usbDeviceRequest.wIndex        = wIndex;
    usbDeviceRequest.wLength       = 2;                                 /*  返回的数据长度固定为2字节   */
    
    return usbStandardReqTransfer(&usbDeviceRequest, pucData);          /*  发送请求,并取得设备返回值   */
                                                                        
}

/*********************************************************************************************************
** Function name:       usbClearFeature
** Descriptions:        清除特性
** input parameters:    ucType  要读取的状态的对象类型,指设备(0),接口(1),或端点(2)
**                      wValue  特性选择符
**                      wIndex  索引,设备号(固定为0),或接口号,或端点号
** output parameters:   None
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbClearFeature (USB_INT8U ucType, USB_INT16U wValue, USB_INT16U wIndex)
{
    USB_DEV_REQ usbDeviceRequest;
    
    USBDEBUG_SENDSTR("...usbClearFeature\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_HOST_TO_DEVICE | __USB_STANDARD_REQUEST | ucType);
    usbDeviceRequest.bRequest      = __USB_REQUEST_CLEAR_FEATURE;
    usbDeviceRequest.wValue        = wValue;
    usbDeviceRequest.wIndex        = wIndex;
    usbDeviceRequest.wLength       = 0;
    
    return usbStandardReqTransfer(&usbDeviceRequest, NULL);
}

/*********************************************************************************************************
** Function name:       usbSetFeature
** Descriptions:        设置特性
** input parameters:    ucType  要读取的状态的对象类型,指设备(0),接口(1),或端点(2)
**                      wValue  特性选择符
**                      wIndex  索引,设备号(固定为0),或接口号,或端点号
** output parameters:   None
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbSetFeature (USB_INT8U ucType, USB_INT16U wValue, USB_INT16U wIndex)
{
    USB_DEV_REQ usbDeviceRequest;
    
    USBDEBUG_SENDSTR("...usbSetFeature\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_HOST_TO_DEVICE | __USB_STANDARD_REQUEST | ucType);
    usbDeviceRequest.bRequest      = __USB_REQUEST_SET_FEATURE;
    usbDeviceRequest.wValue        = wValue;
    usbDeviceRequest.wIndex        = wIndex;
    usbDeviceRequest.wLength       = 0;
    
    return usbStandardReqTransfer(&usbDeviceRequest, NULL);
}

/*********************************************************************************************************
** Function name:       usbSetAddress
** Descriptions:        设置地址
** input parameters:    wValue 地址值
** output parameters:   None
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbSetAddress (USB_INT16U wValue)
{
    USB_DEV_REQ usbDeviceRequest;

    USBDEBUG_SENDSTR("...usbSetAddress: Address: ");
    USBDEBUG_SENDCHAR((USB_INT8U)(wValue + 0x30));
    USBDEBUG_SENDSTR("\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_HOST_TO_DEVICE | __USB_STANDARD_REQUEST | 
                                      __USB_RECIPIENT_DEVICE); 
    usbDeviceRequest.bRequest      = __USB_REQUEST_SET_ADDRESS;
    usbDeviceRequest.wValue        = wValue;
    usbDeviceRequest.wIndex        = 0;
    usbDeviceRequest.wLength       = 0;
    
    return usbStandardReqTransfer(&usbDeviceRequest, NULL);
}


/*********************************************************************************************************
** Function name:       usbGetDescription
** Descriptions:        获取描述符
** input parameters:    wValue  类型和索引
**                      wIndex  0 或语言 ID
**                      wLength 描述符长度
** output parameters:   pucData 接收描述符的缓冲区
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbGetDescription (USB_INT16U wValue, 
                             USB_INT16U wIndex,
                             USB_INT16U wLength,
                             USB_INT8U *pucData)
{
    USB_DEV_REQ usbDeviceRequest;
    
    USBDEBUG_SENDSTR("\r\n...usbGetDescription.  wValue: ");
    USBDEBUG_SENDCHAR((USB_INT8U)((wValue >> 8) + 0x30));
    USBDEBUG_SENDSTR("\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_DEVICE_TO_HOST | __USB_STANDARD_REQUEST | 
                                      __USB_RECIPIENT_DEVICE);
    usbDeviceRequest.bRequest      = __USB_REQUEST_GET_DESCRIPTOR;
    usbDeviceRequest.wValue        = wValue;
    usbDeviceRequest.wIndex        = wIndex;
    usbDeviceRequest.wLength       = wLength;
    
    return usbStandardReqTransfer(&usbDeviceRequest, pucData);
}

/*********************************************************************************************************
** Function name:       usbSetDescription
** Descriptions:        设置描述符
** input parameters:    wValue  类型和索引
**                      wIndex  0 或语言ID
**                      wLength 描述符长度
** output parameters:   pucData 接收描述符的缓冲区
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbSetDescription (USB_INT16U wValue, 
                             USB_INT16U wIndex, 
                             USB_INT16U wLength, 
                             USB_INT8U *pucData)
{

    USBDEBUG_SENDSTR("...usbSetDescription\r\n");
    
    return USB_ERR_SOFT_NOT_SUPPORT;
}

/*********************************************************************************************************
** Function name:       usbGetConfiguratiton
** Descriptions:        读取配置值请求
** input parameters:    None
** output parameters:   pucData 配置值
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbGetConfiguratiton (USB_INT8U *pucData)
{
    USB_DEV_REQ usbDeviceRequest;
    
    USBDEBUG_SENDSTR("...usbGetConfiguratiton\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_DEVICE_TO_HOST | __USB_STANDARD_REQUEST | 
                                      __USB_RECIPIENT_DEVICE);
    usbDeviceRequest.bRequest      = __USB_REQUEST_GET_CONFIGURATION;
    usbDeviceRequest.wValue        = 0;
    usbDeviceRequest.wIndex        = 0;
    usbDeviceRequest.wLength       = 1;
    
    return usbStandardReqTransfer(&usbDeviceRequest, pucData);
}

/*********************************************************************************************************
** Function name:       usbSetConfiguratiton
** Descriptions:        设置配置值请求
** input parameters:    None
** output parameters:   None
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbSetConfiguratiton (void)
{
    USB_INT8U          ucErrCode;
    USB_DEV_REQ usbDeviceRequest;
    
    USBDEBUG_SENDSTR("...usbSetConfiguratiton :  ");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_HOST_TO_DEVICE | __USB_STANDARD_REQUEST | 
                                      __USB_RECIPIENT_DEVICE);
    usbDeviceRequest.bRequest      = __USB_REQUEST_SET_CONFIGURATION;
    usbDeviceRequest.wValue        = GusbConfigDescr.bConfigurationValue;        
    usbDeviceRequest.wIndex        = 0;
    usbDeviceRequest.wLength       = 0;
    
    ucErrCode = usbStandardReqTransfer(&usbDeviceRequest, NULL);
    if (ucErrCode) {
        USBDEBUG_SENDSTR("...usbSetConfiguratiton failed!");
        return ucErrCode;
    }
    
    USBDEBUG_SENDCHAR((USB_INT8U)(usbDeviceRequest.wValue + 0x30));
    USBDEBUG_SENDSTR("\r\n");
    
    GusbHostFlags.ucConfiged = 1;                                       /*  标记设备已配置              */
    
    return USB_ERR_SUCESS;
}


/*********************************************************************************************************
** Function name:       usbGetInterface
** Descriptions:        读取指定接口的设置值,即接口描述符中的bAlternateSetting字段值
** input parameters:    wIndex  接口号
** output parameters:   pucData 返回的bAlternateSetting字段值
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbGetInterface (USB_INT16U wIndex, USB_INT8U *pucData)
{
    /*
     *  此函数尚未测试  
     */
    USB_DEV_REQ usbDeviceRequest;
    
    USBDEBUG_SENDSTR("...usbGetInterface\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_DEVICE_TO_HOST | __USB_STANDARD_REQUEST | 
                                      __USB_RECIPIENT_DEVICE);
    usbDeviceRequest.bRequest      = __USB_REQUEST_GET_INTERFACE;
    usbDeviceRequest.wValue        = 0;
    usbDeviceRequest.wIndex        = wIndex;
    usbDeviceRequest.wLength       = 1;
    
    return usbStandardReqTransfer(&usbDeviceRequest, pucData);
}

/*********************************************************************************************************
** Function name:       usbSetInterface
** Descriptions:        设置接口请求,与usbGetInterface相对应
** input parameters:    wValue  可替换的设置值
**                      wIndex  接口号
** output parameters:   None
** Returned value:      传输错误码  成功 : USB_ERR_SUCESS, 其余为错误
*********************************************************************************************************/
USB_INT8U usbSetInterface (USB_INT16U wValue, USB_INT16U wIndex)
{
    /*
     *  此函数尚未测试  
     */
    USB_DEV_REQ usbDeviceRequest;
    
    if (GusbHostFlags.ucConfiged == 0) {                                /*  仅在USB设备处在配置状态时   */
        return FALSE;                                                   /*  ...才能设置接口             */
    }
    
    USBDEBUG_SENDSTR("...usbSetInterface\r\n");
    
    usbMemSet(&usbDeviceRequest, 0, sizeof (USB_DEV_REQ));
    
    usbDeviceRequest.bmRequestType = (USB_INT8U)(__USB_HOST_TO_DEVICE | __USB_STANDARD_REQUEST | 
                                      __USB_RECIPIENT_INTERFACE);
    usbDeviceRequest.bRequest      = __USB_REQUEST_SET_INTERFACE;
    usbDeviceRequest.wValue        = wValue;
    usbDeviceRequest.wIndex        = wIndex;
    usbDeviceRequest.wLength       = 0;
    
    return usbStandardReqTransfer(&usbDeviceRequest, NULL);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -