//------------------------------------------------------------------------------ void MobiCoreDriverDaemon::processOpenDevice(Connection *connection) { MC_DRV_CMD_OPEN_DEVICE_struct cmdOpenDevice; RECV_PAYLOAD_FROM_CLIENT(connection, &cmdOpenDevice); // Check if device has been registered to the connection MobiCoreDevice *device = (MobiCoreDevice *) (connection->connectionData); if (NULL != device) { LOG_E("processOpenDevice(): device already set"); writeResult(connection, MC_DRV_ERR_DEVICE_ALREADY_OPEN); return; } LOG_I(" Opening deviceId %d ", cmdOpenDevice.deviceId); // Get device for device ID device = getDevice(cmdOpenDevice.deviceId); // Check if a device for the given name has been found if (device == NULL) { LOG_E("invalid deviceId"); writeResult(connection, MC_DRV_ERR_UNKNOWN_DEVICE); return; } // Register device object with connection device->open(connection); // Return result code to client lib (no payload) writeResult(connection, MC_DRV_OK); }
//------------------------------------------------------------------------------ void MobiCoreDriverDaemon::processOpenDevice( Connection *connection ) { do { // Read entire command data mcDrvCmdOpenDevicePayload_t cmdOpenDevicePayload; uint32_t rlen = connection->readData( &(cmdOpenDevicePayload), sizeof(cmdOpenDevicePayload)); if (rlen != sizeof(cmdOpenDevicePayload)) { LOG_E("processOpenDevice(): OpenSession length error: %d", rlen); writeResult(connection, MC_DRV_RSP_PAYLOAD_LENGTH_ERROR); break; } // Check if device has been registered to the connection MobiCoreDevice *device = (MobiCoreDevice *) (connection->connectionData); if (NULL != device) { LOG_E("processOpenDevice(): device already set"); writeResult(connection, MC_DRV_RSP_DEVICE_ALREADY_OPENED); break; } LOG_I("processOpenDevice(): deviceId is %d", cmdOpenDevicePayload.deviceId); // Get device for device ID device = getDevice(cmdOpenDevicePayload.deviceId); // Check if a device for the given name has been found if (NULL == device) { LOG_E("invalid deviceId"); writeResult(connection, MC_DRV_INVALID_DEVICE_NAME); break; } // Register device object with connection if (false == device->open(connection)) { LOG_E("processOpenDevice(): device->open() failed"); writeResult(connection, MC_DRV_RSP_FAILED); break; } // Return result code to client lib (no payload) writeResult(connection, MC_DRV_RSP_OK); } while (false); }