Skip to content
Open
Show file tree
Hide file tree
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
19 changes: 14 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,18 @@ jobs:
- name: Check Python formatting and linting
run: scripts/format_py.sh check

cpp_lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Install uncrustify
run: sudo apt-get update && sudo apt-get install -y uncrustify
- name: Check C++ formatting
run: scripts/format_cpp.sh check examples/slave

# Build C++ and Build Wheels
build_x86:
needs: py_lint
needs: [py_lint, cpp_lint]
name: Build C++ (${{ matrix.os }}${{ matrix.preset && format(' - {0}', matrix.preset) || '' }})
runs-on: ${{ matrix.os }}
strategy:
Expand Down Expand Up @@ -107,7 +116,7 @@ jobs:
# Sanitizer build + unit tests: ASan + LSan + UBSan (catches overflows, use-after-free, leaks,
# and undefined behaviour; alignment is excluded for the packed EtherCAT frame layer).
build_sanitizers:
needs: py_lint
needs: [py_lint, cpp_lint]
name: Build C++ (ASan + UBSan)
runs-on: ubuntu-latest
env:
Expand All @@ -134,7 +143,7 @@ jobs:
shell: bash

build_arm64:
needs: py_lint
needs: [py_lint, cpp_lint]
name: Build C++ (ARM64 - ${{ matrix.preset }})
runs-on: ubuntu-24.04-arm
strategy:
Expand Down Expand Up @@ -170,7 +179,7 @@ jobs:
retention-days: 1

