# HG changeset patch # User jeandet # Date 2014-04-01 18:11:39 # Node ID 4c8d1b562d9131425a429ee8bd79e501c8cbe571 # Parent 52e9b3517eea7d140b2f6b36e594aeca7b00c70f Improved APB UART Plugin, now check how many bytes are available on uart before reading. Memchecker Work In Progress. diff --git a/APBUARTPLUGIN/apbuart_plugin_ui.cpp b/APBUARTPLUGIN/apbuart_plugin_ui.cpp --- a/APBUARTPLUGIN/apbuart_plugin_ui.cpp +++ b/APBUARTPLUGIN/apbuart_plugin_ui.cpp @@ -34,6 +34,9 @@ APBUART_Plugin_ui::APBUART_Plugin_ui(QWi connect(this->ui->UART_TERM,SIGNAL(sendChar(char)),this,SIGNAL(sendChar(char))); connect(this->ui->PortNameLineEdit,SIGNAL(textChanged(QString)),this,SIGNAL(PortNameChanged(QString))); connect(this->ui->UartSpeedLineEdit,SIGNAL(textChanged(QString)),this,SIGNAL(UartSpeedChanged(QString))); + connect(this->ui->rescanQpb,SIGNAL(clicked()),this,SLOT(updatePortList())); + this->portListcompleter = NULL; + this->updatePortList(); } APBUART_Plugin_ui::~APBUART_Plugin_ui() @@ -62,3 +65,36 @@ void APBUART_Plugin_ui::setUartConnected this->ui->ConnectQpb->setText("Open Port"); } } + +#include + +void APBUART_Plugin_ui::updatePortList() +{ + if(this->portListcompleter==(QCompleter*)NULL) + { + this->portListcompleter=new QCompleter(this); + this->portListcompleter->setCaseSensitivity(Qt::CaseInsensitive); + this->portListcompleterModel = new QStringListModel(this); + this->portListcompleter->setModel(this->portListcompleterModel); + this->ui->PortNameLineEdit->setCompleter(this->portListcompleter); + } + rs232portslist_t* portlist = rs232getportlist(); + rs232portslist_t* portlistenum = portlist; + QStringList wordList; + while(portlistenum!=NULL) + { + wordList << portlistenum->name; + portlistenum = portlistenum->next; + } + rs232deleteportlist(portlist); + this->portListcompleterModel->setStringList(wordList); +} + + + + + + + + + diff --git a/APBUARTPLUGIN/apbuart_plugin_ui.h b/APBUARTPLUGIN/apbuart_plugin_ui.h --- a/APBUARTPLUGIN/apbuart_plugin_ui.h +++ b/APBUARTPLUGIN/apbuart_plugin_ui.h @@ -23,6 +23,8 @@ #define APBUART_PLUGIN_UI_H #include +#include +#include namespace Ui { class APBUART_Plugin_ui; @@ -39,6 +41,7 @@ public: public slots: void setEnableForLoopBack(bool enable); void setUartConnected(bool enable); + void updatePortList(); signals: void loopbackChkBxStateChanged( int state ); void apbUartTextReceived(QString text); @@ -48,6 +51,8 @@ signals: void PortNameChanged(QString text); private: Ui::APBUART_Plugin_ui *ui; + QCompleter *portListcompleter; + QStringListModel *portListcompleterModel; }; #endif // APBUART_PLUGIN_UI_H diff --git a/APBUARTPLUGIN/apbuart_plugin_ui.ui b/APBUARTPLUGIN/apbuart_plugin_ui.ui --- a/APBUARTPLUGIN/apbuart_plugin_ui.ui +++ b/APBUARTPLUGIN/apbuart_plugin_ui.ui @@ -51,16 +51,23 @@ - + + + + Rescan ports + + + + + + + Open Port - - - diff --git a/APBUARTPLUGIN/uartpollingthread.cpp b/APBUARTPLUGIN/uartpollingthread.cpp --- a/APBUARTPLUGIN/uartpollingthread.cpp +++ b/APBUARTPLUGIN/uartpollingthread.cpp @@ -42,6 +42,8 @@ UARTPollingThread::~UARTPollingThread() void UARTPollingThread::run() { + char ch[4097]; + int timeout =10; SocExplorerEngine::message(this->plugin,"Entering APB UART polling thread",3); while (!this->isInterruptionRequested()) { @@ -76,21 +78,35 @@ void UARTPollingThread::run() } else { - int read =0; - char ch[1]; + int read =0,avail=0; uartMutex->lock(); if(uartOpened) { - read =rs232read(this->uart,ch,1); - SocExplorerEngine::message(this->plugin,QString("Read %1 bytes on uart").arg(read),3); + avail = rs232availablebytes(this->uart); + SocExplorerEngine::message(this->plugin,QString("%1 available bytes on uart").arg(read),3); + if(avail) + { + if(avail>=4096) + { + read = rs232read(this->uart,ch,4096); + timeout = 0; + } + else + { + read = rs232read(this->uart,ch,avail); + timeout = 10; + } + SocExplorerEngine::message(this->plugin,QString("Read %1 bytes on uart").arg(read),3); + ch[read]='\0'; + } } uartMutex->unlock(); if(read>=1) { - SocExplorerEngine::message(this->plugin,QString("Received one char from APBUART"),3); - emit this->apbUartTextReceived(QString(ch[0])); + SocExplorerEngine::message(this->plugin,QString("Received %1 char(s) from APBUART").arg(read),3); + emit this->apbUartTextReceived(QString(ch)); } - msleep(10); + msleep(timeout); } } } diff --git a/memcheckplugin/memchecker.cpp b/memcheckplugin/memchecker.cpp --- a/memcheckplugin/memchecker.cpp +++ b/memcheckplugin/memchecker.cpp @@ -26,9 +26,10 @@ memchecker::memchecker(socexplorerplugin this->plugin = plugin; } -bool memchecker::checkmemory(unsigned int address,unsigned int size) +QString memchecker::checkmemory(unsigned int address, unsigned int size, bool *success) { - bool success = true; + *success = true; + QString repport; unsigned int* dataLocal = (unsigned int*)malloc(size); unsigned int* dataOnBoard = (unsigned int*)malloc(size); for(int i=0;(unsigned int)i<(size>>2);i++) @@ -40,18 +41,18 @@ bool memchecker::checkmemory(unsigned in for(int i=0;(unsigned int)i<(size>>2);i++) { if(dataLocal[i]!=dataOnBoard[i]) - success=false; + *success=false; } - free(dataLocal); free(dataOnBoard); - return success; + return repport; } -bool memchecker::checkdatabits(unsigned int address,unsigned int size) +QString memchecker::checkdatabits(unsigned int address,unsigned int size,bool* success) { - bool success = true; - return success; + *success = true; + QString repport; + return repport; } diff --git a/memcheckplugin/memchecker.h b/memcheckplugin/memchecker.h --- a/memcheckplugin/memchecker.h +++ b/memcheckplugin/memchecker.h @@ -28,8 +28,8 @@ class memchecker { public: memchecker(socexplorerplugin* plugin); - bool checkmemory(unsigned int address,unsigned int size); - bool checkdatabits(unsigned int address,unsigned int size); + QString checkmemory(unsigned int address,unsigned int size,bool* success); + QString checkdatabits(unsigned int address,unsigned int size,bool* success); private: socexplorerplugin* plugin; diff --git a/memcheckplugin/memcheckplugin.cpp b/memcheckplugin/memcheckplugin.cpp --- a/memcheckplugin/memcheckplugin.cpp +++ b/memcheckplugin/memcheckplugin.cpp @@ -26,14 +26,27 @@ memcheckplugin::memcheckplugin(QWidget * this->UI = new memcheckplugin_ui(); this->setWidget(this->UI); this->checker = new memchecker(this); + QObject::connect(this->UI,SIGNAL(checkdatabits(uint,uint)),this,SLOT(checkdatabits(uint,uint))); + QObject::connect(this->UI,SIGNAL(checkmemory(uint,uint)),this,SLOT(checkmemory(uint,uint))); } memcheckplugin::~memcheckplugin() {} -void memcheckplugin::startCheck() + +void memcheckplugin::checkmemory(unsigned int address, unsigned int size) { + bool success; + QString repport=this->checker->checkmemory(address,size,&success); + this->UI->setResult(success,repport); } +void memcheckplugin::checkdatabits(unsigned int address, unsigned int size) +{ + bool success; + QString repport=this->checker->checkdatabits(address,size,&success); + this->UI->setResult(success,repport); +} + diff --git a/memcheckplugin/memcheckplugin.h b/memcheckplugin/memcheckplugin.h --- a/memcheckplugin/memcheckplugin.h +++ b/memcheckplugin/memcheckplugin.h @@ -58,7 +58,8 @@ public: explicit memcheckplugin(QWidget *parent = 0); ~memcheckplugin(); public slots: - void startCheck(); + void checkmemory(unsigned int address,unsigned int size); + void checkdatabits(unsigned int address,unsigned int size); signals: private: diff --git a/memcheckplugin/memcheckplugin_ui.cpp b/memcheckplugin/memcheckplugin_ui.cpp --- a/memcheckplugin/memcheckplugin_ui.cpp +++ b/memcheckplugin/memcheckplugin_ui.cpp @@ -52,3 +52,16 @@ void memcheckplugin_ui::startCheck() } } + +void memcheckplugin_ui::setResult(bool success, QString repport) +{ + this->ui->testDetails->setText(repport); + if(success) + { + this->ui->TestResult->setText("Success"); + } + else + { + this->ui->TestResult->setText("Failed"); + } +} diff --git a/memcheckplugin/memcheckplugin_ui.h b/memcheckplugin/memcheckplugin_ui.h --- a/memcheckplugin/memcheckplugin_ui.h +++ b/memcheckplugin/memcheckplugin_ui.h @@ -37,9 +37,10 @@ public: ~memcheckplugin_ui(); public slots: void startCheck(); + void setResult(bool success,QString repport); signals: - bool checkmemory(unsigned int address,unsigned int size); - bool checkdatabits(unsigned int address,unsigned int size); + void checkmemory(unsigned int address,unsigned int size); + void checkdatabits(unsigned int address,unsigned int size); private: Ui::memcheckplugin_ui *ui; };