Files
Tools_CPP/devices/BarCodes/BarCode.h
2024-11-01 12:23:13 +05:00

62 lines
2.6 KiB
C++

//---------------------------------------------------------------------------
#ifndef _BarCode_H
#define _BarCode_H
//---------------------------------------------------------------------------
#include "../ComPort.h"
#include <wx/wx.h>
#include <structs.h>
//---------------------------------------------------------------------------
//Глобальный объект для проверки данных
//extern TSimpleList<TCheckData*>* g_BarCode;
//---------------------------------------------------------------------------
class CharStringListener //Кто собирается слушать баркод должен реализовать этот класс
{
public:
virtual void OnDataIncoming(unsigned char** data) = 0;
};
//---------------------------------------------------------------------------
//Структура для отправки данных в COM порт
struct SData
{ int id; //id пакета
char state; //Статус пакета 0 - ждёт своей очереди 1 - отправляется 2 - отправился 3 - ошибка
unsigned int sizeW; //Сколько байт записанно в поток
unsigned int size;
void* data;
};
//---------------------------------------------------------------------------
//Если bString=true то читаем из порта набор байт и генерим событие по приходу маркера конца строки иначе как пробитали в буфер так генерим...
class BarCode: public wxThread // Объект BarCode может быть только 1 смотри использование g_BarCode
{
private:
virtual void* Entry(); ///<Функция - поток
int m_id; //Для генерации уникального id пакета
protected:
ComPort* cPort; ///<Объект COM порт
~BarCode(); ///<Так как поток
//Для информирования слушателей
wxCriticalSection* m_crit; ///<Критическая секция для m_ListD
wxCriticalSection* m_critW; ///<Критическая секция для m_ListW
TSimpleList<unsigned char*>* m_ListD; ///<Список пришедших данных в виде ASCI строки (либо побайтноо если bString=false)
TSimpleList<SData*>* m_ListW; ///<Список даных для записи в COM порт
//Список данных которые надо отправить в COM порт
TSimpleList<CharStringListener*>* m_ListL; ///<Список слушателей данных
int GetNextId(){ return m_id++; };
public:
bool bString; // bString - true то ждёт признак конца строки иначе как набор байт
BarCode();
bool Connect(int port,int speed);
bool Disconnect();
void AddListener(CharStringListener* listener);
void RemListener(CharStringListener* listener);
bool OnTimer(); ///<Работает в основном потоке для проверки прихода данных
unsigned long WriteS(const void* lpBuffer,unsigned long nNumberOfBytesToWrite); //Записать данные в ком порт синхронно
};
//---------------------------------------------------------------------------
extern BarCode* g_BarCode; //Объект BarCode может быть только 1
//---------------------------------------------------------------------------
#endif