//------------------------------------------------------------------------------
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);
}