#ifndef USBCAN_H
#define USBCAN_H

#include <QWidget>
#include <slcan.h>
#include "ProjectSettings.h"
class Send_CMD;

static void __stdcall Device_Callback(HSLCAN cbDevice, DWORD dwIndex, DWORD dwOperation, PVOID pContext, DWORD dwContextSize);
static void __stdcall DeviceList_Callback(HSLCAN cbDevice, DWORD dwIndex, PVOID pContext, DWORD dwContextSize);

QT_BEGIN_NAMESPACE
namespace Ui { class CanUsb; }
QT_END_NAMESPACE

struct CB_FLAGS{
    unsigned AvailableDevicesListHasBeenChanged:1;
};

class CanUsb : public QWidget
{
    Q_OBJECT


private:

    DWORD ID;                               //идентификатор устройства
    SLCAN_MESSAGE outMsg;                   //буфер для отправки сообщения
    SLCAN_MESSAGE inputMsg[FRAMES];                   //буфер для приёма сообщения
    HSLCAN device;
    SLCAN_BITRATE br;
    DWORD cntrInput;
    unsigned int Counter_of_suc_transmit=0;
    unsigned int TX_error_counter=0;
    unsigned div_up(unsigned x, unsigned y);

    Send_CMD* send_cmd = nullptr;
    SLCAN_STATE DeviceState;

    int timerRefreshID = 0;



public:

    int GetCount();
    void AfterDisconnection();
    void AfterConnection();
    int GetMode();
    int GetID();
    int GetBR();
    void device_connect();
    HSLCAN G_Device();
    HSLCAN GetDevice(){return device;}
    CanUsb(QWidget *parent = nullptr);
    ~CanUsb();
    void init();
    void Refresh();

private slots:

    void on_serialPortInfoListBox_currentIndexChanged(int index);

private:
   Ui::CanUsb *ui;
};
#endif // USBCAN_H