Hi,
I am sorry but this change is not enougth.
If I try to compile (I attach the modified file) I got a segmentation
error or segmentation fault (the displayed error is "[Errore di
segmentazione]").
collect2: error: ld terminated with signal 11 [Errore di segmentazione]
Here I am.
Marco
On 17/08/2012 18:34, Scott Howard wrote:
> Hello,
>
> I got the library to compile but don't have the hardware to test it.
>
> Could you please edit the following file and let me know if it works?
>
> /usr/share/arduino/libraries/Ethernet/Ethernet.cpp
>
> Change:
> W5100.setIPAddress(local_ip._address);
> W5100.setGatewayIp(gateway._address);
> W5100.setSubnetMask(subnet._address);
>
>
>
> to be:
> W5100.setIPAddress(local_ip._address.a8);
> W5100.setGatewayIp(gateway._address.a8);
> W5100.setSubnetMask(subnet._address.a8);
>
>
> (that is, add a ".a8" to the end of the "_address")
>
> Please try it out and report back here so I can spread the word.
>
> Cheers,
> Scott
>
>
>
>
>
>
> The formal patch is:
> Index: arduino/libraries/Ethernet/Ethernet.cpp
> ===================================================================
> --- arduino.orig/libraries/Ethernet/Ethernet.cpp 2012-03-11
> 19:09:34.421223498 -0400
> +++ arduino/libraries/Ethernet/Ethernet.cpp 2012-08-17 12:14:09.845198234
> -0400
> @@ -61,9 +61,9 @@
> {
> W5100.init();
> W5100.setMACAddress(mac);
> - W5100.setIPAddress(local_ip._address);
> - W5100.setGatewayIp(gateway._address);
> - W5100.setSubnetMask(subnet._address);
> + W5100.setIPAddress(local_ip._address.a8);
> + W5100.setGatewayIp(gateway._address.a8);
> + W5100.setSubnetMask(subnet._address.a8);
> _dnsServerAddress = dns_server;
> }
#include "w5100.h"
#include "Ethernet.h"
#include "Dhcp.h"
// XXX: don't make assumptions about the value of MAX_SOCK_NUM.
uint8_t EthernetClass::_state[MAX_SOCK_NUM] = {
0, 0, 0, 0 };
uint16_t EthernetClass::_server_port[MAX_SOCK_NUM] = {
0, 0, 0, 0 };
int EthernetClass::begin(uint8_t *mac_address)
{
_dhcp = new DhcpClass();
// Initialise the basic info
W5100.init();
W5100.setMACAddress(mac_address);
W5100.setIPAddress(IPAddress(0,0,0,0).raw_address());
// Now try to get our config info from a DHCP server
int ret = _dhcp->beginWithDHCP(mac_address);
if(ret == 1)
{
// We've successfully found a DHCP server and got our configuration info, so set things
// accordingly
W5100.setIPAddress(_dhcp->getLocalIp().raw_address());
W5100.setGatewayIp(_dhcp->getGatewayIp().raw_address());
W5100.setSubnetMask(_dhcp->getSubnetMask().raw_address());
_dnsServerAddress = _dhcp->getDnsServerIp();
}
return ret;
}
void EthernetClass::begin(uint8_t *mac_address, IPAddress local_ip)
{
// Assume the DNS server will be the machine on the same network as the local IP
// but with last octet being '1'
IPAddress dns_server = local_ip;
dns_server[3] = 1;
begin(mac_address, local_ip, dns_server);
}
void EthernetClass::begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server)
{
// Assume the gateway will be the machine on the same network as the local IP
// but with last octet being '1'
IPAddress gateway = local_ip;
gateway[3] = 1;
begin(mac_address, local_ip, dns_server, gateway);
}
void EthernetClass::begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway)
{
IPAddress subnet(255, 255, 255, 0);
begin(mac_address, local_ip, dns_server, gateway, subnet);
}
void EthernetClass::begin(uint8_t *mac, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet)
{
W5100.init();
W5100.setMACAddress(mac);
W5100.setIPAddress(local_ip._address.a8);
W5100.setGatewayIp(gateway._address.a8);
W5100.setSubnetMask(subnet._address.a8);
// W5100.setIPAddress(local_ip._address);
// W5100.setGatewayIp(gateway._address);
// W5100.setSubnetMask(subnet._address);
_dnsServerAddress = dns_server;
}
int EthernetClass::maintain(){
int rc = DHCP_CHECK_NONE;
if(_dhcp != NULL){
//we have a pointer to dhcp, use it
rc = _dhcp->checkLease();
switch ( rc ){
case DHCP_CHECK_NONE:
//nothing done
break;
case DHCP_CHECK_RENEW_OK:
case DHCP_CHECK_REBIND_OK:
//we might have got a new IP.
W5100.setIPAddress(_dhcp->getLocalIp().raw_address());
W5100.setGatewayIp(_dhcp->getGatewayIp().raw_address());
W5100.setSubnetMask(_dhcp->getSubnetMask().raw_address());
_dnsServerAddress = _dhcp->getDnsServerIp();
break;
default:
//this is actually a error, it will retry though
break;
}
}
return rc;
}
IPAddress EthernetClass::localIP()
{
IPAddress ret;
W5100.getIPAddress(ret.raw_address());
return ret;
}
IPAddress EthernetClass::subnetMask()
{
IPAddress ret;
W5100.getSubnetMask(ret.raw_address());
return ret;
}
IPAddress EthernetClass::gatewayIP()
{
IPAddress ret;
W5100.getGatewayIp(ret.raw_address());
return ret;
}
IPAddress EthernetClass::dnsServerIP()
{
return _dnsServerAddress;
}
EthernetClass Ethernet;