How to build the firmware.bin file

Has anybody tried to build it from the command line? I’m having some success, but am missing setup() and loop(). Those functions are defined in /home/nelson/ringo/CircuitMess-Ringo-firmware/src/main.cpp but that file isn’t getting included in the build.

The command line of which build environment? Arduino? VS Code? Something else?

Unix shell. Probably using platformio.

You got me there. I searched high and low through my Windows 10 machine running VS-Code with Platformio extension and couldn’t find hide-nor-hair of a Makefile. Yet I know the compiler options must be being set somewhere because in this compilation “char” is unsigned which is NOT the default for g++. Do you have a Makefile, and if so where did you get it? Main.cpp is in the same directory as the rest of the firmware, so something would have to be intentionally NOT compiling it, while compiling everything else.

I know what I did wrong here. I did a git clone in …/lib/MAKERphone, which put the files into CircuitMess-Ringo, whereas they should have gone directly into MAKERphone. Oops.

If you’re reading this, you should be reading that: Ringo Reflash factory firmware

Looks like you found the answer to your question, Russ.

1 Like

So now that it’s working… what’s the secret command line to do a build?

1 Like

In an attempt to answer my own question, I tired (from the top level Firmware directory):

C:\Users\Frank\.platformio\penv\Scripts\platformio.exe run --target clean
C:\Users\Frank\.platformio\penv\Scripts\platformio.exe run

But the generated firmware.bin file was different (and of a slightly different size) from the one which is generated by building from the VS Code GUI (Terminal/Run Task…/PlatformIO: Build Firmware). I didn’t try to run it on the phone.

So I seem to have failed to find a command line that exactly duplicates what the GUI does. Enlighten me Russ :slightly_smiling_face:

Yes @RussNelson, we’re all eager to know! :smiley:

Thank you guys for being such a big part of the community! :partying_face:

Yes, it’s just following the combination of the “Reflash factory firmware” instructions and Frank’s instructions then running platformio run. That builds the .bin file, then you program it into the phone using the esptool.py command.

I haven’t looked into why the executable is yet a third size: 1547424

1 Like

Because i want to change some thinks in firmware is there any guide with steps how to compile it ? I have downloaded the vs code but i am confused how to do it.

Absolutely everything that is necessary to know can be found in this topic (in which you are asking this question) and this topic: Ringo Reflash factory firmware. In particular, see the first 11 steps of the post I made above (in which there are 12 numbered paragraphs); and of course the various mis-steps/gotchas in the posts leading up to that post. Read it all very carefully and you’ll be able to build and flash a custom firmware.bin from the two repositories you download from the github website (CircuitMess Ringo firmware and CircuitMess Ringo). Of course the firmware is up to v1.0.5 now as opposed to 1.0.1 when all of the above posts were written, but just grab the latest tag from each.

There…fixed that for you. :innocent:

Yeah, fumbly fingers in the morning! Fixed now.

I have just compiled ( error , warning free ) firmware.bin :slight_smile:
The file size is 1.46 exactly the same as the firmware in the [CircuitMess-Ringo-firmware]
Thank you for your time and for your help.

Now i am waiting info about the module :yum:

Unfortunately, I think you’re going to be a little disappointed about that one unless Robert comes up with some miracle that was not possible a year ago. Stay tuned, I’m sure he’ll get back to you.

I have noticed a strange thing.

I have changed the word “Hold” from the " Hold “#” to unlock " to capital letters so i can test the compiling and upload feature of the vscode.

The phone is working perfect. . But the problem is when i have tried to run a game after the LOADING NOW prompt the phone resets and halt at the spash screen.
with the Loading… message.

I must re-flash the phone to work again. except the game loading, the phone is working ok and i can access sd card. for example load pictures etc. i have problem only for the apps ( games ). Is something that i must change during the compiling ?

Also i have noticed that after the re-flash the phone does not start from the setup wizard but from sim pin security prompt.

To understand. What is the procedure that phone do when i select a game?

First is loading it.
Then it exits the phone app and reboots to run the game ?

Thank you.

It looks like you might be experiencing the same teething issues I ran into when I first started writing my first Ringo app.

The Ringo uses a two partition setup: one is the running partition (call it A for this example) and the other is non-running (B for this example). When Ringo downloads a firmware update or, indeed, loads an app or game from the SD card, it flashes the .bin to the non-running B partition, changes the EEPROM flags to specify which partition (B) is used on next boot, then initiates a reboot to load up the partition B you just flashed. The formerly running partition A still houses the Ringo Loader when you’ve loaded up a game or app into B. You call out to mp.loader() manually or via homePopup() screen to return to Ringo Loader, which effectively just switches the EEPROM flags to specify the A partition as next boot and reboots (after properly shutting down the SIM module). You CANNOT flash the running partition, hence the two identically sized partitions. It’s actually a really clever use of the two-partition setup the way Ringo launches apps from the SD card and then returns to the Ringo launcher

Here’s some minimum things you should be including in your apps to ensure they operate properly with the Ringo:

#include <MAKERphone.h>
MAKERphone mp;

void setup() {
  Serial.begin(115200);
  mp.begin(1);  // This inits all the necessary Ringo stuff
  mp.homePopupEnable(1);   // Enable homePopup(), the screen that comes up when 
                           // you press BTN_HOME, so you can change settings and 
                           // return to Ringo loader with ease.
  mp.inCall = 0;  // This will enable the device/display sleep timeout
                  // Setting to 1 disables sleep timeout
}
1 Like