Exemple #1
0
void soft_reset_print( ) {  /* 控制传输:软复位打印机 */
	tog_send=tog_recv=0;  /* 复位USB数据同步标志 */
	toggle_send( 0 );  /* SETUP阶段为DATA0 */
	buffer[0]=0x21; buffer[1]=2; buffer[2]=buffer[3]=buffer[4]=buffer[5]=buffer[6]=buffer[7]=0;  /* SETUP数据,SOFT_RESET */
	wr_usb_data( 8, buffer );  /* SETUP数据总是8字节 */
	if ( issue_token( ( 0 << 4 ) | DEF_USB_PID_SETUP )==USB_INT_SUCCESS ) {  /* SETUP阶段操作成功 */
		toggle_recv( 1 );  /* STATUS阶段,准备接收DATA1 */
		if ( issue_token( ( 0 << 4 ) | DEF_USB_PID_IN )==USB_INT_SUCCESS ) return;  /* STATUS阶段操作成功,操作成功返回 */
	}
}
Exemple #2
0
unsigned char get_port_status( ) {  /* 查询打印机端口状态,返回状态码,如果为0FFH则说明操作失败 */
/* 返回状态码中: 位5(Paper Empty)为1说明无纸, 位4(Select)为1说明打印机联机, 位3(Not Error)为0说明打印机出错 */
	toggle_send( 0 );  /* 下面通过控制传输获取打印机的状态, SETUP阶段为DATA0 */
	buffer[0]=0xA1; buffer[1]=1; buffer[2]=buffer[3]=buffer[4]=buffer[5]=0; buffer[6]=1; buffer[7]=0;  /* SETUP数据,GET_PORT_STATUS */
	wr_usb_data( 8, buffer );  /* SETUP数据总是8字节 */
	if ( issue_token( ( 0 << 4 ) | DEF_USB_PID_SETUP )==USB_INT_SUCCESS ) {  /* SETUP阶段操作成功 */
		toggle_recv( 1 );  /* DATA阶段,准备接收DATA1 */
		if ( issue_token( ( 0 << 4 ) | DEF_USB_PID_IN )==USB_INT_SUCCESS ) {  /* DATA阶段操作成功 */
			rd_usb_data( buffer );  /* 读出接收到的数据,通常只有1个字节 */
			toggle_send( 1 );  /* STATUS阶段为DATA1 */
			wr_usb_data( 0, buffer );  /* 发送0长度的数据说明控制传输成功 */
			if ( issue_token( ( 0 << 4 ) | DEF_USB_PID_OUT )==USB_INT_SUCCESS ) return( buffer[0] );  /* 返回状态码 */
		}
	}
	return( 0xFF );  /* 返回操作失败 */
}
Exemple #3
0
unsigned char MeUsb::host_recv()
{
  unsigned char irq;
  toggle_recv();
  irq = issue_token( ( endp_in_addr << 4 ) | DEF_USB_PID_IN );
  if(irq==USB_INT_SUCCESS){
    int len = rd_usb_data(RECV_BUFFER);
#ifdef USB_DBG
    for(int i=0;i<len;i++){
      // point hid device
      Serial.print("0x");
      Serial.println((int)RECV_BUFFER[i],HEX);
    }
    Serial.println();
#endif
    stallCount = 0;
    return len;
  }else if(irq==USB_INT_DISCONNECT){
    device_online = false;
    device_ready = false;
#ifdef USB_DBG   
    Serial.println("##### disconn #####");
#endif
    return 0;
  }else{
    clr_stall6();
#ifdef USB_DBG   
    Serial.println("##### stall #####");
#endif
    delay(10);
    /*
    stallCount++;
    if(stallCount>10){
      device_online = false;
      device_ready = false;
      resetBus();
    }
    */
    return 0;
  }
}