diff --git a/.gitignore b/.gitignore
index 220b2cb..dd74cd4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,5 +54,5 @@ compile_commands.json
*_qmlcache.qrc
-!/Dependencies/
-!/ExampleDLLs/
+!/Dependencies/*.dll
+!/ExampleDLLs/*.dll
diff --git a/CetHub/hubmainwidget.cpp b/CetHub/hubmainwidget.cpp
index ee7811d..6724c38 100644
--- a/CetHub/hubmainwidget.cpp
+++ b/CetHub/hubmainwidget.cpp
@@ -14,63 +14,78 @@ HubMainWidget::HubMainWidget(QWidget *parent)
});
sysTimer.start(1000);
- getModules(nullptr);
+ getModules();
}
-bool HubMainWidget::getModules(QNetworkReply *reply)
+bool HubMainWidget::getModules()
{
-
- reply->readAll();
-
- dllInfo LineRingerLib;
- LineRingerLib.libName = "LineRingerLib";
- LineRingerLib.initFuncName = "init";
-
- LineRingerLib.adr = "https://git.arktika.cyou/";
- connectLibrary(LineRingerLib);
+ dllInfo UnionCom;
+ UnionCom.libName = "Терминал CAN, RS, Modbus";
+ UnionCom.fileName = "UnionCom";
+ UnionCom.initFuncName = "init";
+ UnionCom.adr = "https://git.arktika.cyou/Tenocha/UnionComDLL";
+ UnionCom.downloadAdr = "https://git.arktika.cyou/Tenocha/UnionComDLL/archive/Release.zip";
+ connectLibrary(UnionCom);
dllInfo M3KTE_TERM;
+ M3KTE_TERM.libName = "МЗКТЕ Терминал";
M3KTE_TERM.fileName = "M3KTE_TERM";
M3KTE_TERM.initFuncName = "init";
- M3KTE_TERM.adr = "https://git.arktika.cyou/Tenocha/M3KTE_TERM/releases/download/Pre-release/M3KTETERM.rar";
+ M3KTE_TERM.adr = "https://git.arktika.cyou/Tenocha/M3KTE_TERM";
+ M3KTE_TERM.downloadAdr = "https://git.arktika.cyou/Tenocha/M3KTE_TERM/releases/download/Pre-release/M3KTETERM.rar";
connectLibrary(M3KTE_TERM);
+
+ dllInfo LineRingerLib;
+ LineRingerLib.libName = "Поиск modbus устройств";
+ LineRingerLib.fileName = "LineRingerLib32Bit";
+ LineRingerLib.initFuncName = "init";
+ LineRingerLib.adr = "https://git.arktika.cyou/Tenocha/LineRingerDLL";
+ LineRingerLib.downloadAdr = "https://git.arktika.cyou/Tenocha/LineRingerDLL/archive/Release.zip";
+ connectLibrary(LineRingerLib);
+
+ return true;
}
bool HubMainWidget::connectLibrary(dllInfo modul)
{
QLibrary myLib(modul.fileName);
myLib.load();
+ //QString check = myLib.errorString();
unsigned newRow = ui->libraryTable->rowCount();
ui->libraryTable->insertRow(newRow);
- QTableWidgetItem *item = new QTableWidgetItem();
ui->libraryTable->setItem(newRow, 0, new QTableWidgetItem(modul.libName));
+ ui->libraryTable->setItem(newRow, 1, new QTableWidgetItem(modul.fileName));
+ QTableWidgetItem *item = new QTableWidgetItem();
+ item->setText("");
QLabel *url = new QLabel();
url->setText(tr("Source").arg(modul.adr.toString()));
url->setTextFormat(Qt::RichText);
url->setTextInteractionFlags(Qt::TextBrowserInteraction);
url->setOpenExternalLinks(true);
- ui->libraryTable->setCellWidget(newRow, 2, url);
+ ui->libraryTable->setCellWidget(newRow, 3, url);
//ui->libraryTable->setItem(newRow, 2, new QTableWidgetItem(modul.adr));
if(myLib.isLoaded())
{
- typedef QWidget* (*LR_Init_Function)(QWidget*);
- LR_Init_Function LR_Init = (LR_Init_Function) myLib.resolve(modul.initFuncName.toUtf8());
- if(LR_Init)
+ typedef QWidget* (*DLL_Init_Function)(QWidget*);
+ DLL_Init_Function DLL_Init = (DLL_Init_Function) myLib.resolve(modul.initFuncName.toUtf8());
+ if(DLL_Init)
{
item->setCheckState(Qt::Checked);
- ui->libraryTable->setItem(newRow, 1, item);
- modul.widget = LR_Init(nullptr);
+ ui->libraryTable->setItem(newRow, 2, item);
+ modul.widget = DLL_Init(nullptr);
connectedModules.append(modul);
ui->appBox->addItem(modul.libName);
+ ui->libraryTable->resizeColumnsToContents();
return true;
}
}
else
{
item->setCheckState(Qt::Unchecked);
- ui->libraryTable->setItem(newRow, 1, item);
+ ui->libraryTable->setItem(newRow, 2, item);
connectedModules.append(modul);
ui->appBox->addItem(modul.libName);
+ ui->libraryTable->resizeColumnsToContents();
}
return false;
}
diff --git a/CetHub/hubmainwidget.h b/CetHub/hubmainwidget.h
index 4cf022b..7e57af1 100644
--- a/CetHub/hubmainwidget.h
+++ b/CetHub/hubmainwidget.h
@@ -42,7 +42,7 @@ private:
QVectorconnectedModules;
- bool getModules(QNetworkReply *reply);
+ bool getModules();
bool connectLibrary(dllInfo modul);
Ui::HubMainWidget *ui;
diff --git a/CetHub/hubmainwidget.ui b/CetHub/hubmainwidget.ui
index 74e6a06..b76c91b 100644
--- a/CetHub/hubmainwidget.ui
+++ b/CetHub/hubmainwidget.ui
@@ -91,19 +91,24 @@
QAbstractItemView::NoEditTriggers
- false
+ true
false
- false
+ true
Modul
+
+
+ DLL
+
+
Finded
diff --git a/Debug/debug/CetHub.exe b/Debug/debug/CetHub.exe
index 9ff19c3..8656750 100644
Binary files a/Debug/debug/CetHub.exe and b/Debug/debug/CetHub.exe differ
diff --git a/Debug/debug/slcan.h b/Debug/debug/slcan.h
new file mode 100644
index 0000000..c9dc89e
--- /dev/null
+++ b/Debug/debug/slcan.h
@@ -0,0 +1,510 @@
+#ifndef __SLCAN_H__
+#define __SLCAN_H__
+
+#include
+
+#define STDCALL __stdcall
+#ifdef SLCAN_EXPORT
+#define SLCANAPI __declspec(dllexport)
+#else
+#define SLCANAPI __declspec(dllimport)
+#endif
+
+#define SLCAN_PROPERTY_INDEX_LINKNAME 0
+#define SLCAN_PROPERTY_INDEX_INSTANCEID 1
+
+#define SLCAN_PROPERTY_INDEX_DEVICEDESC 2
+#define SLCAN_PROPERTY_INDEX_FRIENDLYNAME 3
+#define SLCAN_PROPERTY_INDEX_PHOBJECTNAME 4
+#define SLCAN_PROPERTY_INDEX_MFG 5
+#define SLCAN_PROPERTY_INDEX_LOCATIONINFO 6
+#define SLCAN_PROPERTY_INDEX_ENUMERATOR 7
+#define SLCAN_PROPERTY_INDEX_CLASS 8
+#define SLCAN_PROPERTY_INDEX_CLASSGUID 9
+#define SLCAN_PROPERTY_INDEX_SERVICE 10
+#define SLCAN_PROPERTY_INDEX_DRIVER 11
+#define SLCAN_PROPERTY_INDEX_PORTNAME 12
+#define SLCAN_PROPERTY_INDEX_PRODUCT 13L
+#define SLCAN_PROPERTY_INDEX_MANUFACTURER 14L
+#define SLCAN_PROPERTY_INDEX_CONFIGURATION 15L
+#define SLCAN_PROPERTY_INDEX_INTERFACE 16L
+#define SLCAN_PROPERTY_INDEX_SERIAL 17L
+#define SLCAN_PROPERTY_INDEX_ALIAS 18L
+#define SLCAN_PROPERTY_INDEX_CHANNELLINK 19L
+#define SLCAN_PROPERTY_INDEX_SERIALID 20L
+
+
+#define SLCAN_MODE_CONFIG 0x00
+#define SLCAN_MODE_NORMAL 0x01
+#define SLCAN_MODE_LISTENONLY 0x02
+#define SLCAN_MODE_LOOPBACK 0x03
+#define SLCAN_MODE_SLEEP 0x04
+
+#define SLCAN_BR_CIA_1000K 0x8000
+#define SLCAN_BR_CIA_800K 0x8001
+#define SLCAN_BR_CIA_500K 0x8002
+#define SLCAN_BR_CIA_250K 0x8003
+#define SLCAN_BR_CIA_125K 0x8004
+#define SLCAN_BR_CIA_50K 0x8005
+#define SLCAN_BR_CIA_20K 0x8006
+#define SLCAN_BR_CIA_10K 0x8007
+#define SLCAN_BR_400K 0x8008
+#define SLCAN_BR_200K 0x8009
+#define SLCAN_BR_100K 0x800A
+#define SLCAN_BR_83333 0x800B
+#define SLCAN_BR_33333 0x800C
+#define SLCAN_BR_25K 0x800D
+#define SLCAN_BR_5K 0x800E
+#define SLCAN_BR_30K 0x800F
+#define SLCAN_BR_300K 0x8010
+#define SLCAN_BR_LASTINDEX SLCAN_BR_300K
+
+
+
+
+
+#define SLCAN_CAP_MODE_NORMAL 0x01
+#define SLCAN_CAP_MODE_LISTEN_ONLY 0x02
+#define SLCAN_CAP_MODE_LOOP_BACK 0x04
+#define SLCAN_CAP_MODE_SLEEP 0x08
+
+#define SLCAN_CAP_TXMODE_ONE_SHOT 0x01
+#define SLCAN_CAP_TXMODE_TIMESTAMP 0x02
+
+
+#define SLCAN_CAP_CONTR_EXTERNAL 0x00
+#define SLCAN_CAP_CONTR_MCP2515 0x01
+#define SLCAN_CAP_CONTR_SJA1000 0x02
+
+#define SLCAN_CAP_CONTR_INTERNAL 0x80
+#define SLCAN_CAP_CONTR_LPC 0x81
+#define SLCAN_CAP_CONTR_STM32 0x82
+#define SLCAN_CAP_CONTR_STM8 0x83
+#define SLCAN_CAP_CONTR_PIC 0x84
+#define SLCAN_CAP_CONTR_PIC_ECAN 0x85
+
+#define SLCAN_CAP_PHYS_HS 0x01
+#define SLCAN_CAP_PHYS_LS 0x02
+#define SLCAN_CAP_PHYS_SW 0x04
+#define SLCAN_CAP_PHYS_J1708 0x08
+#define SLCAN_CAP_PHYS_LIN 0x10
+#define SLCAN_CAP_PHYS_KLINE 0x20
+
+#define SLCAN_CAP_PHYS_LOAD 0x01
+
+#define SLCAN_CAP_BITRATE_INDEX 0x01
+#define SLCAN_CAP_BITRATE_CUSTOM 0x02
+#define SLCAN_CAP_BITRATE_AUTOMATIC 0x04
+
+
+#define SLCAN_EVT_LEVEL_RX_MSG 0
+#define SLCAN_EVT_LEVEL_TIME_STAMP 1
+#define SLCAN_EVT_LEVEL_TX_MSG 2
+#define SLCAN_EVT_LEVEL_BUS_STATE 3
+#define SLCAN_EVT_LEVEL_COUNTS 4
+#define SLCAN_EVT_LEVEL_ERRORS 5
+
+#define SLCAN_EVT_TYPE_RX 0x0
+#define SLCAN_EVT_TYPE_START_TX 0x1
+#define SLCAN_EVT_TYPE_END_TX 0x2
+#define SLCAN_EVT_TYPE_ABORT_TX 0x3
+#define SLCAN_EVT_TYPE_BUS_STATE 0x4
+#define SLCAN_EVT_TYPE_ERROR_COUNTS 0x5
+#define SLCAN_EVT_TYPE_BUS_ERROR 0x6
+#define SLCAN_EVT_TYPE_ARBITRATION_ERROR 0x7
+#define SLCAN_EVT_STAMP_INC 0xF
+
+#define SLCAN_BUS_STATE_ERROR_ACTIVE 0x00
+#define SLCAN_BUS_STATE_ERROR_ACTIVE_WARN 0x01
+#define SLCAN_BUS_STATE_ERROR_PASSIVE 0x02
+#define SLCAN_BUS_STATE_BUSOFF 0x03
+
+#define SLCAN_MES_INFO_EXT 0x01
+#define SLCAN_MES_INFO_RTR 0x02
+#define SLCAN_MES_INFO_ONESHOT 0x04
+
+
+
+#define SLCAN_DEVOP_CREATE 0x00000000
+#define SLCAN_DEVOP_CREATEHANDLE 0x00000001
+#define SLCAN_DEVOP_OPEN 0x00000002
+#define SLCAN_DEVOP_CLOSE 0x00000003
+#define SLCAN_DEVOP_DESTROYHANDLE 0x00000004
+#define SLCAN_DEVOP_DESTROY 0x00000005
+
+
+#define SLCAN_INVALID_HANDLE_ERROR 0xE0001001
+#define SLCAN_DEVICE_INVALID_HANDLE_ERROR 0xE0001120
+#define SLCAN_HANDLE_INIT_ERROR 0xE0001017
+#define SLCAN_DEVICE_NOTOPEN_ERROR 0xE0001121
+
+#define SLCAN_EVT_ERR_TYPE_BIT 0x00
+#define SLCAN_EVT_ERR_TYPE_FORM 0x01
+#define SLCAN_EVT_ERR_TYPE_STUFF 0x02
+#define SLCAN_EVT_ERR_TYPE_OTHER 0x03
+
+#define SLCAN_EVT_ERR_DIR_TX 0x00
+#define SLCAN_EVT_ERR_DIR_RX 0x01
+
+#define SLCAN_EVT_ERR_FRAME_SOF 0x03
+#define SLCAN_EVT_ERR_FRAME_ID28_ID21 0x02
+#define SLCAN_EVT_ERR_FRAME_ID20_ID18 0x06
+#define SLCAN_EVT_ERR_FRAME_SRTR 0x04
+#define SLCAN_EVT_ERR_FRAME_IDE 0x05
+#define SLCAN_EVT_ERR_FRAME_ID17_ID13 0x07
+#define SLCAN_EVT_ERR_FRAME_ID12_ID5 0x0F
+#define SLCAN_EVT_ERR_FRAME_ID4_ID0 0x0E
+#define SLCAN_EVT_ERR_FRAME_RTR 0x0C
+#define SLCAN_EVT_ERR_FRAME_RSRV0 0x0D
+#define SLCAN_EVT_ERR_FRAME_RSRV1 0x09
+#define SLCAN_EVT_ERR_FRAME_DLC 0x0B
+#define SLCAN_EVT_ERR_FRAME_DATA 0x0A
+#define SLCAN_EVT_ERR_FRAME_CRC_SEQ 0x08
+#define SLCAN_EVT_ERR_FRAME_CRC_DEL 0x18
+#define SLCAN_EVT_ERR_FRAME_ACK_SLOT 0x19
+#define SLCAN_EVT_ERR_FRAME_ACK_DEL 0x1B
+#define SLCAN_EVT_ERR_FRAME_EOF 0x1A
+#define SLCAN_EVT_ERR_FRAME_INTER 0x12
+#define SLCAN_EVT_ERR_FRAME_AER_FLAG 0x11
+#define SLCAN_EVT_ERR_FRAME_PER_FLAG 0x16
+#define SLCAN_EVT_ERR_FRAME_TDB 0x13
+#define SLCAN_EVT_ERR_FRAME_ERR_DEL 0x17
+#define SLCAN_EVT_ERR_FRAME_OVER_FLAG 0x1C
+
+#define SLCAN_TX_STATUS_OK 0x00
+#define SLCAN_TX_STATUS_TIMEOUT 0x01
+#define SLCAN_TX_STATUS_BUSOFF 0x02
+#define SLCAN_TX_STATUS_ABORT 0x03
+#define SLCAN_TX_STATUS_NOT_ENA 0x04
+#define SLCAN_TX_STATUS_ERROR_ONE_SHOT 0x05
+#define SLCAN_TX_STATUS_INVALID_MODE 0x06
+#define SLCAN_TX_STATUS_UNKNOWN 0x0F
+
+#define SLCAN_PURGE_TX_ABORT 0x01
+#define SLCAN_PURGE_RX_ABORT 0x02
+#define SLCAN_PURGE_TX_CLEAR 0x04
+#define SLCAN_PURGE_RX_CLEAR 0x08
+
+#pragma pack(push,1)
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+typedef PVOID HSLCAN;
+
+typedef struct _SLCAN_CAPABILITIES{
+
+ BYTE bModes;
+ BYTE bTXModes;
+ BYTE bMaxEventLevel;
+ BYTE bController;
+ BYTE bPhysical;
+ BYTE bPhysicalLoad;
+ BYTE bBitrates;
+ BYTE bAdvancedModes;
+ DWORD dwCanBaseClk;
+ DWORD dwTimeStampClk;
+ WORD wMaxBRP;
+}SLCAN_CAPABILITIES,*PSLCAN_CAPABILITIES;
+
+typedef struct _SLCAN_BITRATE {
+ WORD BRP;
+ BYTE TSEG1;
+ BYTE TSEG2;
+ BYTE SJW;
+ BYTE SAM;
+}SLCAN_BITRATE,*PSLCAN_BITRATE;
+
+
+typedef void (STDCALL* SLCAN_DEVICE_CALLBACK)(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ DWORD dwOperation,
+ PVOID pContext,
+ DWORD dwContextSize
+);
+
+typedef VOID (STDCALL* SLCAN_DEVICELIST_CALLBACK)(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ PVOID pContext,
+ DWORD dwContextSize
+);
+
+typedef struct _SLCAN_MESSAGE{
+ BYTE Info;
+ DWORD ID;
+ BYTE DataCount;
+ BYTE Data[8];
+}SLCAN_MESSAGE,*PSLCAN_MESSAGE;
+
+typedef struct _SLCAN_TXMESSAGE{
+ LONG dwDelay;
+ SLCAN_MESSAGE Msg;
+}SLCAN_TXMESSAGE,*PSLCAN_TXMESSAGE;
+
+typedef struct _SLCAN_EVENT{
+ BYTE EventType;
+ DWORD TimeStampLo;
+ union {
+ SLCAN_MESSAGE Msg;
+ DWORD TimeStamp[2];
+ DWORD64 TimeStamp64;
+ struct {
+ BYTE BusMode;
+ BYTE Dummy1;
+ BYTE ErrCountRx;
+ BYTE ErrCountTx;
+ BYTE ErrType;
+ BYTE ErrDir;
+ BYTE ErrFrame;
+ BYTE LostArbitration;
+ };
+ };
+}SLCAN_EVENT,*PSLCAN_EVENT;
+
+typedef struct _SLCAN_STATE{
+ BYTE BusMode;
+ BYTE Dummy1;
+ BYTE ErrCountRX;
+ BYTE ErrCountTX;
+}SLCAN_STATE,*PSLCAN_STATE;
+
+typedef union _SLCAN_TIMESTAMP{
+ UINT64 Value;
+ DWORD dwValue[2];
+ USHORT wValue[4];
+ BYTE bValue[8];
+}SLCAN_TIMESTAMP,*PSLCAN_TIMESTAMP;
+
+
+
+SLCANAPI BOOL STDCALL SlCan_Load(
+ SLCAN_DEVICE_CALLBACK DeviceProc,
+ SLCAN_DEVICELIST_CALLBACK DeviceListProc
+);
+
+SLCANAPI BOOL STDCALL SlCan_Free(
+ BOOL bDoCallBack
+);
+
+SLCANAPI BOOL STDCALL SlCan_Update();
+
+SLCANAPI HSLCAN STDCALL SlCan_GetDevice(
+ DWORD dwIndex
+);
+
+SLCANAPI DWORD STDCALL SlCan_GetDeviceCount();
+
+
+SLCANAPI HANDLE STDCALL SlCan_DeviceGetHandle(
+ DWORD dwIndex
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetProperty(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ PCHAR pBuf,
+ DWORD dwSize
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetPropertyW(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ PWCHAR pBuf,
+ DWORD dwSize
+);
+
+SLCANAPI HKEY STDCALL SlCan_DeviceGetRegKey(
+ HSLCAN hDevice,
+ DWORD dwIndex
+);
+
+SLCANAPI PVOID STDCALL SlCan_DeviceSetContext(
+ HSLCAN hDevice,
+ PVOID pBuf,
+ DWORD dwBufSize
+);
+
+SLCANAPI PVOID STDCALL SlCan_DeviceGetContext(
+ HSLCAN hDevice
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetContextSize(
+ HSLCAN hDevice
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetAlias(
+ HSLCAN hDevice,
+ PCHAR pBuf
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetAliasW(
+ HSLCAN hDevice,
+ PWCHAR pBuf
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetAlias(
+ HSLCAN hDevice,
+ PCHAR pBuf,
+ DWORD dwSize
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetAliasW(
+ HSLCAN hDevice,
+ PWCHAR pBuf,
+ DWORD dwSize
+);
+SLCANAPI BOOL STDCALL SlCan_DeviceGetCapabilities(
+ HSLCAN hDevice,
+ PSLCAN_CAPABILITIES pCapabilities
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceOpen(
+ HSLCAN hDevice
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceClose(
+ HSLCAN hDevice
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetMode(
+ HSLCAN hDevice,
+ DWORD dwMode
+);
+SLCANAPI BOOL STDCALL SlCan_DeviceGetMode(
+ HSLCAN hDevice,
+ PDWORD pdwMode
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetState(
+ HSLCAN hDevice,
+ PSLCAN_STATE pState
+);
+
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetTXTimeOut(
+ HSLCAN hDevice,
+ DWORD dwMillisecond
+);
+SLCANAPI BOOL STDCALL SlCan_DeviceGetTXTimeOut(
+ HSLCAN hDevice,
+ PDWORD pdwMillisecond
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetBitRate(
+ HSLCAN hDevice,
+ PSLCAN_BITRATE pBitRate
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetBitRate(
+ HSLCAN hDevice,
+ PSLCAN_BITRATE pBitRate
+);
+
+
+SLCANAPI BOOL STDCALL SlCan_DeviceEnaRec(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetLatency(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetLatency(
+ HSLCAN hDevice,
+ PBYTE pbValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DevicePurge(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetEventLevel(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetEventLevel(
+ HSLCAN hDevice,
+ PBYTE pbValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetStartTimeStamp(
+ HSLCAN hDevice,
+ PSLCAN_TIMESTAMP pValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetStartTimeStamp(
+ HSLCAN hDevice,
+ PSLCAN_TIMESTAMP pValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetTimeStamp(
+ HSLCAN hDevice,
+ PSLCAN_TIMESTAMP pValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetTimeStampPeriod(
+ HSLCAN hDevice,
+ LONG lValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetTimeStampPeriod(
+ HSLCAN hDevice,
+ PLONG plValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetExMode(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetExMode(
+ HSLCAN hDevice,
+ PBYTE pbValue
+);
+
+
+SLCANAPI BOOL STDCALL SlCan_DeviceWriteMessages(
+ HSLCAN hDevice,
+ PSLCAN_MESSAGE pMsg,
+ DWORD dwCount,
+ PBYTE pbStatus
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceWriteMessagesEx(
+ HSLCAN hDevice,
+ PSLCAN_TXMESSAGE pMsg,
+ DWORD dwCount,
+ PBYTE pbStatus,
+ PDWORD pdwCount
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceReadMessages(
+ HSLCAN hDevice,
+ DWORD dwTimeOut,
+ PSLCAN_MESSAGE pMsg,
+ DWORD dwCount,
+ PDWORD pdwCount
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceReadEvents(
+ HSLCAN hDevice,
+ DWORD dwTimeOut,
+ PSLCAN_EVENT pEvent,
+ DWORD dwCount,
+ PDWORD pdwCount
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#endif //__SLCAN_H
diff --git a/Debug/debug/slcan.lib b/Debug/debug/slcan.lib
new file mode 100644
index 0000000..04cd3c6
Binary files /dev/null and b/Debug/debug/slcan.lib differ
diff --git a/ExampleDLLs/LineRingerLib.dll b/ExampleDLLs/LineRingerLib.dll
deleted file mode 100644
index c30038c..0000000
Binary files a/ExampleDLLs/LineRingerLib.dll and /dev/null differ
diff --git a/ExampleDLLs/LineRingerLib32Bit.dll b/ExampleDLLs/LineRingerLib32Bit.dll
new file mode 100644
index 0000000..5b83e11
Binary files /dev/null and b/ExampleDLLs/LineRingerLib32Bit.dll differ
diff --git a/ExampleDLLs/M3KTE_TERM.dll b/ExampleDLLs/M3KTE_TERM.dll
index 01097c3..6fdd7d2 100644
Binary files a/ExampleDLLs/M3KTE_TERM.dll and b/ExampleDLLs/M3KTE_TERM.dll differ
diff --git a/ExampleDLLs/UnionCom.dll b/ExampleDLLs/UnionCom.dll
new file mode 100644
index 0000000..b7f8b96
Binary files /dev/null and b/ExampleDLLs/UnionCom.dll differ
diff --git a/ExampleDLLs/slcan.dll b/ExampleDLLs/slcan.dll
new file mode 100644
index 0000000..2b63623
Binary files /dev/null and b/ExampleDLLs/slcan.dll differ
diff --git a/ExampleDLLs/slcan.h b/ExampleDLLs/slcan.h
new file mode 100644
index 0000000..c9dc89e
--- /dev/null
+++ b/ExampleDLLs/slcan.h
@@ -0,0 +1,510 @@
+#ifndef __SLCAN_H__
+#define __SLCAN_H__
+
+#include
+
+#define STDCALL __stdcall
+#ifdef SLCAN_EXPORT
+#define SLCANAPI __declspec(dllexport)
+#else
+#define SLCANAPI __declspec(dllimport)
+#endif
+
+#define SLCAN_PROPERTY_INDEX_LINKNAME 0
+#define SLCAN_PROPERTY_INDEX_INSTANCEID 1
+
+#define SLCAN_PROPERTY_INDEX_DEVICEDESC 2
+#define SLCAN_PROPERTY_INDEX_FRIENDLYNAME 3
+#define SLCAN_PROPERTY_INDEX_PHOBJECTNAME 4
+#define SLCAN_PROPERTY_INDEX_MFG 5
+#define SLCAN_PROPERTY_INDEX_LOCATIONINFO 6
+#define SLCAN_PROPERTY_INDEX_ENUMERATOR 7
+#define SLCAN_PROPERTY_INDEX_CLASS 8
+#define SLCAN_PROPERTY_INDEX_CLASSGUID 9
+#define SLCAN_PROPERTY_INDEX_SERVICE 10
+#define SLCAN_PROPERTY_INDEX_DRIVER 11
+#define SLCAN_PROPERTY_INDEX_PORTNAME 12
+#define SLCAN_PROPERTY_INDEX_PRODUCT 13L
+#define SLCAN_PROPERTY_INDEX_MANUFACTURER 14L
+#define SLCAN_PROPERTY_INDEX_CONFIGURATION 15L
+#define SLCAN_PROPERTY_INDEX_INTERFACE 16L
+#define SLCAN_PROPERTY_INDEX_SERIAL 17L
+#define SLCAN_PROPERTY_INDEX_ALIAS 18L
+#define SLCAN_PROPERTY_INDEX_CHANNELLINK 19L
+#define SLCAN_PROPERTY_INDEX_SERIALID 20L
+
+
+#define SLCAN_MODE_CONFIG 0x00
+#define SLCAN_MODE_NORMAL 0x01
+#define SLCAN_MODE_LISTENONLY 0x02
+#define SLCAN_MODE_LOOPBACK 0x03
+#define SLCAN_MODE_SLEEP 0x04
+
+#define SLCAN_BR_CIA_1000K 0x8000
+#define SLCAN_BR_CIA_800K 0x8001
+#define SLCAN_BR_CIA_500K 0x8002
+#define SLCAN_BR_CIA_250K 0x8003
+#define SLCAN_BR_CIA_125K 0x8004
+#define SLCAN_BR_CIA_50K 0x8005
+#define SLCAN_BR_CIA_20K 0x8006
+#define SLCAN_BR_CIA_10K 0x8007
+#define SLCAN_BR_400K 0x8008
+#define SLCAN_BR_200K 0x8009
+#define SLCAN_BR_100K 0x800A
+#define SLCAN_BR_83333 0x800B
+#define SLCAN_BR_33333 0x800C
+#define SLCAN_BR_25K 0x800D
+#define SLCAN_BR_5K 0x800E
+#define SLCAN_BR_30K 0x800F
+#define SLCAN_BR_300K 0x8010
+#define SLCAN_BR_LASTINDEX SLCAN_BR_300K
+
+
+
+
+
+#define SLCAN_CAP_MODE_NORMAL 0x01
+#define SLCAN_CAP_MODE_LISTEN_ONLY 0x02
+#define SLCAN_CAP_MODE_LOOP_BACK 0x04
+#define SLCAN_CAP_MODE_SLEEP 0x08
+
+#define SLCAN_CAP_TXMODE_ONE_SHOT 0x01
+#define SLCAN_CAP_TXMODE_TIMESTAMP 0x02
+
+
+#define SLCAN_CAP_CONTR_EXTERNAL 0x00
+#define SLCAN_CAP_CONTR_MCP2515 0x01
+#define SLCAN_CAP_CONTR_SJA1000 0x02
+
+#define SLCAN_CAP_CONTR_INTERNAL 0x80
+#define SLCAN_CAP_CONTR_LPC 0x81
+#define SLCAN_CAP_CONTR_STM32 0x82
+#define SLCAN_CAP_CONTR_STM8 0x83
+#define SLCAN_CAP_CONTR_PIC 0x84
+#define SLCAN_CAP_CONTR_PIC_ECAN 0x85
+
+#define SLCAN_CAP_PHYS_HS 0x01
+#define SLCAN_CAP_PHYS_LS 0x02
+#define SLCAN_CAP_PHYS_SW 0x04
+#define SLCAN_CAP_PHYS_J1708 0x08
+#define SLCAN_CAP_PHYS_LIN 0x10
+#define SLCAN_CAP_PHYS_KLINE 0x20
+
+#define SLCAN_CAP_PHYS_LOAD 0x01
+
+#define SLCAN_CAP_BITRATE_INDEX 0x01
+#define SLCAN_CAP_BITRATE_CUSTOM 0x02
+#define SLCAN_CAP_BITRATE_AUTOMATIC 0x04
+
+
+#define SLCAN_EVT_LEVEL_RX_MSG 0
+#define SLCAN_EVT_LEVEL_TIME_STAMP 1
+#define SLCAN_EVT_LEVEL_TX_MSG 2
+#define SLCAN_EVT_LEVEL_BUS_STATE 3
+#define SLCAN_EVT_LEVEL_COUNTS 4
+#define SLCAN_EVT_LEVEL_ERRORS 5
+
+#define SLCAN_EVT_TYPE_RX 0x0
+#define SLCAN_EVT_TYPE_START_TX 0x1
+#define SLCAN_EVT_TYPE_END_TX 0x2
+#define SLCAN_EVT_TYPE_ABORT_TX 0x3
+#define SLCAN_EVT_TYPE_BUS_STATE 0x4
+#define SLCAN_EVT_TYPE_ERROR_COUNTS 0x5
+#define SLCAN_EVT_TYPE_BUS_ERROR 0x6
+#define SLCAN_EVT_TYPE_ARBITRATION_ERROR 0x7
+#define SLCAN_EVT_STAMP_INC 0xF
+
+#define SLCAN_BUS_STATE_ERROR_ACTIVE 0x00
+#define SLCAN_BUS_STATE_ERROR_ACTIVE_WARN 0x01
+#define SLCAN_BUS_STATE_ERROR_PASSIVE 0x02
+#define SLCAN_BUS_STATE_BUSOFF 0x03
+
+#define SLCAN_MES_INFO_EXT 0x01
+#define SLCAN_MES_INFO_RTR 0x02
+#define SLCAN_MES_INFO_ONESHOT 0x04
+
+
+
+#define SLCAN_DEVOP_CREATE 0x00000000
+#define SLCAN_DEVOP_CREATEHANDLE 0x00000001
+#define SLCAN_DEVOP_OPEN 0x00000002
+#define SLCAN_DEVOP_CLOSE 0x00000003
+#define SLCAN_DEVOP_DESTROYHANDLE 0x00000004
+#define SLCAN_DEVOP_DESTROY 0x00000005
+
+
+#define SLCAN_INVALID_HANDLE_ERROR 0xE0001001
+#define SLCAN_DEVICE_INVALID_HANDLE_ERROR 0xE0001120
+#define SLCAN_HANDLE_INIT_ERROR 0xE0001017
+#define SLCAN_DEVICE_NOTOPEN_ERROR 0xE0001121
+
+#define SLCAN_EVT_ERR_TYPE_BIT 0x00
+#define SLCAN_EVT_ERR_TYPE_FORM 0x01
+#define SLCAN_EVT_ERR_TYPE_STUFF 0x02
+#define SLCAN_EVT_ERR_TYPE_OTHER 0x03
+
+#define SLCAN_EVT_ERR_DIR_TX 0x00
+#define SLCAN_EVT_ERR_DIR_RX 0x01
+
+#define SLCAN_EVT_ERR_FRAME_SOF 0x03
+#define SLCAN_EVT_ERR_FRAME_ID28_ID21 0x02
+#define SLCAN_EVT_ERR_FRAME_ID20_ID18 0x06
+#define SLCAN_EVT_ERR_FRAME_SRTR 0x04
+#define SLCAN_EVT_ERR_FRAME_IDE 0x05
+#define SLCAN_EVT_ERR_FRAME_ID17_ID13 0x07
+#define SLCAN_EVT_ERR_FRAME_ID12_ID5 0x0F
+#define SLCAN_EVT_ERR_FRAME_ID4_ID0 0x0E
+#define SLCAN_EVT_ERR_FRAME_RTR 0x0C
+#define SLCAN_EVT_ERR_FRAME_RSRV0 0x0D
+#define SLCAN_EVT_ERR_FRAME_RSRV1 0x09
+#define SLCAN_EVT_ERR_FRAME_DLC 0x0B
+#define SLCAN_EVT_ERR_FRAME_DATA 0x0A
+#define SLCAN_EVT_ERR_FRAME_CRC_SEQ 0x08
+#define SLCAN_EVT_ERR_FRAME_CRC_DEL 0x18
+#define SLCAN_EVT_ERR_FRAME_ACK_SLOT 0x19
+#define SLCAN_EVT_ERR_FRAME_ACK_DEL 0x1B
+#define SLCAN_EVT_ERR_FRAME_EOF 0x1A
+#define SLCAN_EVT_ERR_FRAME_INTER 0x12
+#define SLCAN_EVT_ERR_FRAME_AER_FLAG 0x11
+#define SLCAN_EVT_ERR_FRAME_PER_FLAG 0x16
+#define SLCAN_EVT_ERR_FRAME_TDB 0x13
+#define SLCAN_EVT_ERR_FRAME_ERR_DEL 0x17
+#define SLCAN_EVT_ERR_FRAME_OVER_FLAG 0x1C
+
+#define SLCAN_TX_STATUS_OK 0x00
+#define SLCAN_TX_STATUS_TIMEOUT 0x01
+#define SLCAN_TX_STATUS_BUSOFF 0x02
+#define SLCAN_TX_STATUS_ABORT 0x03
+#define SLCAN_TX_STATUS_NOT_ENA 0x04
+#define SLCAN_TX_STATUS_ERROR_ONE_SHOT 0x05
+#define SLCAN_TX_STATUS_INVALID_MODE 0x06
+#define SLCAN_TX_STATUS_UNKNOWN 0x0F
+
+#define SLCAN_PURGE_TX_ABORT 0x01
+#define SLCAN_PURGE_RX_ABORT 0x02
+#define SLCAN_PURGE_TX_CLEAR 0x04
+#define SLCAN_PURGE_RX_CLEAR 0x08
+
+#pragma pack(push,1)
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+typedef PVOID HSLCAN;
+
+typedef struct _SLCAN_CAPABILITIES{
+
+ BYTE bModes;
+ BYTE bTXModes;
+ BYTE bMaxEventLevel;
+ BYTE bController;
+ BYTE bPhysical;
+ BYTE bPhysicalLoad;
+ BYTE bBitrates;
+ BYTE bAdvancedModes;
+ DWORD dwCanBaseClk;
+ DWORD dwTimeStampClk;
+ WORD wMaxBRP;
+}SLCAN_CAPABILITIES,*PSLCAN_CAPABILITIES;
+
+typedef struct _SLCAN_BITRATE {
+ WORD BRP;
+ BYTE TSEG1;
+ BYTE TSEG2;
+ BYTE SJW;
+ BYTE SAM;
+}SLCAN_BITRATE,*PSLCAN_BITRATE;
+
+
+typedef void (STDCALL* SLCAN_DEVICE_CALLBACK)(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ DWORD dwOperation,
+ PVOID pContext,
+ DWORD dwContextSize
+);
+
+typedef VOID (STDCALL* SLCAN_DEVICELIST_CALLBACK)(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ PVOID pContext,
+ DWORD dwContextSize
+);
+
+typedef struct _SLCAN_MESSAGE{
+ BYTE Info;
+ DWORD ID;
+ BYTE DataCount;
+ BYTE Data[8];
+}SLCAN_MESSAGE,*PSLCAN_MESSAGE;
+
+typedef struct _SLCAN_TXMESSAGE{
+ LONG dwDelay;
+ SLCAN_MESSAGE Msg;
+}SLCAN_TXMESSAGE,*PSLCAN_TXMESSAGE;
+
+typedef struct _SLCAN_EVENT{
+ BYTE EventType;
+ DWORD TimeStampLo;
+ union {
+ SLCAN_MESSAGE Msg;
+ DWORD TimeStamp[2];
+ DWORD64 TimeStamp64;
+ struct {
+ BYTE BusMode;
+ BYTE Dummy1;
+ BYTE ErrCountRx;
+ BYTE ErrCountTx;
+ BYTE ErrType;
+ BYTE ErrDir;
+ BYTE ErrFrame;
+ BYTE LostArbitration;
+ };
+ };
+}SLCAN_EVENT,*PSLCAN_EVENT;
+
+typedef struct _SLCAN_STATE{
+ BYTE BusMode;
+ BYTE Dummy1;
+ BYTE ErrCountRX;
+ BYTE ErrCountTX;
+}SLCAN_STATE,*PSLCAN_STATE;
+
+typedef union _SLCAN_TIMESTAMP{
+ UINT64 Value;
+ DWORD dwValue[2];
+ USHORT wValue[4];
+ BYTE bValue[8];
+}SLCAN_TIMESTAMP,*PSLCAN_TIMESTAMP;
+
+
+
+SLCANAPI BOOL STDCALL SlCan_Load(
+ SLCAN_DEVICE_CALLBACK DeviceProc,
+ SLCAN_DEVICELIST_CALLBACK DeviceListProc
+);
+
+SLCANAPI BOOL STDCALL SlCan_Free(
+ BOOL bDoCallBack
+);
+
+SLCANAPI BOOL STDCALL SlCan_Update();
+
+SLCANAPI HSLCAN STDCALL SlCan_GetDevice(
+ DWORD dwIndex
+);
+
+SLCANAPI DWORD STDCALL SlCan_GetDeviceCount();
+
+
+SLCANAPI HANDLE STDCALL SlCan_DeviceGetHandle(
+ DWORD dwIndex
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetProperty(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ PCHAR pBuf,
+ DWORD dwSize
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetPropertyW(
+ HSLCAN hDevice,
+ DWORD dwIndex,
+ PWCHAR pBuf,
+ DWORD dwSize
+);
+
+SLCANAPI HKEY STDCALL SlCan_DeviceGetRegKey(
+ HSLCAN hDevice,
+ DWORD dwIndex
+);
+
+SLCANAPI PVOID STDCALL SlCan_DeviceSetContext(
+ HSLCAN hDevice,
+ PVOID pBuf,
+ DWORD dwBufSize
+);
+
+SLCANAPI PVOID STDCALL SlCan_DeviceGetContext(
+ HSLCAN hDevice
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetContextSize(
+ HSLCAN hDevice
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetAlias(
+ HSLCAN hDevice,
+ PCHAR pBuf
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetAliasW(
+ HSLCAN hDevice,
+ PWCHAR pBuf
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetAlias(
+ HSLCAN hDevice,
+ PCHAR pBuf,
+ DWORD dwSize
+);
+
+SLCANAPI DWORD STDCALL SlCan_DeviceGetAliasW(
+ HSLCAN hDevice,
+ PWCHAR pBuf,
+ DWORD dwSize
+);
+SLCANAPI BOOL STDCALL SlCan_DeviceGetCapabilities(
+ HSLCAN hDevice,
+ PSLCAN_CAPABILITIES pCapabilities
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceOpen(
+ HSLCAN hDevice
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceClose(
+ HSLCAN hDevice
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetMode(
+ HSLCAN hDevice,
+ DWORD dwMode
+);
+SLCANAPI BOOL STDCALL SlCan_DeviceGetMode(
+ HSLCAN hDevice,
+ PDWORD pdwMode
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetState(
+ HSLCAN hDevice,
+ PSLCAN_STATE pState
+);
+
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetTXTimeOut(
+ HSLCAN hDevice,
+ DWORD dwMillisecond
+);
+SLCANAPI BOOL STDCALL SlCan_DeviceGetTXTimeOut(
+ HSLCAN hDevice,
+ PDWORD pdwMillisecond
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetBitRate(
+ HSLCAN hDevice,
+ PSLCAN_BITRATE pBitRate
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetBitRate(
+ HSLCAN hDevice,
+ PSLCAN_BITRATE pBitRate
+);
+
+
+SLCANAPI BOOL STDCALL SlCan_DeviceEnaRec(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetLatency(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetLatency(
+ HSLCAN hDevice,
+ PBYTE pbValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DevicePurge(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetEventLevel(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetEventLevel(
+ HSLCAN hDevice,
+ PBYTE pbValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetStartTimeStamp(
+ HSLCAN hDevice,
+ PSLCAN_TIMESTAMP pValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetStartTimeStamp(
+ HSLCAN hDevice,
+ PSLCAN_TIMESTAMP pValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetTimeStamp(
+ HSLCAN hDevice,
+ PSLCAN_TIMESTAMP pValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetTimeStampPeriod(
+ HSLCAN hDevice,
+ LONG lValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetTimeStampPeriod(
+ HSLCAN hDevice,
+ PLONG plValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceSetExMode(
+ HSLCAN hDevice,
+ BYTE bValue
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceGetExMode(
+ HSLCAN hDevice,
+ PBYTE pbValue
+);
+
+
+SLCANAPI BOOL STDCALL SlCan_DeviceWriteMessages(
+ HSLCAN hDevice,
+ PSLCAN_MESSAGE pMsg,
+ DWORD dwCount,
+ PBYTE pbStatus
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceWriteMessagesEx(
+ HSLCAN hDevice,
+ PSLCAN_TXMESSAGE pMsg,
+ DWORD dwCount,
+ PBYTE pbStatus,
+ PDWORD pdwCount
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceReadMessages(
+ HSLCAN hDevice,
+ DWORD dwTimeOut,
+ PSLCAN_MESSAGE pMsg,
+ DWORD dwCount,
+ PDWORD pdwCount
+);
+
+SLCANAPI BOOL STDCALL SlCan_DeviceReadEvents(
+ HSLCAN hDevice,
+ DWORD dwTimeOut,
+ PSLCAN_EVENT pEvent,
+ DWORD dwCount,
+ PDWORD pdwCount
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#endif //__SLCAN_H
diff --git a/ExampleDLLs/slcan.lib b/ExampleDLLs/slcan.lib
new file mode 100644
index 0000000..04cd3c6
Binary files /dev/null and b/ExampleDLLs/slcan.lib differ