Skip to content

Ping command for Portenta C33 #424

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

Merged
merged 6 commits into from
Mar 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions extras/net/lwipopts.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@
* (requires the LWIP_RAW option)
*/
#ifndef MEMP_NUM_RAW_PCB
#define MEMP_NUM_RAW_PCB 0
#define MEMP_NUM_RAW_PCB 1
#endif

/**
Expand Down Expand Up @@ -642,7 +642,7 @@
* LWIP_RAW==1: Enable application layer to hook into the IP layer itself.
*/
#ifndef LWIP_RAW
#define LWIP_RAW 0
#define LWIP_RAW 1
#endif

/*
Expand Down
83 changes: 83 additions & 0 deletions libraries/Ethernet/examples/EthernetPing/EthernetPing.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
Web ICMP Ping

This sketch pings a device based on the IP address or the hostname
using the Ethernet module.

created 14 February 2024
by paulvha

updated 27 February 2025
by Fabik111

*/

#include "EthernetC33.h"

int status = WL_IDLE_STATUS;

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(10, 130, 22, 84);

/* -------------------------------------------------------------------------- */
void setup() {
/* -------------------------------------------------------------------------- */
//Initialize serial and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

// start the Ethernet connection:
if (Ethernet.begin() == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// try to configure using IP address instead of DHCP:
// IN THAT CASE YOU SHOULD CONFIGURE manually THE DNS or USE the IPAddress Server variable above
// that is what is automatically done here...
Ethernet.begin(ip);
}
// give the Ethernet shield a second to initialize:
delay(2000);
}

/* -------------------------------------------------------------------------- */
void loop() {
/* -------------------------------------------------------------------------- */

// Ping IP
const IPAddress remote_ip(140,82,121,4);
Serial.print("Trying to ping github.com on IP: ");
Serial.println(remote_ip);

// using default ping count of 1
int res = Ethernet.ping(remote_ip);

if (res > 0) {
Serial.print("Ping response time: ");
Serial.print(res);
Serial.println(" ms");
}
else {
Serial.println("Timeout on IP!");
}

// Ping Host
const char* remote_host = "www.google.com";
Serial.print("Trying to ping host: ");
Serial.println(remote_host);

// setting ttl to 128 and ping count to 10
int res1 = Ethernet.ping(remote_host);

if (res1 > 0) {
Serial.print("Ping average response time: ");
Serial.print(res1);
Serial.println(" ms");
}
else {
Serial.println("Timeout on host!");
}

Serial.println();
delay(1000);
}
23 changes: 23 additions & 0 deletions libraries/Ethernet/src/Ethernet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,4 +223,27 @@ IPAddress CEthernet::dnsServerIP() {
return CLwipIf::getInstance().getDns();
}

/* -------------------------------------------------------------------------- */
int CEthernet::ping(IPAddress ip, uint8_t ttl) {
/* -------------------------------------------------------------------------- */
return CLwipIf::getInstance().ping(ip, ttl);
}

/* -------------------------------------------------------------------------- */
int CEthernet::ping(const String &hostname, uint8_t ttl)
/* -------------------------------------------------------------------------- */
{
return ping(hostname.c_str(), ttl);
}

/* -------------------------------------------------------------------------- */
int CEthernet::ping(const char* host, uint8_t ttl) {
/* -------------------------------------------------------------------------- */
IPAddress ip;
if(CLwipIf::getInstance().getHostByName(host,ip)) {
return CLwipIf::getInstance().ping(ip, ttl);
}
return -1;
}

CEthernet Ethernet;
6 changes: 6 additions & 0 deletions libraries/Ethernet/src/EthernetC33.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@ class CEthernet {
IPAddress gatewayIP();
IPAddress dnsServerIP();

/*
* PING
*/
int ping(IPAddress ip, uint8_t ttl = 128);
int ping(const String &hostname, uint8_t ttl = 128);
int ping(const char* host, uint8_t ttl = 128);

friend class EthernetClient;
friend class EthernetServer;
Expand Down
120 changes: 120 additions & 0 deletions libraries/WiFi/examples/WiFiPing/WiFiPing.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
/*
Web ICMP Ping

This sketch pings a device based on the IP address or the hostname
using the WiFi module. By default the attempt is performed 5 times, but can
be changed to max. 255

It requires at least version 0.5.0 of USB Wifi bridge firmware and WiFiS3 library.

This example is written for a network using WPA encryption. For
WEP or WPA, change the WiFi.begin() call accordingly.

created 14 February 2024
by paulvha

updated 27 February 2025
by Fabik111

*/

#include "WiFiC3.h"
#include "arduino_secrets.h"

///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0; // your network key index number (needed only for WEP)

int status = WL_IDLE_STATUS;

/* -------------------------------------------------------------------------- */
void setup() {
/* -------------------------------------------------------------------------- */
//Initialize serial and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

// check for the WiFi module:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed.");
// don't continue
while (true);
}

// attempt to connect to WiFi network:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);

// wait 10 seconds for connection:
delay(10000);
}

printWifiStatus();
}

/* -------------------------------------------------------------------------- */
void loop() {
/* -------------------------------------------------------------------------- */

// Ping IP
const IPAddress remote_ip(140,82,121,4);
Serial.print("Trying to ping github.com on IP: ");
Serial.println(remote_ip);

// using default ping count of 1
int res = WiFi.ping(remote_ip);

if (res > 0) {
Serial.print("Ping response time: ");
Serial.print(res);
Serial.println(" ms");
}
else {
Serial.println("Timeout on IP!");
}

// Ping Host
const char* remote_host = "www.google.com";
Serial.print("Trying to ping host: ");
Serial.println(remote_host);

// setting ttl to 128 and ping count to 10
int res1 = WiFi.ping(remote_host);

if (res1 > 0) {
Serial.print("Ping average response time: ");
Serial.print(res1);
Serial.println(" ms");
}
else {
Serial.println("Timeout on host!");
}

Serial.println();
delay(1000);
}

/* -------------------------------------------------------------------------- */
void printWifiStatus() {
/* -------------------------------------------------------------------------- */
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());

// print your board's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
2 changes: 2 additions & 0 deletions libraries/WiFi/examples/WiFiPing/arduino_secrets.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#define SECRET_SSID ""
#define SECRET_PASS ""
25 changes: 23 additions & 2 deletions libraries/WiFi/src/WiFi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -321,12 +321,33 @@ unsigned long CWifi::getTime() {
return 0;
}



void CWifi::setTimeout(unsigned long timeout) {
(void)(timeout);
}

/* -------------------------------------------------------------------------- */
int CWifi::ping(IPAddress ip, uint8_t ttl) {
/* -------------------------------------------------------------------------- */
return CLwipIf::getInstance().ping(ip, ttl);
}

/* -------------------------------------------------------------------------- */
int CWifi::ping(const String &hostname, uint8_t ttl)
/* -------------------------------------------------------------------------- */
{
return ping(hostname.c_str(), ttl);
}

/* -------------------------------------------------------------------------- */
int CWifi::ping(const char* host, uint8_t ttl) {
/* -------------------------------------------------------------------------- */
IPAddress ip;
if(hostByName(host,ip)) {
return CLwipIf::getInstance().ping(ip, ttl);
}
return -1;
}


CWifi WiFi;

7 changes: 6 additions & 1 deletion libraries/WiFi/src/WiFiC3.h
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,12 @@ class CWifi {


void setTimeout(unsigned long timeout);

/*
* PING
*/
int ping(IPAddress ip, uint8_t ttl = 128);
int ping(const String &hostname, uint8_t ttl = 128);
int ping(const char* host, uint8_t ttl = 128);

};

Expand Down
Loading
Loading