Using the V1.1 upload protocol

I have a C++ application running on embedded linux. I am using boost::asio to interact with the display over a serial port and this is working well.
I uploaded the TFT file to the nextion screen using the editor and I am able to change text and colours etc using C++ with boost::asio.

I have built an enclosure for the electronics and want the ability to update the device without needing the editor. I have read nextions documentation on the v1.1 upload protocol.

First I send the connect command and I get the following response:
comok 3,1073-0,NX4827P043_011C,236,10501,DBAF340187E6D241,128974848-0���

This looks sensible, although I don’t know what the first 3 is as the documentation just states a 0 or 1.

I then send the following command:
whmi-wri 670244,115200,0���

I then wait for 0x05.

At this point the screen changes to nextions update screen, so all is going well.

Then I start to send the TFT data in chunks of 4096 and reading after each chunk waiting for 0x05.

Immediately when I start sending the TFT data I get an error on the screen saying the Model number doesn’t match. It shows the model number: NX4827P043_011C on the screen.

In the editor I have selected NX4827P043_011 as the model number (note the no C at the end as there doesn’t seem to be a version with a C at the end).
To get the TFT file, I compile in the editor, then go to File and click TFT file output. Is this correct? This is the file I am sending to the nextion.

My application does get 0x05 response after each block of 4096 and continues to send the full file. But the nextion just stays on the error screen and when I power cycle the screen it hasn’t updated.

Occasionally instead of of the model number error it will say file version is too low.

Any help would be appreciated.

Does the nextion send 0xFF0xFF0xFF after the 0x05 as well or just 0x05?

I found it to be an error with my asio implementation. I didn’t call restart before subsequent calls to run on the io_context