3

I'm reading a code that uses Arduino as a webclient and when he tries to catch the info from the site, he uses a callback with the following parameters:

static void response_callback (byte status, word off, word len)

Can anyone explain me how does each one of this parameters work exactly?

PS.: The example I got it from:

#include <EtherCard.h>
#define HTTP_HEADER_OFFSET 0
static byte mymac[] = {0x12,0x34,0x56,0x78,0x90,0xAB};
char website[] PROGMEM = "www.yourwebsite.com";
byte Ethernet::buffer[700];
static uint32_t timer = 0;
static void response_callback (byte status, word off, word len) {
 Serial.print((const char*) Ethernet::buffer + off + HTTP_HEADER_OFFSET);
} 
void setup () {
 Serial.begin(57600);
 if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
 {
 Serial.println("Failed to access Ethernet controller");
 while(1);
 }
 else
 Serial.println("Ethernet controller initialized");
 Serial.println();
 if (!ether.dhcpSetup())
 {
 Serial.println("Failed to get configuration from DHCP");
 while(1);
 }
 else
 Serial.println("DHCP configuration done");
 if (!ether.dnsLookup(website))
 {
 Serial.println("DNS failed");
 while(1);
 }
 else 
 Serial.println("DNS resolution done"); 
 ether.printIp("SRV IP:\t", ether.hisip);
 Serial.println();
}
void loop() {
 ether.packetLoop(ether.packetReceive());
 if (millis() > timer) {
 timer = millis() + 5000;
 ether.browseUrl("/", "yourpage.php", website, response_callback);
 }
}
Edgar Bonet
45.1k4 gold badges42 silver badges81 bronze badges
asked Mar 28, 2016 at 13:51
3
  • Where do you get that callback signature? Commented Mar 28, 2016 at 14:13
  • Just added the example I got it from Commented Mar 28, 2016 at 14:31
  • The Arduino world indeed often lacks traditionally detailed API documentation. One fallback is to do a full-text search (with a GUI tool or grep -R ) of the library folders and installation for the function name, and find its actually source code to study. Commented May 27, 2016 at 19:03

1 Answer 1

1

Apparently, the callback is executed on every packet which arrives by the browseUrl call.

"off" and "len" are pointers to the Ethernet buffer holding the data. "Off" are the initial value (offset) and "len" (length) is the amount of data received.

"byte status", I am not sure what it means, but it's very likely will be some kind of error code. It's not being used in any sample I am seeing, so I am really wondering what it means...

Check this link for a fully working sample

Callback here are called browseUrlCallback1 and browseUrlCallback2.

Can't figure out a link with the detailed documentation. If someone has it, please post it.

answered Mar 28, 2016 at 15:20
5
  • Could it be this product: jeelabs.org/pub/docs/ethercard ? Commented Mar 28, 2016 at 19:47
  • Yeah, but as all I have found, it lacks specific documentation about callback details. BrowseUrl is well documented as usual, but it just specifies how the callback method has to be defined, not what does each parameter mean. Commented Mar 28, 2016 at 19:56
  • 1
    Thats exactly my problem, I can't find its documentation anywhere! Btw, thx for the response! Commented Mar 28, 2016 at 21:35
  • It's all in the source. In the file tcpip.cpp in the ethercard-master.zip you find the function static uint8_t www_client_internal_result_cb. There you see how status is derived from the HTTP status code, like uint8_t f = strncmp("200",(char *)&(gPB[datapos+9]),3) != 0;. Why waste any other space in a docfile nobody likes to write or even read? Commented Mar 29, 2016 at 0:00
  • They are not actually pointers. "off" is presumably an offset index while "len" is a count or size. Commented May 27, 2016 at 19:01

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.