Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add camera descriptions #493

Merged
merged 2 commits into from
Aug 16, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/proto
Submodule proto updated from 1728f6 to cb77f5
4 changes: 4 additions & 0 deletions backend/src/plugins/camera/camera_service_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,7 @@ class CameraServiceImpl final : public rpc::camera::CameraService::Service {
rpc::camera::Setting *rpc_setting)
{
rpc_setting->set_setting_id(setting.setting_id);
rpc_setting->set_setting_description(setting.setting_description);
rpc_setting->set_allocated_option(translateOption(setting.option).release());
}

Expand All @@ -547,6 +548,7 @@ class CameraServiceImpl final : public rpc::camera::CameraService::Service {
{
auto rpc_option = std::unique_ptr<rpc::camera::Option>(new rpc::camera::Option);
rpc_option->set_option_id(option.option_id);
rpc_option->set_option_description(option.option_description);

return rpc_option;
}
Expand All @@ -556,6 +558,7 @@ class CameraServiceImpl final : public rpc::camera::CameraService::Service {
{
dronecode_sdk::Camera::Setting setting;
setting.setting_id = rpc_setting.setting_id();
setting.setting_description = rpc_setting.setting_description();
setting.option = translateRPCOption(rpc_setting.option());

return setting;
Expand All @@ -565,6 +568,7 @@ class CameraServiceImpl final : public rpc::camera::CameraService::Service {
{
dronecode_sdk::Camera::Option option;
option.option_id = rpc_option.option_id();
option.option_description = rpc_option.option_description();

return option;
}
Expand Down
86 changes: 57 additions & 29 deletions backend/test/camera_service_impl_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ static constexpr auto ARBITRARY_BOOL = true;
static constexpr auto ARBITRARY_CAMERA_STORAGE_STATUS =
dronecode_sdk::Camera::Status::StorageStatus::FORMATTED;
static constexpr auto ARBITRARY_SETTING_ID = "23b442";
static constexpr auto ARBITRARY_SETTING_DESCRIPTION = "Twenty-three b four hundred-forty-two";
static constexpr auto ARBITRARY_OPTION_ID = "small";
static constexpr auto ARBITRARY_OPTION_DESCRIPTION = "Bigger";
static constexpr auto ARBITRARY_CAMERA_RESULT = dronecode_sdk::Camera::Result::SUCCESS;

std::vector<InputPair> generateInputPairs();
Expand Down Expand Up @@ -107,6 +109,7 @@ class CameraServiceImplTest : public ::testing::TestWithParam<InputPair> {

dronecode_sdk::Camera::Option createOption(const std::string option_id) const;
dronecode_sdk::Camera::Setting createSetting(const std::string setting_id,
const std::string setting_description,
const dronecode_sdk::Camera::Option &option) const;
std::future<void> subscribeCurrentSettingsAsync(
std::vector<std::vector<dronecode_sdk::Camera::Setting>> &current_settings_events,
Expand All @@ -125,7 +128,10 @@ class CameraServiceImplTest : public ::testing::TestWithParam<InputPair> {
&possible_setting_options_events) const;

std::unique_ptr<dronecode_sdk::rpc::camera::Setting>
createRPCSetting(const std::string &setting_id, const std::string &option_id);
createRPCSetting(const std::string &setting_id,
const std::string &setting_description,
const std::string &option_id,
const std::string &option_description);
std::future<void> setSettingAndSaveParams(
const dronecode_sdk::rpc::camera::SetSettingRequest &request,
std::shared_ptr<dronecode_sdk::rpc::camera::SetSettingResponse> response,
Expand Down Expand Up @@ -896,8 +902,8 @@ TEST_F(CameraServiceImplTest, sendsMultipleCameraStatus)
TEST_F(CameraServiceImplTest, registersToCurrentSettings)
{
std::vector<dronecode_sdk::Camera::Setting> current_settings;
current_settings.push_back(
createSetting(ARBITRARY_SETTING_ID, createOption(ARBITRARY_OPTION_ID)));
current_settings.push_back(createSetting(
ARBITRARY_SETTING_ID, ARBITRARY_SETTING_DESCRIPTION, createOption(ARBITRARY_OPTION_ID)));
dronecode_sdk::Camera::subscribe_current_settings_callback_t current_settings_callback;
EXPECT_CALL(_camera, subscribe_current_settings(_))
.WillOnce(SaveResult(&current_settings_callback, &_callback_saved_promise));
Expand All @@ -913,10 +919,12 @@ TEST_F(CameraServiceImplTest, registersToCurrentSettings)

dronecode_sdk::Camera::Setting
CameraServiceImplTest::createSetting(const std::string setting_id,
const std::string setting_description,
const dronecode_sdk::Camera::Option &option) const
{
dronecode_sdk::Camera::Setting setting;
setting.setting_id = setting_id;
setting.setting_description = setting_description;
setting.option = option;

return setting;
Expand Down Expand Up @@ -972,8 +980,8 @@ TEST_F(CameraServiceImplTest, sendsOneCurrentSettings)
std::vector<std::vector<dronecode_sdk::Camera::Setting>> current_settings_events;

std::vector<dronecode_sdk::Camera::Setting> current_settings;
current_settings.push_back(
createSetting(ARBITRARY_SETTING_ID, createOption(ARBITRARY_OPTION_ID)));
current_settings.push_back(createSetting(
ARBITRARY_SETTING_ID, ARBITRARY_SETTING_DESCRIPTION, createOption(ARBITRARY_OPTION_ID)));
current_settings_events.push_back(current_settings);

checkSendsCurrentSettings(current_settings_events);
Expand All @@ -998,8 +1006,8 @@ void CameraServiceImplTest::checkSendsCurrentSettings(
}
context->TryCancel();
std::vector<dronecode_sdk::Camera::Setting> arbitrary_current_settings_event;
arbitrary_current_settings_event.push_back(
createSetting(ARBITRARY_SETTING_ID, createOption(ARBITRARY_OPTION_ID)));
arbitrary_current_settings_event.push_back(createSetting(
ARBITRARY_SETTING_ID, ARBITRARY_SETTING_DESCRIPTION, createOption(ARBITRARY_OPTION_ID)));
current_settings_callback(arbitrary_current_settings_event);
current_settings_events_future.wait();

Expand All @@ -1019,21 +1027,25 @@ TEST_F(CameraServiceImplTest, sendsMultipleCurrentSettings)
std::vector<std::vector<dronecode_sdk::Camera::Setting>> current_settings_events;

std::vector<dronecode_sdk::Camera::Setting> current_settings1;
current_settings1.push_back(
createSetting("arbitrary_setting_id1", createOption("arbitrary_option_id1")));
current_settings1.push_back(
createSetting("arbitrary_setting_id2", createOption("arbitrary_option_id2")));
current_settings1.push_back(
createSetting("arbitrary_setting_id3", createOption("arbitrary_option_id3")));
current_settings1.push_back(createSetting(
"arbitrary_setting_id1", "Arbitrary setting id one", createOption("arbitrary_option_id1")));
current_settings1.push_back(createSetting(
"arbitrary_setting_id2", "Arbitrary setting id two", createOption("arbitrary_option_id2")));
current_settings1.push_back(createSetting("arbitrary_setting_id3",
"Arbitrary setting id three",
createOption("arbitrary_option_id3")));
current_settings_events.push_back(current_settings1);

std::vector<dronecode_sdk::Camera::Setting> current_settings2;
current_settings2.push_back(
createSetting("arbitrary_setting_id4", createOption("arbitrary_option_id4")));
current_settings2.push_back(
createSetting("arbitrary_setting_id5", createOption("arbitrary_option_id5")));
current_settings2.push_back(
createSetting("arbitrary_setting_id6", createOption("arbitrary_option_id6")));
current_settings2.push_back(createSetting("arbitrary_setting_id4",
"Arbitrrary setting id four",
createOption("arbitrary_option_id4")));
current_settings2.push_back(createSetting("arbitrary_setting_id5",
"Arbitrrary setting id five",
createOption("arbitrary_option_id5")));
current_settings2.push_back(createSetting("arbitrary_setting_id6",
"Arbitrrary setting id six",
createOption("arbitrary_option_id6")));
current_settings_events.push_back(current_settings2);

checkSendsCurrentSettings(current_settings_events);
Expand Down Expand Up @@ -1172,7 +1184,6 @@ TEST_F(CameraServiceImplTest, sendsMultiplePossibleSettingOptionss)
options1.push_back(createOption("option1_2"));
options1.push_back(createOption("option1_3"));
possible_setting_options.push_back(createSettingOptions("setting1", options1));

std::vector<dronecode_sdk::Camera::Option> options2;
options2.push_back(createOption("option1"));
options2.push_back(createOption("option2"));
Expand All @@ -1195,8 +1206,11 @@ TEST_P(CameraServiceImplTest, setSettingResultIsTranslatedCorrectly)
{
dronecode_sdk::Camera::result_callback_t result_callback;
dronecode_sdk::rpc::camera::SetSettingRequest request;
request.set_allocated_setting(
createRPCSetting("arbitrary_setting_id", "arbitrary_option_id").release());
request.set_allocated_setting(createRPCSetting("arbitrary_setting_id",
"arbitrary_setting_description",
"arbitrary_option_id",
"arbitrary_option_description")
.release());
auto response = std::make_shared<dronecode_sdk::rpc::camera::SetSettingResponse>();

auto handle = setSettingAndSaveParams(request, response, result_callback);
Expand All @@ -1222,15 +1236,20 @@ std::future<void> CameraServiceImplTest::setSettingAndSaveParams(
}

std::unique_ptr<dronecode_sdk::rpc::camera::Setting>
CameraServiceImplTest::createRPCSetting(const std::string &setting_id, const std::string &option_id)
CameraServiceImplTest::createRPCSetting(const std::string &setting_id,
const std::string &setting_description,
const std::string &option_id,
const std::string &option_description)
{
auto setting = std::unique_ptr<dronecode_sdk::rpc::camera::Setting>(
new dronecode_sdk::rpc::camera::Setting);
setting->set_setting_id(setting_id);
setting->set_setting_description(setting_description);

auto option =
std::unique_ptr<dronecode_sdk::rpc::camera::Option>(new dronecode_sdk::rpc::camera::Option);
option->set_option_id(option_id);
option->set_option_description(option_description);
setting->set_allocated_option(option.release());

return setting;
Expand All @@ -1240,8 +1259,11 @@ TEST_F(CameraServiceImplTest, setSettingInProgressResultIsIgnored)
{
dronecode_sdk::Camera::result_callback_t result_callback;
dronecode_sdk::rpc::camera::SetSettingRequest request;
request.set_allocated_setting(
createRPCSetting("arbitrary_setting_id", "arbitrary_option_id").release());
request.set_allocated_setting(createRPCSetting("arbitrary_setting_id",
"arbitrary_setting_description",
"arbitrary_option_id",
"arbitrary_option_description")
.release());
auto response = std::make_shared<dronecode_sdk::rpc::camera::SetSettingResponse>();

auto handle = setSettingAndSaveParams(request, response, result_callback);
Expand All @@ -1255,8 +1277,11 @@ TEST_F(CameraServiceImplTest, setsSettingEvenWhenContextAndResponseAreNull)
{
dronecode_sdk::Camera::result_callback_t result_callback;
dronecode_sdk::rpc::camera::SetSettingRequest request;
request.set_allocated_setting(
createRPCSetting(ARBITRARY_SETTING_ID, ARBITRARY_OPTION_ID).release());
request.set_allocated_setting(createRPCSetting(ARBITRARY_SETTING_ID,
ARBITRARY_SETTING_DESCRIPTION,
ARBITRARY_OPTION_ID,
ARBITRARY_OPTION_DESCRIPTION)
.release());
auto response = std::make_shared<dronecode_sdk::rpc::camera::SetSettingResponse>();

auto handle = setSettingAndSaveParams(request, nullptr, result_callback);
Expand All @@ -1267,8 +1292,11 @@ TEST_F(CameraServiceImplTest, setsSettingWithRightParameter)
{
dronecode_sdk::Camera::result_callback_t result_callback;
dronecode_sdk::rpc::camera::SetSettingRequest request;
request.set_allocated_setting(
createRPCSetting(ARBITRARY_SETTING_ID, ARBITRARY_OPTION_ID).release());
request.set_allocated_setting(createRPCSetting(ARBITRARY_SETTING_ID,
ARBITRARY_SETTING_DESCRIPTION,
ARBITRARY_OPTION_ID,
ARBITRARY_OPTION_DESCRIPTION)
.release());
dronecode_sdk::Camera::Option option;
option.option_id = ARBITRARY_OPTION_ID;

Expand Down
29 changes: 15 additions & 14 deletions integration_tests/camera_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,17 +221,6 @@ TEST(CameraTest, SetSettings)
EXPECT_EQ(set_setting(camera, "CAM_EXPMODE", "0"), Camera::Result::SUCCESS);
EXPECT_EQ(get_setting(camera, "CAM_EXPMODE", value_set), Camera::Result::SUCCESS);
EXPECT_STREQ("0", value_set.c_str());

// Check human readable strings too.
std::string description;
EXPECT_FALSE(camera->get_setting_str("BLABLIBLU", description));
EXPECT_STREQ(description.c_str(), "");

EXPECT_TRUE(camera->get_setting_str("CAM_EXPMODE", description));
EXPECT_STREQ(description.c_str(), "Exposure Mode");

EXPECT_TRUE(camera->get_setting_str("CAM_SHUTTERSPD", description));
EXPECT_STREQ(description.c_str(), "Shutter Speed");
}
}

Expand All @@ -241,8 +230,15 @@ static void receive_current_settings(bool &subscription_called,
LogDebug() << "Received current options:";
EXPECT_TRUE(settings.size() > 0);
for (auto &setting : settings) {
LogDebug() << "Got setting '" << setting.setting_id << "' with selected option '"
<< setting.option.option_id << "'";
LogDebug() << "Got setting '" << setting.setting_description << "' with selected option '"
<< setting.option.option_description << "'";

// Check human readable strings too.
if (setting.setting_id == "CAM_SHUTTERSPD") {
EXPECT_STREQ(setting.setting_id.c_str(), "Shutter Speed");
} else if (setting.setting_id == "CAM_EXPMODE") {
EXPECT_STREQ(setting.setting_id.c_str(), "Exposure Mode");
}
}
subscription_called = true;
}
Expand Down Expand Up @@ -291,7 +287,12 @@ receive_possible_setting_options(bool &subscription_called,
LogDebug() << "Got setting '" << setting_options.setting_id << "' with options:";
EXPECT_TRUE(setting_options.options.size() > 0);
for (auto &option : setting_options.options) {
LogDebug() << " - '" << option.option_id << "'";
LogDebug() << " - '" << option.option_description << "'";
if (setting_options.setting_id == "Shutter Speed" && option.option_id == "0.0025") {
EXPECT_STREQ(option.option_description.c_str(), "1/400");
} else if (setting_options.setting_id == "CAM_WBMODE" && option.option_id == "1") {
EXPECT_STREQ(option.option_description.c_str(), "Sunrise");
}
}
}
subscription_called = true;
Expand Down
24 changes: 8 additions & 16 deletions plugins/camera/camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,18 +150,6 @@ bool Camera::get_possible_options(const std::string &setting_id,
return _impl->get_possible_options(setting_id, options);
}

bool Camera::get_setting_str(const std::string &setting_id, std::string &description)
{
return _impl->get_setting_str(setting_id, description);
}

bool Camera::get_option_str(const std::string &setting_id,
const std::string &option_id,
std::string &description)
{
return _impl->get_option_str(setting_id, option_id, description);
}

void Camera::subscribe_current_settings(const subscribe_current_settings_callback_t &callback)
{
_impl->subscribe_current_settings(callback);
Expand Down Expand Up @@ -323,22 +311,26 @@ std::ostream &operator<<(std::ostream &str, Camera::Status::StorageStatus const

bool operator==(const Camera::Setting &lhs, const Camera::Setting &rhs)
{
return lhs.setting_id == rhs.setting_id && lhs.option == rhs.option;
return lhs.setting_id == rhs.setting_id && lhs.setting_description == rhs.setting_description &&
lhs.option == rhs.option;
}

std::ostream &operator<<(std::ostream &str, Camera::Setting const &setting)
{
return str << "[setting_id: " << setting.setting_id << ", option: " << setting.option << "]";
return str << "[setting_id: " << setting.setting_id
<< ", setting_description: " << setting.setting_description
<< ", option: " << setting.option << "]";
}

bool operator==(const Camera::Option &lhs, const Camera::Option &rhs)
{
return lhs.option_id == rhs.option_id;
return (lhs.option_id == rhs.option_id) && (lhs.option_description == rhs.option_description);
}

std::ostream &operator<<(std::ostream &str, Camera::Option const &option)
{
return str << "[option_id: " << option.option_id << "]";
return str << "[option_id: " << option.option_id
<< ", option_description: " << option.option_description << "]";
}

bool operator==(const Camera::SettingOptions &lhs, const Camera::SettingOptions &rhs)
Expand Down
5 changes: 5 additions & 0 deletions plugins/camera/camera_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1029,6 +1029,7 @@ bool CameraImpl::get_possible_options(const std::string &setting_id,
ss << value;
Camera::Option option;
option.option_id = ss.str();
get_option_str(setting_id, option.option_id, option.option_description);
options.push_back(option);
}

Expand Down Expand Up @@ -1132,6 +1133,7 @@ void CameraImpl::get_option_async(const std::string &setting_id,
if (callback) {
Camera::Option new_option{};
new_option.option_id = value.get_string();
get_option_str(setting_id, new_option.option_id, new_option.option_description);
callback(Camera::Result::SUCCESS, new_option);
}
} else {
Expand Down Expand Up @@ -1194,7 +1196,10 @@ void CameraImpl::notify_current_settings()
if (_camera_definition->get_setting(possible_setting, value)) {
Camera::Setting setting;
setting.setting_id = possible_setting;
get_setting_str(setting.setting_id, setting.setting_description);
setting.option.option_id = value.get_string();
get_option_str(
setting.setting_id, setting.option.option_id, setting.option.option_description);
current_settings.push_back(setting);
}
}
Expand Down
Loading