build-wheels:
needs: py_lint
needs: [py_lint, cpp_lint]
name: Build Python Wheels (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
Expand Down Expand Up @@ -332,7 +341,7 @@ jobs:

# NuttX Builds
build_NuttX:
needs: py_lint
needs: [py_lint, cpp_lint]
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.nuttx.label == 'master' }}
strategy:
Expand Down
2 changes: 1 addition & 1 deletion examples/slave/common/xpg_strerror_r.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
// Uses GNU strerror internally, but provides thread-safe semantics
// by copying into a thread-local buffer.
// To use if the symbol is not defined (i.e. NuttX + GCC 14 ARM toolchain)
extern "C" int __xpg_strerror_r(int errnum, char *buf, size_t buflen)
extern "C" int __xpg_strerror_r(int errnum, char* buf, size_t buflen)
{
if (buf == nullptr or buflen == 0)
{
Expand Down
16 changes: 8 additions & 8 deletions examples/slave/nuttx/lan9252/arduino-due/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
using namespace kickcat;


int main(int argc, char *argv[])
int main(int argc, char* argv[])

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think we want it right aligned, but I forgot what @leducp preference is :/

{
(void) argc;
(void) argv;
(void)argc;
(void)argv;
std::shared_ptr<SPI> spi_driver = std::make_shared<SPI>();
spi_driver->open("/dev/spi0", 0, 0, 10000000);

Expand Down Expand Up @@ -59,11 +59,11 @@ int main(int argc, char *argv[])
{
slave.routine();
// Print received data
// for (uint8_t i = 0; i < PDO_MAX_SIZE; ++i)
// {
// printf("%x", buffer_out[i]);
// }
// printf("\n");
// for (uint8_t i = 0; i < PDO_MAX_SIZE; ++i)
// {
// printf("%x", buffer_out[i]);
// }
// printf("\n");

if (slave.state() == State::SAFE_OP)
{
Expand Down
21 changes: 10 additions & 11 deletions examples/slave/nuttx/lan9252/freedom-k64f/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

using namespace kickcat;

int main(int argc, char *argv[])
int main(int argc, char* argv[])
{
(void)argc;
(void)argv;
Expand Down Expand Up @@ -94,16 +94,16 @@ int main(int argc, char *argv[])

bool pdo_configured = false;

int16_t *ax = nullptr;
int16_t *ay = nullptr;
int16_t *az = nullptr;
int16_t *mx = nullptr;
int16_t *my = nullptr;
int16_t *mz = nullptr;
int16_t* ax = nullptr;
int16_t* ay = nullptr;
int16_t* az = nullptr;
int16_t* mx = nullptr;
int16_t* my = nullptr;
int16_t* mz = nullptr;

uint8_t *led_r = nullptr;
uint8_t *led_g = nullptr;
uint8_t *led_b = nullptr;
uint8_t* led_r = nullptr;
uint8_t* led_g = nullptr;
uint8_t* led_b = nullptr;

while (true)
{
Expand Down Expand Up @@ -132,7 +132,6 @@ int main(int argc, char *argv[])
}
else if (state == State::OPERATIONAL)
{

if (read(sensor_fd, &sensor_data, sizeof(sensor_data)) == sizeof(sensor_data))
{
*ax = sensor_data.accel.x;
Expand Down
72 changes: 36 additions & 36 deletions examples/slave/nuttx/lan9252/freedom-k64f/od_populator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace kickcat::CoE
"Device Type",
{}
};
CoE::addEntry<uint32_t>(object,0,32,0,CoE::Access::READ,CoE::DataType::UNSIGNED32,"",0x0);
CoE::addEntry<uint32_t>(object, 0, 32, 0, CoE::Access::READ, CoE::DataType::UNSIGNED32, "", 0x0);
dictionary.push_back(std::move(object));
}

Expand All @@ -28,11 +28,11 @@ namespace kickcat::CoE
"Identity Object",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::READ,CoE::DataType::UNSIGNED8,"Subindex 000",0x4);
CoE::addEntry<uint32_t>(object,1,32,8,CoE::Access::READ,CoE::DataType::UNSIGNED32,"Vendor ID",0x6a5);
CoE::addEntry<uint32_t>(object,2,32,40,CoE::Access::READ,CoE::DataType::UNSIGNED32,"Product code",0xb0cad0);
CoE::addEntry<uint32_t>(object,3,32,72,CoE::Access::READ,CoE::DataType::UNSIGNED32,"Revision number",0x0);
CoE::addEntry<uint32_t>(object,4,32,104,CoE::Access::READ,CoE::DataType::UNSIGNED32,"Serial number",0xcafedeca);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::READ, CoE::DataType::UNSIGNED8, "Subindex 000", 0x4);
CoE::addEntry<uint32_t>(object, 1, 32, 8, CoE::Access::READ, CoE::DataType::UNSIGNED32, "Vendor ID", 0x6a5);
CoE::addEntry<uint32_t>(object, 2, 32, 40, CoE::Access::READ, CoE::DataType::UNSIGNED32, "Product code", 0xb0cad0);
CoE::addEntry<uint32_t>(object, 3, 32, 72, CoE::Access::READ, CoE::DataType::UNSIGNED32, "Revision number", 0x0);
CoE::addEntry<uint32_t>(object, 4, 32, 104, CoE::Access::READ, CoE::DataType::UNSIGNED32, "Serial number", 0xcafedeca);
dictionary.push_back(std::move(object));
}

Expand All @@ -44,10 +44,10 @@ namespace kickcat::CoE
"RxPDO Map 1",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED8,"Subindex 000",0x3);
CoE::addEntry<uint32_t>(object,1,32,8,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"RxPDO Map 1 Element 1",0x70000008);
CoE::addEntry<uint32_t>(object,2,32,40,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"RxPDO Map 1 Element 2",0x70010008);
CoE::addEntry<uint32_t>(object,3,32,72,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"RxPDO Map 1 Element 3",0x70020008);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED8, "Subindex 000", 0x3);
CoE::addEntry<uint32_t>(object, 1, 32, 8, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "RxPDO Map 1 Element 1", 0x70000008);
CoE::addEntry<uint32_t>(object, 2, 32, 40, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "RxPDO Map 1 Element 2", 0x70010008);
CoE::addEntry<uint32_t>(object, 3, 32, 72, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "RxPDO Map 1 Element 3", 0x70020008);
dictionary.push_back(std::move(object));
}

