mirror of https://github.com/EspoTek/Labrador.git
76 lines
2.4 KiB
C++
76 lines
2.4 KiB
C++
#include "androidusbdriver.h"
|
|
|
|
androidUsbDriver::androidUsbDriver(QWidget *parent) : unixUsbDriver(parent)
|
|
{
|
|
qDebug() << "androidUsbDriver object created!";
|
|
mainActivity = QtAndroid::androidActivity();
|
|
}
|
|
|
|
androidUsbDriver::~androidUsbDriver(void){
|
|
qDebug() << "\n\nandroidUsbDriver destructor ran!";
|
|
mainActivity.callMethod<void>("closeDevice");
|
|
}
|
|
|
|
unsigned char androidUsbDriver::usbInit(unsigned long VIDin, unsigned long PIDin){
|
|
qDebug() << "Entering androidUsbDriver::usbInit";
|
|
|
|
mainActivity.callMethod<void>("nonStaticTest");
|
|
|
|
qDebug() << "If you cannot see 'nonStaticTest' above, then the _______JAVA CLASS DOES NOT EXIST____";
|
|
|
|
|
|
mainActivity.callMethod<void>("findDevice");
|
|
|
|
QAndroidJniObject usbfs_path_java = mainActivity.getObjectField<jstring>("usbfs_path");
|
|
QString usbfs_path_qstring = usbfs_path_java.toString();
|
|
char *usbfs_path = usbfs_path_qstring.toUtf8().data();
|
|
|
|
jint file_descriptor_java = mainActivity.getField<jint>("file_descriptor");
|
|
int file_descriptor = (int)file_descriptor_java;
|
|
|
|
qDebug() << "usbfs path = " << usbfs_path;
|
|
qDebug() << "file descriptor = " << file_descriptor;
|
|
|
|
if(file_descriptor == -69){
|
|
qDebug() << "DEVICE NOT DETECTED";
|
|
return -69;
|
|
}
|
|
|
|
int error = libusb_init(&ctx);
|
|
if(error){
|
|
qDebug() << "libusb_init FAILED";
|
|
return error;
|
|
} else qDebug() << "Libusb context initialised";
|
|
|
|
libusb_set_debug(ctx, 3);
|
|
|
|
qDebug() << "Opening Device!";
|
|
libusb_device * device_ptr = libusb_get_device2(ctx, usbfs_path);
|
|
error = libusb_open2(device_ptr, &handle, file_descriptor);
|
|
if(error){
|
|
qDebug() << "ERROR OPENING DEVICE";
|
|
return error;
|
|
}
|
|
qDebug() << "Device Found!!";
|
|
/*qDebug("Looking for device %x:%x", VIDin, PIDin);
|
|
handle = libusb_open_device_with_vid_pid(ctx, VIDin, PIDin);
|
|
if(handle==NULL){
|
|
qDebug() << "DEVICE NOT FOUND";
|
|
return -1;
|
|
}
|
|
qDebug() << "Device found!!";
|
|
*/
|
|
qDebug() << (libusb_kernel_driver_active(handle, 0) ? "KERNEL DRIVER ACTIVE" : "KERNEL DRIVER INACTIVE");
|
|
if(libusb_kernel_driver_active(handle, 0)){
|
|
libusb_detach_kernel_driver(handle, 0);
|
|
}
|
|
error = libusb_claim_interface(handle, 0);
|
|
if(error){
|
|
qDebug() << "libusb_claim_interface FAILED";
|
|
qDebug() << "ERROR" << error << libusb_error_name(error);
|
|
return error;
|
|
} else qDebug() << "Interface claimed!";
|
|
|
|
return 0;
|
|
}
|