13 return uavcan::CanFrame(
id, reinterpret_cast<const std::uint8_t*>(data.c_str()), data.length());
33 ENFORCE(sock1 >= 0 && sock2 >= 0);
139 ENFORCE(sock1 >= 0 && sock2 >= 0);
158 fcs[0].
mask = CanFrame::MaskExtID;
160 fcs[1].
id = 456789 | CanFrame::FlagEFF;
161 fcs[1].
mask = CanFrame::MaskExtID | CanFrame::FlagEFF;
164 fcs[2].
mask = CanFrame::MaskExtID | CanFrame::FlagEFF;
171 const auto EFF = CanFrame::FlagEFF;
180 for (
int i = 0; i < 7; i++)
182 if1.
poll(
true,
true);
183 if2.
poll(
true,
false);
214 static void testDriver(
const std::vector<std::string>& iface_names)
225 for (
auto ifn : iface_names)
227 std::cout <<
"Adding iface " << ifn << std::endl;
241 const unsigned AllIfacesMask = (1 << driver.
getNumIfaces()) - 1;
246 std::cout <<
"select() 1" << std::endl;
257 std::cout <<
"select() 2" << std::endl;
273 std::cout <<
"select() 3" << std::endl;
297 std::cout <<
"select() 4" << std::endl;
303 std::cout <<
"exit" << std::endl;
335 int main(
int argc,
const char** argv)
341 std::cerr <<
"Usage:\n\t" << argv[0] <<
" <can-iface-name-1> [can-iface-name-N...]" << std::endl;
345 std::vector<std::string> iface_names;
346 for (
int i = 1; i < argc; i++)
348 iface_names.emplace_back(argv[i]);
359 catch (
const std::exception& ex)
361 std::cerr <<
"Exception: " << ex.what() << std::endl;
static void testNonexistentIface()
static void testSocketRxTx(const std::string &iface_name)
uavcan::UtcTime getUtc() const override
uavcan::MonotonicTime getMonotonic() const override
std::uint8_t getNumIfaces() const override
static uavcan::MonotonicTime tsMonoOffsetMs(std::int64_t ms)
int addIface(const std::string &iface_name)
static void testSocketFilters(const std::string &iface_name)
void adjustUtc(const uavcan::UtcDuration adjustment) override
Implicitly convertible to/from uavcan.Timestamp.
int main(int argc, const char **argv)
SocketCanIface * getIface(std::uint8_t iface_index) override
static int openSocket(const std::string &iface_name)
void poll(bool read, bool write)
static void testDriver(const std::vector< std::string > &iface_names)
std::int16_t send(const uavcan::CanFrame &frame, const uavcan::MonotonicTime tx_deadline, const uavcan::CanIOFlags flags) override
std::int16_t configureFilters(const uavcan::CanFilterConfig *const filter_configs, const std::uint16_t num_configs) override
Adjust the clock only for the current driver instance.
std::int16_t receive(uavcan::CanFrame &out_frame, uavcan::MonotonicTime &out_ts_monotonic, uavcan::UtcTime &out_ts_utc, uavcan::CanIOFlags &out_flags) override
static uavcan::CanFrame makeFrame(std::uint32_t id, const std::string &data)
static const CanIOFlags CanIOFlagLoopback
static MonotonicDuration fromMSec(int64_t ms)
std::int16_t select(uavcan::CanSelectMasks &inout_masks, const uavcan::CanFrame *(&)[uavcan::MaxCanIfaces], uavcan::MonotonicTime blocking_deadline) override
std::uint64_t getErrorCount() const override
decltype(errors_) const & getErrors() const