Fix sync issues with CmaClient and commented out some logging.

This commit is contained in:
codestation
2013-08-20 22:08:50 -04:30
parent bdb854808b
commit dc73bc3b23
4 changed files with 39 additions and 12 deletions

View File

@@ -32,8 +32,10 @@
QMutex CmaClient::mutex; QMutex CmaClient::mutex;
QMutex CmaClient::runner; QMutex CmaClient::runner;
QMutex CmaClient::eloop;
Database CmaClient::db; Database CmaClient::db;
bool CmaClient::is_running = true; bool CmaClient::is_running = true;
bool CmaClient::event_loop_enabled = true;
metadata_t CmaClient::g_thumbmeta = {0, 0, 0, NULL, NULL, 0, 0, 0, Thumbnail, {{18, 144, 80, 0, 1, 1.0f, 2}}, NULL}; metadata_t CmaClient::g_thumbmeta = {0, 0, 0, NULL, NULL, 0, 0, 0, Thumbnail, {{18, 144, 80, 0, 1, 1.0f, 2}}, NULL};
CmaClient *CmaClient::this_object = NULL; CmaClient *CmaClient::this_object = NULL;
@@ -57,21 +59,37 @@ void CmaClient::setRunning(bool state)
is_running = state; is_running = state;
} }
bool CmaClient::isEventLoopEnabled()
{
QMutexLocker locker(&eloop);
return event_loop_enabled;
}
void CmaClient::setEventLoop(bool state)
{
QMutexLocker locker(&eloop);
event_loop_enabled = state;
}
void CmaClient::connectUsb() void CmaClient::connectUsb()
{ {
vita_device_t *vita; vita_device_t *vita;
int num_tries = 0; //int num_tries = 0;
qDebug() << "Starting usb_thread:" << QThread::currentThreadId(); qDebug() << "Starting usb_thread:" << QThread::currentThreadId();
while(isRunning()) { while(isRunning()) {
if((vita = VitaMTP_Get_First_USB_Vita()) !=NULL) { if((vita = VitaMTP_Get_First_USB_Vita()) !=NULL) {
cancel_wireless = 1;
processNewConnection(vita); processNewConnection(vita);
} else { } else {
qDebug("No Vita detected via USB, attempt %i", ++num_tries); //qDebug("No Vita detected via USB, attempt %i", +num_tries++);
if(mutex.tryLock()) { if(mutex.tryLock()) {
mutex.unlock(); mutex.unlock();
Sleeper::msleep(2000); Sleeper::msleep(2000);
} else {
mutex.lock();
mutex.unlock();
} }
} }
} }
@@ -86,16 +104,18 @@ void CmaClient::connectWireless()
wireless_host_info_t host; wireless_host_info_t host;
host.port = QCMA_REQUEST_PORT; host.port = QCMA_REQUEST_PORT;
typedef CmaClient CC; typedef CmaClient CC;
cancel_wireless = 0;
qDebug() << "Starting wireless_thread:" << QThread::currentThreadId(); qDebug() << "Starting wireless_thread:" << QThread::currentThreadId();
while(isRunning()) { while(isRunning()) {
if((vita = VitaMTP_Get_First_Wireless_Vita(&host, 0, 2, CC::deviceRegistered, CC::generatePin)) != NULL) { if((vita = VitaMTP_Get_First_Wireless_Vita(&host, 0, &cancel_wireless, CC::deviceRegistered, CC::generatePin)) != NULL) {
processNewConnection(vita); processNewConnection(vita);
} else { } else {
qDebug("Wireless listener was cancelled"); qDebug("Wireless listener was cancelled");
mutex.lock();
// wait until the event loop of the usb thread is finished // wait until the event loop of the usb thread is finished
mutex.lock();
cancel_wireless = 0;
mutex.unlock(); mutex.unlock();
} }
} }
@@ -145,10 +165,11 @@ void CmaClient::enterEventLoop()
qDebug("Starting event loop"); qDebug("Starting event loop");
while(isRunning()) { setEventLoop(true);
while(isEventLoopEnabled()) {
if(VitaMTP_Read_Event(device, &event) < 0) { if(VitaMTP_Read_Event(device, &event) < 0) {
qWarning("Error reading event from Vita."); qWarning("Error reading event from Vita.");
setRunning(false); setEventLoop(false);
break; break;
} }
@@ -397,7 +418,7 @@ void CmaClient::vitaEventRequestTerminate(vita_event_t *event, int eventId)
{ {
qDebug("Event recieved in %s, code: 0x%x, id: %d", Q_FUNC_INFO, event->Code, eventId); qDebug("Event recieved in %s, code: 0x%x, id: %d", Q_FUNC_INFO, event->Code, eventId);
//qWarning("Event 0x%x unimplemented!", event->Code); //qWarning("Event 0x%x unimplemented!", event->Code);
setRunning(false); setEventLoop(false);
} }
void CmaClient::vitaEventUnimplementated(vita_event_t *event, int eventId) void CmaClient::vitaEventUnimplementated(vita_event_t *event, int eventId)
@@ -530,7 +551,7 @@ void CmaClient::vitaEventCancelTask(vita_event_t *event, int eventId)
int eventIdToCancel = event->Param2; int eventIdToCancel = event->Param2;
VitaMTP_CancelTask(device, eventIdToCancel); VitaMTP_CancelTask(device, eventIdToCancel);
qWarning("Event CancelTask (0x%x) unimplemented!", event->Code); qWarning("Event CancelTask (0x%x) unimplemented!", event->Code);
setRunning(false); setEventLoop(false);
} }
void CmaClient::vitaEventSendHttpObjectFromURL(vita_event_t *event, int eventId) void CmaClient::vitaEventSendHttpObjectFromURL(vita_event_t *event, int eventId)
@@ -986,6 +1007,7 @@ void CmaClient::close()
void CmaClient::stop() void CmaClient::stop()
{ {
CmaClient::setRunning(false); CmaClient::setRunning(false);
CmaClient::setEventLoop(false);
} }
CmaClient::~CmaClient() CmaClient::~CmaClient()

View File

@@ -47,6 +47,8 @@ public:
private: private:
static bool isRunning(); static bool isRunning();
static void setRunning(bool state); static void setRunning(bool state);
static bool isEventLoopEnabled();
static void setEventLoop(bool state);
void enterEventLoop(); void enterEventLoop();
void processNewConnection(vita_device_t *device); void processNewConnection(vita_device_t *device);
@@ -77,13 +79,16 @@ private:
static int deviceRegistered(const char *deviceid); static int deviceRegistered(const char *deviceid);
static int generatePin(wireless_vita_info_t *info, int *p_err); static int generatePin(wireless_vita_info_t *info, int *p_err);
int cancel_wireless;
CmaBroadcast broadcast; CmaBroadcast broadcast;
vita_device_t *device; vita_device_t *device;
static bool event_loop_enabled;
static bool is_running; static bool is_running;
static metadata_t g_thumbmeta; static metadata_t g_thumbmeta;
static CmaClient *this_object; static CmaClient *this_object;
static QMutex mutex; static QMutex mutex;
static QMutex runner; static QMutex runner;
static QMutex eloop;
signals: signals:
void receivedPin(int); void receivedPin(int);

View File

@@ -122,7 +122,7 @@ void CMARootObject::createFilter(metadata_t *filter, const char *name, int type)
filter->size = 0; filter->size = 0;
filter->dataType = static_cast<DataType>(Folder | Special); filter->dataType = static_cast<DataType>(Folder | Special);
filter->next_metadata = NULL; filter->next_metadata = NULL;
qDebug("Added filter %s to database with OHFI %d (%s)", name, filter->ohfi, metadata.name); //qDebug("Added filter %s to database with OHFI %d (%s)", name, filter->ohfi, metadata.name);
} }
int CMARootObject::getFilters(metadata_t **p_head) int CMARootObject::getFilters(metadata_t **p_head)

View File

@@ -121,7 +121,7 @@ int Database::scanRootDirectory(root_list &list, int ohfi_type)
CMAObject *obj = new CMAObject(getParent(last_dir, info.path())); CMAObject *obj = new CMAObject(getParent(last_dir, info.path()));
obj->initObject(info); obj->initObject(info);
qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi); //qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi);
list << obj; list << obj;
if(obj->metadata.dataType & Folder) { if(obj->metadata.dataType & Folder) {
@@ -147,7 +147,7 @@ int Database::recursiveScanRootDirectory(root_list &list, CMAObject *parent, int
} else { } else {
CMAObject *obj = new CMAObject(parent); CMAObject *obj = new CMAObject(parent);
obj->initObject(info); obj->initObject(info);
qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi); //qDebug("Added %s to database with OHFI %d", obj->metadata.name, obj->metadata.ohfi);
list << obj; list << obj;
if(info.isDir()) { if(info.isDir()) {
total_objects += recursiveScanRootDirectory(list, obj, ohfi_type); total_objects += recursiveScanRootDirectory(list, obj, ohfi_type);