libicsneo/include/icsneo/communication/decoder.h

80 lines
2.2 KiB
C++

#ifndef __DECODER_H_
#define __DECODER_H_
#ifdef __cplusplus
#include "icsneo/communication/message/message.h"
#include "icsneo/communication/message/canmessage.h"
#include "icsneo/communication/packet.h"
#include "icsneo/communication/network.h"
#include "icsneo/communication/packet/iso9141packet.h"
#include "icsneo/api/eventmanager.h"
#include <queue>
#include <vector>
#include <memory>
namespace icsneo {
class Decoder {
public:
static uint64_t GetUInt64FromLEBytes(const uint8_t* bytes);
Decoder(device_eventhandler_t report) : report(report) {}
bool decode(std::shared_ptr<Message>& result, const std::shared_ptr<Packet>& packet);
uint16_t timestampResolution = 25;
private:
device_eventhandler_t report;
HardwareISO9141Packet::Decoder iso9141decoder;
#pragma pack(push, 1)
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4201) // nameless struct/union
#endif
union CoreMiniStatusBits_t {
struct {
unsigned just_reset : 1;
unsigned com_enabled : 1;
unsigned cm_is_running : 1;
unsigned cm_checksum_failed : 1;
unsigned cm_license_failed : 1;
unsigned cm_version_mismatch : 1;
unsigned cm_boot_off : 1;
unsigned hardware_failure : 1;//to check SRAM failure (for now)
unsigned isPassiveConnect : 1;///< Always zero. Set to one when neoVI connection is passive,i.e. no async traffic
unsigned usbComEnabled : 1;///< Set to one when USB Host PC has enabled communication.
unsigned linuxComEnabled : 1;///< Set to one when Android (Linux) has enabled communication.
unsigned cm_too_big : 1;
unsigned hidUsbState : 1;
unsigned fpgaUsbState : 1;
unsigned reserved : 2;
};
uint32_t dword;
};
#ifdef _MSC_VER
#pragma warning(pop)
#endif
struct HardwareResetStatusPacket {
uint16_t main_loop_time_25ns;
uint16_t max_main_loop_time_25ns;
CoreMiniStatusBits_t status;
uint8_t histo[6];//!< Can hold histogram performance data.
uint16_t spi1Kbps;//!< Spi1's kbps throughput.
uint16_t initBits;//!< Bitfield with init states of drivers, 1 is succes, 0 is fail.
uint16_t cpuMipsH;
uint16_t cpuMipsL;
uint16_t busVoltage;
uint16_t deviceTemperature;
};
#pragma pack(pop)
};
}
#endif // __cplusplus
#endif