void CUSB30Device::OnCbOpenDev(CString &info) { CCyUSBDevice *pUSBDevice = m_pUSBDevice; CString csBuf; pUSBDevice->Open(0); info = pUSBDevice->FriendlyName; csBuf.Format(_T("; 设备PID:0x%04X; "), pUSBDevice->ProductID); info += csBuf; csBuf.Empty(); csBuf.Format(_T("设备VID:0x%04X; "), pUSBDevice->VendorID); info += csBuf; csBuf.Empty(); if (pUSBDevice->bSuperSpeed) { csBuf = _T("设备类型:USB3.0超速设备"); } else if (pUSBDevice->bHighSpeed) { csBuf = _T("设备类型:USB2.0高速设备"); } else { csBuf = _T("设备类型:USB1.1全速设备"); } info += csBuf; //WriteInfoTxt(info); //pUSBDevice->Close(); }
static int cyapi_change_setting(void *driver, uint8_t setting) { CCyUSBDevice *dev = get_device(driver); if (dev->SetAltIntfc(setting)) { return 0; } else { return BLADERF_ERR_IO; } }
static int cyapi_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { CCyUSBDevice *dev = new CCyUSBDevice(NULL, driver_guid); if (dev == NULL) { return BLADERF_ERR_MEM; } for (int i = 0; i < dev->DeviceCount(); i++) { struct bladerf_devinfo info; bool opened; int status; opened = dev->Open(i); if (opened) { if (device_matches_target(dev, probe_target)) { const size_t max_serial = sizeof(info.serial) - 1; info.instance = i; memset(info.serial, 0, sizeof(info.serial)); wcstombs(info.serial, dev->SerialNumber, max_serial); info.usb_addr = dev->USBAddress; info.usb_bus = 0; /* CyAPI doesn't provide this */ info.backend = BLADERF_BACKEND_CYPRESS; status = bladerf_devinfo_list_add(info_list, &info); if (status != 0) { log_error("Could not add device to list: %s\n", bladerf_strerror(status)); } else { log_verbose("Added instance %d to device list\n", info.instance); } } dev->Close(); } } delete dev; return 0; }
bool CUSB30Device::Refresh(CString &info) { CCyUSBDevice * pUSBDevice = m_pUSBDevice; bool ok = false; m_oSemAccessCyCtrl.Lock(); //确保存在至少一个USB器件 if (pUSBDevice->DeviceCount()) { /* //搜寻所有已连接的器件并将它们添加到器件列表。 for (int i = 0; i < pUSBDevice->DeviceCount(); i++) { pUSBDevice->Open(i); } pUSBDevice->Close(); ::Sleep(100); */ //pUSBDevice->Open(0); if (IsUSB20()) { InitFirmware(); } OnCbOpenDev(info); ok = true; } else { //MessageBox(_T("未检测到USB设备!\r\n\r\n有可能驱动还没连接完毕,请多尝试几次!"),_T("消息"), MB_OK | MB_ICONINFORMATION); //WriteInfoTxt(_T("未检测到USB设备! 有可能驱动还没连接完毕,请多尝试几次!"), INFO_WARNING); info = _T("未检测到USB设备! 有可能驱动还没连接完毕,请多尝试几次!"); } m_oSemAccessCyCtrl.Unlock(); return ok; }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ////////////////////////////////////////////////////////////////////////////////////////////////////// CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL); CCyBulkEndPoint *BulkInEndPt = NULL; CCyBulkEndPoint *BulkOutEndPt = NULL; ////////////////////////////////////////////////////////////////////////////////////////////////////// int eptCount = USBDevice->EndPointCount(); cout << "Cantidad de endpoints activos (incluyendo el de control) : " << eptCount << endl; // Skip EndPoints[0], which we know is the control endpoint for (int i=1; i<eptCount; i++) { bool bIn = ((USBDevice->EndPoints[i]->Address & 0x80)==0x80); bool bBulk = (USBDevice->EndPoints[i]->Attributes == 2); if (bBulk && bIn) BulkInEndPt = (CCyBulkEndPoint *) USBDevice->EndPoints[i]; if (bBulk && !bIn) BulkOutEndPt = (CCyBulkEndPoint *) USBDevice->EndPoints[i]; } for (int e=1; e<eptCount; e++) { CCyUSBEndPoint *ept = USBDevice->EndPoints[e]; char s[100]={""}, *t, u[10]={""}; // INTR, BULK and ISO endpoints are supported. if ((ept->Attributes >= 1) && (ept->Attributes <= 3)) { //cout << int(ept->Attributes) << endl; // Tira "2" -> es BULK (0 Control, 1 ISOCHRONOUS y 3 INTERRUPT) if (ept->Attributes == 1) t="ISOC "; else if (ept->Attributes == 2) t="BULK "; else t="INTR "; strcat(s, t); strcat(s,ept->bIn ? "IN, " : "OUT, "); t=itoa(ept->MaxPktSize,u,10); strcat(s,t); strcat(s," Bytes,"); t=itoa(ept->ssmaxburst,u,10); if((USBDevice->BcdUSB = 0x0300)) { strcat(s, t); strcat(s," MaxBurst, ("); } t=itoa(e,u,10); strcat(s,t); strcat(s, " - "); strcat(s,"0x"); t=itoa(ept->Address,u,16); strcat(s,t); strcat(s,")"); cout << s << endl; this->ui->Endpoint_comboBox->addItem(s); } //cout << USBDevice->EndPoints[e] << endl; Mostrador de endpoints. } ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Unidad de tiempo estandar, microsegundo. // // Genera un PWM de 16 bits (todos 1s o 0s) cada 100ms, tiene alguna varianza pero no va acumulando error. // Arranca el contador del PC y setea el periodo del PWM. Va muestreando el tiempo 0 < t < T_pwm (1 segundo). // Si t < T_on, escribe el 1, en otro caso, en 0. // Luego entra en un loop que duerme 1ms y muestrea t. Sale del loop si t es mayor al tiempo de muestreo (100ms) // Vuelve a muestrear t y lo compara con T_on y escribe 1 o 0 correspondientemente y vuelve al loop de delay. // Si o si tiene que dormir o la compu se cuelga MAL (anda, pero se traba todo el qtcreator). const int packetSize = 4; LONG len = packetSize; //Si o si tienen q ser LONG unsigned char outBuffer[packetSize]; //Si o si tienen q ser unsigned char unsigned char inBuffer[packetSize]; unsigned char uno = 0xFFFF; unsigned char cero = 0x00; unsigned char buf; bool staOut, staIn; double T_pwm = 1000000; //1 segundo double D = 0.1; //Duty Cycle double T_on = D*T_pwm; //Tiempo en estado alto double t = 0; //Variable auxiliar double muestreo = 10000; //Variable de muestreo de la señal (10ms) double u = 0; int i=0; int cont=0; StartCounter(); t=CounterStart; /*while( 1 ) { t = fmod(GetCounter(),T_pwm); //cout << ((t < T_on) ? 0x0001 : 0x0000) << endl; u=0; buf = ((t < T_on) ? uno : cero); for ( i = 0; i < len ; i++ ) outBuffer[i] = buf ; //staOut = USBDevice->BulkOutEndPt->XferData(outBuffer, len); //cout << outBuffer << " " << staOut << endl; while( u < muestreo ) { //Sleep(1); staOut = USBDevice->BulkOutEndPt->XferData(outBuffer, len); u=fmod(GetCounter(),T_pwm); } //staIn = USBDevice->BulkInEndPt->XferData(inBuffer, len); // Hay que recorger el paquete si o si o el buffer se llena. //cout << staIn << endl; //cont++; if(cont == 1) { cout << "Salio: " << outBuffer << endl; //" ; Entro: " << inBuffer << endl; cont=0; } //staIn = USBDevice->BulkInEndPt->XferData(inBuffer, len); //cout << "Salio: " << outBuffer << endl; //" ; Entro: " << inBuffer << endl; staIn = USBDevice->BulkOutEndPt->Reset(); }*/ while(1) { /*//for (i=0;i<1000;i++){ staOut = USBDevice->BulkOutEndPt->XferData(&uno, len); usleep(1000); //t = fmod(GetCounter(),T_pwm); //cout << t << endl; //} //for (i=0;i<1000;i++){ staIn = USBDevice->BulkOutEndPt->XferData(&cero, len); usleep(1000); //}*/ t = GetCounter(); if((t-u)/PCFreq > 500) { u=t; staOut = USBDevice->BulkOutEndPt->XferData(&uno, len); } } /*for (int i=0; i<packetSize; i++) outBuffer[i] = i; for (int cont=1;cont < 100000; cont++) staOut = USBDevice->BulkOutEndPt->XferData(outBuffer, len); staIn = USBDevice->BulkInEndPt->XferData(inBuffer, len); USBDevice->Close(); // (9)*/ ////////////////////////////////////////////////////////////////////////////////////////////////////// this->connect(this->ui->Start_pushButton, SIGNAL(clicked()), this, SLOT(Start_pushButton_click())); }