Help coding: adding functionality relying on MySensors-func/library (saveState/loadState) (c++)
-
Im using the mySensors functions saveState and loadState to read/write to EEPROM. To facilitate I have written some small functions that do the casting so that I can save uint16_T/float/other by single function call. I would like to organize these functions in a separate file so that I can add this functionality easily to each project. However I struggle to get the structure correct and overcome a compiler warning.
I have collected the functions in .h-file and .cpp-file
Example://mysEeprom.h - declaration of my help-files void save_uint16(uint8_t position, uint16_t value) //mysEeprom.cpp void save_uint16(uint8_t position, uint16_t value) { saveState(position, (uint8_t)value); saveState(position+1, (uint8_t)(value>>8)); } //Project file main.cpp (Radio-declaration etc.) ie #define MY_RADIO_RFM69 #include <mysensors.h> #include <mysEeprom.h> save_uint16(position, value);The compiler responds that saveState "was not declared in this scope" (the saveState is decleared inside MySensors/core/MySensorsCore.h.).
To tell the compiler where to look for saveState I add an #include <mySensors.h>-statement:
//In MysEeprom.h-file #include "mySensors.h"This time the compiler seems to believe that I want to includes "double" mySensors.h and responds with:
.pio\libdeps\pro8MHzatmega328\MySensors/mysensors.h:426:2: error: #error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.I had this message earlier when the #include <mySensors.h>-statement was positioned before #define MY_RADIO_RFM69 . Putting MY_RADIO_RFM69-statement before include <mySensors.h> solved it (ie my include-statements are put after definitions, just before declaration of global variables).
I have also experimented organizing my eeprom-functions inside a namespace and a class, but so far have not found a working solution. Help is appreciated, how should this be done, thanks!
-
If you cannot include the whole mysensors header, you maybe can just forward declare the function. (basically, just copy the line from the mysensors.h in your mysEeprom.cpp file.
/*extern*/ void saveState(uint8_t pos, uint8_t value); // extern probably not needed, that's real old C, but you I have had // surprises with the arduino compiler… You might need to add it.What's the issue with namespaces or classes?
-
If you cannot include the whole mysensors header, you maybe can just forward declare the function. (basically, just copy the line from the mysensors.h in your mysEeprom.cpp file.
/*extern*/ void saveState(uint8_t pos, uint8_t value); // extern probably not needed, that's real old C, but you I have had // surprises with the arduino compiler… You might need to add it.What's the issue with namespaces or classes?
@boum said in Help coding: adding functionality relying on MySensors-func/library (saveState/loadState) (c++):
/extern/
Wonderful, that did the trick! Thank you very much!
For namespace/class basically the problem was the same, without "mySensors.h" couldnt find saveState and with "include <mySensors.h>" I had "#error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless."
-
If you want to use library functions outside the main sketch, you can also just include the core header, e.g.
#include "core/MySensorsCore.h"
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login