I am to far outside my realm to even think of a proper Subject title for my question, so sorry for that.
I am slowly moving from Arduino to ESP-IDF.
In Arduino land I was using this and like it allot for my telnet server.
tprintf("Hello World\n");
To be able tyo use that, I was using this from an example I found.
#define tprintf(...) telnetClient.printf(__VA_ARGS__);
Which of course came from this:
WiFiClient telnetClient;
In ESP-IDF land, I am of course using send(clientSock, msg, len, 0); to sent my data. Can someone shed some light on how I might acheve the same thing in ESP-IDF ?
#define tprintf(...) telnetClient.printf(__VA_ARGS__); help...
Re: #define tprintf(...) telnetClient.printf(__VA_ARGS__); help...
Howdy,
I'm afraid it isn't clear in your post what you mean by "the same thing". Are you looking to port the telnet client package? Are you looking to map a #define to a function call?
I'm afraid it isn't clear in your post what you mean by "the same thing". Are you looking to port the telnet client package? Are you looking to map a #define to a function call?
Free book on ESP32 available here: https://leanpub.com/kolban-ESP32
Re: #define tprintf(...) telnetClient.printf(__VA_ARGS__); help...
Sorry I was not clear. yes, I am trying to map a #define to a function call
When using Arduino. I add this at the top of main.
#define tprintf(...) telnetClient.printf(__VA_ARGS__);
WiFiClient telnetClient;
I have of 4 other threads running. What was nice about this is I was able to call tprintf(...) from any thread which would send that out the Telnet socket connection. Whats not clear to me is what to replace the "telnetClient.printf" with.
When using Arduino. I add this at the top of main.
#define tprintf(...) telnetClient.printf(__VA_ARGS__);
WiFiClient telnetClient;
I have of 4 other threads running. What was nice about this is I was able to call tprintf(...) from any thread which would send that out the Telnet socket connection. Whats not clear to me is what to replace the "telnetClient.printf" with.
Re: #define tprintf(...) telnetClient.printf(__VA_ARGS__); help...
Unfortunately its not going to be a great answer ... the story can go in two direction.
The first, #defines. When you code a #define you are asking the environment to perform a smart text replacement before presenting the code to the compilation.
When you code:
#define X(Y) someFunction(1, Y, 2)
and then code:
X(17)
what gets given to the compiler is
someFunction(1, 17, 2)
what that means is that it is as though you had explicitly coded someFunction() instead of X(). This means that macros in this story are merely being used to "cleanup" and "polish" the source.
The second story is more of semantics. If today you were to code:
telnetClient.printf("%d %d", 1, 2);
what would you code instead to achieve your goal. This second story has nothing to do with macros or #defines.
If I were to bet/guess, I'm thinking the story of macros/#defines is a red herring and the real meat of the question is how to replace one library call with some logical equivalent.
The first, #defines. When you code a #define you are asking the environment to perform a smart text replacement before presenting the code to the compilation.
When you code:
#define X(Y) someFunction(1, Y, 2)
and then code:
X(17)
what gets given to the compiler is
someFunction(1, 17, 2)
what that means is that it is as though you had explicitly coded someFunction() instead of X(). This means that macros in this story are merely being used to "cleanup" and "polish" the source.
The second story is more of semantics. If today you were to code:
telnetClient.printf("%d %d", 1, 2);
what would you code instead to achieve your goal. This second story has nothing to do with macros or #defines.
If I were to bet/guess, I'm thinking the story of macros/#defines is a red herring and the real meat of the question is how to replace one library call with some logical equivalent.
Free book on ESP32 available here: https://leanpub.com/kolban-ESP32
Re: #define tprintf(...) telnetClient.printf(__VA_ARGS__); help...
ok, I think I may know from your post how to better explain what I am after.
What I am looking to do is streamline that to simply using the #define I shown before which would allow me to simply do this:
tprintf("The Value is: %u\n", value);
I want all the features of printf, and have it send it via the "send" for the socket connection.
From what I gather, they are somehow tying printf and the socket connection together all in one by "telnetClient.printf(__VA_ARGS__); "
Code: Select all
Currently if I want to send something out via a TCP socket i would do something like this.
char the_buf[64];
int len;
...
...
...
sprintf(the_buf,"The Value is: %u\n", value);
len = strlen(the_buf);
bytes_sent = send(clientSock, the_buf, len, 0);
What I am looking to do is streamline that to simply using the #define I shown before which would allow me to simply do this:
tprintf("The Value is: %u\n", value);
I want all the features of printf, and have it send it via the "send" for the socket connection.
From what I gather, they are somehow tying printf and the socket connection together all in one by "telnetClient.printf(__VA_ARGS__); "
Re: #define tprintf(...) telnetClient.printf(__VA_ARGS__); help...
I got it working, and have 2 ways.
#define tprintf(con, ...) ({int ret; ret = send(con,__VA_ARGS__, strlen(__VA_ARGS__),0); ret;})
#define tprintf(con, ...) ({int ret; ret = send(con,__VA_ARGS__, strlen(__VA_ARGS__),0); ret;})
Who is online
Users browsing this forum: Google [Bot] and 64 guests