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);
}
}
-
Where do you get that callback signature?fabrosell– fabrosell2016年03月28日 14:13:27 +00:00Commented Mar 28, 2016 at 14:13
-
Just added the example I got it fromVinícius Affonso– Vinícius Affonso2016年03月28日 14:31:25 +00:00Commented 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.Chris Stratton– Chris Stratton2016年05月27日 19:03:13 +00:00Commented May 27, 2016 at 19:03
1 Answer 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.
-
Could it be this product: jeelabs.org/pub/docs/ethercard ?ott--– ott--2016年03月28日 19:47:40 +00:00Commented 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.fabrosell– fabrosell2016年03月28日 19:56:33 +00:00Commented Mar 28, 2016 at 19:56
-
1Thats exactly my problem, I can't find its documentation anywhere! Btw, thx for the response!Vinícius Affonso– Vinícius Affonso2016年03月28日 21:35:33 +00:00Commented Mar 28, 2016 at 21:35
-
It's all in the source. In the file
tcpip.cpp
in theethercard-master.zip
you find the functionstatic uint8_t www_client_internal_result_cb
. There you see howstatus
is derived from the HTTP status code, likeuint8_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?ott--– ott--2016年03月29日 00:00:44 +00:00Commented Mar 29, 2016 at 0:00 -
They are not actually pointers. "off" is presumably an offset index while "len" is a count or size.Chris Stratton– Chris Stratton2016年05月27日 19:01:15 +00:00Commented May 27, 2016 at 19:01