62 lines
2.6 KiB
C++
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
|