void ipcon_device_create(Device *device, const char *uid) { int i; for(i = 0; i < MAX_NUM_CALLBACKS; i++) { device->registered_callbacks[i] = NULL; device->callback_wrappers[i] = NULL; } device->uid = ipcon_base58decode(uid); device->ipcon = NULL; device->response.function_id = 0; device->response.length = 0; #ifdef _WIN32 InitializeCriticalSection(&device->write_mutex); // Default state for response semaphore is empty device->response_semaphore = CreateSemaphore(NULL, 0, 1, NULL); #else pthread_mutex_init(&device->write_mutex, NULL); pthread_mutex_init(&device->response_mutex, NULL); pthread_cond_init(&device->response_cond, NULL); device->response_flag = false; #endif }
void ipcon_device_create(Device *device, const char *uid) { int i; for(i = 0; i < MAX_NUM_CALLBACKS; i++) { device->callbacks[i] = NULL; device->device_callbacks[i] = NULL; } device->uid = ipcon_base58decode(uid); device->ipcon = NULL; device->answer.function_id = 0; device->answer.length = 0; #ifdef _WIN32 device->sem_write = CreateSemaphore(NULL,1,1,NULL); // Default state for answer semaphore is locked device->sem_answer = CreateSemaphore(NULL,0,1,NULL); #else pthread_mutex_init(&device->sem_write, NULL); pthread_mutex_init(&device->sem_answer, NULL); pthread_cond_init(&device->cond, NULL); device->sem_answer_flag = false; #endif }