Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with multiple Custom functions #290

Open
shockagent opened this issue Nov 10, 2020 · 0 comments
Open

Issue with multiple Custom functions #290

shockagent opened this issue Nov 10, 2020 · 0 comments

Comments

@shockagent
Copy link

shockagent commented Nov 10, 2020

I made a very simple sketch and I defined 2 functions to use with aREST.
I use an Arduino UNO with Ethernet shield.
I use VSCode with PlatformIO.

The first function is working as expected, only if I don't call it with a query string, BUT if I pass it a query string, the second function is called instead.
The second function doesn't read params I pass to it: the params string is just empty.

Source code:
`
#include <SPI.h>
#include <SD.h>
#include <Ethernet.h>
#include <aREST.h>
#include <avr/wdt.h>

#define PORT 1977

// Enter a MAC address for your controller below.
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0xFE, 0x40};

// IP address in case DHCP fails
IPAddress ip(192, 168, 1, 77);

// Ethernet server
EthernetServer server(PORT);

// Create aREST instance
aREST rest = aREST();

// Variables to be exposed to the API
int ev1, ev2, ev3;
boolean sd;

// Declare functions to be exposed to the API
int StartSD(String);
int AFunction(String);

void setup(void)
{
// Start Serial
Serial.begin(9600);
while (!Serial)
{
;
}

pinMode(10, OUTPUT);

// Init variables and expose them to REST API
sd = false;
ev1 = HIGH;
ev2 = HIGH;
ev3 = HIGH;

// rest.variable("humidity", &humidity);
rest.variable("ev1", &ev1);
rest.variable("ev2", &ev2);
rest.variable("ev3", &ev3);
rest.variable("sd", &sd);

// Function to be exposed
char init[] = "init";
char prova[] = "prova";
rest.function(init, StartSD);
rest.function(prova, AFunction);

// Give name & ID to the device (ID should be 6 characters long)
static const char name[] = "ev";
rest.set_id("008");
rest.set_name(name);

// Start the Ethernet connection and the server
Ethernet.begin(mac, ip);

server.begin();
Serial.print("server is at ");
Serial.print(Ethernet.localIP());
Serial.print(":");
Serial.println(String(PORT));

// Start watchdog
wdt_enable(WDTO_4S);
}

void loop()
{

// listen for incoming clients
EthernetClient client = server.available();
if (client)
{
Serial.print("client connected ");
Serial.println(client.remoteIP());
rest.handle(client);
}
wdt_reset();
}

// Custom function accessible by the API
int StartSD(String params)
{
Serial.print("Parameters: ");
Serial.println(params);

if (!sd)
{
if (SD.begin(4))
{
sd = true;
Serial.println("Init SD: OK");
return 1;
}
else
{
sd = false;
Serial.println("Init SD: error");
return 0;
}
}
else
{
Serial.println("Init SD: already init");
return 1;
}
}

int AFunction(String params)
{
Serial.print("Function Params: ");
Serial.println(params);
return 1;
}
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant