[Solved] Code Refactoring from Old Passthrough Firmware to HologramCloud.enterPassthrough()

I’m using version 0.9.2 for such a long time since version 0.10.1 can’t log the konekt_user_module_serial_gateway.ino in the Serial Monitor.

I tried compiling using both 0.10.4 and 0.10.5 but I’m getting the below error (code compiles in 0.9.2/0.10.1 though)

Arduino: 1.6.11 (Mac OS X), Board: “Dash, 120MHz, Check, SPI”

Build options changed, rebuilding all
WARNING: library SPI claims to run on [konektdash] architecture(s) and may be incompatible with your current board which runs on [sam] architecture(s).
/Users/xxx/Documents/Arduino/G6-14/G6-14.ino: In function ‘void ManagePower()’:
G6-14:331: error: invalid conversion from ‘char*’ to ‘uint8_t {aka unsigned char}’ [-fpermissive]
SerialCloud.write(message);
^
In file included from /Users/xxx/Library/Arduino15/packages/konekt/hardware/sam/0.10.4/cores/arduino/WVariant.h:47:0,
from /Users/xxx/Library/Arduino15/packages/konekt/hardware/sam/0.10.4/cores/arduino/Arduino.h:87,
from sketch/G6-14.ino.cpp:1:
/Users/xxx/Library/Arduino15/packages/konekt/hardware/sam/0.10.4/cores/arduino/SerialCloud.h:41:12: error: initializing argument 1 of ‘virtual size_t SerialCloudClass::write(uint8_t)’ [-fpermissive]
size_t write(uint8_t);
^
/Users/xxx/Documents/Arduino/G6-14/G6-14.ino: In function ‘void sendAT(int, char*)’:
G6-14:463: error: invalid conversion from ‘char*’ to ‘uint8_t {aka unsigned char}’ [-fpermissive]
SerialCloud.write(ATCommand);
^
In file included from /Users/xxx/Library/Arduino15/packages/konekt/hardware/sam/0.10.4/cores/arduino/WVariant.h:47:0,
from /Users/xxx/Library/Arduino15/packages/konekt/hardware/sam/0.10.4/cores/arduino/Arduino.h:87,
from sketch/G6-14.ino.cpp:1:
/Users/xxx/Library/Arduino15/packages/konekt/hardware/sam/0.10.4/cores/arduino/SerialCloud.h:41:12: error: initializing argument 1 of ‘virtual size_t SerialCloudClass::write(uint8_t)’ [-fpermissive]
size_t write(uint8_t);
^
exit status 1
invalid conversion from ‘char*’ to ‘uint8_t {aka unsigned char}’ [-fpermissive]

Are you using the same makefile? And have this in it:

CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums

I think compiler needs to know that you want char to be the same as uint_8

I uploaded konekt_system_module_simple_modem.ino.bin system firmware in the DASH board. Is this the ‘makefile’ you’re looking for?

Hi, a Makefile is the script that is used by the IDE to build your sketch.

Are you doing anything special to customize the Hologram package in the IDE or have you just done the basic install in the board manager?

We strongly recommend using 0.10.5 now as you’ll have a lot of weird problems if you don’t and the latest firmware has other solutions for passing AT commands through to the modem.

You shouldn’t be having any build issues within the Hologram package if you haven’t edited anything. It might be because you are on an old version of the Arduino IDE. Can you try upgrading your IDE to 1.8.4 and see if that helps?

Other things to try if that doesn’t work:

  • uninstalling the Hologram package in the boards manager and reinstalling it
  • exit the IDE, completely delete your Arduino IDE profile directory (looks like /Users/xxx/Library/Arduino15 on your system) and then start the IDE again and add the Hologram URL into preferences and reinstall the package from the boards manager

Actually, looking at that error a little closer I think it’s that you’re using write which only accepts single characters. Try print() or sendMessage()

Hi Reuben,

I assume I’m using Arduino IDE’s compiler script as I’m not using any other tools to build the sketch.
So I’ll take your recommendation to update my IDE to 1.8.4. first.
Thanks.

Okay, I’ll do that first.

Ok, let us know how it goes. Here’s some docs for the new HologramCloud interface: https://hologram.io/docs/reference/dash/api/#hologramcloud-sendmessage-const-char-content-

It’s changed a lot since version 0.9

You also may be very interested in this function: https://hologram.io/docs/reference/dash/api/#hologramcloud-enterpassthrough-

By the way, I forgot to mention that I have konekt_system_module_simple_modem.ino.bin as the board’s system firmware. I was wrong to mention the konekt_user_module_serial_gateway.ino thread in the first place.
Let me know if this contributes to the error.

Oh ok, yeah in order to use the latest firmware features you need the correct system firmware version: https://9c8e851d5e6d6e09a16f-c819ef7afc7415bef734d736f9e31e05.ssl.cf5.rackcdn.com/dash/system_firmware/dash_system_module_firmware_0.9.13.bin

I’d recommend you use this instead of that special passthrough firmware and do your passthrough things with our built-in enterPassthrough function. Which functions are you using? We probably have built-in support for most of them now.

Now it’s making sense. Thanks Reuben as always.

Now I think I have to do the following:

  1. Upgrade Arduino IDE to the latest version.
  2. Use the latest Hologram SDK for Arduino.
  3. Upload the correct system firmware (link you’ve provided above).
  4. Review all AT Commands and see if they are all in the built-in functions (I see get Location is there already)

When going in and out of the passthrough and the built-in functions, is the instruction below the one that I should look into?

Yep, you should follow the notes on there.

Hopefully with the new firmware things will be much easier for you since we have built wrappers for most functions on the modem. If there are any features missing let us know and we may add them in a future version

Hi Reuben,

I did everything in the list, and the code compiled after changing the SerialCloud.write to SerialCloud.print.
However, there’s nothing being sent via AT commands.

I noticed two things: The old passthrough firmware logs +UMWI: 0,1 - 0,4 and was able to handle unsynchronized responses such from AT+ULOC. Another thing is that I usually get ABORT and ERROR response from AT commands (when antenna is removed) from AT+UPSD=0,1 and AT+UPSD=0,3… but I did not get such this time.

To further my testing, I removed the SIM hoping to see ERROR message in AT+UPSD=0,1. Nothing shows in the log.

Are you trying to send the AT command via SerialCloud? That’s only for sending to our cloud. See the note in the enterPassthrough function. There’s a new SerialSystem object that you can write to and that will send everything to the modem.

Oh, I’ll have a look at it… Too eager to test thinking that no need to change the SerialCloud to SerialSystem (which I missed to look into).

IT WORKS!!!
Thanks for the support Reuben.

Can I change the title of this thread to:
[Solved] Code Refactoring from Old Passthrough Firmware to HologramCloud.enterPassthrough()

Glad to hear it. I’ll change the title for you

Thanks again.

BTW, Is there an existing thread/discussion regarding HologramCloud? The one discussing the wrapper’s corresponding UBLOX’ AT+ commands in a much in-depth discussion such as error handling, retries, timeouts, etc.

I suggest (for filtering purposes) that a ‘group’ be created at the same level of DEVELOPERS - DEVICE DEVELOPMENT if that make sense.

Also, at first glance (if my eyes fail me) I can’t find the equivalent of AT+UPSD=0,1 (APN setting). My client is gearing to use Podsystem in the prototype and have not convinced them yet to look at Hologram SIM at this time.

We don’t currently have a function to set the APN. We may add that in the future but many functions of the Dash firmware won’t work without our SIM cards.

Feel free to open any threads for AT command discussion. If you’re interested in the underlying AT commands for something, the source code is all available on our GitHub.