Unsolved Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.
-
@jsulm
Hi
Àhh on first ready signal, it will call the slot and the
waitForReadyRead + loop will then read all remaining data.
Ok that should actually do it.
( if really never breaks the while loop) -
@mrjj Yes, possible that the timeout kicks in and terminates the loop before everything was received.
-
@jsulm
Hi
I also wonder if that would happen if image was say 1 MB.But it should be clear to poster if its called more than once with the
qDebug()<<ba.size()<<"sizeeeee:"; -
@Rika I suggest you implement the receiving part in a proper way: without mixing asynchronous and synchronous ways to read data. Remove the loop from serial::on_readdata(). Put QByteArray ba as member variable in the class. Accumulate data in ba untill you got all data.
-
-
@Rika Please read https://doc.qt.io/qt-5/qserialport.html#waitForReadyRead "This function blocks until new data is available for reading and the readyRead() signal has been emitted" and my previous post (no need for waitForReadyRead and the loop).
-
@jsulm You mean this?
void serial::on_readdata() { QByteArray ba(serialPort->readAll()); qDebug()<<ba.size()<<"sizeeeee:"; QFile newDoc("/home/pi/Desktop/imagexx.jpg"); if(newDoc.open(QIODevice::WriteOnly)){ newDoc.write(ba); } newDoc.close(); }
-
@Rika No, not like this. Please read my post above "Put QByteArray ba as member variable in the class. Accumulate data in ba untill you got all data."
-
@jsulm Sorry, I don't really understand what you mean. Can you give an example with code?
-
void serial::on_readdata() { ba.apend(serialPort->readAll()); qDebug()<<ba.size()<<"sizeeeee:"; if (ba.size() == imageSize) { QFile newDoc("/home/pi/Desktop/imagexx.jpg"); if(newDoc.open(QIODevice::WriteOnly)){ newDoc.write(ba); } newDoc.close(); } }
-
@jsulm I tried it and it failed, I sent 31021 bytes and always received 241 bytes.
-
@Rika
So it only shows
qDebug()<<ba.size()<<"sizeeeee:";
1 time with size 241 ? -
@mrjj No, the last time was 241. My old way it also received only 241 bytes, so I was thinking of the possibility of an error sent by the program.
-
@Rika said in Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.:
No, the last time was 241.
So you do get mutiple
qDebug()<<ba.size()<<"sizeeeee:";
messages ? -
@mrjj
144 sizeeeee:
160 sizeeeee:
176 sizeeeee:
192 sizeeeee:
208 sizeeeee:
224 sizeeeee:
240 sizeeeee:
241 sizeeeee: -
@Rika As I already said: you have to accumulate all these data in ba and when you got everything then you store it in the file.
Again the code:void serial::on_readdata() { ba.apend(serialPort->readAll()); qDebug()<<ba.size()<<"sizeeeee:"; if (ba.size() == imageSize) { QFile newDoc("/home/pi/Desktop/imagexx.jpg"); if(newDoc.open(QIODevice::WriteOnly)){ newDoc.write(ba); } newDoc.close(); } }
-
@Rika
But it stops at 241 every time?Maybe its due to data.
Could you try in your sent functionvoid serial::on_pushButton_2_clicked() { QByteArray ba; ba.fill('A', 1000); if(serialPort->isOpen()==true){ serialPort->write(ba); qDebug()<<ba.size()<<"size_send:"; } }
and see if that changes how you the reading goes.
This just sends 1000 A.Also i wonder if write will copy the data and then send / if write sent it all there as else we have the issue of the sent buffer running out of scope.
-
@jsulm I have made your way, the above is the result from qDebug (). It only received 241 bytes so file imagexxx.jpg was not created. (my imageSize= 31021).
-
@Rika said in Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.:
@jsulm I have made your way, the above is the result from qDebug (). It only received 241 bytes so file imagexxx.jpg was not created. (my imageSize= 31021).
at this point, you're not getting away with a simple I've tried that, it does not work.
@jsulm is absolutely correct. Show us your actual code
-
@mrjj I tried with 1000 A, received only 190