//--------------------------------------------------------------------------- #ifndef _BarCode_H #define _BarCode_H //--------------------------------------------------------------------------- #include "../ComPort.h" #include #include //--------------------------------------------------------------------------- //Глобальный объект для проверки данных //extern TSimpleList* 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* m_ListD; ///<Список пришедших данных в виде ASCI строки (либо побайтноо если bString=false) TSimpleList* m_ListW; ///<Список даных для записи в COM порт //Список данных которые надо отправить в COM порт TSimpleList* 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