Overview
The SbusParser is a C++ library designed for encoding and decoding SBUS protocol data. The library includes basic methods for preparing SBUS data buffer (encoding) and interpreting SBUS data buffer (decoding). It utilizes C++17 standard. The library provides simple interface and doesn’t have third party dependencies. Also, the library provides test application that uses a serial port. The library doesn’t have third-party dependencies, but test application depends on SerialPort library (provides methods to work with serial ports, source code included, Apache 2.0 license).
Documentation
Documentation: GO TO DOCUMENTATION
Simple interface
class SbusParser
{
public:
/// Get library version.
static std::string getVersion();
/// Encode SBUS packet.
bool encode(uint8_t *buffer, SbusData &sbusData);
/// Decode SBUS packet byte-by-byte.
bool decode(uint8_t nextByte, SbusData &sbusData);
};
Encode SBUS command example
cr::clib::SbusData sbusDataOut;
for (int i = 0; i < 16; i++)
sbusDataOut.ch[i] = 1024;
sbusDataOut.ch16 = true;
sbusDataOut.ch17 = false;
// Encode outgoing data.
uint8_t bufferOut[25];
if (!sbusParser.encode(bufferOut, sbusDataOut))
std::cout << "Error encoding data." << std::endl;
// Write outgoing data.
if (serialPortOut.write(bufferOut, 25) != 25)
std::cout << "Error writing data to serial port." << std::endl;
Decode SBUS message example
uint8_t buffer[128];
int bytesRead = serialPortIn.read(buffer, 128);
cr::clib::SbusData sbusDataIn;
for (int i = 0; i < bytesRead; i++)
{
if (sbusParser.decode(buffer[i], sbusDataIn))
{
// Sbus data detected.
std::cout << "Sbus data detected: " << sbusDataDetected << std::endl;
std::cout << "Ch0: " << sbusDataIn.ch[0] << std::endl;
std::cout << "Ch1: " << sbusDataIn.ch[1] << std::endl;
std::cout << "Ch2: " << sbusDataIn.ch[2] << std::endl;
std::cout << "Ch3: " << sbusDataIn.ch[3] << std::endl;
std::cout << "Ch4: " << sbusDataIn.ch[4] << std::endl;
std::cout << "Ch5: " << sbusDataIn.ch[5] << std::endl;
std::cout << "Ch6: " << sbusDataIn.ch[6] << std::endl;
std::cout << "Ch7: " << sbusDataIn.ch[7] << std::endl;
std::cout << "Ch8: " << sbusDataIn.ch[8] << std::endl;
std::cout << "Ch9: " << sbusDataIn.ch[9] << std::endl;
std::cout << "Ch10: " << sbusDataIn.ch[10] << std::endl;
std::cout << "Ch11: " << sbusDataIn.ch[11] << std::endl;
std::cout << "Ch12: " << sbusDataIn.ch[12] << std::endl;
std::cout << "Ch13: " << sbusDataIn.ch[13] << std::endl;
std::cout << "Ch14: " << sbusDataIn.ch[14] << std::endl;
std::cout << "Ch15: " << sbusDataIn.ch[15] << std::endl;
std::cout << "Ch16: " << (sbusDataIn.ch16 ? "true" : "false") << std::endl;
std::cout << "Ch17: " << (sbusDataIn.ch17 ? "true" : "false") << std::endl;
}
}