Skip to content

Commit fc13ba9

Browse files
Merge branch 'feature/high-level-service' into feature/YF-cover-ui
2 parents 09a2087 + 48acbee commit fc13ba9

File tree

6 files changed

+139
-1
lines changed

6 files changed

+139
-1
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE
6464
src/services/mower_service/mower_service.cpp
6565
src/services/gps_service/gps_service.cpp
6666
src/services/input_service/input_service.cpp
67+
src/services/mower_ui_service/mower_ui_service.cpp
6768
# BQ2567 driver
6869
src/drivers/charger/bq_2576/bq_2576.cpp
6970
# BQ25679 driver
@@ -124,6 +125,7 @@ target_add_service(${CMAKE_PROJECT_NAME} DiffDriveService ${CMAKE_CURRENT_SOURCE
124125
target_add_service(${CMAKE_PROJECT_NAME} MowerService ${CMAKE_CURRENT_SOURCE_DIR}/services/mower_service.json)
125126
target_add_service(${CMAKE_PROJECT_NAME} GpsService ${CMAKE_CURRENT_SOURCE_DIR}/services/gps_service.json)
126127
target_add_service(${CMAKE_PROJECT_NAME} InputService ${CMAKE_CURRENT_SOURCE_DIR}/services/input_service.json)
128+
target_add_service(${CMAKE_PROJECT_NAME} MowerUiService ${CMAKE_CURRENT_SOURCE_DIR}/services/mower_ui_service.json)
127129

128130
set_target_properties(${CMAKE_PROJECT_NAME}
129131
PROPERTIES SUFFIX ".elf")

services

src/services.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ ImuService imu_service{xbot::service_ids::IMU};
1111
PowerService power_service{xbot::service_ids::POWER};
1212
GpsService gps_service{xbot::service_ids::GPS};
1313
InputService input_service{xbot::service_ids::INPUT};
14+
MowerUiService mower_ui_service{xbot::service_ids::MOWER_UI};

src/services.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "services/imu_service/imu_service.hpp"
88
#include "services/input_service/input_service.hpp"
99
#include "services/mower_service/mower_service.hpp"
10+
#include "services/mower_ui_service/mower_ui_service.hpp"
1011
#include "services/power_service/power_service.hpp"
1112

1213
extern EmergencyService emergency_service;
@@ -18,5 +19,6 @@ extern ImuService imu_service;
1819
extern PowerService power_service;
1920
extern GpsService gps_service;
2021
extern InputService input_service;
22+
extern MowerUiService mower_ui_service;
2123

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

0 commit comments

Comments
 (0)