QString pjrc_rawhid::getserial(int num) { hid_t *hid = get_hid(num); if (!hid) return ""; if (!hid->handle) return ""; // Should we do some "critical section" stuff here?? char temp[126]; if (!HidD_GetSerialNumberString(hid->handle, temp, sizeof(temp))) { DWORD err = GetLastError(); print_win32_err(err); if (err == ERROR_DEVICE_NOT_CONNECTED) { // the device has been unplugged hid_close(hid); emit deviceUnplugged(num); return ""; } return QString("Error"); } return QString().fromUtf16((ushort*)temp,-1); }
void NfcDeviceManager::removeDevice(uchar id,QString name) { (void)name; // no warning! for(int i=0; i<_devices.size(); i++) { if(id == _devices.at(i)->getId()) { _devices.removeAt(i); _devicesName.removeAll(name); } } emit deviceUnplugged(id,name); }
NfcDeviceManager::NfcDeviceManager() { _iface = new NfcDeviceManagerInterface("org.nfc_tools.nfcd", "/nfcd", QDBusConnection::systemBus(), this); if(!_iface->isValid()) qDebug("please launch nfcd"); else { QStringList devicesList = _iface->getDeviceList(); for(int i=0; i<devicesList.size(); i++) { QString path = _iface->getDevicePathByName(devicesList.at(i)).value(); NfcDevice* dev = new NfcDevice(path); _devicesName << dev->getName(); _devices.append( dev ); } } QObject::connect(_iface, SIGNAL(devicePlugged(uchar,QString)), this, SLOT(addDevice(uchar,QString)) ); QObject::connect(_iface, SIGNAL(deviceUnplugged(uchar,QString)), this, SLOT(removeDevice(uchar,QString)) ); }
//! Called on a dettach event void pjrc_rawhid::dettach(IOHIDDeviceRef d) { unplugged = true; if (d == dev) emit deviceUnplugged(0); }
// send - send a packet // Inputs: // num = device to transmit to (zero based) // buf = buffer containing packet to send // len = number of bytes to transmit // timeout = time to wait, in milliseconds // Output: // number of bytes sent, or -1 on error // int pjrc_rawhid::send(int num, void *buf, int len, int timeout) { OVERLAPPED ov; DWORD n, r; hid_t *hid = get_hid(num); if (!hid) return -1; if (!hid->handle) return -1; // qDebug("Send: Handle address: %li for num: %i", (long int) hid->handle, num); EnterCriticalSection(&tx_mutex); ResetEvent(&tx_event); memset(&ov, 0, sizeof(ov)); ov.hEvent = tx_event; // qDebug("Trying to write %u bytes. First %x second %x",len, *((char *) buf), *((char *)buf + 1)); if (!WriteFile(hid->handle, buf, len, NULL, &ov)) { DWORD err = GetLastError(); if (err == ERROR_DEVICE_NOT_CONNECTED) { // the device has been unplugged hid_close(hid); LeaveCriticalSection(&tx_mutex); emit deviceUnplugged(num); return -1; } if (err == ERROR_SUCCESS || err == ERROR_IO_PENDING) { // qDebug("Waiting for write to finish"); r = WaitForSingleObject(tx_event, timeout); if (r == WAIT_TIMEOUT) { CancelIo(hid->handle); LeaveCriticalSection(&tx_mutex); return 0; } if (r != WAIT_OBJECT_0) { DWORD err = GetLastError(); print_win32_err(err); LeaveCriticalSection(&tx_mutex); return -1; } } else { // qDebug("Error writing to file"); print_win32_err(err); LeaveCriticalSection(&tx_mutex); return -1; } } if (!GetOverlappedResult(hid->handle, &ov, &n, FALSE)) { DWORD err = GetLastError(); qDebug("Problem getting overlapped result"); print_win32_err(err); if (err == ERROR_DEVICE_NOT_CONNECTED) { // the device has been unplugged hid_close(hid); LeaveCriticalSection(&tx_mutex); emit deviceUnplugged(num); return -1; } } LeaveCriticalSection(&tx_mutex); if (n <= 0) return -1; return n; }
// recveive - receive a packet // Inputs: // num = device to receive from (zero based) // buf = buffer to receive packet // len = buffer's size // timeout = time to wait, in milliseconds // Output: // number of bytes received, or -1 on error // int pjrc_rawhid::receive(int num, void *buf, int len, int timeout) { OVERLAPPED ov; DWORD n; hid_t *hid = get_hid(num); if (!hid) return -1; if (!hid->handle) return -1; EnterCriticalSection(&rx_mutex); ResetEvent(&rx_event); memset(&ov, 0, sizeof(ov)); ov.hEvent = rx_event; if (!ReadFile(hid->handle, buf, len, NULL, &ov)) { DWORD err = GetLastError(); if (err == ERROR_DEVICE_NOT_CONNECTED) { // the device has been unplugged print_win32_err(err); hid_close(hid); LeaveCriticalSection(&rx_mutex); emit deviceUnplugged(num); return -1; } if (err != ERROR_IO_PENDING) { print_win32_err(err); LeaveCriticalSection(&rx_mutex); return -1; } DWORD r = WaitForSingleObject(rx_event, timeout); if (r == WAIT_TIMEOUT) { CancelIo(hid->handle); LeaveCriticalSection(&rx_mutex); return 0; } if (r != WAIT_OBJECT_0) { DWORD err = GetLastError(); print_win32_err(err); LeaveCriticalSection(&rx_mutex); return -1; } } if (!GetOverlappedResult(hid->handle, &ov, &n, FALSE)) { DWORD err = GetLastError(); print_win32_err(err); if (err == ERROR_DEVICE_NOT_CONNECTED) { // the device has been unplugged hid_close(hid); LeaveCriticalSection(&rx_mutex); emit deviceUnplugged(num); return -1; } LeaveCriticalSection(&rx_mutex); return -1; } LeaveCriticalSection(&rx_mutex); if (n <= 0) return -1; // qDebug("Received %i bytes, first %x, second %x", len, *((char *) buf),*((char *)buf + 1)); if ((int)n > len) n = len; return n; }
void Videostreaming::capFrame() { __u32 buftype = m_buftype; v4l2_plane planes[VIDEO_MAX_PLANES]; v4l2_buffer buf; unsigned char *tempSrcBuffer = NULL, *tempDestBuffer = NULL, *copyDestBuffer = NULL; unsigned char *tempCu130DestBuffer = NULL, *tempCu130SrcBuffer = NULL; unsigned char *tempCu40DestBuffer = NULL, *irBuffer = NULL; unsigned char *tempLogtechSrcBuffer = NULL, *tempLogtechDestBuffer = NULL; unsigned char *displaybuf = NULL; unsigned short int *tempCu40SrcBuffer = NULL; //Modified by Nithyesh //Previously it was int err = 0, x, y; int err = 0; __u32 x, y; bool again, v4l2convert = false; memset(planes, 0, sizeof(planes)); buf.length = VIDEO_MAX_PLANES; buf.m.planes = planes; if (!dqbuf_mmap(buf, buftype, again)) { closeDevice(); unsigned char *m_data=NULL; QImage tempImage(m_data,320,240,QImage::Format_RGB888); qImage = QPixmap::fromImage(tempImage); update(); emit deviceUnplugged("Disconnected","Device Not Found"); emit logCriticalHandle("Device disconnected"); return; } if (again) { return; } if (buf.flags & V4L2_BUF_FLAG_ERROR) { qbuf(buf); return; } #if 0 switch(m_capSrcFormat.fmt.pix.pixelformat) { case V4L2_PIX_FMT_YUYV: { if((width*height*2) == buf.bytesused){ validFrame = true; } } break; case V4L2_PIX_FMT_SGRBG8:{ // if bayer - 8 bit camera // { if ((width*height) == buf.bytesused) validFrame = true; // } // if bayer - 8 bit + pad camera // { if ((width*height*2) == buf.bytesused) validFrame = true; // } } break; case V4L2_PIX_FMT_MJPEG:{ validFrame = true; break; } default: // To do: for other color spaces break; } if (validFrame != true){ qbuf(buf); qDebug()<<"validFrame != true"; // return; } #endif if (camDeviceName == "e-con's CX3 RDK with M\nT9P031" || camDeviceName == "See3CAM_12CUNIR" || camDeviceName == "See3CAM_CU51") { tempSrcBuffer = (unsigned char *)malloc(width * height * 2); tempDestBuffer = (unsigned char *)malloc(width * height << 1); copyDestBuffer = tempDestBuffer; memcpy(tempSrcBuffer, m_buffers[buf.index].start[0], buf.bytesused); for(__u32 l=0; l<(width*height*2); l=l+2) /* Y16 to YUYV conversion */ { *tempDestBuffer++ = (((tempSrcBuffer[l] & 0xF0) >> 4) | (tempSrcBuffer[l+1] & 0x0F) << 4); *tempDestBuffer++ = 0x80; } m_capSrcFormat.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; err = v4lconvert_convert(m_convertData, &m_capSrcFormat, &m_capDestFormat, (unsigned char *)copyDestBuffer, buf.bytesused, m_capImage->bits(), m_capDestFormat.fmt.pix.sizeimage); v4l2convert = true; }else if (camDeviceName == "See3CAM_CU40") {