Skip to content

Commit

Permalink
Merge pull request #493 from Dronecode/add-camera-description
Browse files Browse the repository at this point in the history
Add camera descriptions
  • Loading branch information
julianoes authored Aug 16, 2018
2 parents b90009a + 3b9d020 commit b046380
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 91 deletions.
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

0 comments on commit b046380

Please sign in to comment.