LPCUSBSIO_API int32_t I2C_CancelAllRequest(LPC_HANDLE handle) { LPCUSBSIO_I2C_Ctrl_t *dev = (LPCUSBSIO_I2C_Ctrl_t *) handle; uint32_t lMapLenght = 0x00, i; LPCUSBSIO_Request_t** lRequest = NULL; void* Notifier = NULL; framework_LockMutex(dev->RequestMapLock); //1rst call => we get map lenght map_getAll(dev->request_map, NULL, (int*)&lMapLenght); lRequest = framework_AllocMem(lMapLenght * sizeof(LPCUSBSIO_Request_t)); //2nd call => we get all object in map map_getAll(dev->request_map, (void **) lRequest, (int*) &lMapLenght); for (i = 0x00; i < lMapLenght; i++) { //Cancel request if (NULL != (*lRequest)[i].notifier) { (*lRequest)[i].status = LPCUSBSIO_REQ_CANCELED; Notifier = (*lRequest)[i].notifier; framework_LockMutex(Notifier); framework_NotifyMutex(Notifier, 0); framework_UnlockMutex(Notifier); Notifier = NULL; } } framework_FreeMem(lRequest); framework_UnlockMutex(dev->RequestMapLock); return 0; }
static void freeDevice(LPCUSBSIO_I2C_Ctrl_t *dev) { LPCUSBSIO_I2C_Ctrl_t *curDev = g_Ctrl.devList; if (curDev == dev) { g_Ctrl.devList = dev->next; } else { while (curDev) { if (curDev->next == dev) { /* update linked list */ curDev->next = dev->next; break; } } } framework_FreeMem(dev); /* unload HID library if all devices are closed. */ if (g_Ctrl.devList == NULL) { hid_free_enumeration(g_Ctrl.devInfoList); hid_exit(); } }
void framework_DeleteMutex(void * mutexHandle) { tLinuxMutex_t *mutex = (tLinuxMutex_t*)mutexHandle; pthread_mutex_destroy(mutex->lock); pthread_cond_destroy(mutex->cond); framework_FreeMem(mutex); }
eResult framework_CreateThread(void** threadHandle, void * (* threadedFunc)(void *) , void * ctx) { tLinuxThread_t *linuxThread = (tLinuxThread_t *)framework_AllocMem(sizeof(tLinuxThread_t)); linuxThread->ctx = ctx; linuxThread->threadedFunc = threadedFunc; framework_CreateMutex(&(linuxThread->mutexCanDelete)); if (pthread_create(&(linuxThread->thread), NULL, thread_object_func, linuxThread)) { printf("Cannot create Thread\n"); framework_DeleteMutex(linuxThread->mutexCanDelete); framework_FreeMem(linuxThread); return FRAMEWORK_FAILED; } pthread_detach(linuxThread->thread); *threadHandle = linuxThread; return FRAMEWORK_SUCCESS; }
void framework_DeleteThread(void * threadHandle) { tLinuxThread_t *linuxThread = (tLinuxThread_t*)threadHandle; framework_DeleteMutex(linuxThread->mutexCanDelete); framework_FreeMem(linuxThread); }