PIIODevice::bytesAvailible()
fix pistringlist pibinarystream write pibinarystream::binaryStreamSize() PIByteArray pibinarystream read with more size fix pistring pibinarystream read optimization fix bug in PIIOBinaryStream read and write if failed workaround in PIIOString::readDevice PISPI readDevice bug Fixed
This commit is contained in:
@@ -409,8 +409,9 @@ int PIBinaryLog::readDevice(void *read_to, int max_size) {
|
||||
if (max_size <= 0 || read_to == 0) return -1;
|
||||
BinLogRecord br;
|
||||
br.id = 0;
|
||||
if (filterID.isEmpty()) br = readRecord();
|
||||
else {
|
||||
if (filterID.isEmpty()) {
|
||||
br = readRecord();
|
||||
} else {
|
||||
while (!filterID.contains(br.id) && !isEnd()) br = readRecord();
|
||||
}
|
||||
if (br.id == -1) {
|
||||
|
||||
@@ -301,18 +301,18 @@ public:
|
||||
static bool joinBinLogsSerial(const PIStringList & src, const PIString & dst);
|
||||
|
||||
protected:
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual int readDevice(void *read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int size) override;
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual void propertyChanged(const char * s) override;
|
||||
virtual bool threadedRead(const uchar *readed, int size) override;
|
||||
virtual void threadedReadTerminated() override {pausemutex.unlock();}
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
int readDevice(void *read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int size) override;
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
void propertyChanged(const char * s) override;
|
||||
bool threadedRead(const uchar *readed, int size) override;
|
||||
void threadedReadTerminated() override {pausemutex.unlock();}
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
|
||||
private:
|
||||
struct PIP_EXPORT BinLogRecord {
|
||||
|
||||
@@ -41,15 +41,15 @@ public:
|
||||
int readedCANID() const;
|
||||
|
||||
protected:
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
|
||||
private:
|
||||
int sock;
|
||||
|
||||
@@ -462,24 +462,24 @@ public:
|
||||
protected:
|
||||
explicit PIEthernet(int sock, PIString ip_port);
|
||||
|
||||
virtual void propertyChanged(const char * name) override;
|
||||
void propertyChanged(const char * name) override;
|
||||
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual bool configureDevice(const void * e_main, const void * e_parent = 0) override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override;
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
bool configureDevice(const void * e_main, const void * e_parent = 0) override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override;
|
||||
|
||||
//! Executes when any read function was successful. Default implementation does nothing
|
||||
virtual void received(const void * data, int size) {;}
|
||||
|
||||
void construct();
|
||||
virtual bool init() override;
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
bool init() override;
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
void closeSocket(int & sd);
|
||||
void applyTimeouts();
|
||||
void applyTimeout(int fd, int opt, double ms);
|
||||
|
||||
@@ -180,7 +180,7 @@ public:
|
||||
|
||||
//! \~english Immediate write all buffered data to disk
|
||||
//! \~russian Немедленно записывает все буферизированные данные на диск
|
||||
virtual void flush() override;
|
||||
void flush() override;
|
||||
|
||||
//! \~english Move read/write position to "position"
|
||||
//! \~russian Перемещает позицию чтения/записи на "position"
|
||||
@@ -226,6 +226,8 @@ public:
|
||||
//! \~english Returns file size in bytes
|
||||
//! \~russian Возвращает размер файла в байтах
|
||||
llong size() const;
|
||||
|
||||
ssize_t bytesAvailible() const override {return size() - pos();}
|
||||
|
||||
//! \~english Returns read/write position
|
||||
//! \~russian Возвращает позицию чтения/записи
|
||||
@@ -324,15 +326,15 @@ public:
|
||||
//! \}
|
||||
|
||||
protected:
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential | PIIODevice::Reliable;}
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential | PIIODevice::Reliable;}
|
||||
|
||||
private:
|
||||
PIString strType(const PIIODevice::DeviceMode type);
|
||||
|
||||
@@ -112,9 +112,9 @@ private:
|
||||
void exportGPIO(int gpio_num);
|
||||
void openGPIO(GPIOData & g);
|
||||
bool getPinState(int gpio_num);
|
||||
void begin();
|
||||
void run();
|
||||
void end();
|
||||
void begin() override;
|
||||
void run() override;
|
||||
void end() override;
|
||||
|
||||
static PIString GPIOName(int gpio_num);
|
||||
|
||||
|
||||
@@ -83,12 +83,17 @@ public:
|
||||
//! \~english Insert data "ba" into content at current position
|
||||
//! \~russian Вставляет данные "ba" в содержимое буфера в текущую позицию
|
||||
int writeByteArray(const PIByteArray & ba);
|
||||
|
||||
ssize_t bytesAvailible() const override {
|
||||
if (data_) return data_->size();
|
||||
else return 0;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual bool openDevice() override;
|
||||
virtual int readDevice(void * read_to, int size) override;
|
||||
virtual int writeDevice(const void * data_, int size) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential | PIIODevice::Reliable;}
|
||||
bool openDevice() override;
|
||||
int readDevice(void * read_to, int size) override;
|
||||
int writeDevice(const void * data_, int size) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential | PIIODevice::Reliable;}
|
||||
|
||||
ssize_t pos;
|
||||
PIByteArray * data_;
|
||||
|
||||
@@ -230,8 +230,7 @@ void PIIODevice::stop(bool hard) {
|
||||
PIByteArray PIIODevice::read(int max_size) {
|
||||
buffer_in.resize(max_size);
|
||||
int ret = readDevice(buffer_in.data(), max_size);
|
||||
if (ret < 0)
|
||||
return PIByteArray();
|
||||
if (ret < 0) return PIByteArray();
|
||||
return buffer_in.resized(ret);
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ typedef bool (*ReadRetFunc)(const uchar *, int, void *);
|
||||
PIOBJECT_SUBCLASS(name, PIIODevice) \
|
||||
PIIODevice * copy() const override {return new name();} \
|
||||
public: \
|
||||
virtual PIConstChars fullPathPrefix() const override {return prefix;} \
|
||||
PIConstChars fullPathPrefix() const override {return prefix;} \
|
||||
static PIConstChars fullPathPrefixS() {return prefix;} \
|
||||
private:
|
||||
|
||||
@@ -284,6 +284,17 @@ public:
|
||||
//! \~russian Читает из устройства не более "max_size" байт и возвращает данные как PIByteArray
|
||||
PIByteArray read(int max_size);
|
||||
|
||||
//! \~english Returns the number of bytes that are available for reading.
|
||||
//! \~russian Возвращает количество байт
|
||||
//! \~\details
|
||||
//! \~english This function is commonly used with sequential devices
|
||||
//! to determine the number of bytes to allocate in a buffer before reading.
|
||||
//! If function returns -1 it mean that number of bytes undefined.
|
||||
//! \~russian Эта функция как правило используется чтобы знать какой
|
||||
//! размер буфера нужен в памяти для чтения.
|
||||
//! Если функция возвращает -1 это значит что количество байт для чтения не известно.
|
||||
virtual ssize_t bytesAvailible() const {return -1;}
|
||||
|
||||
//! \~english Write maximum "max_size" bytes of "data" to device
|
||||
//! \~russian Пишет в устройство не более "max_size" байт из "data"
|
||||
int write(const void * data, int max_size) {return writeDevice(data, max_size);}
|
||||
@@ -536,7 +547,7 @@ private:
|
||||
EVENT_HANDLER2(void, check_start, void * , data, int, delim);
|
||||
EVENT_HANDLER(void, write_func);
|
||||
|
||||
virtual PIIODevice * copy() const {return 0;}
|
||||
virtual PIIODevice * copy() const {return nullptr;}
|
||||
PIString fullPathOptions() const;
|
||||
void _init();
|
||||
void begin() override;
|
||||
|
||||
@@ -47,12 +47,17 @@ public:
|
||||
|
||||
bool binaryStreamAppendImp(const void * d, size_t s) {
|
||||
if (!dev) return false;
|
||||
return dev->write(d, s);
|
||||
return (dev->write(d, s) == (int)s);
|
||||
}
|
||||
|
||||
bool binaryStreamTakeImp(void * d, size_t s) {
|
||||
if (!dev) return false;
|
||||
return dev->read(d, s);
|
||||
return (dev->read(d, s) == (int)s);
|
||||
}
|
||||
|
||||
ssize_t binaryStreamSizeImp() const {
|
||||
if (!dev) return 0;
|
||||
return dev->bytesAvailible();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -56,9 +56,9 @@ bool PIIOString::open(const PIString & string) {
|
||||
PIString PIIOString::readLine() {
|
||||
if (!canRead() || !str) return PIString();
|
||||
int np = pos;
|
||||
while (++np < str->size_s())
|
||||
if ((*str)[np] == '\n')
|
||||
break;
|
||||
while (++np < str->size_s()) {
|
||||
if ((*str)[np] == '\n') break;
|
||||
}
|
||||
PIString ret = str->mid(pos, np - pos);
|
||||
pos = piMini(np + 1, str->size_s());
|
||||
return ret;
|
||||
@@ -66,7 +66,7 @@ PIString PIIOString::readLine() {
|
||||
|
||||
|
||||
int PIIOString::readDevice(void * read_to, int max_size) {
|
||||
if (!canRead() || !str) return -1;
|
||||
if (!canRead() || !str || max_size <= 0) return -1;
|
||||
PIString rs = str->mid(pos, max_size);
|
||||
pos += max_size;
|
||||
if (pos > str->size_s()) pos = str->size_s();
|
||||
|
||||
@@ -88,11 +88,16 @@ public:
|
||||
//! \~russian Вставляет строку "string" в содержимое буфера в текущую позицию
|
||||
int writeString(const PIString & string);
|
||||
|
||||
ssize_t bytesAvailible() const override {
|
||||
if (str) return str->size() - pos;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual bool openDevice() override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential | PIIODevice::Reliable;}
|
||||
bool openDevice() override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential | PIIODevice::Reliable;}
|
||||
|
||||
ssize_t pos;
|
||||
PIString * str;
|
||||
|
||||
@@ -924,6 +924,15 @@ void PIPeer::changeName(const PIString &new_name) {
|
||||
}
|
||||
|
||||
|
||||
ssize_t PIPeer::bytesAvailible() const {
|
||||
ssize_t ret = 0;
|
||||
read_buffer_mutex.lock();
|
||||
if (!read_buffer.isEmpty()) ret = read_buffer.back().size();
|
||||
read_buffer_mutex.unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int PIPeer::readDevice(void *read_to, int max_size) {
|
||||
read_buffer_mutex.lock();
|
||||
bool empty = read_buffer.isEmpty();
|
||||
|
||||
@@ -116,6 +116,8 @@ public:
|
||||
void setTrustPeerName(const PIString & peer_name) {trust_peer = peer_name;}
|
||||
void setTcpServerIP(const PIString & ip) {server_ip = ip; tcpClientReconnect();}
|
||||
|
||||
ssize_t bytesAvailible() const override;
|
||||
|
||||
|
||||
EVENT2(dataReceivedEvent, const PIString &, from, const PIByteArray &, data);
|
||||
EVENT1(peerConnectedEvent, const PIString &, name);
|
||||
@@ -164,15 +166,15 @@ private:
|
||||
void addToRemoved(const PeerInfo & pi) {removed[pi.name] = PIPair<int, PISystemTime>(pi.cnt, pi.time);}
|
||||
bool isRemoved(const PeerInfo & pi) const {return (removed.value(pi.name) == PIPair<int, PISystemTime>(pi.cnt, pi.time));}
|
||||
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString &full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int size) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString &full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int size) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
|
||||
PeerInfo * quickestPeer(const PIString & to);
|
||||
bool sendToNeighbour(PeerInfo * peer, const PIByteArray & ba);
|
||||
@@ -198,7 +200,7 @@ private:
|
||||
bool destroyed, no_timer;
|
||||
PIString trust_peer;
|
||||
PIString server_ip;
|
||||
PIMutex read_buffer_mutex;
|
||||
mutable PIMutex read_buffer_mutex;
|
||||
PIQueue<PIByteArray> read_buffer;
|
||||
int read_buffer_size;
|
||||
PIMutex mc_mutex, eth_mutex, peers_mutex, send_mutex, send_mc_mutex;
|
||||
|
||||
@@ -282,19 +282,19 @@ public:
|
||||
//! \}
|
||||
|
||||
protected:
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual bool configureDevice(const void * e_main, const void * e_parent = 0) override;
|
||||
virtual void optionsChanged() override;
|
||||
virtual void threadedReadBufferSizeChanged() override;
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
bool configureDevice(const void * e_main, const void * e_parent = 0) override;
|
||||
void optionsChanged() override;
|
||||
void threadedReadBufferSizeChanged() override;
|
||||
|
||||
//! \~english Basic read function
|
||||
//! \~russian Базовое чтение
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential;}
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential;}
|
||||
|
||||
//! Executes when any read function was successful. Default implementation does nothing
|
||||
virtual void received(const void * data, int size) {;}
|
||||
@@ -306,8 +306,8 @@ protected:
|
||||
bool setBit(int bit, bool on, const PIString & bname);
|
||||
bool isBit(int bit, const PIString & bname) const;
|
||||
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
|
||||
PRIVATE_DECLARATION(PIP_EXPORT)
|
||||
int fd, vtime;
|
||||
|
||||
@@ -91,15 +91,15 @@ public:
|
||||
|
||||
|
||||
protected:
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual int readDevice(void * read_to, int max_size) override {return read(read_to, max_size, 0);}
|
||||
virtual int writeDevice(const void * data, int max_size) override {return write(data, max_size, 0);}
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
int readDevice(void * read_to, int max_size) override {return read(read_to, max_size, 0);}
|
||||
int writeDevice(const void * data, int max_size) override {return write(data, max_size, 0);}
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
|
||||
private:
|
||||
void initPrivate();
|
||||
|
||||
@@ -88,6 +88,11 @@ bool PISPI::isParameterSet(PISPI::Parameters parameter) const {
|
||||
}
|
||||
|
||||
|
||||
ssize_t PISPI::bytesAvailible() const {
|
||||
return recv_buf.size();
|
||||
}
|
||||
|
||||
|
||||
bool PISPI::openDevice() {
|
||||
#ifdef PIP_SPI
|
||||
int ret = 0;
|
||||
@@ -126,7 +131,7 @@ bool PISPI::closeDevice() {
|
||||
int PISPI::readDevice(void * read_to, int max_size) {
|
||||
int sz = piMini(recv_buf.size_s(), max_size);
|
||||
memcpy(read_to, recv_buf.data(), sz);
|
||||
recv_buf.resize(recv_buf.size_s() - sz);
|
||||
recv_buf.remove(0, sz);
|
||||
return sz;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,18 +60,19 @@ public:
|
||||
//! Returns parameters
|
||||
PIFlags<PISPI::Parameters> parameters() const {return spi_mode;}
|
||||
|
||||
ssize_t bytesAvailible() const override;
|
||||
|
||||
protected:
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual PIPropertyStorage constructVariantDevice() const override;
|
||||
virtual void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential;}
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
PIPropertyStorage constructVariantDevice() const override;
|
||||
void configureFromVariantDevice(const PIPropertyStorage & d) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Sequential;}
|
||||
|
||||
private:
|
||||
uint spi_speed;
|
||||
|
||||
@@ -49,6 +49,15 @@ PITransparentDevice::~PITransparentDevice() {
|
||||
}
|
||||
|
||||
|
||||
ssize_t PITransparentDevice::bytesAvailible() const {
|
||||
ssize_t ret = 0;
|
||||
que_mutex.lock();
|
||||
if (que.isNotEmpty()) ret = que.back().size();
|
||||
que_mutex.unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int PITransparentDevice::readDevice(void * read_to, int max_size) {
|
||||
if (!canRead()) return -1;
|
||||
que_mutex.lock();
|
||||
|
||||
@@ -44,14 +44,16 @@ public:
|
||||
|
||||
virtual ~PITransparentDevice();
|
||||
|
||||
protected:
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
ssize_t bytesAvailible() const override;
|
||||
|
||||
PIMutex que_mutex;
|
||||
protected:
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
DeviceInfoFlags deviceInfoFlags() const override {return PIIODevice::Reliable;}
|
||||
|
||||
mutable PIMutex que_mutex;
|
||||
PIQueue<PIByteArray> que;
|
||||
|
||||
};
|
||||
|
||||
@@ -160,14 +160,14 @@ public:
|
||||
virtual void flush() override;
|
||||
|
||||
protected:
|
||||
virtual bool configureDevice(const void * e_main, const void * e_parent = 0) override;
|
||||
virtual PIString constructFullPathDevice() const override;
|
||||
virtual void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
virtual int readDevice(void * read_to, int max_size) override;
|
||||
virtual int writeDevice(const void * data, int max_size) override;
|
||||
virtual bool openDevice() override;
|
||||
virtual bool closeDevice() override;
|
||||
virtual DeviceInfoFlags deviceInfoFlags() const {return PIIODevice::Reliable;}
|
||||
bool configureDevice(const void * e_main, const void * e_parent = 0) override;
|
||||
PIString constructFullPathDevice() const override;
|
||||
void configureFromFullPathDevice(const PIString & full_path) override;
|
||||
int readDevice(void * read_to, int max_size) override;
|
||||
int writeDevice(const void * data, int max_size) override;
|
||||
bool openDevice() override;
|
||||
bool closeDevice() override;
|
||||
DeviceInfoFlags deviceInfoFlags() const {return PIIODevice::Reliable;}
|
||||
|
||||
PIVector<PIUSB::Endpoint> eps;
|
||||
ushort vid_, pid_;
|
||||
|
||||
Reference in New Issue
Block a user