The event-triggered frame 0x10 is associatted with unconditional frames 0x11 from slave 1 and 0x12 from slave 2.
Schedule table contains event-triggered frame 0x10.
The collision resolving schedule table contains unconditionnal frames 0x11 and 0x12.
#include <vector>
#include <iostream>
#include <thread>
#include <array>
#include <string>
#define AGHAF_DYNAMIC_LIBRARY_INIT
#include <iostream>
#include <iomanip>
void onLinMasterTx(
uint64_t timestamp,
uint8_t fid,
uint8_t datalen,
uint8_t const* data,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "datalen: " << static_cast<int>(datalen) << std::endl;
std::cout << "fid: " << static_cast<int>(fid) << std::endl;
if (data != nullptr) {
std::cout << "0x";
for (uint8_t i = 0; i < datalen; ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(data[i]);
}
std::cout << std::endl;
} else {
std::cout << "no data" << std::endl;
}
}
void onLinMasterRx(
uint64_t timestamp,
uint8_t fid,
uint8_t datalen,
uint8_t const* data,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "datalen: " << static_cast<int>(datalen) << std::endl;
std::cout << "fid: " << static_cast<int>(fid) << std::endl;
std::cout << "0x";
for (uint8_t i = 0; i < datalen; ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(data[i]);
}
std::cout << std::endl;
}
void onLinMasterError(
uint64_t timestamp,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "error: " << static_cast<int>(error) << std::endl;
}
void onLinSlave1Tx(
uint64_t timestamp,
uint8_t fid,
uint8_t datalen,
uint8_t const* data,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "datalen: " << static_cast<int>(datalen) << std::endl;
std::cout << "fid: " << static_cast<int>(fid) << std::endl;
if (data != nullptr) {
std::cout << "0x";
for (uint8_t i = 0; i < datalen; ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(data[i]);
}
std::cout << std::endl;
} else {
std::cout << "no data" << std::endl;
}
}
void onLinSlave1Rx(
uint64_t timestamp,
uint8_t fid,
uint8_t datalen,
uint8_t const* data,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "datalen: " << static_cast<int>(datalen) << std::endl;
std::cout << "fid: " << static_cast<int>(fid) << std::endl;
std::cout << "0x";
for (uint8_t i = 0; i < datalen; ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(data[i]);
}
std::cout << std::endl;
}
void onLinSlave1Error(
uint64_t timestamp,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "error: " << static_cast<int>(error) << std::endl;
}
void onLinSlave2Tx(
uint64_t timestamp,
uint8_t fid,
uint8_t datalen,
uint8_t const* data,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "datalen: " << static_cast<int>(datalen) << std::endl;
std::cout << "fid: " << static_cast<int>(fid) << std::endl;
if (data != nullptr) {
std::cout << "0x";
for (uint8_t i = 0; i < datalen; ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(data[i]);
}
std::cout << std::endl;
} else {
std::cout << "no data" << std::endl;
}
}
void onLinSlave2Rx(
uint64_t timestamp,
uint8_t fid,
uint8_t datalen,
uint8_t const* data,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "datalen: " << static_cast<int>(datalen) << std::endl;
std::cout << "fid: " << static_cast<int>(fid) << std::endl;
std::cout << "0x";
for (uint8_t i = 0; i < datalen; ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(data[i]);
}
std::cout << std::endl;
}
void onLinSlave2Error(
uint64_t timestamp,
void *userContext)
{
(void) timestamp;
(void) userContext;
std::cout << __FUNCTION__ << std::endl;
std::cout << "error: " << static_cast<int>(error) << std::endl;
}
int main()
{
#ifdef _WIN32
AGHAF_loadLibrary(AGHAF_DEFAULT_FILENAME);
#endif
if (count > 0) {
uint32_t deviceInfoNumber = 0;
if (deviceInfoNumber > 2) {
int serialNumber1 = std::stoi(devicesInfo[0].serialNo);
int serialNumber2 = std::stoi(devicesInfo[1].serialNo);
int serialNumber3 = std::stoi(devicesInfo[2].serialNo);
if (serialNumber1 > serialNumber2) {
if (serialNumber1 > serialNumber3) {
devicesInfo[0].productNo,
devicesInfo[0].serialNo);
devicesInfo[1].productNo,
devicesInfo[1].serialNo);
devicesInfo[2].productNo,
devicesInfo[2].serialNo);
} else {
devicesInfo[2].productNo,
devicesInfo[2].serialNo);
devicesInfo[0].productNo,
devicesInfo[0].serialNo);
devicesInfo[1].productNo,
devicesInfo[1].serialNo);
}
} else {
if (serialNumber2 > serialNumber3) {
devicesInfo[1].productNo,
devicesInfo[1].serialNo);
devicesInfo[0].productNo,
devicesInfo[0].serialNo);
devicesInfo[2].productNo,
devicesInfo[2].serialNo);
} else {
devicesInfo[2].productNo,
devicesInfo[2].serialNo);
devicesInfo[0].productNo,
devicesInfo[0].serialNo);
devicesInfo[1].productNo,
devicesInfo[1].serialNo);
}
}
devicesInfo[0].productNo,
devicesInfo[0].serialNo);
devicesInfo[1].productNo,
devicesInfo[1].serialNo);
devicesInfo[2].productNo,
devicesInfo[2].serialNo);
if (linCount1 > 0 && linCount2 > 0 && linCount3 > 0) {
19200);
19200);
19200);
std::array<uint8_t, 1> event1 = { 0x12 };
std::array<uint8_t, 2> frame1 = { 0x00, 0x85 };
std::array<uint8_t, 1> event2 = { 0x11 };
std::array<uint8_t, 2> frame2 = { 0x00, 0xF0 };
linMaster,
0x10,
0,
static_cast<uint8_t>(frame2.size()),
nullptr);
linMaster,
0x11,
0,
static_cast<uint8_t>(frame2.size()),
nullptr);
linMaster,
0x12,
0,
static_cast<uint8_t>(frame1.size()),
nullptr);
linSlave1,
0x10,
static_cast<uint8_t>(event2.size()),
event2.data());
linSlave1,
0x11,
static_cast<uint8_t>(frame2.size()),
frame2.data());
linSlave2,
0x10,
static_cast<uint8_t>(event1.size()),
event1.data());
linSlave2,
0x12,
static_cast<uint8_t>(frame1.size()),
frame1.data());
std::this_thread::sleep_for(std::chrono::milliseconds(100));
frame1[1] = 0xC0;
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
}
#ifdef _WIN32
AGHAF_unloadLibrary();
#endif
return 0;
}