Skip to content

Commit a80cbef

Browse files
authored
[sensors_plus] Refactor the C++ code (#358)
Signed-off-by: Boram Bae <[email protected]>
1 parent f2a2d40 commit a80cbef

File tree

3 files changed

+207
-186
lines changed

3 files changed

+207
-186
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
// Copyright 2022 Samsung Electronics Co., Ltd. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "device_sensor.h"
6+
7+
#include "log.h"
8+
9+
namespace {
10+
11+
sensor_type_e ToTizenSensorType(const SensorType &sensor_type) {
12+
switch (sensor_type) {
13+
case SensorType::kAccelerometer:
14+
return SENSOR_ACCELEROMETER;
15+
case SensorType::kGyroscope:
16+
return SENSOR_GYROSCOPE;
17+
case SensorType::kUserAccel:
18+
default:
19+
return SENSOR_LINEAR_ACCELERATION;
20+
}
21+
}
22+
23+
} // namespace
24+
25+
DeviceSensor::DeviceSensor(SensorType sensor_type)
26+
: sensor_type_(sensor_type) {}
27+
28+
DeviceSensor::~DeviceSensor() {
29+
if (is_listening_) {
30+
StopListen();
31+
}
32+
33+
if (listener_) {
34+
sensor_destroy_listener(listener_);
35+
listener_ = nullptr;
36+
}
37+
}
38+
39+
bool DeviceSensor::StartListen(SensorEventCallback callback) {
40+
if (is_listening_) {
41+
LOG_WARN("Already listening.");
42+
last_error_ = SENSOR_ERROR_OPERATION_FAILED;
43+
return false;
44+
}
45+
46+
sensor_h sensor;
47+
int ret = sensor_get_default_sensor(ToTizenSensorType(sensor_type_), &sensor);
48+
if (ret != SENSOR_ERROR_NONE) {
49+
LOG_ERROR("Failed to get default sensor: %s", get_error_message(ret));
50+
last_error_ = ret;
51+
return false;
52+
}
53+
54+
ret = sensor_create_listener(sensor, &listener_);
55+
if (ret != SENSOR_ERROR_NONE) {
56+
LOG_ERROR("Failed to create listener: %s", get_error_message(ret));
57+
last_error_ = ret;
58+
return false;
59+
}
60+
61+
ret = sensor_listener_set_event_cb(
62+
listener_, 60,
63+
[](sensor_h sensor, sensor_event_s *event, void *user_data) {
64+
auto *self = static_cast<DeviceSensor *>(user_data);
65+
SensorEvent sensor_event;
66+
for (int i = 0; i < event->value_count; i++) {
67+
sensor_event.push_back(event->values[i]);
68+
}
69+
self->callback_(sensor_event);
70+
},
71+
this);
72+
if (ret != SENSOR_ERROR_NONE) {
73+
LOG_ERROR("Failed to set event callback: %s", get_error_message(ret));
74+
last_error_ = ret;
75+
return false;
76+
}
77+
78+
ret = sensor_listener_start(listener_);
79+
if (ret != SENSOR_ERROR_NONE) {
80+
LOG_ERROR("Failed to start listener: %s", get_error_message(ret));
81+
last_error_ = ret;
82+
return false;
83+
}
84+
85+
callback_ = callback;
86+
is_listening_ = true;
87+
88+
return true;
89+
}
90+
91+
void DeviceSensor::StopListen() {
92+
if (!is_listening_) {
93+
LOG_WARN("Already canceled.");
94+
return;
95+
}
96+
97+
int ret = sensor_listener_stop(listener_);
98+
if (ret != SENSOR_ERROR_NONE) {
99+
LOG_ERROR("Failed to stop listener: %s", get_error_message(ret));
100+
last_error_ = ret;
101+
return;
102+
}
103+
104+
is_listening_ = false;
105+
106+
ret = sensor_listener_unset_event_cb(listener_);
107+
if (ret != SENSOR_ERROR_NONE) {
108+
LOG_ERROR("Failed to unset event callback: %s", get_error_message(ret));
109+
last_error_ = ret;
110+
return;
111+
}
112+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright 2022 Samsung Electronics Co., Ltd. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#ifndef FLUTTER_PLUGIN_DEVICE_SENSOR_H_
6+
#define FLUTTER_PLUGIN_DEVICE_SENSOR_H_
7+
8+
#include <sensor.h>
9+
#include <tizen.h>
10+
11+
#include <functional>
12+
#include <string>
13+
#include <vector>
14+
15+
enum class SensorType { kAccelerometer, kGyroscope, kUserAccel };
16+
17+
typedef std::vector<double> SensorEvent;
18+
typedef std::function<void(SensorEvent)> SensorEventCallback;
19+
20+
class DeviceSensor {
21+
public:
22+
DeviceSensor(SensorType sensor_type);
23+
~DeviceSensor();
24+
25+
int GetLastError() { return last_error_; }
26+
27+
std::string GetLastErrorString() { return get_error_message(last_error_); }
28+
29+
bool StartListen(SensorEventCallback callback);
30+
31+
void StopListen();
32+
33+
private:
34+
SensorType sensor_type_;
35+
sensor_listener_h listener_ = nullptr;
36+
bool is_listening_ = false;
37+
int last_error_ = TIZEN_ERROR_NONE;
38+
39+
SensorEventCallback callback_ = nullptr;
40+
};
41+
42+
#endif // FLUTTER_PLUGIN_DEVICE_SENSOR_H_

0 commit comments

Comments
 (0)