Commits

lexaficus committed f0214aa

added QlfTUBv2. it is a simple realisation of QlfTUB.

  • Participants
  • Parent commits 1f5d97c

Comments (0)

Files changed (2)

File src/QlfTUB.cpp

 #include <QMutexLocker>
 
 QlfTUB::QlfTUB(QIODevice* ioDevice) :
-	ioDevice(ioDevice), mutex(), waitCondition(), terminated(false), tubThread(
-			this, &QlfTUB::runThread), readLineFlag(false)
-{
-	timer.start();
-	tubThread.start();
+  ioDevice(ioDevice), mutex(), waitCondition(), terminated(false), 
+  tubThread(this, &QlfTUB::runThread), readLineFlag(false) {
+  timer.start();
+  tubThread.start();
 }
 
-QlfTUB::~QlfTUB()
-{
-	terminated = true;
-	tubThread.wait();
-	tubThread.terminate();
+QlfTUB::~QlfTUB() {
+  terminated = true;
+  tubThread.wait();
+  tubThread.terminate();
 }
 
-void QlfTUB::run(int msTimeout)
-{
-	QByteArray buf("RC");
-	buf.append(QByteArray::number(msTimeout));
-	buf.append('\n');
-	ioDevice -> write(buf);
+void QlfTUB::run(int msTimeout) {
+  QByteArray buf("RC");
+  buf.append(QByteArray::number(msTimeout));
+  buf.append('\n');
+  ioDevice->write(buf);
 }
 
-void QlfTUB::stop()
-{
-	ioDevice -> write("SC\n", 3);
+void QlfTUB::stop() {
+  ioDevice->write("SC\n", 3);
 }
 
-int QlfTUB::measure()
-{
-	ioDevice -> write("GM\n", 3);
-	QByteArray buf = readLine();
-	buf.remove(0, 2);
-	buf.chop(1);
-	return buf.toInt();
+int QlfTUB::measure() {
+  ioDevice->write("GM\n", 3);
+  QByteArray buf = readLine();
+  buf.remove(0, 2);
+  buf.chop(1);
+  return buf.toInt();
 }
 
-void QlfTUB::setRange(Range range)
-{
-	QByteArray buf("SO");
-	buf.append(QByteArray::number(range.minimum));
-	buf.append(',');
-	buf.append(QByteArray::number(range.maximum));
-	buf.append('\n');
-	ioDevice -> write(buf);
+void QlfTUB::setRange(Range range) {
+  QByteArray buf("SO");
+  buf.append(QByteArray::number(range.minimum));
+  buf.append(',');
+  buf.append(QByteArray::number(range.maximum));
+  buf.append('\n');
+  ioDevice->write(buf);
 
-	buf = readLine();
+  buf = readLine();
 }
 
-QlfTUB::Range QlfTUB::getRange()
-{
-	QByteArray buf("SO\n");
-	ioDevice -> write(buf);
-	buf = readLine();
-	buf = buf.mid(2);
-	buf.chop(1);
-	
-	QList<QByteArray> res = buf.split(',');
-	if (res.size() < 2)
-		return Range(0, 0);
-	
-	return Range(res[0].toInt(), res[1].toInt());
+QlfTUB::Range QlfTUB::getRange() {
+  QByteArray buf("SO\n");
+  ioDevice->write(buf);
+  buf = readLine();
+  buf = buf.mid(2);
+  buf.chop(1);
+  
+  QList<QByteArray> res = buf.split(',');
+  if (res.size() < 2)
+    return Range(0, 0);
+  
+  return Range(res[0].toInt(), res[1].toInt());
 }
 
-char QlfTUB::symbolState()
-{
-	ioDevice -> write("GS\n", 3);
-	QByteArray buf = readLine();
-	if (buf.isEmpty())
-		return '\0';
-	return buf[2];
+char QlfTUB::symbolState() {
+  ioDevice -> write("GS\n", 3);
+  QByteArray buf = readLine();
+  if (buf.isEmpty())
+    return '\0';
+  return buf[2];
 }
 
-QByteArray QlfTUB::readLine()
-{
-	QMutexLocker locker(&mutex);
-	if (buffer.isEmpty())
-	{
-		readLineFlag = true;
-		if (!waitCondition.wait(&mutex) )
-		{
-			readLineFlag = false;
-			return QByteArray();
-		}
-	}
-
-	QByteArray buf = buffer.front();
-	buffer.pop_front();
-	readLineFlag = false;
-	return buf;
+QByteArray QlfTUB::readLine() {
+  QMutexLocker locker(&mutex);
+  if (buffer.isEmpty()) {
+    readLineFlag = true;
+    if (!waitCondition.wait(&mutex) ) {
+      readLineFlag = false;
+      return QByteArray();
+    }
+  }
+  
+  QByteArray buf = buffer.front();
+  buffer.pop_front();
+  readLineFlag = false;
+  return buf;
 }
 
-void QlfTUB::resetTimer()
-{
-	timer.restart();
+void QlfTUB::resetTimer() {
+  timer.restart();
 }
 
-void QlfTUB::onADCCode(QByteArray& data)
-{
-	data.remove(0, 2);
-	data.chop(1);
-
-	dataReady(data.toInt(), timer.elapsed());
+void QlfTUB::onADCCode(QByteArray& data) {
+  data.remove(0, 2);
+  data.chop(1);
+  
+  dataReady(data.toInt(), timer.elapsed());
 }
 
-void QlfTUB::runThread(TUB_Thread* thread)
-{
-	while (!terminated)
-	{
-		if ( !ioDevice -> isOpen())
-			continue;
+void QlfTUB::runThread(TUB_Thread* thread) {
+ 
+  while (!terminated) {
+    if ( !ioDevice -> isOpen())
+      continue;
+    
+    QByteArray buf = ioDevice -> readLine(100);
+    
+    if (buf.isEmpty() && !readLineFlag)
+      continue;
+    
+    if (buf.startsWith("GR")) {
+      onADCCode(buf);
+      continue;
+    }
+    
+    QMutexLocker locker(&mutex);
+    
+    buffer.push_back(buf);
+    waitCondition.wakeOne();
+  }
+}
 
-		QByteArray buf = ioDevice -> readLine(100);
+QlfTUBv2::QlfTUBv2(QIODevice* ioDevice) :
+  ioDevice(ioDevice) {
+}
 
-		if (buf.isEmpty() && !readLineFlag)
-			continue;
+int QlfTUBv2::measure() {
+  ioDevice->write("GM\n", 3);
+  QByteArray buf = ioDevice->readLine();
+  buf.remove(0, 2);
+  buf.chop(1);
+  return buf.toInt();
+}
 
-		if (buf.startsWith("GR"))
-		{
-			onADCCode(buf);
-			continue;
-		}
+void QlfTUBv2::setRange(Range range) {
+  QByteArray buf("SO");
+  buf.append(QByteArray::number(range.minimum));
+  buf.append(',');
+  buf.append(QByteArray::number(range.maximum));
+  buf.append('\n');
+  ioDevice->write(buf);
 
-		QMutexLocker locker(&mutex);
+  buf = ioDevice->readLine();
+}
 
-		buffer.push_back(buf);
-		waitCondition.wakeOne();
-	}
+QlfTUBv2::Range QlfTUBv2::getRange() {
+  QByteArray buf("SO\n");
+  ioDevice->write(buf);
+  buf = ioDevice->readLine();
+  buf = buf.mid(2);
+  buf.chop(1);
+  
+  QList<QByteArray> res = buf.split(',');
+  if (res.size() < 2)
+    return Range(0, 0);
+  
+  return Range(res[0].toInt(), res[1].toInt());
 }
+
+char QlfTUBv2::symbolState() {
+  ioDevice -> write("GS\n", 3);
+  QByteArray buf = ioDevice->readLine();
+  if (buf.isEmpty())
+    return '\0';
+  return buf[2];
+}

File src/QlfTUB.h

 #include <QWaitCondition>
 #include <QTime>
 
-class QlfTUB: public QObject
-{
-	Q_OBJECT
-public:
+class QlfTUB: public QObject {
+  Q_OBJECT
+  public:
 
-	struct Range
-	{
-		int minimum;
-		int maximum;
-		Range (int min, int max)
-			: minimum(min), maximum(max) {}
-	};
+  struct Range {
+    int minimum;
+    int maximum;
+    Range (int min, int max)
+      : minimum(min), maximum(max) {}
+  };
 	
-	QlfTUB (QIODevice* ioDevice);
+  QlfTUB (QIODevice* ioDevice);
 
-	~QlfTUB ();
+  ~QlfTUB ();
 
-	/**
-	 * Состояние прибора
-	 * \return 'D' - тензодатчик не подключен;
-	 * 'С' - запущен непрерывный режим;
-	 * 'W' - прибор готов к работе
-	 * '\0' - Прибор не отвечает
-	 */
-	char symbolState ();
+  /**
+   * Состояние прибора
+   * \return 'D' - тензодатчик не подключен;
+   * 'С' - запущен непрерывный режим;
+   * 'W' - прибор готов к работе
+   * '\0' - Прибор не отвечает
+   */
+  char symbolState ();
 
-	/**
-	 * Провести измерение
-	 * \return код АЦП
-	 */
-	int measure ();
+  /**
+   * Провести измерение
+   * \return код АЦП
+   */
+  int measure ();
 
-	Range getRange();
+  Range getRange();
 public Q_SLOTS:
 
-	void resetTimer ();
+  void resetTimer ();
 
-	/**
-	 * Запустить измерения в непрерывном режиме
-	 * \param msTimeout интервал измерений, мс
-	 */
-void run(int msTimeout = 100);
+  /**
+   * Запустить измерения в непрерывном режиме
+   * \param msTimeout интервал измерений, мс
+   */
+  void run(int msTimeout = 100);
 
-/**
- * Остановить измерения
- */
-void stop();
+  /**
+   * Остановить измерения
+   */
+  void stop();
 
-/**
- * Установить допустимый диапазон сил
- * \param min - минимальный код АЦП (соответствует минимально допустимой силе)
- * \param max - максимальныйй код АЦП (соответствует максимально допустимой силе)
- */
-void setRange(Range);
+  /**
+   * Установить допустимый диапазон сил
+   * \param min - минимальный код АЦП (соответствует минимально допустимой силе)
+   * \param max - максимальныйй код АЦП (соответствует максимально допустимой силе)
+   */
+  void setRange(Range);
+ 
+Q_SIGNALS:
+  /**
+   * Результат измерения в непрерывном режиме
+   * \param code код АЦП
+   * \param msTime время прихода данных в мс
+   */
+  void dataReady (int code, int msTime);
+private:
+  typedef QlfThread<QlfTUB> TUB_Thread;
+  void runThread(TUB_Thread* thread);
 
-Q_SIGNALS:
-/**
- * Результат измерения в непрерывном режиме
- * \param code код АЦП
- * \param msTime время прихода данных в мс
- */
-void dataReady (int code, int msTime);
+  void onADCCode(QByteArray& data);
+  QByteArray readLine();
 private:
-typedef QlfThread<QlfTUB> TUB_Thread;
-void runThread(TUB_Thread* thread);
-
-void onADCCode(QByteArray& data);
-QByteArray readLine();
-private:
-QIODevice* ioDevice;
-QList<QByteArray> buffer;
-TUB_Thread tubThread;
-QMutex mutex;
-QWaitCondition waitCondition;
-bool terminated;
-bool readLineFlag;
-QTime timer;
+  QIODevice* ioDevice;
+  QList<QByteArray> buffer;
+  TUB_Thread tubThread;
+  QMutex mutex;
+  QWaitCondition waitCondition;
+  bool terminated;
+  bool readLineFlag;
+  QTime timer;
 };
 
+class QlfTUBv2: public QObject {
+  Q_OBJECT
+  public:
+
+  struct Range {
+    int minimum;
+    int maximum;
+    Range (int min, int max)
+      : minimum(min), maximum(max) {}
+  };
+	
+  QlfTUBv2 (QIODevice* ioDevice);
+
+  /**
+   * Состояние прибора
+   * \return 'D' - тензодатчик не подключен;
+   * 'С' - запущен непрерывный режим;
+   * 'W' - прибор готов к работе
+   * '\0' - Прибор не отвечает
+   */
+  char symbolState ();
+
+  /**
+   * Провести измерение
+   * \return код АЦП
+   */
+  int measure ();
+
+  Range getRange();
+
+public Q_SLOTS:
+
+  /**
+   * Установить допустимый диапазон сил
+   * \param min - минимальный код АЦП (соответствует минимально допустимой силе)
+   * \param max - максимальныйй код АЦП (соответствует максимально допустимой силе)
+   */
+  void setRange(Range);
+
+private:
+  QIODevice* ioDevice;
+};
+
+
 #endif /*QLFTUB_H_*/