Skip to content

Commit 9535f45

Browse files
Added HighlevelService
Co-authored-by: Robert Vollmer <dev@robv.de>
1 parent d2c479b commit 9535f45

File tree

6 files changed

+135
-1
lines changed

6 files changed

+135
-1
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE
6868
src/services/mower_service/mower_service.cpp
6969
src/services/gps_service/gps_service.cpp
7070
src/services/input_service/input_service.cpp
71+
src/services/high_level_service/high_level_service.cpp
7172
# BQ2567 driver
7273
src/drivers/charger/bq_2576/bq_2576.cpp
7374
# BQ25679 driver
@@ -129,6 +130,7 @@ target_add_service(${CMAKE_PROJECT_NAME} DiffDriveService ${CMAKE_CURRENT_SOURCE
129130
target_add_service(${CMAKE_PROJECT_NAME} MowerService ${CMAKE_CURRENT_SOURCE_DIR}/services/mower_service.json)
130131
target_add_service(${CMAKE_PROJECT_NAME} GpsService ${CMAKE_CURRENT_SOURCE_DIR}/services/gps_service.json)
131132
target_add_service(${CMAKE_PROJECT_NAME} InputService ${CMAKE_CURRENT_SOURCE_DIR}/services/input_service.json)
133+
target_add_service(${CMAKE_PROJECT_NAME} HighLevelService ${CMAKE_CURRENT_SOURCE_DIR}/services/high_level_service.json)
132134

133135
set_target_properties(${CMAKE_PROJECT_NAME}
134136
PROPERTIES SUFFIX ".elf")

services

src/services.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ ImuService imu_service{xbot::service_ids::IMU};
1515
PowerService power_service{xbot::service_ids::POWER};
1616
GpsService gps_service{xbot::service_ids::GPS};
1717
InputService input_service{xbot::service_ids::INPUT};
18+
HighLevelService high_level_service{xbot::service_ids::HIGH_LEVEL};
1819

1920
void StartServices() {
2021
#define START_IF_NEEDED(service, id) \
@@ -36,4 +37,5 @@ void StartServices() {
3637
START_IF_NEEDED(mower_service, MOWER)
3738
START_IF_NEEDED(gps_service, GPS)
3839
START_IF_NEEDED(input_service, INPUT)
40+
START_IF_NEEDED(high_level_service, HIGH_LEVEL)
3941
}

src/services.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "services/diff_drive_service/diff_drive_service.hpp"
55
#include "services/emergency_service/emergency_service.hpp"
66
#include "services/gps_service/gps_service.hpp"
7+
#include "services/high_level_service/high_level_service.hpp"
78
#include "services/imu_service/imu_service.hpp"
89
#include "services/input_service/input_service.hpp"
910
#include "services/mower_service/mower_service.hpp"
@@ -16,6 +17,7 @@ extern ImuService imu_service;
1617
extern PowerService power_service;
1718
extern GpsService gps_service;
1819
extern InputService input_service;
20+
extern HighLevelService high_level_service;
1921

2022
void StartServices();
2123

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include "high_level_service.hpp"
2+
3+
void HighLevelService::OnStateIDChanged(const HighLevelStatus &new_value) {
4+
xbot::service::Lock lk{&mtx_};
5+
state_id_ = new_value;
6+
}
7+
8+
void HighLevelService::OnStateNameChanged(const char *new_value, uint32_t length) {
9+
xbot::service::Lock lk{&mtx_};
10+
if (new_value && length > 0 && length < state_name_.max_size()) {
11+
state_name_ = new_value;
12+
}
13+
}
14+
15+
void HighLevelService::OnSubStateNameChanged(const char *new_value, uint32_t length) {
16+
xbot::service::Lock lk{&mtx_};
17+
if (new_value && length > 0 && length < sub_state_name_.max_size()) {
18+
sub_state_name_ = new_value;
19+
}
20+
}
21+
22+
void HighLevelService::OnGpsQualityChanged(const float &new_value) {
23+
xbot::service::Lock lk{&mtx_};
24+
gps_quality_ = new_value;
25+
}
26+
27+
void HighLevelService::OnCurrentAreaChanged(const int16_t &new_value) {
28+
xbot::service::Lock lk{&mtx_};
29+
current_area_ = new_value;
30+
}
31+
32+
void HighLevelService::OnCurrentPathChanged(const int16_t &new_value) {
33+
xbot::service::Lock lk{&mtx_};
34+
current_path_ = new_value;
35+
}
36+
37+
void HighLevelService::OnCurrentPathIndexChanged(const int16_t &new_value) {
38+
xbot::service::Lock lk{&mtx_};
39+
current_path_index_ = new_value;
40+
}
41+
42+
void HighLevelService::OnTransactionEnd() {
43+
if (state_changed_callback_) {
44+
state_changed_callback_();
45+
}
46+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#ifndef HIGH_LEVEL_SERVICE_HPP
2+
#define HIGH_LEVEL_SERVICE_HPP
3+
4+
#include <etl/string.h>
5+
6+
#include <HighLevelServiceBase.hpp>
7+
#include <xbot-service/Lock.hpp>
8+
9+
using namespace xbot::service;
10+
11+
class HighLevelService : public HighLevelServiceBase {
12+
private:
13+
THD_WORKING_AREA(wa, 1024){};
14+
15+
public:
16+
explicit HighLevelService(uint16_t service_id) : HighLevelServiceBase(service_id, wa, sizeof(wa)) {
17+
}
18+
19+
HighLevelStatus GetStateId() {
20+
xbot::service::Lock lk{&mtx_};
21+
return state_id_;
22+
}
23+
24+
etl::string<100> GetStateName() {
25+
xbot::service::Lock lk{&mtx_};
26+
return state_name_;
27+
}
28+
29+
etl::string<100> GetSubStateName() {
30+
xbot::service::Lock lk{&mtx_};
31+
return sub_state_name_;
32+
}
33+
34+
float GetGpsQuality() {
35+
xbot::service::Lock lk{&mtx_};
36+
return gps_quality_;
37+
}
38+
39+
int16_t GetCurrentArea() {
40+
xbot::service::Lock lk{&mtx_};
41+
return current_area_;
42+
}
43+
44+
int16_t GetCurrentPath() {
45+
xbot::service::Lock lk{&mtx_};
46+
return current_path_;
47+
}
48+
49+
int16_t GetCurrentPathIndex() {
50+
xbot::service::Lock lk{&mtx_};
51+
return current_path_index_;
52+
}
53+
54+
void SetCallback(const etl::delegate<void()>& callback) {
55+
xbot::service::Lock lk{&mtx_};
56+
state_changed_callback_ = callback;
57+
}
58+
59+
private:
60+
MUTEX_DECL(mtx_);
61+
62+
HighLevelStatus state_id_ = HighLevelStatus::UNKNOWN;
63+
etl::string<100> state_name_{};
64+
etl::string<100> sub_state_name_{};
65+
float gps_quality_ = 0;
66+
int16_t current_area_ = 0;
67+
int16_t current_path_ = 0;
68+
int16_t current_path_index_ = 0;
69+
70+
etl::delegate<void()> state_changed_callback_{};
71+
72+
void OnStateIDChanged(const HighLevelStatus& new_value) override;
73+
void OnStateNameChanged(const char* new_value, uint32_t length) override;
74+
void OnSubStateNameChanged(const char* new_value, uint32_t length) override;
75+
void OnGpsQualityChanged(const float& new_value) override;
76+
void OnCurrentAreaChanged(const int16_t& new_value) override;
77+
void OnCurrentPathChanged(const int16_t& new_value) override;
78+
void OnCurrentPathIndexChanged(const int16_t& new_value) override;
79+
void OnTransactionEnd() override;
80+
};
81+
82+
#endif // HIGH_LEVEL_SERVICE_HPP

0 commit comments

Comments
 (0)