#include <labbcan/common/labbcan_test_helpers.h>
#include <thread>
#include <iostream>
#include <cmath>
#include <usl/core/PollingTimer.h>
#include <usl/core/Thread.h>
#include <log4cplus/logger.h>
#include <diag/diag.h>
using namespace Usl;
#define BOOST_TEST_MODULE capi_device_retrival_test
#include <boost/test/unit_test.hpp>
using namespace boost::unit_test;
struct ArgsFixture {
ArgsFixture(): argc(framework::master_test_suite().argc),
argv(framework::master_test_suite().argv){}
int argc;
char **argv;
};
BOOST_GLOBAL_FIXTURE( ArgsFixture );
static long Result;
BOOST_FIXTURE_TEST_CASE(testCapiOpen, ArgsFixture)
{
using namespace boost::unit_test;
const char* ConfigPath = "config/testconfig_qmixsdk";
if (argc > 1)
{
ConfigPath = argv[1];
}
REQUIRE_ERR_NOERR(Result);
REQUIRE_ERR_NOERR(Result);
REQUIRE_ERR_NOERR(Result);
}
struct tEvent
{
long Id;
long Data[2];
char EventString[256];
};
void handleDeviceEmergencyEvent(const tEvent& Event)
{
char DeviceName[64];
Result =
LCB_GetDevName(Event.Device, DeviceName,
sizeof(DeviceName));
CHECK_RETURN_CODE(Result);
char ErrorMessage[128];
Result =
LCB_GetDevErrMsg(Event.Device, Event.Data[0], ErrorMessage,
sizeof(ErrorMessage));
CHECK_RETURN_CODE(Result);
std::cout << "Device " << DeviceName << " emitted emergency event 0x"
<< std::hex << Event.Data[0] << std::dec << " - " << ErrorMessage << std::endl;
}
void handleDataLinkLayerEvent(const tEvent& Event)
{
char ErrorMessage[128];
Result =
LCB_GetErrMsg(Event.Data[0], ErrorMessage,
sizeof(ErrorMessage));
CHECK_RETURN_CODE(Result);
std::cout << "Data link layer error 0x"
<< std::hex << abs(Event.Data[0]) << std::dec << " - " << ErrorMessage << std::endl;
}
void handleDeviceGuardEvent(const tEvent& Event)
{
char DeviceName[64];
Result =
LCB_GetDevName(Event.Device, DeviceName,
sizeof(DeviceName));
CHECK_RETURN_CODE(Result);
std::string EventString = "Device guard event from device ";
EventString += DeviceName;
EventString += ": ";
switch (Event.Data[0])
{
}
std::cout << EventString << std::endl;
}
BOOST_AUTO_TEST_CASE(testEventQueue)
{
tEvent Event;
CPollingTimer TimeoutTimer(60000);
while (!TimeoutTimer.isExpired())
{
Result =
LCB_ReadEventEx(&Event.Id, &Event.Device, &Event.Data[0], &Event.Data[1],
Event.EventString, sizeof(Event.EventString));
{
BOOST_TEST_MESSAGE("Event queue is empty");
std::cout << "Event queue is empty" << std::endl;
std::this_thread::sleep_for(1s);
continue;
}
{
BOOST_FAIL("Error reading event queue");
}
BOOST_TEST_MESSAGE("Received event");
std::cout << Event.EventString << std::endl;
switch (Event.Id)
{
}
}
}
BOOST_AUTO_TEST_CASE(testCapiClose)
{
std::this_thread::sleep_for(2s);
}