Skip to content

Commit 5e1eded

Browse files
committed
Add request to change controller modes.
1 parent 9aec59c commit 5e1eded

File tree

5 files changed

+62
-10
lines changed

5 files changed

+62
-10
lines changed

ClientSource/Libraries/MessageConverter.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,29 @@ int register_message_converters_framework_requests(){
288288
return ss.str();
289289
}
290290
);
291+
register_message_converter(
292+
PABB_MSG_REQUEST_READ_CONTROLLER_MODE,
293+
[](const std::string& body){
294+
std::ostringstream ss;
295+
ss << "PABB_MSG_REQUEST_READ_CONTROLLER_MODE - ";
296+
if (body.size() != sizeof(pabb_MsgRequestReadControllerMode)){ ss << "(invalid size)" << std::endl; return ss.str(); }
297+
const auto* params = (const pabb_MsgRequestReadControllerMode*)body.c_str();
298+
ss << "seqnum = " << (uint64_t)params->seqnum;
299+
return ss.str();
300+
}
301+
);
302+
register_message_converter(
303+
PABB_MSG_REQUEST_CHANGE_CONTROLLER_MODE,
304+
[](const std::string& body){
305+
std::ostringstream ss;
306+
ss << "PABB_MSG_REQUEST_CHANGE_CONTROLLER_MODE - ";
307+
if (body.size() != sizeof(pabb_MsgRequestChangeControllerMode)){ ss << "(invalid size)" << std::endl; return ss.str(); }
308+
const auto* params = (const pabb_MsgRequestChangeControllerMode*)body.c_str();
309+
ss << "seqnum = " << (uint64_t)params->seqnum;
310+
ss << ", mode = " << params->mode;
311+
return ss.str();
312+
}
313+
);
291314
register_message_converter(
292315
PABB_MSG_COMMAND_END_PROGRAM_CALLBACK,
293316
[](const std::string& body){

Common/Microcontroller/DeviceRoutines.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,17 @@ uint8_t program_id(BotBaseController& botbase){
3939
).convert<PABB_MSG_ACK_REQUEST_I8>(botbase.logger(), response);
4040
return response.data;
4141
}
42-
uint32_t controller_mode(BotBaseController& botbase){
42+
uint32_t read_controller_mode(BotBaseController& botbase){
4343
pabb_MsgAckRequestI32 response;
4444
botbase.issue_request_and_wait(
45-
DeviceRequest_controller_mode()
45+
DeviceRequest_read_controller_mode()
46+
).convert<PABB_MSG_ACK_REQUEST_I32>(botbase.logger(), response);
47+
return response.data;
48+
}
49+
uint32_t change_controller_mode(BotBaseController& botbase, uint32_t mode){
50+
pabb_MsgAckRequestI32 response;
51+
botbase.issue_request_and_wait(
52+
DeviceRequest_change_controller_mode(mode)
4653
).convert<PABB_MSG_ACK_REQUEST_I32>(botbase.logger(), response);
4754
return response.data;
4855
}

Common/Microcontroller/DeviceRoutines.h

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ uint32_t protocol_version(BotBaseController& botbase);
1818
uint32_t program_version(BotBaseController& botbase);
1919
uint8_t device_queue_size(BotBaseController& botbase);
2020
uint8_t program_id(BotBaseController& botbase);
21-
uint32_t controller_mode(BotBaseController& botbase);
21+
uint32_t read_controller_mode(BotBaseController& botbase);
22+
uint32_t change_controller_mode(BotBaseController& botbase, uint32_t mode);
2223

2324

2425
class DeviceRequest_seqnum_reset : public BotBaseRequest{
@@ -91,14 +92,26 @@ class DeviceRequest_program_id : public BotBaseRequest{
9192
return BotBaseMessage(PABB_MSG_REQUEST_PROGRAM_ID, params);
9293
}
9394
};
94-
class DeviceRequest_controller_mode : public BotBaseRequest{
95+
class DeviceRequest_read_controller_mode : public BotBaseRequest{
9596
public:
96-
pabb_MsgRequestControllerMode params;
97-
DeviceRequest_controller_mode()
97+
pabb_MsgRequestReadControllerMode params;
98+
DeviceRequest_read_controller_mode()
9899
: BotBaseRequest(false)
99100
{}
100101
virtual BotBaseMessage message() const override{
101-
return BotBaseMessage(PABB_MSG_REQUEST_CONTROLLER_MODE, params);
102+
return BotBaseMessage(PABB_MSG_REQUEST_READ_CONTROLLER_MODE, params);
103+
}
104+
};
105+
class DeviceRequest_change_controller_mode : public BotBaseRequest{
106+
public:
107+
pabb_MsgRequestChangeControllerMode params;
108+
DeviceRequest_change_controller_mode(uint32_t mode)
109+
: BotBaseRequest(false)
110+
{
111+
params.mode = mode;
112+
}
113+
virtual BotBaseMessage message() const override{
114+
return BotBaseMessage(PABB_MSG_REQUEST_CHANGE_CONTROLLER_MODE, params);
102115
}
103116
};
104117

Common/Microcontroller/MessageProtocol.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,10 +322,16 @@ typedef struct{
322322
seqnum_t seqnum;
323323
} PABB_PACK pabb_MsgRequestQueueSize;
324324

325-
#define PABB_MSG_REQUEST_CONTROLLER_MODE 0x49
325+
#define PABB_MSG_REQUEST_READ_CONTROLLER_MODE 0x49
326326
typedef struct{
327327
seqnum_t seqnum;
328-
} PABB_PACK pabb_MsgRequestControllerMode;
328+
} PABB_PACK pabb_MsgRequestReadControllerMode;
329+
330+
#define PABB_MSG_REQUEST_CHANGE_CONTROLLER_MODE 0x4a
331+
typedef struct{
332+
seqnum_t seqnum;
333+
uint32_t mode;
334+
} PABB_PACK pabb_MsgRequestChangeControllerMode;
329335

330336
////////////////////////////////////////////////////////////////////////////////
331337
// Commands

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase_Connection.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "ClientSource/Connection/PABotBase.h"
1616
#include "CommonFramework/GlobalSettingsPanel.h"
1717
#include "CommonFramework/Options/Environment/ThemeSelectorOption.h"
18+
#include "Controllers/ControllerTypeStrings.h"
1819
#include "SerialPABotBase.h"
1920
#include "SerialPABotBase_Connection.h"
2021

@@ -189,13 +190,15 @@ ControllerModeStatus SerialPABotBase_Connection::read_device_specs(){
189190

190191

191192
// Controller Type
193+
logger.log("Reading Controller Mode...");
192194
ControllerType current_controller = ControllerType::None;
193195
if (program_iter->second.size() == 1){
194196
current_controller = program_iter->second.begin()->first;
195197
}else if (program_iter->second.size() > 1){
196-
uint32_t type_id = Microcontroller::controller_mode(*m_botbase);
198+
uint32_t type_id = Microcontroller::read_controller_mode(*m_botbase);
197199
current_controller = controller_type(type_id);
198200
}
201+
logger.log("Reading Controller Mode... Mode = " + CONTROLLER_TYPE_STRINGS.get_string(current_controller));
199202

200203
return {current_controller, program_iter->second};
201204
}

0 commit comments

Comments
 (0)