-
-
Notifications
You must be signed in to change notification settings - Fork 484
/
camera_mode.cpp
105 lines (85 loc) · 3.52 KB
/
camera_mode.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <future>
#include "integration_test_helper.h"
#include "global_include.h"
#include "mavsdk.h"
#include "system.h"
#include "camera_test_helpers.h"
using namespace mavsdk;
TEST(CameraTest, SetModeSync)
{
Mavsdk mavsdk;
ConnectionResult ret = mavsdk.add_udp_connection();
ASSERT_EQ(ret, ConnectionResult::Success);
// Wait for system to connect via heartbeat.
std::this_thread::sleep_for(std::chrono::seconds(2));
auto system = mavsdk.systems().at(0);
ASSERT_TRUE(system->has_camera());
auto camera = std::make_shared<Camera>(system);
bool received_mode_change = false;
Camera::Mode last_mode = Camera::Mode::Unknown;
camera->subscribe_mode([&received_mode_change, &last_mode](Camera::Mode mode) {
LogInfo() << "Got mode: " << int(mode);
received_mode_change = true;
last_mode = mode;
});
std::vector<Camera::Mode> modes_to_test;
modes_to_test.push_back(Camera::Mode::Photo);
modes_to_test.push_back(Camera::Mode::Video);
modes_to_test.push_back(Camera::Mode::Photo);
modes_to_test.push_back(Camera::Mode::Video);
for (auto mode : modes_to_test) {
auto result = camera->set_mode(mode);
EXPECT_EQ(result, Camera::Result::Success);
std::this_thread::sleep_for(std::chrono::milliseconds(500));
EXPECT_TRUE(received_mode_change);
EXPECT_EQ(last_mode, mode);
received_mode_change = false;
}
}
TEST(CameraTest, SetModeAsync)
{
Mavsdk mavsdk;
ConnectionResult ret = mavsdk.add_udp_connection();
ASSERT_EQ(ret, ConnectionResult::Success);
// Wait for system to connect via heartbeat.
std::this_thread::sleep_for(std::chrono::seconds(2));
auto system = mavsdk.systems().at(0);
ASSERT_TRUE(system->has_camera());
auto camera = std::make_shared<Camera>(system);
set_mode_async(camera, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
Camera::Mode new_mode = get_mode(camera);
EXPECT_EQ(new_mode, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
set_mode_async(camera, Camera::Mode::Video);
std::this_thread::sleep_for(std::chrono::seconds(2));
new_mode = get_mode(camera);
EXPECT_EQ(new_mode, Camera::Mode::Video);
std::this_thread::sleep_for(std::chrono::seconds(2));
set_mode_async(camera, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
new_mode = get_mode(camera);
EXPECT_EQ(new_mode, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
set_mode_async(camera, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
new_mode = get_mode(camera);
EXPECT_EQ(new_mode, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
set_mode_async(camera, Camera::Mode::Video);
std::this_thread::sleep_for(std::chrono::seconds(2));
new_mode = get_mode(camera);
EXPECT_EQ(new_mode, Camera::Mode::Video);
std::this_thread::sleep_for(std::chrono::seconds(2));
set_mode_async(camera, Camera::Mode::Video);
std::this_thread::sleep_for(std::chrono::seconds(2));
new_mode = get_mode(camera);
EXPECT_EQ(new_mode, Camera::Mode::Video);
std::this_thread::sleep_for(std::chrono::seconds(2));
set_mode_async(camera, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
new_mode = get_mode(camera);
EXPECT_EQ(new_mode, Camera::Mode::Photo);
std::this_thread::sleep_for(std::chrono::seconds(2));
}