Expand All @@ -59,13 +59,13 @@ namespace kickcat::CoE
"TxPDO Map 1",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED8,"Subindex 000",0x6);
CoE::addEntry<uint32_t>(object,1,32,8,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"TxPDO Map 1 Element 1",0x60000010);
CoE::addEntry<uint32_t>(object,2,32,40,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"TxPDO Map 1 Element 2",0x60010010);
CoE::addEntry<uint32_t>(object,3,32,72,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"TxPDO Map 1 Element 3",0x60020010);
CoE::addEntry<uint32_t>(object,4,32,104,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"TxPDO Map 1 Element 4",0x60030010);
CoE::addEntry<uint32_t>(object,5,32,136,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"TxPDO Map 1 Element 5",0x60040010);
CoE::addEntry<uint32_t>(object,6,32,168,CoE::Access::READ | CoE::Access::WRITE,CoE::DataType::UNSIGNED32,"TxPDO Map 1 Element 6",0x60050010);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED8, "Subindex 000", 0x6);
CoE::addEntry<uint32_t>(object, 1, 32, 8, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "TxPDO Map 1 Element 1", 0x60000010);
CoE::addEntry<uint32_t>(object, 2, 32, 40, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "TxPDO Map 1 Element 2", 0x60010010);
CoE::addEntry<uint32_t>(object, 3, 32, 72, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "TxPDO Map 1 Element 3", 0x60020010);
CoE::addEntry<uint32_t>(object, 4, 32, 104, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "TxPDO Map 1 Element 4", 0x60030010);
CoE::addEntry<uint32_t>(object, 5, 32, 136, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "TxPDO Map 1 Element 5", 0x60040010);
CoE::addEntry<uint32_t>(object, 6, 32, 168, CoE::Access::READ | CoE::Access::WRITE, CoE::DataType::UNSIGNED32, "TxPDO Map 1 Element 6", 0x60050010);
dictionary.push_back(std::move(object));
}

Expand All @@ -77,11 +77,11 @@ namespace kickcat::CoE
"Sync manager type",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::READ,CoE::DataType::UNSIGNED8,"Subindex 0",0x4);
CoE::addEntry<uint8_t>(object,1,8,8,CoE::Access::READ,CoE::DataType::UNSIGNED8,"Subindex 1",0x1);
CoE::addEntry<uint8_t>(object,2,8,16,CoE::Access::READ,CoE::DataType::UNSIGNED8,"Subindex 2",0x2);
CoE::addEntry<uint8_t>(object,3,8,24,CoE::Access::READ,CoE::DataType::UNSIGNED8,"Subindex 3",0x3);
CoE::addEntry<uint8_t>(object,4,8,32,CoE::Access::READ,CoE::DataType::UNSIGNED8,"Subindex 4",0x4);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::READ, CoE::DataType::UNSIGNED8, "Subindex 0", 0x4);
CoE::addEntry<uint8_t>(object, 1, 8, 8, CoE::Access::READ, CoE::DataType::UNSIGNED8, "Subindex 1", 0x1);
CoE::addEntry<uint8_t>(object, 2, 8, 16, CoE::Access::READ, CoE::DataType::UNSIGNED8, "Subindex 2", 0x2);
CoE::addEntry<uint8_t>(object, 3, 8, 24, CoE::Access::READ, CoE::DataType::UNSIGNED8, "Subindex 3", 0x3);
CoE::addEntry<uint8_t>(object, 4, 8, 32, CoE::Access::READ, CoE::DataType::UNSIGNED8, "Subindex 4", 0x4);
dictionary.push_back(std::move(object));
}

Expand All @@ -93,8 +93,8 @@ namespace kickcat::CoE
"RxPDO assign",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::READ | CoE::Access::WRITE_PREOP,CoE::DataType::UNSIGNED8,"Subindex 000",0x1);
CoE::addEntry<uint16_t>(object,1,16,8,CoE::Access::READ | CoE::Access::WRITE_PREOP,CoE::DataType::UNSIGNED16,"RxPDO assign Element 1",0x1600);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::READ | CoE::Access::WRITE_PREOP, CoE::DataType::UNSIGNED8, "Subindex 000", 0x1);
CoE::addEntry<uint16_t>(object, 1, 16, 8, CoE::Access::READ | CoE::Access::WRITE_PREOP, CoE::DataType::UNSIGNED16, "RxPDO assign Element 1", 0x1600);
dictionary.push_back(std::move(object));
}

Expand All @@ -106,8 +106,8 @@ namespace kickcat::CoE
"TxPDO assign",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::READ | CoE::Access::WRITE_PREOP,CoE::DataType::UNSIGNED8,"Subindex 000",0x1);
CoE::addEntry<uint16_t>(object,1,16,8,CoE::Access::READ | CoE::Access::WRITE_PREOP,CoE::DataType::UNSIGNED16,"TxPDO assign Element 1",0x1a00);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::READ | CoE::Access::WRITE_PREOP, CoE::DataType::UNSIGNED8, "Subindex 000", 0x1);
CoE::addEntry<uint16_t>(object, 1, 16, 8, CoE::Access::READ | CoE::Access::WRITE_PREOP, CoE::DataType::UNSIGNED16, "TxPDO assign Element 1", 0x1a00);
dictionary.push_back(std::move(object));
}

