Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Maximum numbers of connected ESCs in uORB and in UAVCAN expanded to 16. #12277

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions msg/esc_status.msg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
uint64 timestamp # time since system start (microseconds)
uint8 CONNECTED_ESC_MAX = 8 # The number of ESCs supported. Current (Q2/2013) we support 8 ESCs
uint8 CONNECTED_ESC_MAX = 16 # The number of ESCs supported. Current (Q2/2019) we support 16 ESCs

uint8 ESC_VENDOR_GENERIC = 0 # generic ESC
uint8 ESC_VENDOR_MIKROKOPTER = 1 # Mikrokopter
@@ -17,4 +17,4 @@ uint16 counter # incremented by the writing thread everytime new data is s
uint8 esc_count # number of connected ESCs
uint8 esc_connectiontype # how ESCs connected to the system

esc_report[8] esc
esc_report[16] esc
2 changes: 1 addition & 1 deletion msg/test_motor.msg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
uint64 timestamp # time since system start (microseconds)
uint8 NUM_MOTOR_OUTPUTS = 8
uint8 NUM_MOTOR_OUTPUTS = 16

uint32 motor_number # number of motor to spin
float32 value # output power, range [0..1]
6 changes: 4 additions & 2 deletions src/drivers/uavcan/uavcan_main.cpp
Original file line number Diff line number Diff line change
@@ -901,9 +901,11 @@ int UavcanNode::run()

} else if (controls_updated && (_mixers != nullptr)) {

// XXX one output group has 8 outputs max,
// XXX one output group has 16 (esc_status_s::CONNECTED_ESC_MAX) outputs max (Q2/2019),
// but this driver could well serve multiple groups.
unsigned num_outputs_max = 8;
unsigned num_outputs_max = (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this necessary?

Copy link
Contributor Author

@irsdkv irsdkv Jun 15, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are right. I'm not sure about the need for this check.
Perhaps the best solution would be to assign the constant value 16 (esc_status_s::CONNECTED_ESC_MAX).
But, on the other hand, I did not want to bind to a constant, which in the distant future could still change.
If you think that the constant value would be better, I will be glad to change this check to constant value.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that the constexpr specifier solve all problems with CPU load and this check (CONNECTED_ESC_MAX constant presence) will be useful for further changes safety.

esc_status_s::CONNECTED_ESC_MAX < static_cast<unsigned>(uavcan::equipment::esc::RawCommand::FieldTypes::cmd::MaxSize) ?
esc_status_s::CONNECTED_ESC_MAX : static_cast<unsigned>(uavcan::equipment::esc::RawCommand::FieldTypes::cmd::MaxSize));

_mixers->set_airmode(_airmode);