/* 电脑软件读出描述符 如下: Device Descriptor: bcdUSB: 0x0200 bDeviceClass: 0x00 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x40 (64) idVendor: 0x03F0 (Hewlett Packard) idProduct: 0xC402 bcdDevice: 0x0100 iManufacturer: 0x01 iProduct: 0x02 iSerialNumber: 0x03 bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Full Device Address: 0x01 Open Pipes: 6
Endpoint Descriptor: bEndpointAddress: 0x0A Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00
Endpoint Descriptor: bEndpointAddress: 0x8B Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00
Endpoint Descriptor: bEndpointAddress: 0x07 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00
Endpoint Descriptor: bEndpointAddress: 0x88 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00
Endpoint Descriptor: bEndpointAddress: 0x04 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00
Endpoint Descriptor: bEndpointAddress: 0x85 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 */
/* 采用外部固件方式 单片机读出打印机描述符 如下: 9 2 65 0 3 1 0 C0 1 9 4 0 0 2 7 1 2 0 7 5 0A 2 40 0 0 7 5 8B 2 40 0 0 9 4 1 0 2 FF FF FF 0 7 5 7 2 40 0 0 7 5 88 2 40 0 0 9 4 1 1 2 FF D4 0 0 7 5 7 2 40 0 0 7 5 88 2 40 0 0 9 4 2 0 2 8 6 50 0 7 5 4 2 40 0 0 7 5 85 2 40 0 0 */
if(status==USB_INT_SUCCESS) //操作成功则读出描述符并分析 { if(p_cfg_descr->itf_descr.bInterfaceClass!=7) return(UNKNOWN_USB_PRINT); if(p_cfg_descr->itf_descr.bInterfaceSubClass!=1 ) return(UNKNOWN_USB_PRINT); //不是USB打印机或者不符合USB规范 endp_out_addr=endp_in_addr=0; c=p_cfg_descr->endp_descr[0].bEndpointAddress; //第一个端点的地址 if(c&0x80) //IN端点的地址 endp_in_addr=c&0x0f; else //OUT端点 { endp_out_addr=c&0x0f; endp_out_size=p_cfg_descr->endp_descr[0].wMaxPacketSize; //数据接收端点的最大包长度 } if(p_cfg_descr->itf_descr.bNumEndpoints>=2) //接口有两个以上的端点 { if(p_cfg_descr->endp_descr[1].bDescriptorType==5 ) //端点描述符 { c=p_cfg_descr->endp_descr[1].bEndpointAddress; //第二个端点的地址 if(c&0x80) //IN端点 endp_in_addr=c&0x0f; else //OUT端点 { endp_out_addr=c&0x0f; endp_out_size=p_cfg_descr->endp_descr[1].wMaxPacketSize; } } } if(p_cfg_descr->itf_descr.bInterfaceProtocol<=1 ) endp_in_addr=0; //单向接口不需要IN端点 if(endp_out_addr==0) //不是USB打印机或者不符合USB规范 return(UNKNOWN_USB_PRINT); status=set_config( p_cfg_descr->cfg_descr.bConfigurationValue); //加载USB配置值 if(status==USB_INT_SUCCESS) { CH375_WR_CMD_PORT( CMD_SET_RETRY ); //设置USB事务操作的重试次数 CH375_WR_DAT_PORT( 0x25 ); CH375_WR_DAT_PORT( 0x89 ); //位7为1则收到NAK时无限重试, 位3~位0为超时后的重试次数 /* 如果单片机在打印机忙时并无事可做,建议设置位7为1, 使CH375在收到NAK时自动重试直到操作成功或者失败 */ /* 如果希望单片机在打印机忙时能够做其它事,那么应该 设置位7为0,使CH375在收到NAK时不重试,所以在下面 的USB通讯过程中,如果USB打印机正忙,issue_token 等子程序将得到状态码USB_INT_RET_NAK */ } } return(status); //status 返回 F1