/** * @brief Get Camera capabilities * * This operation retrieves the list of capabilities of the Camera Module and * then returns to host. * * @param operation Pointer to structure of Greybus operation. * @return GB_OP_SUCCESS on success, error code on failure. */ static uint8_t gb_camera_capabilities(struct gb_operation *operation) { struct gb_camera_capabilities_response *response; const uint8_t *caps; size_t size; int ret; lldbg("gb_camera_capabilities() + \n"); if (info->state < STATE_UNCONFIGURED) { lldbg("state error %d \n", info->state); return GB_OP_INVALID; } /* Retrieve the capabilities and their size. */ ret = device_camera_capabilities(info->dev, &size, &caps); if (ret) { return gb_errno_to_op_result(ret); } if (size > GB_MAX_PAYLOAD_SIZE) { return GB_OP_NO_MEMORY; } response = gb_operation_alloc_response(operation, sizeof(*response) + size); if (!response) { return GB_OP_NO_MEMORY; } memcpy(response->capabilities, caps, size); lldbg("gb_camera_capabilities() - \n"); return GB_OP_SUCCESS; }
/** * @brief Get Camera capabilities * * This operation retrieves the list of capabilities of the Camera Module and * then returns to host. * * @param operation Pointer to structure of Greybus operation. * @return GB_OP_SUCCESS on success, error code on failure. */ static uint8_t gb_camera_capabilities(struct gb_operation *operation) { struct gb_camera_capabilities_response *response; uint8_t *capabilities; uint16_t size; int ret; lldbg("gb_camera_capabilities() + \n"); if (info->state < STATE_UNCONFIGURED) { lldbg("state error %d \n", info->state); return GB_OP_INVALID; } ret = device_camera_get_required_size(info->dev, SIZE_CAPABILITIES, &size); if (ret) { return gb_errno_to_op_result(ret); } response = gb_operation_alloc_response(operation, sizeof(*response) + size); if (!response) { return GB_OP_NO_MEMORY; } /* camera module capabilities */ ret = device_camera_capabilities(info->dev, &size, capabilities); if (ret) { return gb_errno_to_op_result(ret); } response->size = cpu_to_le16(size); memcpy(response->capabilities, &capabilities, size); lldbg("gb_camera_capabilities() - \n"); return GB_OP_SUCCESS; }