Expand All @@ -119,7 +119,7 @@ namespace kickcat::CoE
"accel_x",
{}
};
CoE::addEntry<int16_t>(object,0,16,0,CoE::Access::READ | CoE::Access::TxPDO,CoE::DataType::INTEGER16,"accel_x",0);
CoE::addEntry<int16_t>(object, 0, 16, 0, CoE::Access::READ | CoE::Access::TxPDO, CoE::DataType::INTEGER16, "accel_x", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -131,7 +131,7 @@ namespace kickcat::CoE
"accel_y",
{}
};
CoE::addEntry<int16_t>(object,0,16,0,CoE::Access::READ | CoE::Access::TxPDO,CoE::DataType::INTEGER16,"accel_y",0);
CoE::addEntry<int16_t>(object, 0, 16, 0, CoE::Access::READ | CoE::Access::TxPDO, CoE::DataType::INTEGER16, "accel_y", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -143,7 +143,7 @@ namespace kickcat::CoE
"accel_z",
{}
};
CoE::addEntry<int16_t>(object,0,16,0,CoE::Access::READ | CoE::Access::TxPDO,CoE::DataType::INTEGER16,"accel_z",0);
CoE::addEntry<int16_t>(object, 0, 16, 0, CoE::Access::READ | CoE::Access::TxPDO, CoE::DataType::INTEGER16, "accel_z", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -155,7 +155,7 @@ namespace kickcat::CoE
"mag_x",
{}
};
CoE::addEntry<int16_t>(object,0,16,0,CoE::Access::READ | CoE::Access::TxPDO,CoE::DataType::INTEGER16,"mag_x",0);
CoE::addEntry<int16_t>(object, 0, 16, 0, CoE::Access::READ | CoE::Access::TxPDO, CoE::DataType::INTEGER16, "mag_x", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -167,7 +167,7 @@ namespace kickcat::CoE
"mag_y",
{}
};
CoE::addEntry<int16_t>(object,0,16,0,CoE::Access::READ | CoE::Access::TxPDO,CoE::DataType::INTEGER16,"mag_y",0);
CoE::addEntry<int16_t>(object, 0, 16, 0, CoE::Access::READ | CoE::Access::TxPDO, CoE::DataType::INTEGER16, "mag_y", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -179,7 +179,7 @@ namespace kickcat::CoE
"mag_z",
{}
};
CoE::addEntry<int16_t>(object,0,16,0,CoE::Access::READ | CoE::Access::TxPDO,CoE::DataType::INTEGER16,"mag_z",0);
CoE::addEntry<int16_t>(object, 0, 16, 0, CoE::Access::READ | CoE::Access::TxPDO, CoE::DataType::INTEGER16, "mag_z", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -191,7 +191,7 @@ namespace kickcat::CoE
"LED_R",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::WRITE | CoE::Access::RxPDO,CoE::DataType::UNSIGNED8,"LED_R",0);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::WRITE | CoE::Access::RxPDO, CoE::DataType::UNSIGNED8, "LED_R", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -203,7 +203,7 @@ namespace kickcat::CoE
"LED_G",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::WRITE | CoE::Access::RxPDO,CoE::DataType::UNSIGNED8,"LED_G",0);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::WRITE | CoE::Access::RxPDO, CoE::DataType::UNSIGNED8, "LED_G", 0);
dictionary.push_back(std::move(object));
}

Expand All @@ -215,10 +215,10 @@ namespace kickcat::CoE
"LED_B",
{}
};
CoE::addEntry<uint8_t>(object,0,8,0,CoE::Access::WRITE | CoE::Access::RxPDO,CoE::DataType::UNSIGNED8,"LED_B",0);
CoE::addEntry<uint8_t>(object, 0, 8, 0, CoE::Access::WRITE | CoE::Access::RxPDO, CoE::DataType::UNSIGNED8, "LED_B", 0);
dictionary.push_back(std::move(object));
}

return dictionary;
return dictionary;
}
}
4 changes: 2 additions & 2 deletions examples/slave/nuttx/xmc4800/main_foot.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace foot
int16_t gyroscopeZ;

int16_t temperature; // Celsius degrees
}__attribute__((packed));
} __attribute__((packed));

struct Input
{
Expand All @@ -43,7 +43,7 @@ namespace foot
} __attribute__((packed));
}

int main(int, char *[])
int main(int, char*[])
{
using namespace kickcat;

Expand Down
Loading
Loading