aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/EEPROM/EEPROM.cpp50
-rw-r--r--libraries/EEPROM/EEPROM.h35
-rw-r--r--libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino23
-rw-r--r--libraries/EEPROM/examples/eeprom_read/eeprom_read.ino43
-rw-r--r--libraries/EEPROM/examples/eeprom_write/eeprom_write.ino38
-rw-r--r--libraries/EEPROM/keywords.txt18
-rw-r--r--libraries/Ethernet/Dhcp.cpp480
-rw-r--r--libraries/Ethernet/Dhcp.h178
-rw-r--r--libraries/Ethernet/Dns.cpp423
-rw-r--r--libraries/Ethernet/Dns.h41
-rw-r--r--libraries/Ethernet/Ethernet.cpp122
-rw-r--r--libraries/Ethernet/Ethernet.h41
-rw-r--r--libraries/Ethernet/EthernetClient.cpp165
-rw-r--r--libraries/Ethernet/EthernetClient.h37
-rw-r--r--libraries/Ethernet/EthernetServer.cpp91
-rw-r--r--libraries/Ethernet/EthernetServer.h22
-rw-r--r--libraries/Ethernet/EthernetUdp.cpp218
-rw-r--r--libraries/Ethernet/EthernetUdp.h99
-rw-r--r--libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino222
-rw-r--r--libraries/Ethernet/examples/ChatServer/ChatServer.ino79
-rw-r--r--libraries/Ethernet/examples/CosmClient/CosmClient.ino161
-rw-r--r--libraries/Ethernet/examples/CosmClientString/CosmClientString.ino146
-rw-r--r--libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino59
-rw-r--r--libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino87
-rw-r--r--libraries/Ethernet/examples/PachubeClient/PachubeClient.ino163
-rw-r--r--libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino152
-rw-r--r--libraries/Ethernet/examples/TelnetClient/TelnetClient.ino93
-rw-r--r--libraries/Ethernet/examples/TwitterClient/TwitterClient.ino136
-rw-r--r--libraries/Ethernet/examples/UDPSendReceiveString/UDPSendReceiveString.ino118
-rw-r--r--libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino141
-rw-r--r--libraries/Ethernet/examples/WebClient/WebClient.ino88
-rw-r--r--libraries/Ethernet/examples/WebClientRepeating/WebClientRepeating.ino111
-rw-r--r--libraries/Ethernet/examples/WebServer/WebServer.ino100
-rw-r--r--libraries/Ethernet/keywords.txt37
-rw-r--r--libraries/Ethernet/util.h13
-rw-r--r--libraries/Ethernet/utility/socket.cpp400
-rw-r--r--libraries/Ethernet/utility/socket.h41
-rw-r--r--libraries/Ethernet/utility/w5100.cpp188
-rw-r--r--libraries/Ethernet/utility/w5100.h404
-rw-r--r--libraries/Servo/Servo.cpp337
-rw-r--r--libraries/Servo/Servo.h126
-rw-r--r--libraries/Servo/examples/Knob/Knob.ino22
-rw-r--r--libraries/Servo/examples/Sweep/Sweep.ino31
-rw-r--r--libraries/Servo/keywords.txt24
-rw-r--r--libraries/Stepper/Stepper.cpp220
-rw-r--r--libraries/Stepper/Stepper.h83
-rw-r--r--libraries/Stepper/examples/MotorKnob/MotorKnob.ino41
-rw-r--r--libraries/Stepper/examples/stepper_oneRevolution/stepper_oneRevolution.ino44
-rw-r--r--libraries/Stepper/examples/stepper_oneStepAtATime/stepper_oneStepAtATime.ino44
-rw-r--r--libraries/Stepper/examples/stepper_speedControl/stepper_speedControl.ino48
-rw-r--r--libraries/Stepper/keywords.txt28
51 files changed, 0 insertions, 6111 deletions
diff --git a/libraries/EEPROM/EEPROM.cpp b/libraries/EEPROM/EEPROM.cpp
deleted file mode 100644
index dfa1deb..0000000
--- a/libraries/EEPROM/EEPROM.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- EEPROM.cpp - EEPROM library
- Copyright (c) 2006 David A. Mellis. All right reserved.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-/******************************************************************************
- * Includes
- ******************************************************************************/
-
-#include <avr/eeprom.h>
-#include "Arduino.h"
-#include "EEPROM.h"
-
-/******************************************************************************
- * Definitions
- ******************************************************************************/
-
-/******************************************************************************
- * Constructors
- ******************************************************************************/
-
-/******************************************************************************
- * User API
- ******************************************************************************/
-
-uint8_t EEPROMClass::read(int address)
-{
- return eeprom_read_byte((unsigned char *) address);
-}
-
-void EEPROMClass::write(int address, uint8_t value)
-{
- eeprom_write_byte((unsigned char *) address, value);
-}
-
-EEPROMClass EEPROM;
diff --git a/libraries/EEPROM/EEPROM.h b/libraries/EEPROM/EEPROM.h
deleted file mode 100644
index aa2b577..0000000
--- a/libraries/EEPROM/EEPROM.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- EEPROM.h - EEPROM library
- Copyright (c) 2006 David A. Mellis. All right reserved.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-#ifndef EEPROM_h
-#define EEPROM_h
-
-#include <inttypes.h>
-
-class EEPROMClass
-{
- public:
- uint8_t read(int);
- void write(int, uint8_t);
-};
-
-extern EEPROMClass EEPROM;
-
-#endif
-
diff --git a/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino b/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino
deleted file mode 100644
index d1e29bd..0000000
--- a/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * EEPROM Clear
- *
- * Sets all of the bytes of the EEPROM to 0.
- * This example code is in the public domain.
-
- */
-
-#include <EEPROM.h>
-
-void setup()
-{
- // write a 0 to all 512 bytes of the EEPROM
- for (int i = 0; i < 512; i++)
- EEPROM.write(i, 0);
-
- // turn the LED on when we're done
- digitalWrite(13, HIGH);
-}
-
-void loop()
-{
-}
diff --git a/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino b/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino
deleted file mode 100644
index 0709b2d..0000000
--- a/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * EEPROM Read
- *
- * Reads the value of each byte of the EEPROM and prints it
- * to the computer.
- * This example code is in the public domain.
- */
-
-#include <EEPROM.h>
-
-// start reading from the first byte (address 0) of the EEPROM
-int address = 0;
-byte value;
-
-void setup()
-{
- // initialize serial and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-}
-
-void loop()
-{
- // read a byte from the current address of the EEPROM
- value = EEPROM.read(address);
-
- Serial.print(address);
- Serial.print("\t");
- Serial.print(value, DEC);
- Serial.println();
-
- // advance to the next address of the EEPROM
- address = address + 1;
-
- // there are only 512 bytes of EEPROM, from 0 to 511, so if we're
- // on address 512, wrap around to address 0
- if (address == 512)
- address = 0;
-
- delay(500);
-}
diff --git a/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino b/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino
deleted file mode 100644
index ae7c57e..0000000
--- a/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * EEPROM Write
- *
- * Stores values read from analog input 0 into the EEPROM.
- * These values will stay in the EEPROM when the board is
- * turned off and may be retrieved later by another sketch.
- */
-
-#include <EEPROM.h>
-
-// the current address in the EEPROM (i.e. which byte
-// we're going to write to next)
-int addr = 0;
-
-void setup()
-{
-}
-
-void loop()
-{
- // need to divide by 4 because analog inputs range from
- // 0 to 1023 and each byte of the EEPROM can only hold a
- // value from 0 to 255.
- int val = analogRead(0) / 4;
-
- // write the value to the appropriate byte of the EEPROM.
- // these values will remain there when the board is
- // turned off.
- EEPROM.write(addr, val);
-
- // advance to the next address. there are 512 bytes in
- // the EEPROM, so go back to 0 when we hit 512.
- addr = addr + 1;
- if (addr == 512)
- addr = 0;
-
- delay(100);
-}
diff --git a/libraries/EEPROM/keywords.txt b/libraries/EEPROM/keywords.txt
deleted file mode 100644
index d3218fe..0000000
--- a/libraries/EEPROM/keywords.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-#######################################
-# Syntax Coloring Map For Ultrasound
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-EEPROM KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-#######################################
-# Constants (LITERAL1)
-#######################################
-
diff --git a/libraries/Ethernet/Dhcp.cpp b/libraries/Ethernet/Dhcp.cpp
deleted file mode 100644
index 56d5b69..0000000
--- a/libraries/Ethernet/Dhcp.cpp
+++ /dev/null
@@ -1,480 +0,0 @@
-// DHCP Library v0.3 - April 25, 2009
-// Author: Jordan Terrell - blog.jordanterrell.com
-
-#include "w5100.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include "Dhcp.h"
-#include "Arduino.h"
-#include "util.h"
-
-int DhcpClass::beginWithDHCP(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout)
-{
- _dhcpLeaseTime=0;
- _dhcpT1=0;
- _dhcpT2=0;
- _lastCheck=0;
- _timeout = timeout;
- _responseTimeout = responseTimeout;
-
- // zero out _dhcpMacAddr
- memset(_dhcpMacAddr, 0, 6);
- reset_DHCP_lease();
-
- memcpy((void*)_dhcpMacAddr, (void*)mac, 6);
- _dhcp_state = STATE_DHCP_START;
- return request_DHCP_lease();
-}
-
-void DhcpClass::reset_DHCP_lease(){
- // zero out _dhcpSubnetMask, _dhcpGatewayIp, _dhcpLocalIp, _dhcpDhcpServerIp, _dhcpDnsServerIp
- memset(_dhcpLocalIp, 0, 20);
-}
-
-//return:0 on error, 1 if request is sent and response is received
-int DhcpClass::request_DHCP_lease(){
-
- uint8_t messageType = 0;
-
-
-
- // Pick an initial transaction ID
- _dhcpTransactionId = random(1UL, 2000UL);
- _dhcpInitialTransactionId = _dhcpTransactionId;
-
- _dhcpUdpSocket.stop();
- if (_dhcpUdpSocket.begin(DHCP_CLIENT_PORT) == 0)
- {
- // Couldn't get a socket
- return 0;
- }
-
- presend_DHCP();
-
- int result = 0;
-
- unsigned long startTime = millis();
-
- while(_dhcp_state != STATE_DHCP_LEASED)
- {
- if(_dhcp_state == STATE_DHCP_START)
- {
- _dhcpTransactionId++;
-
- send_DHCP_MESSAGE(DHCP_DISCOVER, ((millis() - startTime) / 1000));
- _dhcp_state = STATE_DHCP_DISCOVER;
- }
- else if(_dhcp_state == STATE_DHCP_REREQUEST){
- _dhcpTransactionId++;
- send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime)/1000));
- _dhcp_state = STATE_DHCP_REQUEST;
- }
- else if(_dhcp_state == STATE_DHCP_DISCOVER)
- {
- uint32_t respId;
- messageType = parseDHCPResponse(_responseTimeout, respId);
- if(messageType == DHCP_OFFER)
- {
- // We'll use the transaction ID that the offer came with,
- // rather than the one we were up to
- _dhcpTransactionId = respId;
- send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime) / 1000));
- _dhcp_state = STATE_DHCP_REQUEST;
- }
- }
- else if(_dhcp_state == STATE_DHCP_REQUEST)
- {
- uint32_t respId;
- messageType = parseDHCPResponse(_responseTimeout, respId);
- if(messageType == DHCP_ACK)
- {
- _dhcp_state = STATE_DHCP_LEASED;
- result = 1;
- //use default lease time if we didn't get it
- if(_dhcpLeaseTime == 0){
- _dhcpLeaseTime = DEFAULT_LEASE;
- }
- //calculate T1 & T2 if we didn't get it
- if(_dhcpT1 == 0){
- //T1 should be 50% of _dhcpLeaseTime
- _dhcpT1 = _dhcpLeaseTime >> 1;
- }
- if(_dhcpT2 == 0){
- //T2 should be 87.5% (7/8ths) of _dhcpLeaseTime
- _dhcpT2 = _dhcpT1 << 1;
- }
- _renewInSec = _dhcpT1;
- _rebindInSec = _dhcpT2;
- }
- else if(messageType == DHCP_NAK)
- _dhcp_state = STATE_DHCP_START;
- }
-
- if(messageType == 255)
- {
- messageType = 0;
- _dhcp_state = STATE_DHCP_START;
- }
-
- if(result != 1 && ((millis() - startTime) > _timeout))
- break;
- }
-
- // We're done with the socket now
- _dhcpUdpSocket.stop();
- _dhcpTransactionId++;
-
- return result;
-}
-
-void DhcpClass::presend_DHCP()
-{
-}
-
-void DhcpClass::send_DHCP_MESSAGE(uint8_t messageType, uint16_t secondsElapsed)
-{
- uint8_t buffer[32];
- memset(buffer, 0, 32);
- IPAddress dest_addr( 255, 255, 255, 255 ); // Broadcast address
-
- if (-1 == _dhcpUdpSocket.beginPacket(dest_addr, DHCP_SERVER_PORT))
- {
- // FIXME Need to return errors
- return;
- }
-
- buffer[0] = DHCP_BOOTREQUEST; // op
- buffer[1] = DHCP_HTYPE10MB; // htype
- buffer[2] = DHCP_HLENETHERNET; // hlen
- buffer[3] = DHCP_HOPS; // hops
-
- // xid
- unsigned long xid = htonl(_dhcpTransactionId);
- memcpy(buffer + 4, &(xid), 4);
-
- // 8, 9 - seconds elapsed
- buffer[8] = ((secondsElapsed & 0xff00) >> 8);
- buffer[9] = (secondsElapsed & 0x00ff);
-
- // flags
- unsigned short flags = htons(DHCP_FLAGSBROADCAST);
- memcpy(buffer + 10, &(flags), 2);
-
- // ciaddr: already zeroed
- // yiaddr: already zeroed
- // siaddr: already zeroed
- // giaddr: already zeroed
-
- //put data in W5100 transmit buffer
- _dhcpUdpSocket.write(buffer, 28);
-
- memset(buffer, 0, 32); // clear local buffer
-
- memcpy(buffer, _dhcpMacAddr, 6); // chaddr
-
- //put data in W5100 transmit buffer
- _dhcpUdpSocket.write(buffer, 16);
-
- memset(buffer, 0, 32); // clear local buffer
-
- // leave zeroed out for sname && file
- // put in W5100 transmit buffer x 6 (192 bytes)
-
- for(int i = 0; i < 6; i++) {
- _dhcpUdpSocket.write(buffer, 32);
- }
-
- // OPT - Magic Cookie
- buffer[0] = (uint8_t)((MAGIC_COOKIE >> 24)& 0xFF);
- buffer[1] = (uint8_t)((MAGIC_COOKIE >> 16)& 0xFF);
- buffer[2] = (uint8_t)((MAGIC_COOKIE >> 8)& 0xFF);
- buffer[3] = (uint8_t)(MAGIC_COOKIE& 0xFF);
-
- // OPT - message type
- buffer[4] = dhcpMessageType;
- buffer[5] = 0x01;
- buffer[6] = messageType; //DHCP_REQUEST;
-
- // OPT - client identifier
- buffer[7] = dhcpClientIdentifier;
- buffer[8] = 0x07;
- buffer[9] = 0x01;
- memcpy(buffer + 10, _dhcpMacAddr, 6);
-
- // OPT - host name
- buffer[16] = hostName;
- buffer[17] = strlen(HOST_NAME) + 6; // length of hostname + last 3 bytes of mac address
- strcpy((char*)&(buffer[18]), HOST_NAME);
-
- printByte((char*)&(buffer[24]), _dhcpMacAddr[3]);
- printByte((char*)&(buffer[26]), _dhcpMacAddr[4]);
- printByte((char*)&(buffer[28]), _dhcpMacAddr[5]);
-
- //put data in W5100 transmit buffer
- _dhcpUdpSocket.write(buffer, 30);
-
- if(messageType == DHCP_REQUEST)
- {
- buffer[0] = dhcpRequestedIPaddr;
- buffer[1] = 0x04;
- buffer[2] = _dhcpLocalIp[0];
- buffer[3] = _dhcpLocalIp[1];
- buffer[4] = _dhcpLocalIp[2];
- buffer[5] = _dhcpLocalIp[3];
-
- buffer[6] = dhcpServerIdentifier;
- buffer[7] = 0x04;
- buffer[8] = _dhcpDhcpServerIp[0];
- buffer[9] = _dhcpDhcpServerIp[1];
- buffer[10] = _dhcpDhcpServerIp[2];
- buffer[11] = _dhcpDhcpServerIp[3];
-
- //put data in W5100 transmit buffer
- _dhcpUdpSocket.write(buffer, 12);
- }
-
- buffer[0] = dhcpParamRequest;
- buffer[1] = 0x06;
- buffer[2] = subnetMask;
- buffer[3] = routersOnSubnet;
- buffer[4] = dns;
- buffer[5] = domainName;
- buffer[6] = dhcpT1value;
- buffer[7] = dhcpT2value;
- buffer[8] = endOption;
-
- //put data in W5100 transmit buffer
- _dhcpUdpSocket.write(buffer, 9);
-
- _dhcpUdpSocket.endPacket();
-}
-
-uint8_t DhcpClass::parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId)
-{
- uint8_t type = 0;
- uint8_t opt_len = 0;
-
- unsigned long startTime = millis();
-
- while(_dhcpUdpSocket.parsePacket() <= 0)
- {
- if((millis() - startTime) > responseTimeout)
- {
- return 255;
- }
- delay(50);
- }
- // start reading in the packet
- RIP_MSG_FIXED fixedMsg;
- _dhcpUdpSocket.read((uint8_t*)&fixedMsg, sizeof(RIP_MSG_FIXED));
-
- if(fixedMsg.op == DHCP_BOOTREPLY && _dhcpUdpSocket.remotePort() == DHCP_SERVER_PORT)
- {
- transactionId = ntohl(fixedMsg.xid);
- if(memcmp(fixedMsg.chaddr, _dhcpMacAddr, 6) != 0 || (transactionId < _dhcpInitialTransactionId) || (transactionId > _dhcpTransactionId))
- {
- // Need to read the rest of the packet here regardless
- _dhcpUdpSocket.flush();
- return 0;
- }
-
- memcpy(_dhcpLocalIp, fixedMsg.yiaddr, 4);
-
- // Skip to the option part
- // Doing this a byte at a time so we don't have to put a big buffer
- // on the stack (as we don't have lots of memory lying around)
- for (int i =0; i < (240 - (int)sizeof(RIP_MSG_FIXED)); i++)
- {
- _dhcpUdpSocket.read(); // we don't care about the returned byte
- }
-
- while (_dhcpUdpSocket.available() > 0)
- {
- switch (_dhcpUdpSocket.read())
- {
- case endOption :
- break;
-
- case padOption :
- break;
-
- case dhcpMessageType :
- opt_len = _dhcpUdpSocket.read();
- type = _dhcpUdpSocket.read();
- break;
-
- case subnetMask :
- opt_len = _dhcpUdpSocket.read();
- _dhcpUdpSocket.read(_dhcpSubnetMask, 4);
- break;
-
- case routersOnSubnet :
- opt_len = _dhcpUdpSocket.read();
- _dhcpUdpSocket.read(_dhcpGatewayIp, 4);
- for (int i = 0; i < opt_len-4; i++)
- {
- _dhcpUdpSocket.read();
- }
- break;
-
- case dns :
- opt_len = _dhcpUdpSocket.read();
- _dhcpUdpSocket.read(_dhcpDnsServerIp, 4);
- for (int i = 0; i < opt_len-4; i++)
- {
- _dhcpUdpSocket.read();
- }
- break;
-
- case dhcpServerIdentifier :
- opt_len = _dhcpUdpSocket.read();
- if( *((uint32_t*)_dhcpDhcpServerIp) == 0 ||
- IPAddress(_dhcpDhcpServerIp) == _dhcpUdpSocket.remoteIP() )
- {
- _dhcpUdpSocket.read(_dhcpDhcpServerIp, sizeof(_dhcpDhcpServerIp));
- }
- else
- {
- // Skip over the rest of this option
- while (opt_len--)
- {
- _dhcpUdpSocket.read();
- }
- }
- break;
-
- case dhcpT1value :
- opt_len = _dhcpUdpSocket.read();
- _dhcpUdpSocket.read((uint8_t*)&_dhcpT1, sizeof(_dhcpT1));
- _dhcpT1 = ntohl(_dhcpT1);
- break;
-
- case dhcpT2value :
- opt_len = _dhcpUdpSocket.read();
- _dhcpUdpSocket.read((uint8_t*)&_dhcpT2, sizeof(_dhcpT2));
- _dhcpT2 = ntohl(_dhcpT2);
- break;
-
- case dhcpIPaddrLeaseTime :
- opt_len = _dhcpUdpSocket.read();
- _dhcpUdpSocket.read((uint8_t*)&_dhcpLeaseTime, sizeof(_dhcpLeaseTime));
- _dhcpLeaseTime = ntohl(_dhcpLeaseTime);
- _renewInSec = _dhcpLeaseTime;
- break;
-
- default :
- opt_len = _dhcpUdpSocket.read();
- // Skip over the rest of this option
- while (opt_len--)
- {
- _dhcpUdpSocket.read();
- }
- break;
- }
- }
- }
-
- // Need to skip to end of the packet regardless here
- _dhcpUdpSocket.flush();
-
- return type;
-}
-
-
-/*
- returns:
- 0/DHCP_CHECK_NONE: nothing happened
- 1/DHCP_CHECK_RENEW_FAIL: renew failed
- 2/DHCP_CHECK_RENEW_OK: renew success
- 3/DHCP_CHECK_REBIND_FAIL: rebind fail
- 4/DHCP_CHECK_REBIND_OK: rebind success
-*/
-int DhcpClass::checkLease(){
- //this uses a signed / unsigned trick to deal with millis overflow
- unsigned long now = millis();
- signed long snow = (long)now;
- int rc=DHCP_CHECK_NONE;
- if (_lastCheck != 0){
- signed long factor;
- //calc how many ms past the timeout we are
- factor = snow - (long)_secTimeout;
- //if on or passed the timeout, reduce the counters
- if ( factor >= 0 ){
- //next timeout should be now plus 1000 ms minus parts of second in factor
- _secTimeout = snow + 1000 - factor % 1000;
- //how many seconds late are we, minimum 1
- factor = factor / 1000 +1;
-
- //reduce the counters by that mouch
- //if we can assume that the cycle time (factor) is fairly constant
- //and if the remainder is less than cycle time * 2
- //do it early instead of late
- if(_renewInSec < factor*2 )
- _renewInSec = 0;
- else
- _renewInSec -= factor;
-
- if(_rebindInSec < factor*2 )
- _rebindInSec = 0;
- else
- _rebindInSec -= factor;
- }
-
- //if we have a lease but should renew, do it
- if (_dhcp_state == STATE_DHCP_LEASED && _renewInSec <=0){
- _dhcp_state = STATE_DHCP_REREQUEST;
- rc = 1 + request_DHCP_lease();
- }
-
- //if we have a lease or is renewing but should bind, do it
- if( (_dhcp_state == STATE_DHCP_LEASED || _dhcp_state == STATE_DHCP_START) && _rebindInSec <=0){
- //this should basically restart completely
- _dhcp_state = STATE_DHCP_START;
- reset_DHCP_lease();
- rc = 3 + request_DHCP_lease();
- }
- }
- else{
- _secTimeout = snow + 1000;
- }
-
- _lastCheck = now;
- return rc;
-}
-
-IPAddress DhcpClass::getLocalIp()
-{
- return IPAddress(_dhcpLocalIp);
-}
-
-IPAddress DhcpClass::getSubnetMask()
-{
- return IPAddress(_dhcpSubnetMask);
-}
-
-IPAddress DhcpClass::getGatewayIp()
-{
- return IPAddress(_dhcpGatewayIp);
-}
-
-IPAddress DhcpClass::getDhcpServerIp()
-{
- return IPAddress(_dhcpDhcpServerIp);
-}
-
-IPAddress DhcpClass::getDnsServerIp()
-{
- return IPAddress(_dhcpDnsServerIp);
-}
-
-void DhcpClass::printByte(char * buf, uint8_t n ) {
- char *str = &buf[1];
- buf[0]='0';
- do {
- unsigned long m = n;
- n /= 16;
- char c = m - 16 * n;
- *str-- = c < 10 ? c + '0' : c + 'A' - 10;
- } while(n);
-}
diff --git a/libraries/Ethernet/Dhcp.h b/libraries/Ethernet/Dhcp.h
deleted file mode 100644
index 4a47936..0000000
--- a/libraries/Ethernet/Dhcp.h
+++ /dev/null
@@ -1,178 +0,0 @@
-// DHCP Library v0.3 - April 25, 2009
-// Author: Jordan Terrell - blog.jordanterrell.com
-
-#ifndef Dhcp_h
-#define Dhcp_h
-
-#include "EthernetUdp.h"
-
-/* DHCP state machine. */
-#define STATE_DHCP_START 0
-#define STATE_DHCP_DISCOVER 1
-#define STATE_DHCP_REQUEST 2
-#define STATE_DHCP_LEASED 3
-#define STATE_DHCP_REREQUEST 4
-#define STATE_DHCP_RELEASE 5
-
-#define DHCP_FLAGSBROADCAST 0x8000
-
-/* UDP port numbers for DHCP */
-#define DHCP_SERVER_PORT 67 /* from server to client */
-#define DHCP_CLIENT_PORT 68 /* from client to server */
-
-/* DHCP message OP code */
-#define DHCP_BOOTREQUEST 1
-#define DHCP_BOOTREPLY 2
-
-/* DHCP message type */
-#define DHCP_DISCOVER 1
-#define DHCP_OFFER 2
-#define DHCP_REQUEST 3
-#define DHCP_DECLINE 4
-#define DHCP_ACK 5
-#define DHCP_NAK 6
-#define DHCP_RELEASE 7
-#define DHCP_INFORM 8
-
-#define DHCP_HTYPE10MB 1
-#define DHCP_HTYPE100MB 2
-
-#define DHCP_HLENETHERNET 6
-#define DHCP_HOPS 0
-#define DHCP_SECS 0
-
-#define MAGIC_COOKIE 0x63825363
-#define MAX_DHCP_OPT 16
-
-#define HOST_NAME "WIZnet"
-#define DEFAULT_LEASE (900) //default lease time in seconds
-
-#define DHCP_CHECK_NONE (0)
-#define DHCP_CHECK_RENEW_FAIL (1)
-#define DHCP_CHECK_RENEW_OK (2)
-#define DHCP_CHECK_REBIND_FAIL (3)
-#define DHCP_CHECK_REBIND_OK (4)
-
-enum
-{
- padOption = 0,
- subnetMask = 1,
- timerOffset = 2,
- routersOnSubnet = 3,
- /* timeServer = 4,
- nameServer = 5,*/
- dns = 6,
- /*logServer = 7,
- cookieServer = 8,
- lprServer = 9,
- impressServer = 10,
- resourceLocationServer = 11,*/
- hostName = 12,
- /*bootFileSize = 13,
- meritDumpFile = 14,*/
- domainName = 15,
- /*swapServer = 16,
- rootPath = 17,
- extentionsPath = 18,
- IPforwarding = 19,
- nonLocalSourceRouting = 20,
- policyFilter = 21,
- maxDgramReasmSize = 22,
- defaultIPTTL = 23,
- pathMTUagingTimeout = 24,
- pathMTUplateauTable = 25,
- ifMTU = 26,
- allSubnetsLocal = 27,
- broadcastAddr = 28,
- performMaskDiscovery = 29,
- maskSupplier = 30,
- performRouterDiscovery = 31,
- routerSolicitationAddr = 32,
- staticRoute = 33,
- trailerEncapsulation = 34,
- arpCacheTimeout = 35,
- ethernetEncapsulation = 36,
- tcpDefaultTTL = 37,
- tcpKeepaliveInterval = 38,
- tcpKeepaliveGarbage = 39,
- nisDomainName = 40,
- nisServers = 41,
- ntpServers = 42,
- vendorSpecificInfo = 43,
- netBIOSnameServer = 44,
- netBIOSdgramDistServer = 45,
- netBIOSnodeType = 46,
- netBIOSscope = 47,
- xFontServer = 48,
- xDisplayManager = 49,*/
- dhcpRequestedIPaddr = 50,
- dhcpIPaddrLeaseTime = 51,
- /*dhcpOptionOverload = 52,*/
- dhcpMessageType = 53,
- dhcpServerIdentifier = 54,
- dhcpParamRequest = 55,
- /*dhcpMsg = 56,
- dhcpMaxMsgSize = 57,*/
- dhcpT1value = 58,
- dhcpT2value = 59,
- /*dhcpClassIdentifier = 60,*/
- dhcpClientIdentifier = 61,
- endOption = 255
-};
-
-typedef struct _RIP_MSG_FIXED
-{
- uint8_t op;
- uint8_t htype;
- uint8_t hlen;
- uint8_t hops;
- uint32_t xid;
- uint16_t secs;
- uint16_t flags;
- uint8_t ciaddr[4];
- uint8_t yiaddr[4];
- uint8_t siaddr[4];
- uint8_t giaddr[4];
- uint8_t chaddr[6];
-}RIP_MSG_FIXED;
-
-class DhcpClass {
-private:
- uint32_t _dhcpInitialTransactionId;
- uint32_t _dhcpTransactionId;
- uint8_t _dhcpMacAddr[6];
- uint8_t _dhcpLocalIp[4];
- uint8_t _dhcpSubnetMask[4];
- uint8_t _dhcpGatewayIp[4];
- uint8_t _dhcpDhcpServerIp[4];
- uint8_t _dhcpDnsServerIp[4];
- uint32_t _dhcpLeaseTime;
- uint32_t _dhcpT1, _dhcpT2;
- signed long _renewInSec;
- signed long _rebindInSec;
- signed long _lastCheck;
- unsigned long _timeout;
- unsigned long _responseTimeout;
- unsigned long _secTimeout;
- uint8_t _dhcp_state;
- EthernetUDP _dhcpUdpSocket;
-
- int request_DHCP_lease();
- void reset_DHCP_lease();
- void presend_DHCP();
- void send_DHCP_MESSAGE(uint8_t, uint16_t);
- void printByte(char *, uint8_t);
-
- uint8_t parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId);
-public:
- IPAddress getLocalIp();
- IPAddress getSubnetMask();
- IPAddress getGatewayIp();
- IPAddress getDhcpServerIp();
- IPAddress getDnsServerIp();
-
- int beginWithDHCP(uint8_t *, unsigned long timeout = 60000, unsigned long responseTimeout = 4000);
- int checkLease();
-};
-
-#endif
diff --git a/libraries/Ethernet/Dns.cpp b/libraries/Ethernet/Dns.cpp
deleted file mode 100644
index b3c1a9d..0000000
--- a/libraries/Ethernet/Dns.cpp
+++ /dev/null
@@ -1,423 +0,0 @@
-// Arduino DNS client for WizNet5100-based Ethernet shield
-// (c) Copyright 2009-2010 MCQN Ltd.
-// Released under Apache License, version 2.0
-
-#include "w5100.h"
-#include "EthernetUdp.h"
-#include "util.h"
-
-#include "Dns.h"
-#include <string.h>
-//#include <stdlib.h>
-#include "Arduino.h"
-
-
-#define SOCKET_NONE 255
-// Various flags and header field values for a DNS message
-#define UDP_HEADER_SIZE 8
-#define DNS_HEADER_SIZE 12
-#define TTL_SIZE 4
-#define QUERY_FLAG (0)
-#define RESPONSE_FLAG (1<<15)
-#define QUERY_RESPONSE_MASK (1<<15)
-#define OPCODE_STANDARD_QUERY (0)
-#define OPCODE_INVERSE_QUERY (1<<11)
-#define OPCODE_STATUS_REQUEST (2<<11)
-#define OPCODE_MASK (15<<11)
-#define AUTHORITATIVE_FLAG (1<<10)
-#define TRUNCATION_FLAG (1<<9)
-#define RECURSION_DESIRED_FLAG (1<<8)
-#define RECURSION_AVAILABLE_FLAG (1<<7)
-#define RESP_NO_ERROR (0)
-#define RESP_FORMAT_ERROR (1)
-#define RESP_SERVER_FAILURE (2)
-#define RESP_NAME_ERROR (3)
-#define RESP_NOT_IMPLEMENTED (4)
-#define RESP_REFUSED (5)
-#define RESP_MASK (15)
-#define TYPE_A (0x0001)
-#define CLASS_IN (0x0001)
-#define LABEL_COMPRESSION_MASK (0xC0)
-// Port number that DNS servers listen on
-#define DNS_PORT 53
-
-// Possible return codes from ProcessResponse
-#define SUCCESS 1
-#define TIMED_OUT -1
-#define INVALID_SERVER -2
-#define TRUNCATED -3
-#define INVALID_RESPONSE -4
-
-void DNSClient::begin(const IPAddress& aDNSServer)
-{
- iDNSServer = aDNSServer;
- iRequestId = 0;
-}
-
-
-int DNSClient::inet_aton(const char* aIPAddrString, IPAddress& aResult)
-{
- // See if we've been given a valid IP address
- const char* p =aIPAddrString;
- while (*p &&
- ( (*p == '.') || (*p >= '0') || (*p <= '9') ))
- {
- p++;
- }
-
- if (*p == '\0')
- {
- // It's looking promising, we haven't found any invalid characters
- p = aIPAddrString;
- int segment =0;
- int segmentValue =0;
- while (*p && (segment < 4))
- {
- if (*p == '.')
- {
- // We've reached the end of a segment
- if (segmentValue > 255)
- {
- // You can't have IP address segments that don't fit in a byte
- return 0;
- }
- else
- {
- aResult[segment] = (byte)segmentValue;
- segment++;
- segmentValue = 0;
- }
- }
- else
- {
- // Next digit
- segmentValue = (segmentValue*10)+(*p - '0');
- }
- p++;
- }
- // We've reached the end of address, but there'll still be the last
- // segment to deal with
- if ((segmentValue > 255) || (segment > 3))
- {
- // You can't have IP address segments that don't fit in a byte,
- // or more than four segments
- return 0;
- }
- else
- {
- aResult[segment] = (byte)segmentValue;
- return 1;
- }
- }
- else
- {
- return 0;
- }
-}
-
-int DNSClient::getHostByName(const char* aHostname, IPAddress& aResult)
-{
- int ret =0;
-
- // See if it's a numeric IP address
- if (inet_aton(aHostname, aResult))
- {
- // It is, our work here is done
- return 1;
- }
-
- // Check we've got a valid DNS server to use
- if (iDNSServer == INADDR_NONE)
- {
- return INVALID_SERVER;
- }
-
- // Find a socket to use
- if (iUdp.begin(1024+(millis() & 0xF)) == 1)
- {
- // Try up to three times
- int retries = 0;
-// while ((retries < 3) && (ret <= 0))
- {
- // Send DNS request
- ret = iUdp.beginPacket(iDNSServer, DNS_PORT);
- if (ret != 0)
- {
- // Now output the request data
- ret = BuildRequest(aHostname);
- if (ret != 0)
- {
- // And finally send the request
- ret = iUdp.endPacket();
- if (ret != 0)
- {
- // Now wait for a response
- int wait_retries = 0;
- ret = TIMED_OUT;
- while ((wait_retries < 3) && (ret == TIMED_OUT))
- {
- ret = ProcessResponse(5000, aResult);
- wait_retries++;
- }
- }
- }
- }
- retries++;
- }
-
- // We're done with the socket now
- iUdp.stop();
- }
-
- return ret;
-}
-
-uint16_t DNSClient::BuildRequest(const char* aName)
-{
- // Build header
- // 1 1 1 1 1 1
- // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
- // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- // | ID |
- // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- // |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
- // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- // | QDCOUNT |
- // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- // | ANCOUNT |
- // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- // | NSCOUNT |
- // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- // | ARCOUNT |
- // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- // As we only support one request at a time at present, we can simplify
- // some of this header
- iRequestId = millis(); // generate a random ID
- uint16_t twoByteBuffer;
-
- // FIXME We should also check that there's enough space available to write to, rather
- // FIXME than assume there's enough space (as the code does at present)
- iUdp.write((uint8_t*)&iRequestId, sizeof(iRequestId));
-
- twoByteBuffer = htons(QUERY_FLAG | OPCODE_STANDARD_QUERY | RECURSION_DESIRED_FLAG);
- iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer));
-
- twoByteBuffer = htons(1); // One question record
- iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer));
-
- twoByteBuffer = 0; // Zero answer records
- iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer));
-
- iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer));
- // and zero additional records
- iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer));
-
- // Build question
- const char* start =aName;
- const char* end =start;
- uint8_t len;
- // Run through the name being requested
- while (*end)
- {
- // Find out how long this section of the name is
- end = start;
- while (*end && (*end != '.') )
- {
- end++;
- }
-
- if (end-start > 0)
- {
- // Write out the size of this section
- len = end-start;
- iUdp.write(&len, sizeof(len));
- // And then write out the section
- iUdp.write((uint8_t*)start, end-start);
- }
- start = end+1;
- }
-
- // We've got to the end of the question name, so
- // terminate it with a zero-length section
- len = 0;
- iUdp.write(&len, sizeof(len));
- // Finally the type and class of question
- twoByteBuffer = htons(TYPE_A);
- iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer));
-
- twoByteBuffer = htons(CLASS_IN); // Internet class of question
- iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer));
- // Success! Everything buffered okay
- return 1;
-}
-
-
-uint16_t DNSClient::ProcessResponse(uint16_t aTimeout, IPAddress& aAddress)
-{
- uint32_t startTime = millis();
-
- // Wait for a response packet
- while(iUdp.parsePacket() <= 0)
- {
- if((millis() - startTime) > aTimeout)
- return TIMED_OUT;
- delay(50);
- }
-
- // We've had a reply!
- // Read the UDP header
- uint8_t header[DNS_HEADER_SIZE]; // Enough space to reuse for the DNS header
- // Check that it's a response from the right server and the right port
- if ( (iDNSServer != iUdp.remoteIP()) ||
- (iUdp.remotePort() != DNS_PORT) )
- {
- // It's not from who we expected
- return INVALID_SERVER;
- }
-
- // Read through the rest of the response
- if (iUdp.available() < DNS_HEADER_SIZE)
- {
- return TRUNCATED;
- }
- iUdp.read(header, DNS_HEADER_SIZE);
-
- uint16_t header_flags = htons(*((uint16_t*)&header[2]));
- // Check that it's a response to this request
- if ( ( iRequestId != (*((uint16_t*)&header[0])) ) ||
- ((header_flags & QUERY_RESPONSE_MASK) != (uint16_t)RESPONSE_FLAG) )
- {
- // Mark the entire packet as read
- iUdp.flush();
- return INVALID_RESPONSE;
- }
- // Check for any errors in the response (or in our request)
- // although we don't do anything to get round these
- if ( (header_flags & TRUNCATION_FLAG) || (header_flags & RESP_MASK) )
- {
- // Mark the entire packet as read
- iUdp.flush();
- return -5; //INVALID_RESPONSE;
- }
-
- // And make sure we've got (at least) one answer
- uint16_t answerCount = htons(*((uint16_t*)&header[6]));
- if (answerCount == 0 )
- {
- // Mark the entire packet as read
- iUdp.flush();
- return -6; //INVALID_RESPONSE;
- }
-
- // Skip over any questions
- for (uint16_t i =0; i < htons(*((uint16_t*)&header[4])); i++)
- {
- // Skip over the name
- uint8_t len;
- do
- {
- iUdp.read(&len, sizeof(len));
- if (len > 0)
- {
- // Don't need to actually read the data out for the string, just
- // advance ptr to beyond it
- while(len--)
- {
- iUdp.read(); // we don't care about the returned byte
- }
- }
- } while (len != 0);
-
- // Now jump over the type and class
- for (int i =0; i < 4; i++)
- {
- iUdp.read(); // we don't care about the returned byte
- }
- }
-
- // Now we're up to the bit we're interested in, the answer
- // There might be more than one answer (although we'll just use the first
- // type A answer) and some authority and additional resource records but
- // we're going to ignore all of them.
-
- for (uint16_t i =0; i < answerCount; i++)
- {
- // Skip the name
- uint8_t len;
- do
- {
- iUdp.read(&len, sizeof(len));
- if ((len & LABEL_COMPRESSION_MASK) == 0)
- {
- // It's just a normal label
- if (len > 0)
- {
- // And it's got a length
- // Don't need to actually read the data out for the string,
- // just advance ptr to beyond it
- while(len--)
- {
- iUdp.read(); // we don't care about the returned byte
- }
- }
- }
- else
- {
- // This is a pointer to a somewhere else in the message for the
- // rest of the name. We don't care about the name, and RFC1035
- // says that a name is either a sequence of labels ended with a
- // 0 length octet or a pointer or a sequence of labels ending in
- // a pointer. Either way, when we get here we're at the end of
- // the name
- // Skip over the pointer
- iUdp.read(); // we don't care about the returned byte
- // And set len so that we drop out of the name loop
- len = 0;
- }
- } while (len != 0);
-
- // Check the type and class
- uint16_t answerType;
- uint16_t answerClass;
- iUdp.read((uint8_t*)&answerType, sizeof(answerType));
- iUdp.read((uint8_t*)&answerClass, sizeof(answerClass));
-
- // Ignore the Time-To-Live as we don't do any caching
- for (int i =0; i < TTL_SIZE; i++)
- {
- iUdp.read(); // we don't care about the returned byte
- }
-
- // And read out the length of this answer
- // Don't need header_flags anymore, so we can reuse it here
- iUdp.read((uint8_t*)&header_flags, sizeof(header_flags));
-
- if ( (htons(answerType) == TYPE_A) && (htons(answerClass) == CLASS_IN) )
- {
- if (htons(header_flags) != 4)
- {
- // It's a weird size
- // Mark the entire packet as read
- iUdp.flush();
- return -9;//INVALID_RESPONSE;
- }
- iUdp.read(aAddress.raw_address(), 4);
- return SUCCESS;
- }
- else
- {
- // This isn't an answer type we're after, move onto the next one
- for (uint16_t i =0; i < htons(header_flags); i++)
- {
- iUdp.read(); // we don't care about the returned byte
- }
- }
- }
-
- // Mark the entire packet as read
- iUdp.flush();
-
- // If we get here then we haven't found an answer
- return -10;//INVALID_RESPONSE;
-}
-
diff --git a/libraries/Ethernet/Dns.h b/libraries/Ethernet/Dns.h
deleted file mode 100644
index 6bcb98a..0000000
--- a/libraries/Ethernet/Dns.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Arduino DNS client for WizNet5100-based Ethernet shield
-// (c) Copyright 2009-2010 MCQN Ltd.
-// Released under Apache License, version 2.0
-
-#ifndef DNSClient_h
-#define DNSClient_h
-
-#include <EthernetUdp.h>
-
-class DNSClient
-{
-public:
- // ctor
- void begin(const IPAddress& aDNSServer);
-
- /** Convert a numeric IP address string into a four-byte IP address.
- @param aIPAddrString IP address to convert
- @param aResult IPAddress structure to store the returned IP address
- @result 1 if aIPAddrString was successfully converted to an IP address,
- else error code
- */
- int inet_aton(const char *aIPAddrString, IPAddress& aResult);
-
- /** Resolve the given hostname to an IP address.
- @param aHostname Name to be resolved
- @param aResult IPAddress structure to store the returned IP address
- @result 1 if aIPAddrString was successfully converted to an IP address,
- else error code
- */
- int getHostByName(const char* aHostname, IPAddress& aResult);
-
-protected:
- uint16_t BuildRequest(const char* aName);
- uint16_t ProcessResponse(uint16_t aTimeout, IPAddress& aAddress);
-
- IPAddress iDNSServer;
- uint16_t iRequestId;
- EthernetUDP iUdp;
-};
-
-#endif
diff --git a/libraries/Ethernet/Ethernet.cpp b/libraries/Ethernet/Ethernet.cpp
deleted file mode 100644
index c31a85f..0000000
--- a/libraries/Ethernet/Ethernet.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#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)
-{
- static DhcpClass s_dhcp;
- _dhcp = &s_dhcp;
-
-
- // 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);
- 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;
diff --git a/libraries/Ethernet/Ethernet.h b/libraries/Ethernet/Ethernet.h
deleted file mode 100644
index 2a07ff3..0000000
--- a/libraries/Ethernet/Ethernet.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef ethernet_h
-#define ethernet_h
-
-#include <inttypes.h>
-//#include "w5100.h"
-#include "IPAddress.h"
-#include "EthernetClient.h"
-#include "EthernetServer.h"
-#include "Dhcp.h"
-
-#define MAX_SOCK_NUM 4
-
-class EthernetClass {
-private:
- IPAddress _dnsServerAddress;
- DhcpClass* _dhcp;
-public:
- static uint8_t _state[MAX_SOCK_NUM];
- static uint16_t _server_port[MAX_SOCK_NUM];
- // Initialise the Ethernet shield to use the provided MAC address and gain the rest of the
- // configuration through DHCP.
- // Returns 0 if the DHCP configuration failed, and 1 if it succeeded
- int begin(uint8_t *mac_address);
- void begin(uint8_t *mac_address, IPAddress local_ip);
- void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server);
- void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway);
- void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);
- int maintain();
-
- IPAddress localIP();
- IPAddress subnetMask();
- IPAddress gatewayIP();
- IPAddress dnsServerIP();
-
- friend class EthernetClient;
- friend class EthernetServer;
-};
-
-extern EthernetClass Ethernet;
-
-#endif
diff --git a/libraries/Ethernet/EthernetClient.cpp b/libraries/Ethernet/EthernetClient.cpp
deleted file mode 100644
index 9885efb..0000000
--- a/libraries/Ethernet/EthernetClient.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-#include "w5100.h"
-#include "socket.h"
-
-extern "C" {
- #include "string.h"
-}
-
-#include "Arduino.h"
-
-#include "Ethernet.h"
-#include "EthernetClient.h"
-#include "EthernetServer.h"
-#include "Dns.h"
-
-uint16_t EthernetClient::_srcport = 1024;
-
-EthernetClient::EthernetClient() : _sock(MAX_SOCK_NUM) {
-}
-
-EthernetClient::EthernetClient(uint8_t sock) : _sock(sock) {
-}
-
-int EthernetClient::connect(const char* host, uint16_t port) {
- // Look up the host first
- int ret = 0;
- DNSClient dns;
- IPAddress remote_addr;
-
- dns.begin(Ethernet.dnsServerIP());
- ret = dns.getHostByName(host, remote_addr);
- if (ret == 1) {
- return connect(remote_addr, port);
- } else {
- return ret;
- }
-}
-
-int EthernetClient::connect(IPAddress ip, uint16_t port) {
- if (_sock != MAX_SOCK_NUM)
- return 0;
-
- for (int i = 0; i < MAX_SOCK_NUM; i++) {
- uint8_t s = W5100.readSnSR(i);
- if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT || s == SnSR::CLOSE_WAIT) {
- _sock = i;
- break;
- }
- }
-
- if (_sock == MAX_SOCK_NUM)
- return 0;
-
- _srcport++;
- if (_srcport == 0) _srcport = 1024;
- socket(_sock, SnMR::TCP, _srcport, 0);
-
- if (!::connect(_sock, rawIPAddress(ip), port)) {
- _sock = MAX_SOCK_NUM;
- return 0;
- }
-
- while (status() != SnSR::ESTABLISHED) {
- delay(1);
- if (status() == SnSR::CLOSED) {
- _sock = MAX_SOCK_NUM;
- return 0;
- }
- }
-
- return 1;
-}
-
-size_t EthernetClient::write(uint8_t b) {
- return write(&b, 1);
-}
-
-size_t EthernetClient::write(const uint8_t *buf, size_t size) {
- if (_sock == MAX_SOCK_NUM) {
- setWriteError();
- return 0;
- }
- if (!send(_sock, buf, size)) {
- setWriteError();
- return 0;
- }
- return size;
-}
-
-int EthernetClient::available() {
- if (_sock != MAX_SOCK_NUM)
- return W5100.getRXReceivedSize(_sock);
- return 0;
-}
-
-int EthernetClient::read() {
- uint8_t b;
- if ( recv(_sock, &b, 1) > 0 )
- {
- // recv worked
- return b;
- }
- else
- {
- // No data available
- return -1;
- }
-}
-
-int EthernetClient::read(uint8_t *buf, size_t size) {
- return recv(_sock, buf, size);
-}
-
-int EthernetClient::peek() {
- uint8_t b;
- // Unlike recv, peek doesn't check to see if there's any data available, so we must
- if (!available())
- return -1;
- ::peek(_sock, &b);
- return b;
-}
-
-void EthernetClient::flush() {
- while (available())
- read();
-}
-
-void EthernetClient::stop() {
- if (_sock == MAX_SOCK_NUM)
- return;
-
- // attempt to close the connection gracefully (send a FIN to other side)
- disconnect(_sock);
- unsigned long start = millis();
-
- // wait a second for the connection to close
- while (status() != SnSR::CLOSED && millis() - start < 1000)
- delay(1);
-
- // if it hasn't closed, close it forcefully
- if (status() != SnSR::CLOSED)
- close(_sock);
-
- EthernetClass::_server_port[_sock] = 0;
- _sock = MAX_SOCK_NUM;
-}
-
-uint8_t EthernetClient::connected() {
- if (_sock == MAX_SOCK_NUM) return 0;
-
- uint8_t s = status();
- return !(s == SnSR::LISTEN || s == SnSR::CLOSED || s == SnSR::FIN_WAIT ||
- (s == SnSR::CLOSE_WAIT && !available()));
-}
-
-uint8_t EthernetClient::status() {
- if (_sock == MAX_SOCK_NUM) return SnSR::CLOSED;
- return W5100.readSnSR(_sock);
-}
-
-// the next function allows us to use the client returned by
-// EthernetServer::available() as the condition in an if-statement.
-
-EthernetClient::operator bool() {
- return _sock != MAX_SOCK_NUM;
-}
diff --git a/libraries/Ethernet/EthernetClient.h b/libraries/Ethernet/EthernetClient.h
deleted file mode 100644
index 44740fe..0000000
--- a/libraries/Ethernet/EthernetClient.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef ethernetclient_h
-#define ethernetclient_h
-#include "Arduino.h"
-#include "Print.h"
-#include "Client.h"
-#include "IPAddress.h"
-
-class EthernetClient : public Client {
-
-public:
- EthernetClient();
- EthernetClient(uint8_t sock);
-
- uint8_t status();
- virtual int connect(IPAddress ip, uint16_t port);
- virtual int connect(const char *host, uint16_t port);
- virtual size_t write(uint8_t);
- virtual size_t write(const uint8_t *buf, size_t size);
- virtual int available();
- virtual int read();
- virtual int read(uint8_t *buf, size_t size);
- virtual int peek();
- virtual void flush();
- virtual void stop();
- virtual uint8_t connected();
- virtual operator bool();
-
- friend class EthernetServer;
-
- using Print::write;
-
-private:
- static uint16_t _srcport;
- uint8_t _sock;
-};
-
-#endif
diff --git a/libraries/Ethernet/EthernetServer.cpp b/libraries/Ethernet/EthernetServer.cpp
deleted file mode 100644
index 0308b92..0000000
--- a/libraries/Ethernet/EthernetServer.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "w5100.h"
-#include "socket.h"
-extern "C" {
-#include "string.h"
-}
-
-#include "Ethernet.h"
-#include "EthernetClient.h"
-#include "EthernetServer.h"
-
-EthernetServer::EthernetServer(uint16_t port)
-{
- _port = port;
-}
-
-void EthernetServer::begin()
-{
- for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
- EthernetClient client(sock);
- if (client.status() == SnSR::CLOSED) {
- socket(sock, SnMR::TCP, _port, 0);
- listen(sock);
- EthernetClass::_server_port[sock] = _port;
- break;
- }
- }
-}
-
-void EthernetServer::accept()
-{
- int listening = 0;
-
- for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
- EthernetClient client(sock);
-
- if (EthernetClass::_server_port[sock] == _port) {
- if (client.status() == SnSR::LISTEN) {
- listening = 1;
- }
- else if (client.status() == SnSR::CLOSE_WAIT && !client.available()) {
- client.stop();
- }
- }
- }
-
- if (!listening) {
- begin();
- }
-}
-
-EthernetClient EthernetServer::available()
-{
- accept();
-
- for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
- EthernetClient client(sock);
- if (EthernetClass::_server_port[sock] == _port &&
- (client.status() == SnSR::ESTABLISHED ||
- client.status() == SnSR::CLOSE_WAIT)) {
- if (client.available()) {
- // XXX: don't always pick the lowest numbered socket.
- return client;
- }
- }
- }
-
- return EthernetClient(MAX_SOCK_NUM);
-}
-
-size_t EthernetServer::write(uint8_t b)
-{
- return write(&b, 1);
-}
-
-size_t EthernetServer::write(const uint8_t *buffer, size_t size)
-{
- size_t n = 0;
-
- accept();
-
- for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
- EthernetClient client(sock);
-
- if (EthernetClass::_server_port[sock] == _port &&
- client.status() == SnSR::ESTABLISHED) {
- n += client.write(buffer, size);
- }
- }
-
- return n;
-}
diff --git a/libraries/Ethernet/EthernetServer.h b/libraries/Ethernet/EthernetServer.h
deleted file mode 100644
index 86ccafe..0000000
--- a/libraries/Ethernet/EthernetServer.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef ethernetserver_h
-#define ethernetserver_h
-
-#include "Server.h"
-
-class EthernetClient;
-
-class EthernetServer :
-public Server {
-private:
- uint16_t _port;
- void accept();
-public:
- EthernetServer(uint16_t);
- EthernetClient available();
- virtual void begin();
- virtual size_t write(uint8_t);
- virtual size_t write(const uint8_t *buf, size_t size);
- using Print::write;
-};
-
-#endif
diff --git a/libraries/Ethernet/EthernetUdp.cpp b/libraries/Ethernet/EthernetUdp.cpp
deleted file mode 100644
index 3760052..0000000
--- a/libraries/Ethernet/EthernetUdp.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Udp.cpp: Library to send/receive UDP packets with the Arduino ethernet shield.
- * This version only offers minimal wrapping of socket.c/socket.h
- * Drop Udp.h/.cpp into the Ethernet library directory at hardware/libraries/Ethernet/
- *
- * MIT License:
- * Copyright (c) 2008 Bjoern Hartmann
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * bjoern@cs.stanford.edu 12/30/2008
- */
-
-#include "w5100.h"
-#include "socket.h"
-#include "Ethernet.h"
-#include "Udp.h"
-#include "Dns.h"
-
-/* Constructor */
-EthernetUDP::EthernetUDP() : _sock(MAX_SOCK_NUM) {}
-
-/* Start EthernetUDP socket, listening at local port PORT */
-uint8_t EthernetUDP::begin(uint16_t port) {
- if (_sock != MAX_SOCK_NUM)
- return 0;
-
- for (int i = 0; i < MAX_SOCK_NUM; i++) {
- uint8_t s = W5100.readSnSR(i);
- if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT) {
- _sock = i;
- break;
- }
- }
-
- if (_sock == MAX_SOCK_NUM)
- return 0;
-
- _port = port;
- _remaining = 0;
- socket(_sock, SnMR::UDP, _port, 0);
-
- return 1;
-}
-
-/* return number of bytes available in the current packet,
- will return zero if parsePacket hasn't been called yet */
-int EthernetUDP::available() {
- return _remaining;
-}
-
-/* Release any resources being used by this EthernetUDP instance */
-void EthernetUDP::stop()
-{
- if (_sock == MAX_SOCK_NUM)
- return;
-
- close(_sock);
-
- EthernetClass::_server_port[_sock] = 0;
- _sock = MAX_SOCK_NUM;
-}
-
-int EthernetUDP::beginPacket(const char *host, uint16_t port)
-{
- // Look up the host first
- int ret = 0;
- DNSClient dns;
- IPAddress remote_addr;
-
- dns.begin(Ethernet.dnsServerIP());
- ret = dns.getHostByName(host, remote_addr);
- if (ret == 1) {
- return beginPacket(remote_addr, port);
- } else {
- return ret;
- }
-}
-
-int EthernetUDP::beginPacket(IPAddress ip, uint16_t port)
-{
- _offset = 0;
- return startUDP(_sock, rawIPAddress(ip), port);
-}
-
-int EthernetUDP::endPacket()
-{
- return sendUDP(_sock);
-}
-
-size_t EthernetUDP::write(uint8_t byte)
-{
- return write(&byte, 1);
-}
-
-size_t EthernetUDP::write(const uint8_t *buffer, size_t size)
-{
- uint16_t bytes_written = bufferData(_sock, _offset, buffer, size);
- _offset += bytes_written;
- return bytes_written;
-}
-
-int EthernetUDP::parsePacket()
-{
- // discard any remaining bytes in the last packet
- flush();
-
- if (W5100.getRXReceivedSize(_sock) > 0)
- {
- //HACK - hand-parse the UDP packet using TCP recv method
- uint8_t tmpBuf[8];
- int ret =0;
- //read 8 header bytes and get IP and port from it
- ret = recv(_sock,tmpBuf,8);
- if (ret > 0)
- {
- _remoteIP = tmpBuf;
- _remotePort = tmpBuf[4];
- _remotePort = (_remotePort << 8) + tmpBuf[5];
- _remaining = tmpBuf[6];
- _remaining = (_remaining << 8) + tmpBuf[7];
-
- // When we get here, any remaining bytes are the data
- ret = _remaining;
- }
- return ret;
- }
- // There aren't any packets available
- return 0;
-}
-
-int EthernetUDP::read()
-{
- uint8_t byte;
-
- if ((_remaining > 0) && (recv(_sock, &byte, 1) > 0))
- {
- // We read things without any problems
- _remaining--;
- return byte;
- }
-
- // If we get here, there's no data available
- return -1;
-}
-
-int EthernetUDP::read(unsigned char* buffer, size_t len)
-{
-
- if (_remaining > 0)
- {
-
- int got;
-
- if (_remaining <= len)
- {
- // data should fit in the buffer
- got = recv(_sock, buffer, _remaining);
- }
- else
- {
- // too much data for the buffer,
- // grab as much as will fit
- got = recv(_sock, buffer, len);
- }
-
- if (got > 0)
- {
- _remaining -= got;
- return got;
- }
-
- }
-
- // If we get here, there's no data available or recv failed
- return -1;
-
-}
-
-int EthernetUDP::peek()
-{
- uint8_t b;
- // Unlike recv, peek doesn't check to see if there's any data available, so we must.
- // If the user hasn't called parsePacket yet then return nothing otherwise they
- // may get the UDP header
- if (!_remaining)
- return -1;
- ::peek(_sock, &b);
- return b;
-}
-
-void EthernetUDP::flush()
-{
- // could this fail (loop endlessly) if _remaining > 0 and recv in read fails?
- // should only occur if recv fails after telling us the data is there, lets
- // hope the w5100 always behaves :)
-
- while (_remaining)
- {
- read();
- }
-}
-
diff --git a/libraries/Ethernet/EthernetUdp.h b/libraries/Ethernet/EthernetUdp.h
deleted file mode 100644
index 8a6b7ab..0000000
--- a/libraries/Ethernet/EthernetUdp.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Udp.cpp: Library to send/receive UDP packets with the Arduino ethernet shield.
- * This version only offers minimal wrapping of socket.c/socket.h
- * Drop Udp.h/.cpp into the Ethernet library directory at hardware/libraries/Ethernet/
- *
- * NOTE: UDP is fast, but has some important limitations (thanks to Warren Gray for mentioning these)
- * 1) UDP does not guarantee the order in which assembled UDP packets are received. This
- * might not happen often in practice, but in larger network topologies, a UDP
- * packet can be received out of sequence.
- * 2) UDP does not guard against lost packets - so packets *can* disappear without the sender being
- * aware of it. Again, this may not be a concern in practice on small local networks.
- * For more information, see http://www.cafeaulait.org/course/week12/35.html
- *
- * MIT License:
- * Copyright (c) 2008 Bjoern Hartmann
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * bjoern@cs.stanford.edu 12/30/2008
- */
-
-#ifndef ethernetudp_h
-#define ethernetudp_h
-
-#include <Udp.h>
-
-#define UDP_TX_PACKET_MAX_SIZE 24
-
-class EthernetUDP : public UDP {
-private:
- uint8_t _sock; // socket ID for Wiz5100
- uint16_t _port; // local port to listen on
- IPAddress _remoteIP; // remote IP address for the incoming packet whilst it's being processed
- uint16_t _remotePort; // remote port for the incoming packet whilst it's being processed
- uint16_t _offset; // offset into the packet being sent
- uint16_t _remaining; // remaining bytes of incoming packet yet to be processed
-
-public:
- EthernetUDP(); // Constructor
- virtual uint8_t begin(uint16_t); // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use
- virtual void stop(); // Finish with the UDP socket
-
- // Sending UDP packets
-
- // Start building up a packet to send to the remote host specific in ip and port
- // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port
- virtual int beginPacket(IPAddress ip, uint16_t port);
- // Start building up a packet to send to the remote host specific in host and port
- // Returns 1 if successful, 0 if there was a problem resolving the hostname or port
- virtual int beginPacket(const char *host, uint16_t port);
- // Finish off this packet and send it
- // Returns 1 if the packet was sent successfully, 0 if there was an error
- virtual int endPacket();
- // Write a single byte into the packet
- virtual size_t write(uint8_t);
- // Write size bytes from buffer into the packet
- virtual size_t write(const uint8_t *buffer, size_t size);
-
- using Print::write;
-
- // Start processing the next available incoming packet
- // Returns the size of the packet in bytes, or 0 if no packets are available
- virtual int parsePacket();
- // Number of bytes remaining in the current packet
- virtual int available();
- // Read a single byte from the current packet
- virtual int read();
- // Read up to len bytes from the current packet and place them into buffer
- // Returns the number of bytes read, or 0 if none are available
- virtual int read(unsigned char* buffer, size_t len);
- // Read up to len characters from the current packet and place them into buffer
- // Returns the number of characters read, or 0 if none are available
- virtual int read(char* buffer, size_t len) { return read((unsigned char*)buffer, len); };
- // Return the next byte from the current packet without moving on to the next byte
- virtual int peek();
- virtual void flush(); // Finish reading the current packet
-
- // Return the IP address of the host who sent the current incoming packet
- virtual IPAddress remoteIP() { return _remoteIP; };
- // Return the port of the host who sent the current incoming packet
- virtual uint16_t remotePort() { return _remotePort; };
-};
-
-#endif
diff --git a/libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino b/libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino
deleted file mode 100644
index bfbcb6d..0000000
--- a/libraries/Ethernet/examples/BarometricPressureWebServer/BarometricPressureWebServer.ino
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- SCP1000 Barometric Pressure Sensor Display
-
- Serves the output of a Barometric Pressure Sensor as a web page.
- Uses the SPI library. For details on the sensor, see:
- http://www.sparkfun.com/commerce/product_info.php?products_id=8161
- http://www.vti.fi/en/support/obsolete_products/pressure_sensors/
-
- This sketch adapted from Nathan Seidle's SCP1000 example for PIC:
- http://www.sparkfun.com/datasheets/Sensors/SCP1000-Testing.zip
-
- Circuit:
- SCP1000 sensor attached to pins 6,7, and 11 - 13:
- DRDY: pin 6
- CSB: pin 7
- MOSI: pin 11
- MISO: pin 12
- SCK: pin 13
-
- created 31 July 2010
- by Tom Igoe
- */
-
-#include <Ethernet.h>
-// the sensor communicates using SPI, so include the library:
-#include <SPI.h>
-
-
-// assign a MAC address for the ethernet controller.
-// fill in your address here:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
-// assign an IP address for the controller:
-IPAddress ip(192,168,1,20);
-IPAddress gateway(192,168,1,1);
-IPAddress subnet(255, 255, 255, 0);
-
-
-// Initialize the Ethernet server library
-// with the IP address and port you want to use
-// (port 80 is default for HTTP):
-EthernetServer server(80);
-
-
-//Sensor's memory register addresses:
-const int PRESSURE = 0x1F; //3 most significant bits of pressure
-const int PRESSURE_LSB = 0x20; //16 least significant bits of pressure
-const int TEMPERATURE = 0x21; //16 bit temperature reading
-
-// pins used for the connection with the sensor
-// the others you need are controlled by the SPI library):
-const int dataReadyPin = 6;
-const int chipSelectPin = 7;
-
-float temperature = 0.0;
-long pressure = 0;
-long lastReadingTime = 0;
-
-void setup() {
- // start the SPI library:
- SPI.begin();
-
- // start the Ethernet connection and the server:
- Ethernet.begin(mac, ip);
- server.begin();
-
- // initalize the data ready and chip select pins:
- pinMode(dataReadyPin, INPUT);
- pinMode(chipSelectPin, OUTPUT);
-
- Serial.begin(9600);
-
- //Configure SCP1000 for low noise configuration:
- writeRegister(0x02, 0x2D);
- writeRegister(0x01, 0x03);
- writeRegister(0x03, 0x02);
-
- // give the sensor and Ethernet shield time to set up:
- delay(1000);
-
- //Set the sensor to high resolution mode tp start readings:
- writeRegister(0x03, 0x0A);
-
-}
-
-void loop() {
- // check for a reading no more than once a second.
- if (millis() - lastReadingTime > 1000){
- // if there's a reading ready, read it:
- // don't do anything until the data ready pin is high:
- if (digitalRead(dataReadyPin) == HIGH) {
- getData();
- // timestamp the last time you got a reading:
- lastReadingTime = millis();
- }
- }
-
- // listen for incoming Ethernet connections:
- listenForEthernetClients();
-}
-
-
-void getData() {
- Serial.println("Getting reading");
- //Read the temperature data
- int tempData = readRegister(0x21, 2);
-
- // convert the temperature to celsius and display it:
- temperature = (float)tempData / 20.0;
-
- //Read the pressure data highest 3 bits:
- byte pressureDataHigh = readRegister(0x1F, 1);
- pressureDataHigh &= 0b00000111; //you only needs bits 2 to 0
-
- //Read the pressure data lower 16 bits:
- unsigned int pressureDataLow = readRegister(0x20, 2);
- //combine the two parts into one 19-bit number:
- pressure = ((pressureDataHigh << 16) | pressureDataLow)/4;
-
- Serial.print("Temperature: ");
- Serial.print(temperature);
- Serial.println(" degrees C");
- Serial.print("Pressure: " + String(pressure));
- Serial.println(" Pa");
-}
-
-void listenForEthernetClients() {
- // listen for incoming clients
- EthernetClient client = server.available();
- if (client) {
- Serial.println("Got a client");
- // an http request ends with a blank line
- boolean currentLineIsBlank = true;
- while (client.connected()) {
- if (client.available()) {
- char c = client.read();
- // if you've gotten to the end of the line (received a newline
- // character) and the line is blank, the http request has ended,
- // so you can send a reply
- if (c == '\n' && currentLineIsBlank) {
- // send a standard http response header
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println();
- // print the current readings, in HTML format:
- client.print("Temperature: ");
- client.print(temperature);
- client.print(" degrees C");
- client.println("<br />");
- client.print("Pressure: " + String(pressure));
- client.print(" Pa");
- client.println("<br />");
- break;
- }
- if (c == '\n') {
- // you're starting a new line
- currentLineIsBlank = true;
- }
- else if (c != '\r') {
- // you've gotten a character on the current line
- currentLineIsBlank = false;
- }
- }
- }
- // give the web browser time to receive the data
- delay(1);
- // close the connection:
- client.stop();
- }
-}
-
-
-//Send a write command to SCP1000
-void writeRegister(byte registerName, byte registerValue) {
- // SCP1000 expects the register name in the upper 6 bits
- // of the byte:
- registerName <<= 2;
- // command (read or write) goes in the lower two bits:
- registerName |= 0b00000010; //Write command
-
- // take the chip select low to select the device:
- digitalWrite(chipSelectPin, LOW);
-
- SPI.transfer(registerName); //Send register location
- SPI.transfer(registerValue); //Send value to record into register
-
- // take the chip select high to de-select:
- digitalWrite(chipSelectPin, HIGH);
-}
-
-
-//Read register from the SCP1000:
-unsigned int readRegister(byte registerName, int numBytes) {
- byte inByte = 0; // incoming from the SPI read
- unsigned int result = 0; // result to return
-
- // SCP1000 expects the register name in the upper 6 bits
- // of the byte:
- registerName <<= 2;
- // command (read or write) goes in the lower two bits:
- registerName &= 0b11111100; //Read command
-
- // take the chip select low to select the device:
- digitalWrite(chipSelectPin, LOW);
- // send the device the register you want to read:
- int command = SPI.transfer(registerName);
- // send a value of 0 to read the first byte returned:
- inByte = SPI.transfer(0x00);
-
- result = inByte;
- // if there's more than one byte returned,
- // shift the first byte then get the second byte:
- if (numBytes > 1){
- result = inByte << 8;
- inByte = SPI.transfer(0x00);
- result = result |inByte;
- }
- // take the chip select high to de-select:
- digitalWrite(chipSelectPin, HIGH);
- // return the result:
- return(result);
-}
diff --git a/libraries/Ethernet/examples/ChatServer/ChatServer.ino b/libraries/Ethernet/examples/ChatServer/ChatServer.ino
deleted file mode 100644
index d50e5a6..0000000
--- a/libraries/Ethernet/examples/ChatServer/ChatServer.ino
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- Chat Server
-
- A simple server that distributes any incoming messages to all
- connected clients. To use telnet to your device's IP address and type.
- You can see the client's input in the serial monitor as well.
- Using an Arduino Wiznet Ethernet shield.
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
- * Analog inputs attached to pins A0 through A5 (optional)
-
- created 18 Dec 2009
- by David A. Mellis
- modified 9 Apr 2012
- by Tom Igoe
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-// Enter a MAC address and IP address for your controller below.
-// The IP address will be dependent on your local network.
-// gateway and subnet are optional:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
-IPAddress ip(192,168,1, 177);
-IPAddress gateway(192,168,1, 1);
-IPAddress subnet(255, 255, 0, 0);
-
-
-// telnet defaults to port 23
-EthernetServer server(23);
-boolean alreadyConnected = false; // whether or not the client was connected previously
-
-void setup() {
- // initialize the ethernet device
- Ethernet.begin(mac, ip, gateway, subnet);
- // start listening for clients
- server.begin();
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- Serial.print("Chat server address:");
- Serial.println(Ethernet.localIP());
-}
-
-void loop() {
- // wait for a new client:
- EthernetClient client = server.available();
-
- // when the client sends the first byte, say hello:
- if (client) {
- if (!alreadyConnected) {
- // clead out the input buffer:
- client.flush();
- Serial.println("We have a new client");
- client.println("Hello, client!");
- alreadyConnected = true;
- }
-
- if (client.available() > 0) {
- // read the bytes incoming from the client:
- char thisChar = client.read();
- // echo the bytes back to the client:
- server.write(thisChar);
- // echo the bytes to the server as well:
- Serial.write(thisChar);
- }
- }
-}
-
-
-
diff --git a/libraries/Ethernet/examples/CosmClient/CosmClient.ino b/libraries/Ethernet/examples/CosmClient/CosmClient.ino
deleted file mode 100644
index ec74278..0000000
--- a/libraries/Ethernet/examples/CosmClient/CosmClient.ino
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- Cosm sensor client
-
- This sketch connects an analog sensor to Cosm (http://www.cosm.com)
- using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
- the Adafruit Ethernet shield, either one will work, as long as it's got
- a Wiznet Ethernet module on board.
-
- This example has been updated to use version 2.0 of the cosm.com API.
- To make it work, create a feed with a datastream, and give it the ID
- sensor1. Or change the code below to match your feed.
-
-
- Circuit:
- * Analog sensor attached to analog in 0
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 15 March 2010
- updated 14 May 2012
- by Tom Igoe with input from Usman Haque and Joe Saavedra
-
-http://arduino.cc/en/Tutorial/CosmClient
- This code is in the public domain.
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-#define APIKEY "YOUR API KEY GOES HERE" // replace your Cosm api key here
-#define FEEDID 00000 // replace your feed ID
-#define USERAGENT "My Project" // user agent is the project name
-
-// assign a MAC address for the ethernet controller.
-// Newer Ethernet shields have a MAC address printed on a sticker on the shield
-// fill in your address here:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
-
-// fill in an available IP address on your network here,
-// for manual configuration:
-IPAddress ip(10,0,1,20);
-
-// initialize the library instance:
-EthernetClient client;
-
-// if you don't want to use DNS (and reduce your sketch size)
-// use the numeric IP instead of the name for the server:
-//IPAddress server(216,52,233,121); // numeric IP for api.cosm.com
-char server[] = "api.cosm.com"; // name address for cosm API
-
-unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
-boolean lastConnected = false; // state of the connection last time through the main loop
-const unsigned long postingInterval = 10L*1000L; // delay between updates to cosm.com
- // the "L" is needed to use long type numbers
-
-
-void setup() {
- // start serial port:
- Serial.begin(9600);
- // start the Ethernet connection:
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // DHCP failed, so use a fixed IP address:
- Ethernet.begin(mac, ip);
- }
-}
-
-void loop() {
- // read the analog sensor:
- int sensorReading = analogRead(A0);
-
- // if there's incoming data from the net connection.
- // send it out the serial port. This is for debugging
- // purposes only:
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
-
- // if there's no net connection, but there was one last time
- // through the loop, then stop the client:
- if (!client.connected() && lastConnected) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
-
- // if you're not connected, and ten seconds have passed since
- // your last connection, then connect again and send data:
- if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
- sendData(sensorReading);
- }
- // store the state of the connection for next time through
- // the loop:
- lastConnected = client.connected();
-}
-
-// this method makes a HTTP connection to the server:
-void sendData(int thisData) {
- // if there's a successful connection:
- if (client.connect(server, 80)) {
- Serial.println("connecting...");
- // send the HTTP PUT request:
- client.print("PUT /v2/feeds/");
- client.print(FEEDID);
- client.println(".csv HTTP/1.1");
- client.println("Host: api.cosm.com");
- client.print("X-ApiKey: ");
- client.println(APIKEY);
- client.print("User-Agent: ");
- client.println(USERAGENT);
- client.print("Content-Length: ");
-
- // calculate the length of the sensor reading in bytes:
- // 8 bytes for "sensor1," + number of digits of the data:
- int thisLength = 8 + getLength(thisData);
- client.println(thisLength);
-
- // last pieces of the HTTP PUT request:
- client.println("Content-Type: text/csv");
- client.println("Connection: close");
- client.println();
-
- // here's the actual content of the PUT request:
- client.print("sensor1,");
- client.println(thisData);
-
- }
- else {
- // if you couldn't make a connection:
- Serial.println("connection failed");
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
- // note the time that the connection was made or attempted:
- lastConnectionTime = millis();
-}
-
-
-// This method calculates the number of digits in the
-// sensor reading. Since each digit of the ASCII decimal
-// representation is a byte, the number of digits equals
-// the number of bytes:
-
-int getLength(int someValue) {
- // there's at least one byte:
- int digits = 1;
- // continually divide the value by ten,
- // adding one to the digit count for each
- // time you divide, until you're at 0:
- int dividend = someValue /10;
- while (dividend > 0) {
- dividend = dividend /10;
- digits++;
- }
- // return the number of digits:
- return digits;
-}
-
diff --git a/libraries/Ethernet/examples/CosmClientString/CosmClientString.ino b/libraries/Ethernet/examples/CosmClientString/CosmClientString.ino
deleted file mode 100644
index e619924..0000000
--- a/libraries/Ethernet/examples/CosmClientString/CosmClientString.ino
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- Cosm sensor client with Strings
-
- This sketch connects an analog sensor to Cosm (http://www.cosm.com)
- using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
- the Adafruit Ethernet shield, either one will work, as long as it's got
- a Wiznet Ethernet module on board.
-
- This example has been updated to use version 2.0 of the Cosm.com API.
- To make it work, create a feed with two datastreams, and give them the IDs
- sensor1 and sensor2. Or change the code below to match your feed.
-
- This example uses the String library, which is part of the Arduino core from
- version 0019.
-
- Circuit:
- * Analog sensor attached to analog in 0
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 15 March 2010
- updated 14 May 2012
- by Tom Igoe with input from Usman Haque and Joe Saavedra
-
- http://arduino.cc/en/Tutorial/CosmClientString
- This code is in the public domain.
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-
-#define APIKEY "YOUR API KEY GOES HERE" // replace your Cosm api key here
-#define FEEDID 00000 // replace your feed ID
-#define USERAGENT "My Project" // user agent is the project name
-
-// assign a MAC address for the ethernet controller.
-// fill in your address here:
- byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
-
-// fill in an available IP address on your network here,
-// for manual configuration:
-IPAddress ip(10,0,1,20);
-
-// initialize the library instance:
-EthernetClient client;
-
-// if you don't want to use DNS (and reduce your sketch size)
-// use the numeric IP instead of the name for the server:
-//IPAddress server(216,52,233,121); // numeric IP for api.cosm.com
-char server[] = "api.cosm.com"; // name address for Cosm API
-
-unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
-boolean lastConnected = false; // state of the connection last time through the main loop
-const unsigned long postingInterval = 10L*1000L; // delay between updates to Cosm.com
- // the "L" is needed to use long type numbers
-void setup() {
- // start serial port:
- Serial.begin(9600);
- // give the ethernet module time to boot up:
- delay(1000);
- // start the Ethernet connection:
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // DHCP failed, so use a fixed IP address:
- Ethernet.begin(mac, ip);
- }
-}
-
-void loop() {
- // read the analog sensor:
- int sensorReading = analogRead(A0);
- // convert the data to a String to send it:
-
- String dataString = "sensor1,";
- dataString += sensorReading;
-
- // you can append multiple readings to this String if your
- // Cosm feed is set up to handle multiple values:
- int otherSensorReading = analogRead(A1);
- dataString += "\nsensor2,";
- dataString += otherSensorReading;
-
- // if there's incoming data from the net connection.
- // send it out the serial port. This is for debugging
- // purposes only:
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
-
- // if there's no net connection, but there was one last time
- // through the loop, then stop the client:
- if (!client.connected() && lastConnected) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
-
- // if you're not connected, and ten seconds have passed since
- // your last connection, then connect again and send data:
- if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
- sendData(dataString);
- }
- // store the state of the connection for next time through
- // the loop:
- lastConnected = client.connected();
-}
-
-// this method makes a HTTP connection to the server:
-void sendData(String thisData) {
- // if there's a successful connection:
- if (client.connect(server, 80)) {
- Serial.println("connecting...");
- // send the HTTP PUT request:
- client.print("PUT /v2/feeds/");
- client.print(FEEDID);
- client.println(".csv HTTP/1.1");
- client.println("Host: api.cosm.com");
- client.print("X-ApiKey: ");
- client.println(APIKEY);
- client.print("User-Agent: ");
- client.println(USERAGENT);
- client.print("Content-Length: ");
- client.println(thisData.length());
-
- // last pieces of the HTTP PUT request:
- client.println("Content-Type: text/csv");
- client.println("Connection: close");
- client.println();
-
- // here's the actual content of the PUT request:
- client.println(thisData);
- }
- else {
- // if you couldn't make a connection:
- Serial.println("connection failed");
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
- // note the time that the connection was made or attempted:
- lastConnectionTime = millis();
-}
-
diff --git a/libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino b/libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino
deleted file mode 100644
index 5eaaf24..0000000
--- a/libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- DHCP-based IP printer
-
- This sketch uses the DHCP extensions to the Ethernet library
- to get an IP address via DHCP and print the address obtained.
- using an Arduino Wiznet Ethernet shield.
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 12 April 2011
- modified 9 Apr 2012
- by Tom Igoe
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-// Enter a MAC address for your controller below.
-// Newer Ethernet shields have a MAC address printed on a sticker on the shield
-byte mac[] = {
- 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
-
-// Initialize the Ethernet client library
-// with the IP address and port of the server
-// that you want to connect to (port 80 is default for HTTP):
-EthernetClient client;
-
-void setup() {
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- // this check is only needed on the Leonardo:
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
- // start the Ethernet connection:
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // no point in carrying on, so do nothing forevermore:
- for(;;)
- ;
- }
- // print your local IP address:
- Serial.print("My IP address: ");
- for (byte thisByte = 0; thisByte < 4; thisByte++) {
- // print the value of each byte of the IP address:
- Serial.print(Ethernet.localIP()[thisByte], DEC);
- Serial.print(".");
- }
- Serial.println();
-}
-
-void loop() {
-
-}
-
-
diff --git a/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino b/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino
deleted file mode 100644
index 09cbd43..0000000
--- a/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- DHCP Chat Server
-
- A simple server that distributes any incoming messages to all
- connected clients. To use telnet to your device's IP address and type.
- You can see the client's input in the serial monitor as well.
- Using an Arduino Wiznet Ethernet shield.
-
- THis version attempts to get an IP address using DHCP
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 21 May 2011
- modified 9 Apr 2012
- by Tom Igoe
- Based on ChatServer example by David A. Mellis
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-// Enter a MAC address and IP address for your controller below.
-// The IP address will be dependent on your local network.
-// gateway and subnet are optional:
-byte mac[] = {
- 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
-IPAddress ip(192,168,1, 177);
-IPAddress gateway(192,168,1, 1);
-IPAddress subnet(255, 255, 0, 0);
-
-// telnet defaults to port 23
-EthernetServer server(23);
-boolean gotAMessage = false; // whether or not you got a message from the client yet
-
-void setup() {
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- // this check is only needed on the Leonardo:
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- // start the Ethernet connection:
- Serial.println("Trying to get an IP address using DHCP");
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // initialize the ethernet device not using DHCP:
- Ethernet.begin(mac, ip, gateway, subnet);
- }
- // print your local IP address:
- Serial.print("My IP address: ");
- ip = Ethernet.localIP();
- for (byte thisByte = 0; thisByte < 4; thisByte++) {
- // print the value of each byte of the IP address:
- Serial.print(ip[thisByte], DEC);
- Serial.print(".");
- }
- Serial.println();
- // start listening for clients
- server.begin();
-
-}
-
-void loop() {
- // wait for a new client:
- EthernetClient client = server.available();
-
- // when the client sends the first byte, say hello:
- if (client) {
- if (!gotAMessage) {
- Serial.println("We have a new client");
- client.println("Hello, client!");
- gotAMessage = true;
- }
-
- // read the bytes incoming from the client:
- char thisChar = client.read();
- // echo the bytes back to the client:
- server.write(thisChar);
- // echo the bytes to the server as well:
- Serial.print(thisChar);
- }
-}
-
diff --git a/libraries/Ethernet/examples/PachubeClient/PachubeClient.ino b/libraries/Ethernet/examples/PachubeClient/PachubeClient.ino
deleted file mode 100644
index dfd2d40..0000000
--- a/libraries/Ethernet/examples/PachubeClient/PachubeClient.ino
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- Pachube sensor client
-
- This sketch connects an analog sensor to Pachube (http://www.pachube.com)
- using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
- the Adafruit Ethernet shield, either one will work, as long as it's got
- a Wiznet Ethernet module on board.
-
- This example has been updated to use version 2.0 of the Pachube.com API.
- To make it work, create a feed with a datastream, and give it the ID
- sensor1. Or change the code below to match your feed.
-
-
- Circuit:
- * Analog sensor attached to analog in 0
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 15 March 2010
- modified 9 Apr 2012
- by Tom Igoe with input from Usman Haque and Joe Saavedra
-
-http://arduino.cc/en/Tutorial/PachubeClient
- This code is in the public domain.
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-#define APIKEY "YOUR API KEY GOES HERE" // replace your pachube api key here
-#define FEEDID 00000 // replace your feed ID
-#define USERAGENT "My Project" // user agent is the project name
-
-// assign a MAC address for the ethernet controller.
-// Newer Ethernet shields have a MAC address printed on a sticker on the shield
-// fill in your address here:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
-
-// fill in an available IP address on your network here,
-// for manual configuration:
-IPAddress ip(10,0,1,20);
-// initialize the library instance:
-EthernetClient client;
-
-// if you don't want to use DNS (and reduce your sketch size)
-// use the numeric IP instead of the name for the server:
-IPAddress server(216,52,233,122); // numeric IP for api.pachube.com
-//char server[] = "api.pachube.com"; // name address for pachube API
-
-unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
-boolean lastConnected = false; // state of the connection last time through the main loop
-const unsigned long postingInterval = 10*1000; //delay between updates to Pachube.com
-
-void setup() {
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- // start the Ethernet connection:
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // DHCP failed, so use a fixed IP address:
- Ethernet.begin(mac, ip);
- }
-}
-
-void loop() {
- // read the analog sensor:
- int sensorReading = analogRead(A0);
-
- // if there's incoming data from the net connection.
- // send it out the serial port. This is for debugging
- // purposes only:
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
-
- // if there's no net connection, but there was one last time
- // through the loop, then stop the client:
- if (!client.connected() && lastConnected) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
-
- // if you're not connected, and ten seconds have passed since
- // your last connection, then connect again and send data:
- if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
- sendData(sensorReading);
- }
- // store the state of the connection for next time through
- // the loop:
- lastConnected = client.connected();
-}
-
-// this method makes a HTTP connection to the server:
-void sendData(int thisData) {
- // if there's a successful connection:
- if (client.connect(server, 80)) {
- Serial.println("connecting...");
- // send the HTTP PUT request:
- client.print("PUT /v2/feeds/");
- client.print(FEEDID);
- client.println(".csv HTTP/1.1");
- client.println("Host: api.pachube.com");
- client.print("X-PachubeApiKey: ");
- client.println(APIKEY);
- client.print("User-Agent: ");
- client.println(USERAGENT);
- client.print("Content-Length: ");
-
- // calculate the length of the sensor reading in bytes:
- // 8 bytes for "sensor1," + number of digits of the data:
- int thisLength = 8 + getLength(thisData);
- client.println(thisLength);
-
- // last pieces of the HTTP PUT request:
- client.println("Content-Type: text/csv");
- client.println("Connection: close");
- client.println();
-
- // here's the actual content of the PUT request:
- client.print("sensor1,");
- client.println(thisData);
-
- }
- else {
- // if you couldn't make a connection:
- Serial.println("connection failed");
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
- // note the time that the connection was made or attempted:
- lastConnectionTime = millis();
-}
-
-
-// This method calculates the number of digits in the
-// sensor reading. Since each digit of the ASCII decimal
-// representation is a byte, the number of digits equals
-// the number of bytes:
-
-int getLength(int someValue) {
- // there's at least one byte:
- int digits = 1;
- // continually divide the value by ten,
- // adding one to the digit count for each
- // time you divide, until you're at 0:
- int dividend = someValue /10;
- while (dividend > 0) {
- dividend = dividend /10;
- digits++;
- }
- // return the number of digits:
- return digits;
-}
-
diff --git a/libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino b/libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino
deleted file mode 100644
index 2a96e9f..0000000
--- a/libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- Cosm sensor client with Strings
-
- This sketch connects an analog sensor to Cosm (http://www.cosm.com)
- using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
- the Adafruit Ethernet shield, either one will work, as long as it's got
- a Wiznet Ethernet module on board.
-
- This example has been updated to use version 2.0 of the Cosm.com API.
- To make it work, create a feed with two datastreams, and give them the IDs
- sensor1 and sensor2. Or change the code below to match your feed.
-
- This example uses the String library, which is part of the Arduino core from
- version 0019.
-
- Circuit:
- * Analog sensor attached to analog in 0
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 15 March 2010
- modified 9 Apr 2012
- by Tom Igoe with input from Usman Haque and Joe Saavedra
-
- http://arduino.cc/en/Tutorial/CosmClientString
- This code is in the public domain.
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-
-/#define APIKEY "YOUR API KEY GOES HERE" // replace your Cosm api key here
-#define FEEDID 00000 // replace your feed ID
-#define USERAGENT "My Project" // user agent is the project name
-
-
-// assign a MAC address for the ethernet controller.
-// fill in your address here:
- byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
-
-// fill in an available IP address on your network here,
-// for manual configuration:
-IPAddress ip(10,0,1,20);
-
-// initialize the library instance:
-EthernetClient client;
-
-// if you don't want to use DNS (and reduce your sketch size)
-// use the numeric IP instead of the name for the server:
-IPAddress server(216,52,233,121); // numeric IP for api.cosm.com
-//char server[] = "api.cosm.com"; // name address for Cosm API
-
-unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
-boolean lastConnected = false; // state of the connection last time through the main loop
-const unsigned long postingInterval = 10*1000; //delay between updates to Cosm.com
-
-void setup() {
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- // give the ethernet module time to boot up:
- delay(1000);
- // start the Ethernet connection:
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // DHCP failed, so use a fixed IP address:
- Ethernet.begin(mac, ip);
- }
-}
-
-void loop() {
- // read the analog sensor:
- int sensorReading = analogRead(A0);
- // convert the data to a String to send it:
-
- String dataString = "sensor1,";
- dataString += sensorReading;
-
- // you can append multiple readings to this String if your
- // Cosm feed is set up to handle multiple values:
- int otherSensorReading = analogRead(A1);
- dataString += "\nsensor2,";
- dataString += otherSensorReading;
-
- // if there's incoming data from the net connection.
- // send it out the serial port. This is for debugging
- // purposes only:
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
-
- // if there's no net connection, but there was one last time
- // through the loop, then stop the client:
- if (!client.connected() && lastConnected) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
-
- // if you're not connected, and ten seconds have passed since
- // your last connection, then connect again and send data:
- if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
- sendData(dataString);
- }
- // store the state of the connection for next time through
- // the loop:
- lastConnected = client.connected();
-}
-
-// this method makes a HTTP connection to the server:
-void sendData(String thisData) {
- // if there's a successful connection:
- if (client.connect(server, 80)) {
- Serial.println("connecting...");
- // send the HTTP PUT request:
- client.print("PUT /v2/feeds/");
- client.print(FEEDID);
- client.println(".csv HTTP/1.1");
- client.println("Host: api.cosm.com");
- client.print("X-CosmApiKey: ");
- client.println(APIKEY);
- client.print("User-Agent: ");
- client.println(USERAGENT);
- client.print("Content-Length: ");
- client.println(thisData.length());
-
- // last pieces of the HTTP PUT request:
- client.println("Content-Type: text/csv");
- client.println("Connection: close");
- client.println();
-
- // here's the actual content of the PUT request:
- client.println(thisData);
- }
- else {
- // if you couldn't make a connection:
- Serial.println("connection failed");
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
- // note the time that the connection was made or attempted:
- lastConnectionTime = millis();
-}
-
diff --git a/libraries/Ethernet/examples/TelnetClient/TelnetClient.ino b/libraries/Ethernet/examples/TelnetClient/TelnetClient.ino
deleted file mode 100644
index 3457125..0000000
--- a/libraries/Ethernet/examples/TelnetClient/TelnetClient.ino
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- Telnet client
-
- This sketch connects to a a telnet server (http://www.google.com)
- using an Arduino Wiznet Ethernet shield. You'll need a telnet server
- to test this with.
- Processing's ChatServer example (part of the network library) works well,
- running on port 10002. It can be found as part of the examples
- in the Processing application, available at
- http://processing.org/
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 14 Sep 2010
- modified 9 Apr 2012
- by Tom Igoe
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-// Enter a MAC address and IP address for your controller below.
-// The IP address will be dependent on your local network:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
-IPAddress ip(192,168,1,177);
-
-// Enter the IP address of the server you're connecting to:
-IPAddress server(1,1,1,1);
-
-// Initialize the Ethernet client library
-// with the IP address and port of the server
-// that you want to connect to (port 23 is default for telnet;
-// if you're using Processing's ChatServer, use port 10002):
-EthernetClient client;
-
-void setup() {
- // start the Ethernet connection:
- Ethernet.begin(mac, ip);
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- // give the Ethernet shield a second to initialize:
- delay(1000);
- Serial.println("connecting...");
-
- // if you get a connection, report back via serial:
- if (client.connect(server, 10002)) {
- Serial.println("connected");
- }
- else {
- // if you didn't get a connection to the server:
- Serial.println("connection failed");
- }
-}
-
-void loop()
-{
- // if there are incoming bytes available
- // from the server, read them and print them:
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
-
- // as long as there are bytes in the serial queue,
- // read them and send them out the socket if it's open:
- while (Serial.available() > 0) {
- char inChar = Serial.read();
- if (client.connected()) {
- client.print(inChar);
- }
- }
-
- // if the server's disconnected, stop the client:
- if (!client.connected()) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- // do nothing:
- while(true);
- }
-}
-
-
-
-
diff --git a/libraries/Ethernet/examples/TwitterClient/TwitterClient.ino b/libraries/Ethernet/examples/TwitterClient/TwitterClient.ino
deleted file mode 100644
index 9fee1fe..0000000
--- a/libraries/Ethernet/examples/TwitterClient/TwitterClient.ino
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- Twitter Client with Strings
-
- This sketch connects to Twitter using an Ethernet shield. It parses the XML
- returned, and looks for <text>this is a tweet</text>
-
- You can use the Arduino Ethernet shield, or the Adafruit Ethernet shield,
- either one will work, as long as it's got a Wiznet Ethernet module on board.
-
- This example uses the DHCP routines in the Ethernet library which is part of the
- Arduino core from version 1.0 beta 1
-
- This example uses the String library, which is part of the Arduino core from
- version 0019.
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 21 May 2011
- modified 9 Apr 2012
- by Tom Igoe
-
- This code is in the public domain.
-
- */
-#include <SPI.h>
-#include <Ethernet.h>
-
-
-// Enter a MAC address and IP address for your controller below.
-// The IP address will be dependent on your local network:
-byte mac[] = {
- 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
-IPAddress ip(192,168,1,20);
-
-// initialize the library instance:
-EthernetClient client;
-
-const unsigned long requestInterval = 60000; // delay between requests
-
-char serverName[] = "api.twitter.com"; // twitter URL
-
-boolean requested; // whether you've made a request since connecting
-unsigned long lastAttemptTime = 0; // last time you connected to the server, in milliseconds
-
-String currentLine = ""; // string to hold the text from server
-String tweet = ""; // string to hold the tweet
-boolean readingTweet = false; // if you're currently reading the tweet
-
-void setup() {
- // reserve space for the strings:
- currentLine.reserve(256);
- tweet.reserve(150);
-
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- // attempt a DHCP connection:
- Serial.println("Attempting to get an IP address using DHCP:");
- if (!Ethernet.begin(mac)) {
- // if DHCP fails, start with a hard-coded address:
- Serial.println("failed to get an IP address using DHCP, trying manually");
- Ethernet.begin(mac, ip);
- }
- Serial.print("My address:");
- Serial.println(Ethernet.localIP());
- // connect to Twitter:
- connectToServer();
-}
-
-
-
-void loop()
-{
- if (client.connected()) {
- if (client.available()) {
- // read incoming bytes:
- char inChar = client.read();
-
- // add incoming byte to end of line:
- currentLine += inChar;
-
- // if you get a newline, clear the line:
- if (inChar == '\n') {
- currentLine = "";
- }
- // if the current line ends with <text>, it will
- // be followed by the tweet:
- if ( currentLine.endsWith("<text>")) {
- // tweet is beginning. Clear the tweet string:
- readingTweet = true;
- tweet = "";
- }
- // if you're currently reading the bytes of a tweet,
- // add them to the tweet String:
- if (readingTweet) {
- if (inChar != '<') {
- tweet += inChar;
- }
- else {
- // if you got a "<" character,
- // you've reached the end of the tweet:
- readingTweet = false;
- Serial.println(tweet);
- // close the connection to the server:
- client.stop();
- }
- }
- }
- }
- else if (millis() - lastAttemptTime > requestInterval) {
- // if you're not connected, and two minutes have passed since
- // your last connection, then attempt to connect again:
- connectToServer();
- }
-}
-
-void connectToServer() {
- // attempt to connect, and wait a millisecond:
- Serial.println("connecting to server...");
- if (client.connect(serverName, 80)) {
- Serial.println("making HTTP request...");
- // make HTTP GET request to twitter:
- client.println("GET /1/statuses/user_timeline.xml?screen_name=arduino&count=1 HTTP/1.1");
- client.println("HOST: api.twitter.com");
- client.println("Connection: close");
- client.println();
- }
- // note the time of this connect attempt:
- lastAttemptTime = millis();
-}
-
diff --git a/libraries/Ethernet/examples/UDPSendReceiveString/UDPSendReceiveString.ino b/libraries/Ethernet/examples/UDPSendReceiveString/UDPSendReceiveString.ino
deleted file mode 100644
index 4d4045c..0000000
--- a/libraries/Ethernet/examples/UDPSendReceiveString/UDPSendReceiveString.ino
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- UDPSendReceive.pde:
- This sketch receives UDP message strings, prints them to the serial port
- and sends an "acknowledge" string back to the sender
-
- A Processing sketch is included at the end of file that can be used to send
- and received messages for testing with a computer.
-
- created 21 Aug 2010
- by Michael Margolis
-
- This code is in the public domain.
- */
-
-
-#include <SPI.h> // needed for Arduino versions later than 0018
-#include <Ethernet.h>
-#include <EthernetUdp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
-
-
-// Enter a MAC address and IP address for your controller below.
-// The IP address will be dependent on your local network:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
-IPAddress ip(192, 168, 1, 177);
-
-unsigned int localPort = 8888; // local port to listen on
-
-// buffers for receiving and sending data
-char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
-char ReplyBuffer[] = "acknowledged"; // a string to send back
-
-// An EthernetUDP instance to let us send and receive packets over UDP
-EthernetUDP Udp;
-
-void setup() {
- // start the Ethernet and UDP:
- Ethernet.begin(mac,ip);
- Udp.begin(localPort);
-
- Serial.begin(9600);
-}
-
-void loop() {
- // if there's data available, read a packet
- int packetSize = Udp.parsePacket();
- if(packetSize)
- {
- Serial.print("Received packet of size ");
- Serial.println(packetSize);
- Serial.print("From ");
- IPAddress remote = Udp.remoteIP();
- for (int i =0; i < 4; i++)
- {
- Serial.print(remote[i], DEC);
- if (i < 3)
- {
- Serial.print(".");
- }
- }
- Serial.print(", port ");
- Serial.println(Udp.remotePort());
-
- // read the packet into packetBufffer
- Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
- Serial.println("Contents:");
- Serial.println(packetBuffer);
-
- // send a reply, to the IP address and port that sent us the packet we received
- Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
- Udp.write(ReplyBuffer);
- Udp.endPacket();
- }
- delay(10);
-}
-
-
-/*
- Processing sketch to run with this example
- =====================================================
-
- // Processing UDP example to send and receive string data from Arduino
- // press any key to send the "Hello Arduino" message
-
-
- import hypermedia.net.*;
-
- UDP udp; // define the UDP object
-
-
- void setup() {
- udp = new UDP( this, 6000 ); // create a new datagram connection on port 6000
- //udp.log( true ); // <-- printout the connection activity
- udp.listen( true ); // and wait for incoming message
- }
-
- void draw()
- {
- }
-
- void keyPressed() {
- String ip = "192.168.1.177"; // the remote IP address
- int port = 8888; // the destination port
-
- udp.send("Hello World", ip, port ); // the message to send
-
- }
-
- void receive( byte[] data ) { // <-- default handler
- //void receive( byte[] data, String ip, int port ) { // <-- extended handler
-
- for(int i=0; i < data.length; i++)
- print(char(data[i]));
- println();
- }
- */
-
-
diff --git a/libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino b/libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino
deleted file mode 100644
index 93ffe39..0000000
--- a/libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-
- Udp NTP Client
-
- Get the time from a Network Time Protocol (NTP) time server
- Demonstrates use of UDP sendPacket and ReceivePacket
- For more on NTP time servers and the messages needed to communicate with them,
- see http://en.wikipedia.org/wiki/Network_Time_Protocol
-
- created 4 Sep 2010
- by Michael Margolis
- modified 9 Apr 2012
- by Tom Igoe
-
- This code is in the public domain.
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-#include <EthernetUdp.h>
-
-// Enter a MAC address for your controller below.
-// Newer Ethernet shields have a MAC address printed on a sticker on the shield
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
-
-unsigned int localPort = 8888; // local port to listen for UDP packets
-
-IPAddress timeServer(192, 43, 244, 18); // time.nist.gov NTP server
-
-const int NTP_PACKET_SIZE= 48; // NTP time stamp is in the first 48 bytes of the message
-
-byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
-
-// A UDP instance to let us send and receive packets over UDP
-EthernetUDP Udp;
-
-void setup()
-{
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- // start Ethernet and UDP
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // no point in carrying on, so do nothing forevermore:
- for(;;)
- ;
- }
- Udp.begin(localPort);
-}
-
-void loop()
-{
- sendNTPpacket(timeServer); // send an NTP packet to a time server
-
- // wait to see if a reply is available
- delay(1000);
- if ( Udp.parsePacket() ) {
- // We've received a packet, read the data from it
- Udp.read(packetBuffer,NTP_PACKET_SIZE); // read the packet into the buffer
-
- //the timestamp starts at byte 40 of the received packet and is four bytes,
- // or two words, long. First, esxtract the two words:
-
- unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
- unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
- // combine the four bytes (two words) into a long integer
- // this is NTP time (seconds since Jan 1 1900):
- unsigned long secsSince1900 = highWord << 16 | lowWord;
- Serial.print("Seconds since Jan 1 1900 = " );
- Serial.println(secsSince1900);
-
- // now convert NTP time into everyday time:
- Serial.print("Unix time = ");
- // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
- const unsigned long seventyYears = 2208988800UL;
- // subtract seventy years:
- unsigned long epoch = secsSince1900 - seventyYears;
- // print Unix time:
- Serial.println(epoch);
-
-
- // print the hour, minute and second:
- Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
- Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
- Serial.print(':');
- if ( ((epoch % 3600) / 60) < 10 ) {
- // In the first 10 minutes of each hour, we'll want a leading '0'
- Serial.print('0');
- }
- Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
- Serial.print(':');
- if ( (epoch % 60) < 10 ) {
- // In the first 10 seconds of each minute, we'll want a leading '0'
- Serial.print('0');
- }
- Serial.println(epoch %60); // print the second
- }
- // wait ten seconds before asking for the time again
- delay(10000);
-}
-
-// send an NTP request to the time server at the given address
-unsigned long sendNTPpacket(IPAddress& address)
-{
- // set all bytes in the buffer to 0
- memset(packetBuffer, 0, NTP_PACKET_SIZE);
- // Initialize values needed to form NTP request
- // (see URL above for details on the packets)
- packetBuffer[0] = 0b11100011; // LI, Version, Mode
- packetBuffer[1] = 0; // Stratum, or type of clock
- packetBuffer[2] = 6; // Polling Interval
- packetBuffer[3] = 0xEC; // Peer Clock Precision
- // 8 bytes of zero for Root Delay & Root Dispersion
- packetBuffer[12] = 49;
- packetBuffer[13] = 0x4E;
- packetBuffer[14] = 49;
- packetBuffer[15] = 52;
-
- // all NTP fields have been given values, now
- // you can send a packet requesting a timestamp:
- Udp.beginPacket(address, 123); //NTP requests are to port 123
- Udp.write(packetBuffer,NTP_PACKET_SIZE);
- Udp.endPacket();
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/libraries/Ethernet/examples/WebClient/WebClient.ino b/libraries/Ethernet/examples/WebClient/WebClient.ino
deleted file mode 100644
index 40523a4..0000000
--- a/libraries/Ethernet/examples/WebClient/WebClient.ino
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- Web client
-
- This sketch connects to a website (http://www.google.com)
- using an Arduino Wiznet Ethernet shield.
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 18 Dec 2009
- by David A. Mellis
- modified 9 Apr 2012
- by Tom Igoe, based on work by Adrian McEwen
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-// Enter a MAC address for your controller below.
-// Newer Ethernet shields have a MAC address printed on a sticker on the shield
-byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
-// if you don't want to use DNS (and reduce your sketch size)
-// use the numeric IP instead of the name for the server:
-//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS)
-char server[] = "www.google.com"; // name address for Google (using DNS)
-
-// Set the static IP address to use if the DHCP fails to assign
-IPAddress ip(192,168,0,177);
-
-// Initialize the Ethernet client library
-// with the IP address and port of the server
-// that you want to connect to (port 80 is default for HTTP):
-EthernetClient client;
-
-void setup() {
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
- // start the Ethernet connection:
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // no point in carrying on, so do nothing forevermore:
- // try to congifure using IP address instead of DHCP:
- Ethernet.begin(mac, ip);
- }
- // give the Ethernet shield a second to initialize:
- delay(1000);
- Serial.println("connecting...");
-
- // if you get a connection, report back via serial:
- if (client.connect(server, 80)) {
- Serial.println("connected");
- // Make a HTTP request:
- client.println("GET /search?q=arduino HTTP/1.1");
- client.println("Host: www.google.com");
- client.println("Connection: close");
- client.println();
- }
- else {
- // kf you didn't get a connection to the server:
- Serial.println("connection failed");
- }
-}
-
-void loop()
-{
- // if there are incoming bytes available
- // from the server, read them and print them:
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
-
- // if the server's disconnected, stop the client:
- if (!client.connected()) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
-
- // do nothing forevermore:
- while(true);
- }
-}
-
diff --git a/libraries/Ethernet/examples/WebClientRepeating/WebClientRepeating.ino b/libraries/Ethernet/examples/WebClientRepeating/WebClientRepeating.ino
deleted file mode 100644
index 650f74e..0000000
--- a/libraries/Ethernet/examples/WebClientRepeating/WebClientRepeating.ino
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- Repeating Web client
-
- This sketch connects to a a web server and makes a request
- using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
- the Adafruit Ethernet shield, either one will work, as long as it's got
- a Wiznet Ethernet module on board.
-
- This example uses DNS, by assigning the Ethernet client with a MAC address,
- IP address, and DNS address.
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
-
- created 19 Apr 2012
- by Tom Igoe
-
- http://arduino.cc/en/Tutorial/WebClientRepeating
- This code is in the public domain.
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-// assign a MAC address for the ethernet controller.
-// fill in your address here:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
-// fill in an available IP address on your network here,
-// for manual configuration:
-IPAddress ip(10,0,0,20);
-
-// fill in your Domain Name Server address here:
-IPAddress myDns(1,1,1,1);
-
-// initialize the library instance:
-EthernetClient client;
-
-char server[] = "www.arduino.cc";
-
-unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
-boolean lastConnected = false; // state of the connection last time through the main loop
-const unsigned long postingInterval = 60L*1000L; // delay between updates, in milliseconds
- // the "L" is needed to use long type numbers
-
-void setup() {
- // start serial port:
- Serial.begin(9600);
- // give the ethernet module time to boot up:
- delay(1000);
- // start the Ethernet connection using a fixed IP address and DNS server:
- Ethernet.begin(mac, ip, myDns);
- // print the Ethernet board/shield's IP address:
- Serial.print("My IP address: ");
- Serial.println(Ethernet.localIP());
-}
-
-void loop() {
- // if there's incoming data from the net connection.
- // send it out the serial port. This is for debugging
- // purposes only:
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
-
- // if there's no net connection, but there was one last time
- // through the loop, then stop the client:
- if (!client.connected() && lastConnected) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- }
-
- // if you're not connected, and ten seconds have passed since
- // your last connection, then connect again and send data:
- if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
- httpRequest();
- }
- // store the state of the connection for next time through
- // the loop:
- lastConnected = client.connected();
-}
-
-// this method makes a HTTP connection to the server:
-void httpRequest() {
- // if there's a successful connection:
- if (client.connect(server, 80)) {
- Serial.println("connecting...");
- // send the HTTP PUT request:
- client.println("GET /latest.txt HTTP/1.1");
- client.println("Host: www.arduino.cc");
- client.println("User-Agent: arduino-ethernet");
- client.println("Connection: close");
- client.println();
-
- // note the time that the connection was made:
- lastConnectionTime = millis();
- }
- else {
- // if you couldn't make a connection:
- Serial.println("connection failed");
- Serial.println("disconnecting.");
- client.stop();
- }
-}
-
-
-
-
diff --git a/libraries/Ethernet/examples/WebServer/WebServer.ino b/libraries/Ethernet/examples/WebServer/WebServer.ino
deleted file mode 100644
index 5e5d67a..0000000
--- a/libraries/Ethernet/examples/WebServer/WebServer.ino
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- Web Server
-
- A simple web server that shows the value of the analog input pins.
- using an Arduino Wiznet Ethernet shield.
-
- Circuit:
- * Ethernet shield attached to pins 10, 11, 12, 13
- * Analog inputs attached to pins A0 through A5 (optional)
-
- created 18 Dec 2009
- by David A. Mellis
- modified 9 Apr 2012
- by Tom Igoe
-
- */
-
-#include <SPI.h>
-#include <Ethernet.h>
-
-// Enter a MAC address and IP address for your controller below.
-// The IP address will be dependent on your local network:
-byte mac[] = {
- 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
-IPAddress ip(192,168,1,177);
-
-// Initialize the Ethernet server library
-// with the IP address and port you want to use
-// (port 80 is default for HTTP):
-EthernetServer server(80);
-
-void setup() {
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
-
-
- // start the Ethernet connection and the server:
- Ethernet.begin(mac, ip);
- server.begin();
- Serial.print("server is at ");
- Serial.println(Ethernet.localIP());
-}
-
-
-void loop() {
- // listen for incoming clients
- EthernetClient client = server.available();
- if (client) {
- Serial.println("new client");
- // an http request ends with a blank line
- boolean currentLineIsBlank = true;
- while (client.connected()) {
- if (client.available()) {
- char c = client.read();
- Serial.write(c);
- // if you've gotten to the end of the line (received a newline
- // character) and the line is blank, the http request has ended,
- // so you can send a reply
- if (c == '\n' && currentLineIsBlank) {
- // send a standard http response header
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println("Connection: close"); // the connection will be closed after completion of the response
- client.println("Refresh: 5"); // refresh the page automatically every 5 sec
- client.println();
- client.println("<!DOCTYPE HTML>");
- client.println("<html>");
- // output the value of each analog input pin
- for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
- int sensorReading = analogRead(analogChannel);
- client.print("analog input ");
- client.print(analogChannel);
- client.print(" is ");
- client.print(sensorReading);
- client.println("<br />");
- }
- client.println("</html>");
- break;
- }
- if (c == '\n') {
- // you're starting a new line
- currentLineIsBlank = true;
- }
- else if (c != '\r') {
- // you've gotten a character on the current line
- currentLineIsBlank = false;
- }
- }
- }
- // give the web browser time to receive the data
- delay(1);
- // close the connection:
- client.stop();
- Serial.println("client disonnected");
- }
-}
-
diff --git a/libraries/Ethernet/keywords.txt b/libraries/Ethernet/keywords.txt
deleted file mode 100644
index 6b37cbe..0000000
--- a/libraries/Ethernet/keywords.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-#######################################
-# Syntax Coloring Map For Ethernet
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-Ethernet KEYWORD1
-EthernetClient KEYWORD1
-EthernetServer KEYWORD1
-IPAddress KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-status KEYWORD2
-connect KEYWORD2
-write KEYWORD2
-available KEYWORD2
-read KEYWORD2
-peek KEYWORD2
-flush KEYWORD2
-stop KEYWORD2
-connected KEYWORD2
-begin KEYWORD2
-beginPacket KEYWORD2
-endPacket KEYWORD2
-parsePacket KEYWORD2
-remoteIP KEYWORD2
-remotePort KEYWORD2
-
-#######################################
-# Constants (LITERAL1)
-#######################################
-
diff --git a/libraries/Ethernet/util.h b/libraries/Ethernet/util.h
deleted file mode 100644
index 5042e82..0000000
--- a/libraries/Ethernet/util.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef UTIL_H
-#define UTIL_H
-
-#define htons(x) ( ((x)<<8) | (((x)>>8)&0xFF) )
-#define ntohs(x) htons(x)
-
-#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \
- ((x)<< 8 & 0x00FF0000UL) | \
- ((x)>> 8 & 0x0000FF00UL) | \
- ((x)>>24 & 0x000000FFUL) )
-#define ntohl(x) htonl(x)
-
-#endif
diff --git a/libraries/Ethernet/utility/socket.cpp b/libraries/Ethernet/utility/socket.cpp
deleted file mode 100644
index fd3e442..0000000
--- a/libraries/Ethernet/utility/socket.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-#include "w5100.h"
-#include "socket.h"
-
-static uint16_t local_port;
-
-/**
- * @brief This Socket function initialize the channel in perticular mode, and set the port and wait for W5100 done it.
- * @return 1 for success else 0.
- */
-uint8_t socket(SOCKET s, uint8_t protocol, uint16_t port, uint8_t flag)
-{
- if ((protocol == SnMR::TCP) || (protocol == SnMR::UDP) || (protocol == SnMR::IPRAW) || (protocol == SnMR::MACRAW) || (protocol == SnMR::PPPOE))
- {
- close(s);
- W5100.writeSnMR(s, protocol | flag);
- if (port != 0) {
- W5100.writeSnPORT(s, port);
- }
- else {
- local_port++; // if don't set the source port, set local_port number.
- W5100.writeSnPORT(s, local_port);
- }
-
- W5100.execCmdSn(s, Sock_OPEN);
-
- return 1;
- }
-
- return 0;
-}
-
-
-/**
- * @brief This function close the socket and parameter is "s" which represent the socket number
- */
-void close(SOCKET s)
-{
- W5100.execCmdSn(s, Sock_CLOSE);
- W5100.writeSnIR(s, 0xFF);
-}
-
-
-/**
- * @brief This function established the connection for the channel in passive (server) mode. This function waits for the request from the peer.
- * @return 1 for success else 0.
- */
-uint8_t listen(SOCKET s)
-{
- if (W5100.readSnSR(s) != SnSR::INIT)
- return 0;
- W5100.execCmdSn(s, Sock_LISTEN);
- return 1;
-}
-
-
-/**
- * @brief This function established the connection for the channel in Active (client) mode.
- * This function waits for the untill the connection is established.
- *
- * @return 1 for success else 0.
- */
-uint8_t connect(SOCKET s, uint8_t * addr, uint16_t port)
-{
- if
- (
- ((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||
- ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
- (port == 0x00)
- )
- return 0;
-
- // set destination IP
- W5100.writeSnDIPR(s, addr);
- W5100.writeSnDPORT(s, port);
- W5100.execCmdSn(s, Sock_CONNECT);
-
- return 1;
-}
-
-
-
-/**
- * @brief This function used for disconnect the socket and parameter is "s" which represent the socket number
- * @return 1 for success else 0.
- */
-void disconnect(SOCKET s)
-{
- W5100.execCmdSn(s, Sock_DISCON);
-}
-
-
-/**
- * @brief This function used to send the data in TCP mode
- * @return 1 for success else 0.
- */
-uint16_t send(SOCKET s, const uint8_t * buf, uint16_t len)
-{
- uint8_t status=0;
- uint16_t ret=0;
- uint16_t freesize=0;
-
- if (len > W5100.SSIZE)
- ret = W5100.SSIZE; // check size not to exceed MAX size.
- else
- ret = len;
-
- // if freebuf is available, start.
- do
- {
- freesize = W5100.getTXFreeSize(s);
- status = W5100.readSnSR(s);
- if ((status != SnSR::ESTABLISHED) && (status != SnSR::CLOSE_WAIT))
- {
- ret = 0;
- break;
- }
- }
- while (freesize < ret);
-
- // copy data
- W5100.send_data_processing(s, (uint8_t *)buf, ret);
- W5100.execCmdSn(s, Sock_SEND);
-
- /* +2008.01 bj */
- while ( (W5100.readSnIR(s) & SnIR::SEND_OK) != SnIR::SEND_OK )
- {
- /* m2008.01 [bj] : reduce code */
- if ( W5100.readSnSR(s) == SnSR::CLOSED )
- {
- close(s);
- return 0;
- }
- }
- /* +2008.01 bj */
- W5100.writeSnIR(s, SnIR::SEND_OK);
- return ret;
-}
-
-
-/**
- * @brief This function is an application I/F function which is used to receive the data in TCP mode.
- * It continues to wait for data as much as the application wants to receive.
- *
- * @return received data size for success else -1.
- */
-int16_t recv(SOCKET s, uint8_t *buf, int16_t len)
-{
- // Check how much data is available
- int16_t ret = W5100.getRXReceivedSize(s);
- if ( ret == 0 )
- {
- // No data available.
- uint8_t status = W5100.readSnSR(s);
- if ( status == SnSR::LISTEN || status == SnSR::CLOSED || status == SnSR::CLOSE_WAIT )
- {
- // The remote end has closed its side of the connection, so this is the eof state
- ret = 0;
- }
- else
- {
- // The connection is still up, but there's no data waiting to be read
- ret = -1;
- }
- }
- else if (ret > len)
- {
- ret = len;
- }
-
- if ( ret > 0 )
- {
- W5100.recv_data_processing(s, buf, ret);
- W5100.execCmdSn(s, Sock_RECV);
- }
- return ret;
-}
-
-
-/**
- * @brief Returns the first byte in the receive queue (no checking)
- *
- * @return
- */
-uint16_t peek(SOCKET s, uint8_t *buf)
-{
- W5100.recv_data_processing(s, buf, 1, 1);
-
- return 1;
-}
-
-
-/**
- * @brief This function is an application I/F function which is used to send the data for other then TCP mode.
- * Unlike TCP transmission, The peer's destination address and the port is needed.
- *
- * @return This function return send data size for success else -1.
- */
-uint16_t sendto(SOCKET s, const uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t port)
-{
- uint16_t ret=0;
-
- if (len > W5100.SSIZE) ret = W5100.SSIZE; // check size not to exceed MAX size.
- else ret = len;
-
- if
- (
- ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
- ((port == 0x00)) ||(ret == 0)
- )
- {
- /* +2008.01 [bj] : added return value */
- ret = 0;
- }
- else
- {
- W5100.writeSnDIPR(s, addr);
- W5100.writeSnDPORT(s, port);
-
- // copy data
- W5100.send_data_processing(s, (uint8_t *)buf, ret);
- W5100.execCmdSn(s, Sock_SEND);
-
- /* +2008.01 bj */
- while ( (W5100.readSnIR(s) & SnIR::SEND_OK) != SnIR::SEND_OK )
- {
- if (W5100.readSnIR(s) & SnIR::TIMEOUT)
- {
- /* +2008.01 [bj]: clear interrupt */
- W5100.writeSnIR(s, (SnIR::SEND_OK | SnIR::TIMEOUT)); /* clear SEND_OK & TIMEOUT */
- return 0;
- }
- }
-
- /* +2008.01 bj */
- W5100.writeSnIR(s, SnIR::SEND_OK);
- }
- return ret;
-}
-
-
-/**
- * @brief This function is an application I/F function which is used to receive the data in other then
- * TCP mode. This function is used to receive UDP, IP_RAW and MAC_RAW mode, and handle the header as well.
- *
- * @return This function return received data size for success else -1.
- */
-uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t *port)
-{
- uint8_t head[8];
- uint16_t data_len=0;
- uint16_t ptr=0;
-
- if ( len > 0 )
- {
- ptr = W5100.readSnRX_RD(s);
- switch (W5100.readSnMR(s) & 0x07)
- {
- case SnMR::UDP :
- W5100.read_data(s, (uint8_t *)ptr, head, 0x08);
- ptr += 8;
- // read peer's IP address, port number.
- addr[0] = head[0];
- addr[1] = head[1];
- addr[2] = head[2];
- addr[3] = head[3];
- *port = head[4];
- *port = (*port << 8) + head[5];
- data_len = head[6];
- data_len = (data_len << 8) + head[7];
-
- W5100.read_data(s, (uint8_t *)ptr, buf, data_len); // data copy.
- ptr += data_len;
-
- W5100.writeSnRX_RD(s, ptr);
- break;
-
- case SnMR::IPRAW :
- W5100.read_data(s, (uint8_t *)ptr, head, 0x06);
- ptr += 6;
-
- addr[0] = head[0];
- addr[1] = head[1];
- addr[2] = head[2];
- addr[3] = head[3];
- data_len = head[4];
- data_len = (data_len << 8) + head[5];
-
- W5100.read_data(s, (uint8_t *)ptr, buf, data_len); // data copy.
- ptr += data_len;
-
- W5100.writeSnRX_RD(s, ptr);
- break;
-
- case SnMR::MACRAW:
- W5100.read_data(s,(uint8_t*)ptr,head,2);
- ptr+=2;
- data_len = head[0];
- data_len = (data_len<<8) + head[1] - 2;
-
- W5100.read_data(s,(uint8_t*) ptr,buf,data_len);
- ptr += data_len;
- W5100.writeSnRX_RD(s, ptr);
- break;
-
- default :
- break;
- }
- W5100.execCmdSn(s, Sock_RECV);
- }
- return data_len;
-}
-
-
-uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len)
-{
- uint8_t status=0;
- uint16_t ret=0;
-
- if (len > W5100.SSIZE)
- ret = W5100.SSIZE; // check size not to exceed MAX size.
- else
- ret = len;
-
- if (ret == 0)
- return 0;
-
- W5100.send_data_processing(s, (uint8_t *)buf, ret);
- W5100.execCmdSn(s, Sock_SEND);
-
- while ( (W5100.readSnIR(s) & SnIR::SEND_OK) != SnIR::SEND_OK )
- {
- status = W5100.readSnSR(s);
- if (W5100.readSnIR(s) & SnIR::TIMEOUT)
- {
- /* in case of igmp, if send fails, then socket closed */
- /* if you want change, remove this code. */
- close(s);
- return 0;
- }
- }
-
- W5100.writeSnIR(s, SnIR::SEND_OK);
- return ret;
-}
-
-uint16_t bufferData(SOCKET s, uint16_t offset, const uint8_t* buf, uint16_t len)
-{
- uint16_t ret =0;
- if (len > W5100.getTXFreeSize(s))
- {
- ret = W5100.getTXFreeSize(s); // check size not to exceed MAX size.
- }
- else
- {
- ret = len;
- }
- W5100.send_data_processing_offset(s, offset, buf, ret);
- return ret;
-}
-
-int startUDP(SOCKET s, uint8_t* addr, uint16_t port)
-{
- if
- (
- ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
- ((port == 0x00))
- )
- {
- return 0;
- }
- else
- {
- W5100.writeSnDIPR(s, addr);
- W5100.writeSnDPORT(s, port);
- return 1;
- }
-}
-
-int sendUDP(SOCKET s)
-{
- W5100.execCmdSn(s, Sock_SEND);
-
- /* +2008.01 bj */
- while ( (W5100.readSnIR(s) & SnIR::SEND_OK) != SnIR::SEND_OK )
- {
- if (W5100.readSnIR(s) & SnIR::TIMEOUT)
- {
- /* +2008.01 [bj]: clear interrupt */
- W5100.writeSnIR(s, (SnIR::SEND_OK|SnIR::TIMEOUT));
- return 0;
- }
- }
-
- /* +2008.01 bj */
- W5100.writeSnIR(s, SnIR::SEND_OK);
-
- /* Sent ok */
- return 1;
-}
-
diff --git a/libraries/Ethernet/utility/socket.h b/libraries/Ethernet/utility/socket.h
deleted file mode 100644
index 45e0fb3..0000000
--- a/libraries/Ethernet/utility/socket.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef _SOCKET_H_
-#define _SOCKET_H_
-
-#include "w5100.h"
-
-extern uint8_t socket(SOCKET s, uint8_t protocol, uint16_t port, uint8_t flag); // Opens a socket(TCP or UDP or IP_RAW mode)
-extern void close(SOCKET s); // Close socket
-extern uint8_t connect(SOCKET s, uint8_t * addr, uint16_t port); // Establish TCP connection (Active connection)
-extern void disconnect(SOCKET s); // disconnect the connection
-extern uint8_t listen(SOCKET s); // Establish TCP connection (Passive connection)
-extern uint16_t send(SOCKET s, const uint8_t * buf, uint16_t len); // Send data (TCP)
-extern int16_t recv(SOCKET s, uint8_t * buf, int16_t len); // Receive data (TCP)
-extern uint16_t peek(SOCKET s, uint8_t *buf);
-extern uint16_t sendto(SOCKET s, const uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port); // Send data (UDP/IP RAW)
-extern uint16_t recvfrom(SOCKET s, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port); // Receive data (UDP/IP RAW)
-
-extern uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len);
-
-// Functions to allow buffered UDP send (i.e. where the UDP datagram is built up over a
-// number of calls before being sent
-/*
- @brief This function sets up a UDP datagram, the data for which will be provided by one
- or more calls to bufferData and then finally sent with sendUDP.
- @return 1 if the datagram was successfully set up, or 0 if there was an error
-*/
-extern int startUDP(SOCKET s, uint8_t* addr, uint16_t port);
-/*
- @brief This function copies up to len bytes of data from buf into a UDP datagram to be
- sent later by sendUDP. Allows datagrams to be built up from a series of bufferData calls.
- @return Number of bytes successfully buffered
-*/
-uint16_t bufferData(SOCKET s, uint16_t offset, const uint8_t* buf, uint16_t len);
-/*
- @brief Send a UDP datagram built up from a sequence of startUDP followed by one or more
- calls to bufferData.
- @return 1 if the datagram was successfully sent, or 0 if there was an error
-*/
-int sendUDP(SOCKET s);
-
-#endif
-/* _SOCKET_H_ */
diff --git a/libraries/Ethernet/utility/w5100.cpp b/libraries/Ethernet/utility/w5100.cpp
deleted file mode 100644
index 9c748fd..0000000
--- a/libraries/Ethernet/utility/w5100.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2010 by Cristian Maglie <c.maglie@bug.st>
- *
- * This file is free software; you can redistribute it and/or modify
- * it under the terms of either the GNU General Public License version 2
- * or the GNU Lesser General Public License version 2.1, both as
- * published by the Free Software Foundation.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <avr/interrupt.h>
-
-#include "w5100.h"
-
-// W5100 controller instance
-W5100Class W5100;
-
-#define TX_RX_MAX_BUF_SIZE 2048
-#define TX_BUF 0x1100
-#define RX_BUF (TX_BUF + TX_RX_MAX_BUF_SIZE)
-
-#define TXBUF_BASE 0x4000
-#define RXBUF_BASE 0x6000
-
-void W5100Class::init(void)
-{
- delay(300);
-
- SPI.begin();
- initSS();
-
- writeMR(1<<RST);
- writeTMSR(0x55);
- writeRMSR(0x55);
-
- for (int i=0; i<MAX_SOCK_NUM; i++) {
- SBASE[i] = TXBUF_BASE + SSIZE * i;
- RBASE[i] = RXBUF_BASE + RSIZE * i;
- }
-}
-
-uint16_t W5100Class::getTXFreeSize(SOCKET s)
-{
- uint16_t val=0, val1=0;
- do {
- val1 = readSnTX_FSR(s);
- if (val1 != 0)
- val = readSnTX_FSR(s);
- }
- while (val != val1);
- return val;
-}
-
-uint16_t W5100Class::getRXReceivedSize(SOCKET s)
-{
- uint16_t val=0,val1=0;
- do {
- val1 = readSnRX_RSR(s);
- if (val1 != 0)
- val = readSnRX_RSR(s);
- }
- while (val != val1);
- return val;
-}
-
-
-void W5100Class::send_data_processing(SOCKET s, const uint8_t *data, uint16_t len)
-{
- // This is same as having no offset in a call to send_data_processing_offset
- send_data_processing_offset(s, 0, data, len);
-}
-
-void W5100Class::send_data_processing_offset(SOCKET s, uint16_t data_offset, const uint8_t *data, uint16_t len)
-{
- uint16_t ptr = readSnTX_WR(s);
- ptr += data_offset;
- uint16_t offset = ptr & SMASK;
- uint16_t dstAddr = offset + SBASE[s];
-
- if (offset + len > SSIZE)
- {
- // Wrap around circular buffer
- uint16_t size = SSIZE - offset;
- write(dstAddr, data, size);
- write(SBASE[s], data + size, len - size);
- }
- else {
- write(dstAddr, data, len);
- }
-
- ptr += len;
- writeSnTX_WR(s, ptr);
-}
-
-
-void W5100Class::recv_data_processing(SOCKET s, uint8_t *data, uint16_t len, uint8_t peek)
-{
- uint16_t ptr;
- ptr = readSnRX_RD(s);
- read_data(s, (uint8_t *)ptr, data, len);
- if (!peek)
- {
- ptr += len;
- writeSnRX_RD(s, ptr);
- }
-}
-
-void W5100Class::read_data(SOCKET s, volatile uint8_t *src, volatile uint8_t *dst, uint16_t len)
-{
- uint16_t size;
- uint16_t src_mask;
- uint16_t src_ptr;
-
- src_mask = (uint16_t)src & RMASK;
- src_ptr = RBASE[s] + src_mask;
-
- if( (src_mask + len) > RSIZE )
- {
- size = RSIZE - src_mask;
- read(src_ptr, (uint8_t *)dst, size);
- dst += size;
- read(RBASE[s], (uint8_t *) dst, len - size);
- }
- else
- read(src_ptr, (uint8_t *) dst, len);
-}
-
-
-uint8_t W5100Class::write(uint16_t _addr, uint8_t _data)
-{
- setSS();
- SPI.transfer(0xF0);
- SPI.transfer(_addr >> 8);
- SPI.transfer(_addr & 0xFF);
- SPI.transfer(_data);
- resetSS();
- return 1;
-}
-
-uint16_t W5100Class::write(uint16_t _addr, const uint8_t *_buf, uint16_t _len)
-{
- for (uint16_t i=0; i<_len; i++)
- {
- setSS();
- SPI.transfer(0xF0);
- SPI.transfer(_addr >> 8);
- SPI.transfer(_addr & 0xFF);
- _addr++;
- SPI.transfer(_buf[i]);
- resetSS();
- }
- return _len;
-}
-
-uint8_t W5100Class::read(uint16_t _addr)
-{
- setSS();
- SPI.transfer(0x0F);
- SPI.transfer(_addr >> 8);
- SPI.transfer(_addr & 0xFF);
- uint8_t _data = SPI.transfer(0);
- resetSS();
- return _data;
-}
-
-uint16_t W5100Class::read(uint16_t _addr, uint8_t *_buf, uint16_t _len)
-{
- for (uint16_t i=0; i<_len; i++)
- {
- setSS();
- SPI.transfer(0x0F);
- SPI.transfer(_addr >> 8);
- SPI.transfer(_addr & 0xFF);
- _addr++;
- _buf[i] = SPI.transfer(0);
- resetSS();
- }
- return _len;
-}
-
-void W5100Class::execCmdSn(SOCKET s, SockCMD _cmd) {
- // Send command to socket
- writeSnCR(s, _cmd);
- // Wait for command to complete
- while (readSnCR(s))
- ;
-}
diff --git a/libraries/Ethernet/utility/w5100.h b/libraries/Ethernet/utility/w5100.h
deleted file mode 100644
index 8dccd9f..0000000
--- a/libraries/Ethernet/utility/w5100.h
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Copyright (c) 2010 by Cristian Maglie <c.maglie@bug.st>
- *
- * This file is free software; you can redistribute it and/or modify
- * it under the terms of either the GNU General Public License version 2
- * or the GNU Lesser General Public License version 2.1, both as
- * published by the Free Software Foundation.
- */
-
-#ifndef W5100_H_INCLUDED
-#define W5100_H_INCLUDED
-
-#include <avr/pgmspace.h>
-#include <SPI.h>
-
-#define MAX_SOCK_NUM 4
-
-typedef uint8_t SOCKET;
-
-#define IDM_OR 0x8000
-#define IDM_AR0 0x8001
-#define IDM_AR1 0x8002
-#define IDM_DR 0x8003
-/*
-class MR {
-public:
- static const uint8_t RST = 0x80;
- static const uint8_t PB = 0x10;
- static const uint8_t PPPOE = 0x08;
- static const uint8_t LB = 0x04;
- static const uint8_t AI = 0x02;
- static const uint8_t IND = 0x01;
-};
-*/
-/*
-class IR {
-public:
- static const uint8_t CONFLICT = 0x80;
- static const uint8_t UNREACH = 0x40;
- static const uint8_t PPPoE = 0x20;
- static const uint8_t SOCK0 = 0x01;
- static const uint8_t SOCK1 = 0x02;
- static const uint8_t SOCK2 = 0x04;
- static const uint8_t SOCK3 = 0x08;
- static inline uint8_t SOCK(SOCKET ch) { return (0x01 << ch); };
-};
-*/
-
-class SnMR {
-public:
- static const uint8_t CLOSE = 0x00;
- static const uint8_t TCP = 0x01;
- static const uint8_t UDP = 0x02;
- static const uint8_t IPRAW = 0x03;
- static const uint8_t MACRAW = 0x04;
- static const uint8_t PPPOE = 0x05;
- static const uint8_t ND = 0x20;
- static const uint8_t MULTI = 0x80;
-};
-
-enum SockCMD {
- Sock_OPEN = 0x01,
- Sock_LISTEN = 0x02,
- Sock_CONNECT = 0x04,
- Sock_DISCON = 0x08,
- Sock_CLOSE = 0x10,
- Sock_SEND = 0x20,
- Sock_SEND_MAC = 0x21,
- Sock_SEND_KEEP = 0x22,
- Sock_RECV = 0x40
-};
-
-/*class SnCmd {
-public:
- static const uint8_t OPEN = 0x01;
- static const uint8_t LISTEN = 0x02;
- static const uint8_t CONNECT = 0x04;
- static const uint8_t DISCON = 0x08;
- static const uint8_t CLOSE = 0x10;
- static const uint8_t SEND = 0x20;
- static const uint8_t SEND_MAC = 0x21;
- static const uint8_t SEND_KEEP = 0x22;
- static const uint8_t RECV = 0x40;
-};
-*/
-
-class SnIR {
-public:
- static const uint8_t SEND_OK = 0x10;
- static const uint8_t TIMEOUT = 0x08;
- static const uint8_t RECV = 0x04;
- static const uint8_t DISCON = 0x02;
- static const uint8_t CON = 0x01;
-};
-
-class SnSR {
-public:
- static const uint8_t CLOSED = 0x00;
- static const uint8_t INIT = 0x13;
- static const uint8_t LISTEN = 0x14;
- static const uint8_t SYNSENT = 0x15;
- static const uint8_t SYNRECV = 0x16;
- static const uint8_t ESTABLISHED = 0x17;
- static const uint8_t FIN_WAIT = 0x18;
- static const uint8_t CLOSING = 0x1A;
- static const uint8_t TIME_WAIT = 0x1B;
- static const uint8_t CLOSE_WAIT = 0x1C;
- static const uint8_t LAST_ACK = 0x1D;
- static const uint8_t UDP = 0x22;
- static const uint8_t IPRAW = 0x32;
- static const uint8_t MACRAW = 0x42;
- static const uint8_t PPPOE = 0x5F;
-};
-
-class IPPROTO {
-public:
- static const uint8_t IP = 0;
- static const uint8_t ICMP = 1;
- static const uint8_t IGMP = 2;
- static const uint8_t GGP = 3;
- static const uint8_t TCP = 6;
- static const uint8_t PUP = 12;
- static const uint8_t UDP = 17;
- static const uint8_t IDP = 22;
- static const uint8_t ND = 77;
- static const uint8_t RAW = 255;
-};
-
-class W5100Class {
-
-public:
- void init();
-
- /**
- * @brief This function is being used for copy the data form Receive buffer of the chip to application buffer.
- *
- * It calculate the actual physical address where one has to read
- * the data from Receive buffer. Here also take care of the condition while it exceed
- * the Rx memory uper-bound of socket.
- */
- void read_data(SOCKET s, volatile uint8_t * src, volatile uint8_t * dst, uint16_t len);
-
- /**
- * @brief This function is being called by send() and sendto() function also.
- *
- * This function read the Tx write pointer register and after copy the data in buffer update the Tx write pointer
- * register. User should read upper byte first and lower byte later to get proper value.
- */
- void send_data_processing(SOCKET s, const uint8_t *data, uint16_t len);
- /**
- * @brief A copy of send_data_processing that uses the provided ptr for the
- * write offset. Only needed for the "streaming" UDP API, where
- * a single UDP packet is built up over a number of calls to
- * send_data_processing_ptr, because TX_WR doesn't seem to get updated
- * correctly in those scenarios
- * @param ptr value to use in place of TX_WR. If 0, then the value is read
- * in from TX_WR
- * @return New value for ptr, to be used in the next call
- */
-// FIXME Update documentation
- void send_data_processing_offset(SOCKET s, uint16_t data_offset, const uint8_t *data, uint16_t len);
-
- /**
- * @brief This function is being called by recv() also.
- *
- * This function read the Rx read pointer register
- * and after copy the data from receive buffer update the Rx write pointer register.
- * User should read upper byte first and lower byte later to get proper value.
- */
- void recv_data_processing(SOCKET s, uint8_t *data, uint16_t len, uint8_t peek = 0);
-
- inline void setGatewayIp(uint8_t *_addr);
- inline void getGatewayIp(uint8_t *_addr);
-
- inline void setSubnetMask(uint8_t *_addr);
- inline void getSubnetMask(uint8_t *_addr);
-
- inline void setMACAddress(uint8_t * addr);
- inline void getMACAddress(uint8_t * addr);
-
- inline void setIPAddress(uint8_t * addr);
- inline void getIPAddress(uint8_t * addr);
-
- inline void setRetransmissionTime(uint16_t timeout);
- inline void setRetransmissionCount(uint8_t _retry);
-
- void execCmdSn(SOCKET s, SockCMD _cmd);
-
- uint16_t getTXFreeSize(SOCKET s);
- uint16_t getRXReceivedSize(SOCKET s);
-
-
- // W5100 Registers
- // ---------------
-private:
- static uint8_t write(uint16_t _addr, uint8_t _data);
- static uint16_t write(uint16_t addr, const uint8_t *buf, uint16_t len);
- static uint8_t read(uint16_t addr);
- static uint16_t read(uint16_t addr, uint8_t *buf, uint16_t len);
-
-#define __GP_REGISTER8(name, address) \
- static inline void write##name(uint8_t _data) { \
- write(address, _data); \
- } \
- static inline uint8_t read##name() { \
- return read(address); \
- }
-#define __GP_REGISTER16(name, address) \
- static void write##name(uint16_t _data) { \
- write(address, _data >> 8); \
- write(address+1, _data & 0xFF); \
- } \
- static uint16_t read##name() { \
- uint16_t res = read(address); \
- res = (res << 8) + read(address + 1); \
- return res; \
- }
-#define __GP_REGISTER_N(name, address, size) \
- static uint16_t write##name(uint8_t *_buff) { \
- return write(address, _buff, size); \
- } \
- static uint16_t read##name(uint8_t *_buff) { \
- return read(address, _buff, size); \
- }
-
-public:
- __GP_REGISTER8 (MR, 0x0000); // Mode
- __GP_REGISTER_N(GAR, 0x0001, 4); // Gateway IP address
- __GP_REGISTER_N(SUBR, 0x0005, 4); // Subnet mask address
- __GP_REGISTER_N(SHAR, 0x0009, 6); // Source MAC address
- __GP_REGISTER_N(SIPR, 0x000F, 4); // Source IP address
- __GP_REGISTER8 (IR, 0x0015); // Interrupt
- __GP_REGISTER8 (IMR, 0x0016); // Interrupt Mask
- __GP_REGISTER16(RTR, 0x0017); // Timeout address
- __GP_REGISTER8 (RCR, 0x0019); // Retry count
- __GP_REGISTER8 (RMSR, 0x001A); // Receive memory size
- __GP_REGISTER8 (TMSR, 0x001B); // Transmit memory size
- __GP_REGISTER8 (PATR, 0x001C); // Authentication type address in PPPoE mode
- __GP_REGISTER8 (PTIMER, 0x0028); // PPP LCP Request Timer
- __GP_REGISTER8 (PMAGIC, 0x0029); // PPP LCP Magic Number
- __GP_REGISTER_N(UIPR, 0x002A, 4); // Unreachable IP address in UDP mode
- __GP_REGISTER16(UPORT, 0x002E); // Unreachable Port address in UDP mode
-
-#undef __GP_REGISTER8
-#undef __GP_REGISTER16
-#undef __GP_REGISTER_N
-
- // W5100 Socket registers
- // ----------------------
-private:
- static inline uint8_t readSn(SOCKET _s, uint16_t _addr);
- static inline uint8_t writeSn(SOCKET _s, uint16_t _addr, uint8_t _data);
- static inline uint16_t readSn(SOCKET _s, uint16_t _addr, uint8_t *_buf, uint16_t len);
- static inline uint16_t writeSn(SOCKET _s, uint16_t _addr, uint8_t *_buf, uint16_t len);
-
- static const uint16_t CH_BASE = 0x0400;
- static const uint16_t CH_SIZE = 0x0100;
-
-#define __SOCKET_REGISTER8(name, address) \
- static inline void write##name(SOCKET _s, uint8_t _data) { \
- writeSn(_s, address, _data); \
- } \
- static inline uint8_t read##name(SOCKET _s) { \
- return readSn(_s, address); \
- }
-#define __SOCKET_REGISTER16(name, address) \
- static void write##name(SOCKET _s, uint16_t _data) { \
- writeSn(_s, address, _data >> 8); \
- writeSn(_s, address+1, _data & 0xFF); \
- } \
- static uint16_t read##name(SOCKET _s) { \
- uint16_t res = readSn(_s, address); \
- uint16_t res2 = readSn(_s,address + 1); \
- res = res << 8; \
- res2 = res2 & 0xFF; \
- res = res | res2; \
- return res; \
- }
-#define __SOCKET_REGISTER_N(name, address, size) \
- static uint16_t write##name(SOCKET _s, uint8_t *_buff) { \
- return writeSn(_s, address, _buff, size); \
- } \
- static uint16_t read##name(SOCKET _s, uint8_t *_buff) { \
- return readSn(_s, address, _buff, size); \
- }
-
-public:
- __SOCKET_REGISTER8(SnMR, 0x0000) // Mode
- __SOCKET_REGISTER8(SnCR, 0x0001) // Command
- __SOCKET_REGISTER8(SnIR, 0x0002) // Interrupt
- __SOCKET_REGISTER8(SnSR, 0x0003) // Status
- __SOCKET_REGISTER16(SnPORT, 0x0004) // Source Port
- __SOCKET_REGISTER_N(SnDHAR, 0x0006, 6) // Destination Hardw Addr
- __SOCKET_REGISTER_N(SnDIPR, 0x000C, 4) // Destination IP Addr
- __SOCKET_REGISTER16(SnDPORT, 0x0010) // Destination Port
- __SOCKET_REGISTER16(SnMSSR, 0x0012) // Max Segment Size
- __SOCKET_REGISTER8(SnPROTO, 0x0014) // Protocol in IP RAW Mode
- __SOCKET_REGISTER8(SnTOS, 0x0015) // IP TOS
- __SOCKET_REGISTER8(SnTTL, 0x0016) // IP TTL
- __SOCKET_REGISTER16(SnTX_FSR, 0x0020) // TX Free Size
- __SOCKET_REGISTER16(SnTX_RD, 0x0022) // TX Read Pointer
- __SOCKET_REGISTER16(SnTX_WR, 0x0024) // TX Write Pointer
- __SOCKET_REGISTER16(SnRX_RSR, 0x0026) // RX Free Size
- __SOCKET_REGISTER16(SnRX_RD, 0x0028) // RX Read Pointer
- __SOCKET_REGISTER16(SnRX_WR, 0x002A) // RX Write Pointer (supported?)
-
-#undef __SOCKET_REGISTER8
-#undef __SOCKET_REGISTER16
-#undef __SOCKET_REGISTER_N
-
-
-private:
- static const uint8_t RST = 7; // Reset BIT
-
- static const int SOCKETS = 4;
- static const uint16_t SMASK = 0x07FF; // Tx buffer MASK
- static const uint16_t RMASK = 0x07FF; // Rx buffer MASK
-public:
- static const uint16_t SSIZE = 2048; // Max Tx buffer size
-private:
- static const uint16_t RSIZE = 2048; // Max Rx buffer size
- uint16_t SBASE[SOCKETS]; // Tx buffer base address
- uint16_t RBASE[SOCKETS]; // Rx buffer base address
-
-private:
-#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- inline static void initSS() { DDRB |= _BV(4); };
- inline static void setSS() { PORTB &= ~_BV(4); };
- inline static void resetSS() { PORTB |= _BV(4); };
-#elif defined(__AVR_ATmega32U4__)
- inline static void initSS() { DDRB |= _BV(6); };
- inline static void setSS() { PORTB &= ~_BV(6); };
- inline static void resetSS() { PORTB |= _BV(6); };
-#elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB162__)
- inline static void initSS() { DDRB |= _BV(0); };
- inline static void setSS() { PORTB &= ~_BV(0); };
- inline static void resetSS() { PORTB |= _BV(0); };
-#else
- inline static void initSS() { DDRB |= _BV(2); };
- inline static void setSS() { PORTB &= ~_BV(2); };
- inline static void resetSS() { PORTB |= _BV(2); };
-#endif
-
-};
-
-extern W5100Class W5100;
-
-uint8_t W5100Class::readSn(SOCKET _s, uint16_t _addr) {
- return read(CH_BASE + _s * CH_SIZE + _addr);
-}
-
-uint8_t W5100Class::writeSn(SOCKET _s, uint16_t _addr, uint8_t _data) {
- return write(CH_BASE + _s * CH_SIZE + _addr, _data);
-}
-
-uint16_t W5100Class::readSn(SOCKET _s, uint16_t _addr, uint8_t *_buf, uint16_t _len) {
- return read(CH_BASE + _s * CH_SIZE + _addr, _buf, _len);
-}
-
-uint16_t W5100Class::writeSn(SOCKET _s, uint16_t _addr, uint8_t *_buf, uint16_t _len) {
- return write(CH_BASE + _s * CH_SIZE + _addr, _buf, _len);
-}
-
-void W5100Class::getGatewayIp(uint8_t *_addr) {
- readGAR(_addr);
-}
-
-void W5100Class::setGatewayIp(uint8_t *_addr) {
- writeGAR(_addr);
-}
-
-void W5100Class::getSubnetMask(uint8_t *_addr) {
- readSUBR(_addr);
-}
-
-void W5100Class::setSubnetMask(uint8_t *_addr) {
- writeSUBR(_addr);
-}
-
-void W5100Class::getMACAddress(uint8_t *_addr) {
- readSHAR(_addr);
-}
-
-void W5100Class::setMACAddress(uint8_t *_addr) {
- writeSHAR(_addr);
-}
-
-void W5100Class::getIPAddress(uint8_t *_addr) {
- readSIPR(_addr);
-}
-
-void W5100Class::setIPAddress(uint8_t *_addr) {
- writeSIPR(_addr);
-}
-
-void W5100Class::setRetransmissionTime(uint16_t _timeout) {
- writeRTR(_timeout);
-}
-
-void W5100Class::setRetransmissionCount(uint8_t _retry) {
- writeRCR(_retry);
-}
-
-#endif
diff --git a/libraries/Servo/Servo.cpp b/libraries/Servo/Servo.cpp
deleted file mode 100644
index a17ed34..0000000
--- a/libraries/Servo/Servo.cpp
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- Servo.cpp - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2
- Copyright (c) 2009 Michael Margolis. All right reserved.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/*
-
- A servo is activated by creating an instance of the Servo class passing the desired pin to the attach() method.
- The servos are pulsed in the background using the value most recently written using the write() method
-
- Note that analogWrite of PWM on pins associated with the timer are disabled when the first servo is attached.
- Timers are seized as needed in groups of 12 servos - 24 servos use two timers, 48 servos will use four.
-
- The methods are:
-
- Servo - Class for manipulating servo motors connected to Arduino pins.
-
- attach(pin ) - Attaches a servo motor to an i/o pin.
- attach(pin, min, max ) - Attaches to a pin setting min and max values in microseconds
- default min is 544, max is 2400
-
- write() - Sets the servo angle in degrees. (invalid angle that is valid as pulse in microseconds is treated as microseconds)
- writeMicroseconds() - Sets the servo pulse width in microseconds
- read() - Gets the last written servo pulse width as an angle between 0 and 180.
- readMicroseconds() - Gets the last written servo pulse width in microseconds. (was read_us() in first release)
- attached() - Returns true if there is a servo attached.
- detach() - Stops an attached servos from pulsing its i/o pin.
-
-*/
-
-#include <avr/interrupt.h>
-#include <Arduino.h>
-
-#include "Servo.h"
-
-#define usToTicks(_us) (( clockCyclesPerMicrosecond()* _us) / 8) // converts microseconds to tick (assumes prescale of 8) // 12 Aug 2009
-#define ticksToUs(_ticks) (( (unsigned)_ticks * 8)/ clockCyclesPerMicrosecond() ) // converts from ticks back to microseconds
-
-
-#define TRIM_DURATION 2 // compensation ticks to trim adjust for digitalWrite delays // 12 August 2009
-
-//#define NBR_TIMERS (MAX_SERVOS / SERVOS_PER_TIMER)
-
-static servo_t servos[MAX_SERVOS]; // static array of servo structures
-static volatile int8_t Channel[_Nbr_16timers ]; // counter for the servo being pulsed for each timer (or -1 if refresh interval)
-
-uint8_t ServoCount = 0; // the total number of attached servos
-
-
-// convenience macros
-#define SERVO_INDEX_TO_TIMER(_servo_nbr) ((timer16_Sequence_t)(_servo_nbr / SERVOS_PER_TIMER)) // returns the timer controlling this servo
-#define SERVO_INDEX_TO_CHANNEL(_servo_nbr) (_servo_nbr % SERVOS_PER_TIMER) // returns the index of the servo on this timer
-#define SERVO_INDEX(_timer,_channel) ((_timer*SERVOS_PER_TIMER) + _channel) // macro to access servo index by timer and channel
-#define SERVO(_timer,_channel) (servos[SERVO_INDEX(_timer,_channel)]) // macro to access servo class by timer and channel
-
-#define SERVO_MIN() (MIN_PULSE_WIDTH - this->min * 4) // minimum value in uS for this servo
-#define SERVO_MAX() (MAX_PULSE_WIDTH - this->max * 4) // maximum value in uS for this servo
-
-/************ static functions common to all instances ***********************/
-
-static inline void handle_interrupts(timer16_Sequence_t timer, volatile uint16_t *TCNTn, volatile uint16_t* OCRnA)
-{
- if( Channel[timer] < 0 )
- *TCNTn = 0; // channel set to -1 indicated that refresh interval completed so reset the timer
- else{
- if( SERVO_INDEX(timer,Channel[timer]) < ServoCount && SERVO(timer,Channel[timer]).Pin.isActive == true )
- digitalWrite( SERVO(timer,Channel[timer]).Pin.nbr,LOW); // pulse this channel low if activated
- }
-
- Channel[timer]++; // increment to the next channel
- if( SERVO_INDEX(timer,Channel[timer]) < ServoCount && Channel[timer] < SERVOS_PER_TIMER) {
- *OCRnA = *TCNTn + SERVO(timer,Channel[timer]).ticks;
- if(SERVO(timer,Channel[timer]).Pin.isActive == true) // check if activated
- digitalWrite( SERVO(timer,Channel[timer]).Pin.nbr,HIGH); // its an active channel so pulse it high
- }
- else {
- // finished all channels so wait for the refresh period to expire before starting over
- if( ((unsigned)*TCNTn) + 4 < usToTicks(REFRESH_INTERVAL) ) // allow a few ticks to ensure the next OCR1A not missed
- *OCRnA = (unsigned int)usToTicks(REFRESH_INTERVAL);
- else
- *OCRnA = *TCNTn + 4; // at least REFRESH_INTERVAL has elapsed
- Channel[timer] = -1; // this will get incremented at the end of the refresh period to start again at the first channel
- }
-}
-
-#ifndef WIRING // Wiring pre-defines signal handlers so don't define any if compiling for the Wiring platform
-// Interrupt handlers for Arduino
-#if defined(_useTimer1)
-ISR(TIMER1_COMPA_vect)
-{
- handle_interrupts(_timer1, &TCNT1, &OCR1A);
-}
-#endif
-
-#if defined(_useTimer3)
-ISR(TIMER3_COMPA_vect)
-{
- handle_interrupts(_timer3, &TCNT3, &OCR3A);
-}
-#endif
-
-#if defined(_useTimer4)
-ISR(TIMER4_COMPA_vect)
-{
- handle_interrupts(_timer4, &TCNT4, &OCR4A);
-}
-#endif
-
-#if defined(_useTimer5)
-ISR(TIMER5_COMPA_vect)
-{
- handle_interrupts(_timer5, &TCNT5, &OCR5A);
-}
-#endif
-
-#elif defined WIRING
-// Interrupt handlers for Wiring
-#if defined(_useTimer1)
-void Timer1Service()
-{
- handle_interrupts(_timer1, &TCNT1, &OCR1A);
-}
-#endif
-#if defined(_useTimer3)
-void Timer3Service()
-{
- handle_interrupts(_timer3, &TCNT3, &OCR3A);
-}
-#endif
-#endif
-
-
-static void initISR(timer16_Sequence_t timer)
-{
-#if defined (_useTimer1)
- if(timer == _timer1) {
- TCCR1A = 0; // normal counting mode
- TCCR1B = _BV(CS11); // set prescaler of 8
- TCNT1 = 0; // clear the timer count
-#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
- TIFR |= _BV(OCF1A); // clear any pending interrupts;
- TIMSK |= _BV(OCIE1A) ; // enable the output compare interrupt
-#else
- // here if not ATmega8 or ATmega128
- TIFR1 |= _BV(OCF1A); // clear any pending interrupts;
- TIMSK1 |= _BV(OCIE1A) ; // enable the output compare interrupt
-#endif
-#if defined(WIRING)
- timerAttach(TIMER1OUTCOMPAREA_INT, Timer1Service);
-#endif
- }
-#endif
-
-#if defined (_useTimer3)
- if(timer == _timer3) {
- TCCR3A = 0; // normal counting mode
- TCCR3B = _BV(CS31); // set prescaler of 8
- TCNT3 = 0; // clear the timer count
-#if defined(__AVR_ATmega128__)
- TIFR |= _BV(OCF3A); // clear any pending interrupts;
- ETIMSK |= _BV(OCIE3A); // enable the output compare interrupt
-#else
- TIFR3 = _BV(OCF3A); // clear any pending interrupts;
- TIMSK3 = _BV(OCIE3A) ; // enable the output compare interrupt
-#endif
-#if defined(WIRING)
- timerAttach(TIMER3OUTCOMPAREA_INT, Timer3Service); // for Wiring platform only
-#endif
- }
-#endif
-
-#if defined (_useTimer4)
- if(timer == _timer4) {
- TCCR4A = 0; // normal counting mode
- TCCR4B = _BV(CS41); // set prescaler of 8
- TCNT4 = 0; // clear the timer count
- TIFR4 = _BV(OCF4A); // clear any pending interrupts;
- TIMSK4 = _BV(OCIE4A) ; // enable the output compare interrupt
- }
-#endif
-
-#if defined (_useTimer5)
- if(timer == _timer5) {
- TCCR5A = 0; // normal counting mode
- TCCR5B = _BV(CS51); // set prescaler of 8
- TCNT5 = 0; // clear the timer count
- TIFR5 = _BV(OCF5A); // clear any pending interrupts;
- TIMSK5 = _BV(OCIE5A) ; // enable the output compare interrupt
- }
-#endif
-}
-
-static void finISR(timer16_Sequence_t timer)
-{
- //disable use of the given timer
-#if defined WIRING // Wiring
- if(timer == _timer1) {
- #if defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
- TIMSK1 &= ~_BV(OCIE1A) ; // disable timer 1 output compare interrupt
- #else
- TIMSK &= ~_BV(OCIE1A) ; // disable timer 1 output compare interrupt
- #endif
- timerDetach(TIMER1OUTCOMPAREA_INT);
- }
- else if(timer == _timer3) {
- #if defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
- TIMSK3 &= ~_BV(OCIE3A); // disable the timer3 output compare A interrupt
- #else
- ETIMSK &= ~_BV(OCIE3A); // disable the timer3 output compare A interrupt
- #endif
- timerDetach(TIMER3OUTCOMPAREA_INT);
- }
-#else
- //For arduino - in future: call here to a currently undefined function to reset the timer
-#endif
-}
-
-static boolean isTimerActive(timer16_Sequence_t timer)
-{
- // returns true if any servo is active on this timer
- for(uint8_t channel=0; channel < SERVOS_PER_TIMER; channel++) {
- if(SERVO(timer,channel).Pin.isActive == true)
- return true;
- }
- return false;
-}
-
-
-/****************** end of static functions ******************************/
-
-Servo::Servo()
-{
- if( ServoCount < MAX_SERVOS) {
- this->servoIndex = ServoCount++; // assign a servo index to this instance
- servos[this->servoIndex].ticks = usToTicks(DEFAULT_PULSE_WIDTH); // store default values - 12 Aug 2009
- }
- else
- this->servoIndex = INVALID_SERVO ; // too many servos
-}
-
-uint8_t Servo::attach(int pin)
-{
- return this->attach(pin, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
-}
-
-uint8_t Servo::attach(int pin, int min, int max)
-{
- if(this->servoIndex < MAX_SERVOS ) {
- pinMode( pin, OUTPUT) ; // set servo pin to output
- servos[this->servoIndex].Pin.nbr = pin;
- // todo min/max check: abs(min - MIN_PULSE_WIDTH) /4 < 128
- this->min = (MIN_PULSE_WIDTH - min)/4; //resolution of min/max is 4 uS
- this->max = (MAX_PULSE_WIDTH - max)/4;
- // initialize the timer if it has not already been initialized
- timer16_Sequence_t timer = SERVO_INDEX_TO_TIMER(servoIndex);
- if(isTimerActive(timer) == false)
- initISR(timer);
- servos[this->servoIndex].Pin.isActive = true; // this must be set after the check for isTimerActive
- }
- return this->servoIndex ;
-}
-
-void Servo::detach()
-{
- servos[this->servoIndex].Pin.isActive = false;
- timer16_Sequence_t timer = SERVO_INDEX_TO_TIMER(servoIndex);
- if(isTimerActive(timer) == false) {
- finISR(timer);
- }
-}
-
-void Servo::write(int value)
-{
- if(value < MIN_PULSE_WIDTH)
- { // treat values less than 544 as angles in degrees (valid values in microseconds are handled as microseconds)
- if(value < 0) value = 0;
- if(value > 180) value = 180;
- value = map(value, 0, 180, SERVO_MIN(), SERVO_MAX());
- }
- this->writeMicroseconds(value);
-}
-
-void Servo::writeMicroseconds(int value)
-{
- // calculate and store the values for the given channel
- byte channel = this->servoIndex;
- if( (channel < MAX_SERVOS) ) // ensure channel is valid
- {
- if( value < SERVO_MIN() ) // ensure pulse width is valid
- value = SERVO_MIN();
- else if( value > SERVO_MAX() )
- value = SERVO_MAX();
-
- value = value - TRIM_DURATION;
- value = usToTicks(value); // convert to ticks after compensating for interrupt overhead - 12 Aug 2009
-
- uint8_t oldSREG = SREG;
- cli();
- servos[channel].ticks = value;
- SREG = oldSREG;
- }
-}
-
-int Servo::read() // return the value as degrees
-{
- return map( this->readMicroseconds()+1, SERVO_MIN(), SERVO_MAX(), 0, 180);
-}
-
-int Servo::readMicroseconds()
-{
- unsigned int pulsewidth;
- if( this->servoIndex != INVALID_SERVO )
- pulsewidth = ticksToUs(servos[this->servoIndex].ticks) + TRIM_DURATION ; // 12 aug 2009
- else
- pulsewidth = 0;
-
- return pulsewidth;
-}
-
-bool Servo::attached()
-{
- return servos[this->servoIndex].Pin.isActive ;
-}
diff --git a/libraries/Servo/Servo.h b/libraries/Servo/Servo.h
deleted file mode 100644
index 8168494..0000000
--- a/libraries/Servo/Servo.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- Servo.h - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2
- Copyright (c) 2009 Michael Margolis. All right reserved.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-/*
-
- A servo is activated by creating an instance of the Servo class passing the desired pin to the attach() method.
- The servos are pulsed in the background using the value most recently written using the write() method
-
- Note that analogWrite of PWM on pins associated with the timer are disabled when the first servo is attached.
- Timers are seized as needed in groups of 12 servos - 24 servos use two timers, 48 servos will use four.
- The sequence used to sieze timers is defined in timers.h
-
- The methods are:
-
- Servo - Class for manipulating servo motors connected to Arduino pins.
-
- attach(pin ) - Attaches a servo motor to an i/o pin.
- attach(pin, min, max ) - Attaches to a pin setting min and max values in microseconds
- default min is 544, max is 2400
-
- write() - Sets the servo angle in degrees. (invalid angle that is valid as pulse in microseconds is treated as microseconds)
- writeMicroseconds() - Sets the servo pulse width in microseconds
- read() - Gets the last written servo pulse width as an angle between 0 and 180.
- readMicroseconds() - Gets the last written servo pulse width in microseconds. (was read_us() in first release)
- attached() - Returns true if there is a servo attached.
- detach() - Stops an attached servos from pulsing its i/o pin.
- */
-
-#ifndef Servo_h
-#define Servo_h
-
-#include <inttypes.h>
-
-/*
- * Defines for 16 bit timers used with Servo library
- *
- * If _useTimerX is defined then TimerX is a 16 bit timer on the curent board
- * timer16_Sequence_t enumerates the sequence that the timers should be allocated
- * _Nbr_16timers indicates how many 16 bit timers are available.
- *
- */
-
-// Say which 16 bit timers can be used and in what order
-#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
-#define _useTimer5
-#define _useTimer1
-#define _useTimer3
-#define _useTimer4
-typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
-
-#elif defined(__AVR_ATmega32U4__)
-#define _useTimer1
-typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ;
-
-#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
-#define _useTimer3
-#define _useTimer1
-typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
-
-#elif defined(__AVR_ATmega128__) ||defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
-#define _useTimer3
-#define _useTimer1
-typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
-
-#else // everything else
-#define _useTimer1
-typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ;
-#endif
-
-#define Servo_VERSION 2 // software version of this library
-
-#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo
-#define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo
-#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached
-#define REFRESH_INTERVAL 20000 // minumim time to refresh servos in microseconds
-
-#define SERVOS_PER_TIMER 12 // the maximum number of servos controlled by one timer
-#define MAX_SERVOS (_Nbr_16timers * SERVOS_PER_TIMER)
-
-#define INVALID_SERVO 255 // flag indicating an invalid servo index
-
-typedef struct {
- uint8_t nbr :6 ; // a pin number from 0 to 63
- uint8_t isActive :1 ; // true if this channel is enabled, pin not pulsed if false
-} ServoPin_t ;
-
-typedef struct {
- ServoPin_t Pin;
- unsigned int ticks;
-} servo_t;
-
-class Servo
-{
-public:
- Servo();
- uint8_t attach(int pin); // attach the given pin to the next free channel, sets pinMode, returns channel number or 0 if failure
- uint8_t attach(int pin, int min, int max); // as above but also sets min and max values for writes.
- void detach();
- void write(int value); // if value is < 200 its treated as an angle, otherwise as pulse width in microseconds
- void writeMicroseconds(int value); // Write pulse width in microseconds
- int read(); // returns current pulse width as an angle between 0 and 180 degrees
- int readMicroseconds(); // returns current pulse width in microseconds for this servo (was read_us() in first release)
- bool attached(); // return true if this servo is attached, otherwise false
-private:
- uint8_t servoIndex; // index into the channel data for this servo
- int8_t min; // minimum is this value times 4 added to MIN_PULSE_WIDTH
- int8_t max; // maximum is this value times 4 added to MAX_PULSE_WIDTH
-};
-
-#endif
diff --git a/libraries/Servo/examples/Knob/Knob.ino b/libraries/Servo/examples/Knob/Knob.ino
deleted file mode 100644
index 886e107..0000000
--- a/libraries/Servo/examples/Knob/Knob.ino
+++ /dev/null
@@ -1,22 +0,0 @@
-// Controlling a servo position using a potentiometer (variable resistor)
-// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
-
-#include <Servo.h>
-
-Servo myservo; // create servo object to control a servo
-
-int potpin = 0; // analog pin used to connect the potentiometer
-int val; // variable to read the value from the analog pin
-
-void setup()
-{
- myservo.attach(9); // attaches the servo on pin 9 to the servo object
-}
-
-void loop()
-{
- val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
- val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
- myservo.write(val); // sets the servo position according to the scaled value
- delay(15); // waits for the servo to get there
-}
diff --git a/libraries/Servo/examples/Sweep/Sweep.ino b/libraries/Servo/examples/Sweep/Sweep.ino
deleted file mode 100644
index fb326e7..0000000
--- a/libraries/Servo/examples/Sweep/Sweep.ino
+++ /dev/null
@@ -1,31 +0,0 @@
-// Sweep
-// by BARRAGAN <http://barraganstudio.com>
-// This example code is in the public domain.
-
-
-#include <Servo.h>
-
-Servo myservo; // create servo object to control a servo
- // a maximum of eight servo objects can be created
-
-int pos = 0; // variable to store the servo position
-
-void setup()
-{
- myservo.attach(9); // attaches the servo on pin 9 to the servo object
-}
-
-
-void loop()
-{
- for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
- { // in steps of 1 degree
- myservo.write(pos); // tell servo to go to position in variable 'pos'
- delay(15); // waits 15ms for the servo to reach the position
- }
- for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
- {
- myservo.write(pos); // tell servo to go to position in variable 'pos'
- delay(15); // waits 15ms for the servo to reach the position
- }
-}
diff --git a/libraries/Servo/keywords.txt b/libraries/Servo/keywords.txt
deleted file mode 100644
index ca5ba79..0000000
--- a/libraries/Servo/keywords.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-#######################################
-# Syntax Coloring Map Servo
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-Servo KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-attach KEYWORD2
-detach KEYWORD2
-write KEYWORD2
-read KEYWORD2
-attached KEYWORD2
-writeMicroseconds KEYWORD2
-readMicroseconds KEYWORD2
-
-#######################################
-# Constants (LITERAL1)
-#######################################
diff --git a/libraries/Stepper/Stepper.cpp b/libraries/Stepper/Stepper.cpp
deleted file mode 100644
index 5d6b5e5..0000000
--- a/libraries/Stepper/Stepper.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- Stepper.cpp - - Stepper library for Wiring/Arduino - Version 0.4
-
- Original library (0.1) by Tom Igoe.
- Two-wire modifications (0.2) by Sebastian Gassner
- Combination version (0.3) by Tom Igoe and David Mellis
- Bug fix for four-wire (0.4) by Tom Igoe, bug fix from Noah Shibley
-
- Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires
-
- When wiring multiple stepper motors to a microcontroller,
- you quickly run out of output pins, with each motor requiring 4 connections.
-
- By making use of the fact that at any time two of the four motor
- coils are the inverse of the other two, the number of
- control connections can be reduced from 4 to 2.
-
- A slightly modified circuit around a Darlington transistor array or an L293 H-bridge
- connects to only 2 microcontroler pins, inverts the signals received,
- and delivers the 4 (2 plus 2 inverted ones) output signals required
- for driving a stepper motor.
-
- The sequence of control signals for 4 control wires is as follows:
-
- Step C0 C1 C2 C3
- 1 1 0 1 0
- 2 0 1 1 0
- 3 0 1 0 1
- 4 1 0 0 1
-
- The sequence of controls signals for 2 control wires is as follows
- (columns C1 and C2 from above):
-
- Step C0 C1
- 1 0 1
- 2 1 1
- 3 1 0
- 4 0 0
-
- The circuits can be found at
-
-http://www.arduino.cc/en/Tutorial/Stepper
-
-
- */
-
-
-#include "Arduino.h"
-#include "Stepper.h"
-
-/*
- * two-wire constructor.
- * Sets which wires should control the motor.
- */
-Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2)
-{
- this->step_number = 0; // which step the motor is on
- this->speed = 0; // the motor speed, in revolutions per minute
- this->direction = 0; // motor direction
- this->last_step_time = 0; // time stamp in ms of the last step taken
- this->number_of_steps = number_of_steps; // total number of steps for this motor
-
- // Arduino pins for the motor control connection:
- this->motor_pin_1 = motor_pin_1;
- this->motor_pin_2 = motor_pin_2;
-
- // setup the pins on the microcontroller:
- pinMode(this->motor_pin_1, OUTPUT);
- pinMode(this->motor_pin_2, OUTPUT);
-
- // When there are only 2 pins, set the other two to 0:
- this->motor_pin_3 = 0;
- this->motor_pin_4 = 0;
-
- // pin_count is used by the stepMotor() method:
- this->pin_count = 2;
-}
-
-
-/*
- * constructor for four-pin version
- * Sets which wires should control the motor.
- */
-
-Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4)
-{
- this->step_number = 0; // which step the motor is on
- this->speed = 0; // the motor speed, in revolutions per minute
- this->direction = 0; // motor direction
- this->last_step_time = 0; // time stamp in ms of the last step taken
- this->number_of_steps = number_of_steps; // total number of steps for this motor
-
- // Arduino pins for the motor control connection:
- this->motor_pin_1 = motor_pin_1;
- this->motor_pin_2 = motor_pin_2;
- this->motor_pin_3 = motor_pin_3;
- this->motor_pin_4 = motor_pin_4;
-
- // setup the pins on the microcontroller:
- pinMode(this->motor_pin_1, OUTPUT);
- pinMode(this->motor_pin_2, OUTPUT);
- pinMode(this->motor_pin_3, OUTPUT);
- pinMode(this->motor_pin_4, OUTPUT);
-
- // pin_count is used by the stepMotor() method:
- this->pin_count = 4;
-}
-
-/*
- Sets the speed in revs per minute
-
-*/
-void Stepper::setSpeed(long whatSpeed)
-{
- this->step_delay = 60L * 1000L / this->number_of_steps / whatSpeed;
-}
-
-/*
- Moves the motor steps_to_move steps. If the number is negative,
- the motor moves in the reverse direction.
- */
-void Stepper::step(int steps_to_move)
-{
- int steps_left = abs(steps_to_move); // how many steps to take
-
- // determine direction based on whether steps_to_mode is + or -:
- if (steps_to_move > 0) {this->direction = 1;}
- if (steps_to_move < 0) {this->direction = 0;}
-
-
- // decrement the number of steps, moving one step each time:
- while(steps_left > 0) {
- // move only if the appropriate delay has passed:
- if (millis() - this->last_step_time >= this->step_delay) {
- // get the timeStamp of when you stepped:
- this->last_step_time = millis();
- // increment or decrement the step number,
- // depending on direction:
- if (this->direction == 1) {
- this->step_number++;
- if (this->step_number == this->number_of_steps) {
- this->step_number = 0;
- }
- }
- else {
- if (this->step_number == 0) {
- this->step_number = this->number_of_steps;
- }
- this->step_number--;
- }
- // decrement the steps left:
- steps_left--;
- // step the motor to step number 0, 1, 2, or 3:
- stepMotor(this->step_number % 4);
- }
- }
-}
-
-/*
- * Moves the motor forward or backwards.
- */
-void Stepper::stepMotor(int thisStep)
-{
- if (this->pin_count == 2) {
- switch (thisStep) {
- case 0: /* 01 */
- digitalWrite(motor_pin_1, LOW);
- digitalWrite(motor_pin_2, HIGH);
- break;
- case 1: /* 11 */
- digitalWrite(motor_pin_1, HIGH);
- digitalWrite(motor_pin_2, HIGH);
- break;
- case 2: /* 10 */
- digitalWrite(motor_pin_1, HIGH);
- digitalWrite(motor_pin_2, LOW);
- break;
- case 3: /* 00 */
- digitalWrite(motor_pin_1, LOW);
- digitalWrite(motor_pin_2, LOW);
- break;
- }
- }
- if (this->pin_count == 4) {
- switch (thisStep) {
- case 0: // 1010
- digitalWrite(motor_pin_1, HIGH);
- digitalWrite(motor_pin_2, LOW);
- digitalWrite(motor_pin_3, HIGH);
- digitalWrite(motor_pin_4, LOW);
- break;
- case 1: // 0110
- digitalWrite(motor_pin_1, LOW);
- digitalWrite(motor_pin_2, HIGH);
- digitalWrite(motor_pin_3, HIGH);
- digitalWrite(motor_pin_4, LOW);
- break;
- case 2: //0101
- digitalWrite(motor_pin_1, LOW);
- digitalWrite(motor_pin_2, HIGH);
- digitalWrite(motor_pin_3, LOW);
- digitalWrite(motor_pin_4, HIGH);
- break;
- case 3: //1001
- digitalWrite(motor_pin_1, HIGH);
- digitalWrite(motor_pin_2, LOW);
- digitalWrite(motor_pin_3, LOW);
- digitalWrite(motor_pin_4, HIGH);
- break;
- }
- }
-}
-
-/*
- version() returns the version of the library:
-*/
-int Stepper::version(void)
-{
- return 4;
-}
diff --git a/libraries/Stepper/Stepper.h b/libraries/Stepper/Stepper.h
deleted file mode 100644
index 4094aee..0000000
--- a/libraries/Stepper/Stepper.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- Stepper.h - - Stepper library for Wiring/Arduino - Version 0.4
-
- Original library (0.1) by Tom Igoe.
- Two-wire modifications (0.2) by Sebastian Gassner
- Combination version (0.3) by Tom Igoe and David Mellis
- Bug fix for four-wire (0.4) by Tom Igoe, bug fix from Noah Shibley
-
- Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires
-
- When wiring multiple stepper motors to a microcontroller,
- you quickly run out of output pins, with each motor requiring 4 connections.
-
- By making use of the fact that at any time two of the four motor
- coils are the inverse of the other two, the number of
- control connections can be reduced from 4 to 2.
-
- A slightly modified circuit around a Darlington transistor array or an L293 H-bridge
- connects to only 2 microcontroler pins, inverts the signals received,
- and delivers the 4 (2 plus 2 inverted ones) output signals required
- for driving a stepper motor.
-
- The sequence of control signals for 4 control wires is as follows:
-
- Step C0 C1 C2 C3
- 1 1 0 1 0
- 2 0 1 1 0
- 3 0 1 0 1
- 4 1 0 0 1
-
- The sequence of controls signals for 2 control wires is as follows
- (columns C1 and C2 from above):
-
- Step C0 C1
- 1 0 1
- 2 1 1
- 3 1 0
- 4 0 0
-
- The circuits can be found at
- http://www.arduino.cc/en/Tutorial/Stepper
-*/
-
-// ensure this library description is only included once
-#ifndef Stepper_h
-#define Stepper_h
-
-// library interface description
-class Stepper {
- public:
- // constructors:
- Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2);
- Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4);
-
- // speed setter method:
- void setSpeed(long whatSpeed);
-
- // mover method:
- void step(int number_of_steps);
-
- int version(void);
-
- private:
- void stepMotor(int this_step);
-
- int direction; // Direction of rotation
- int speed; // Speed in RPMs
- unsigned long step_delay; // delay between steps, in ms, based on speed
- int number_of_steps; // total number of steps this motor can take
- int pin_count; // whether you're driving the motor with 2 or 4 pins
- int step_number; // which step the motor is on
-
- // motor pin numbers:
- int motor_pin_1;
- int motor_pin_2;
- int motor_pin_3;
- int motor_pin_4;
-
- long last_step_time; // time stamp in ms of when the last step was taken
-};
-
-#endif
-
diff --git a/libraries/Stepper/examples/MotorKnob/MotorKnob.ino b/libraries/Stepper/examples/MotorKnob/MotorKnob.ino
deleted file mode 100644
index d428186..0000000
--- a/libraries/Stepper/examples/MotorKnob/MotorKnob.ino
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * MotorKnob
- *
- * A stepper motor follows the turns of a potentiometer
- * (or other sensor) on analog input 0.
- *
- * http://www.arduino.cc/en/Reference/Stepper
- * This example code is in the public domain.
- */
-
-#include <Stepper.h>
-
-// change this to the number of steps on your motor
-#define STEPS 100
-
-// create an instance of the stepper class, specifying
-// the number of steps of the motor and the pins it's
-// attached to
-Stepper stepper(STEPS, 8, 9, 10, 11);
-
-// the previous reading from the analog input
-int previous = 0;
-
-void setup()
-{
- // set the speed of the motor to 30 RPMs
- stepper.setSpeed(30);
-}
-
-void loop()
-{
- // get the sensor value
- int val = analogRead(0);
-
- // move a number of steps equal to the change in the
- // sensor reading
- stepper.step(val - previous);
-
- // remember the previous value of the sensor
- previous = val;
-} \ No newline at end of file
diff --git a/libraries/Stepper/examples/stepper_oneRevolution/stepper_oneRevolution.ino b/libraries/Stepper/examples/stepper_oneRevolution/stepper_oneRevolution.ino
deleted file mode 100644
index 2dbb57d..0000000
--- a/libraries/Stepper/examples/stepper_oneRevolution/stepper_oneRevolution.ino
+++ /dev/null
@@ -1,44 +0,0 @@
-
-/*
- Stepper Motor Control - one revolution
-
- This program drives a unipolar or bipolar stepper motor.
- The motor is attached to digital pins 8 - 11 of the Arduino.
-
- The motor should revolve one revolution in one direction, then
- one revolution in the other direction.
-
-
- Created 11 Mar. 2007
- Modified 30 Nov. 2009
- by Tom Igoe
-
- */
-
-#include <Stepper.h>
-
-const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
- // for your motor
-
-// initialize the stepper library on pins 8 through 11:
-Stepper myStepper(stepsPerRevolution, 8,9,10,11);
-
-void setup() {
- // set the speed at 60 rpm:
- myStepper.setSpeed(60);
- // initialize the serial port:
- Serial.begin(9600);
-}
-
-void loop() {
- // step one revolution in one direction:
- Serial.println("clockwise");
- myStepper.step(stepsPerRevolution);
- delay(500);
-
- // step one revolution in the other direction:
- Serial.println("counterclockwise");
- myStepper.step(-stepsPerRevolution);
- delay(500);
-}
-
diff --git a/libraries/Stepper/examples/stepper_oneStepAtATime/stepper_oneStepAtATime.ino b/libraries/Stepper/examples/stepper_oneStepAtATime/stepper_oneStepAtATime.ino
deleted file mode 100644
index 36d3299..0000000
--- a/libraries/Stepper/examples/stepper_oneStepAtATime/stepper_oneStepAtATime.ino
+++ /dev/null
@@ -1,44 +0,0 @@
-
-/*
- Stepper Motor Control - one step at a time
-
- This program drives a unipolar or bipolar stepper motor.
- The motor is attached to digital pins 8 - 11 of the Arduino.
-
- The motor will step one step at a time, very slowly. You can use this to
- test that you've got the four wires of your stepper wired to the correct
- pins. If wired correctly, all steps should be in the same direction.
-
- Use this also to count the number of steps per revolution of your motor,
- if you don't know it. Then plug that number into the oneRevolution
- example to see if you got it right.
-
- Created 30 Nov. 2009
- by Tom Igoe
-
- */
-
-#include <Stepper.h>
-
-const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
- // for your motor
-
-// initialize the stepper library on pins 8 through 11:
-Stepper myStepper(stepsPerRevolution, 8,9,10,11);
-
-int stepCount = 0; // number of steps the motor has taken
-
-void setup() {
- // initialize the serial port:
- Serial.begin(9600);
-}
-
-void loop() {
- // step one step:
- myStepper.step(1);
- Serial.print("steps:" );
- Serial.println(stepCount);
- stepCount++;
- delay(500);
-}
-
diff --git a/libraries/Stepper/examples/stepper_speedControl/stepper_speedControl.ino b/libraries/Stepper/examples/stepper_speedControl/stepper_speedControl.ino
deleted file mode 100644
index 1a67a55..0000000
--- a/libraries/Stepper/examples/stepper_speedControl/stepper_speedControl.ino
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/*
- Stepper Motor Control - speed control
-
- This program drives a unipolar or bipolar stepper motor.
- The motor is attached to digital pins 8 - 11 of the Arduino.
- A potentiometer is connected to analog input 0.
-
- The motor will rotate in a clockwise direction. The higher the potentiometer value,
- the faster the motor speed. Because setSpeed() sets the delay between steps,
- you may notice the motor is less responsive to changes in the sensor value at
- low speeds.
-
- Created 30 Nov. 2009
- Modified 28 Oct 2010
- by Tom Igoe
-
- */
-
-#include <Stepper.h>
-
-const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
-// for your motor
-
-
-// initialize the stepper library on pins 8 through 11:
-Stepper myStepper(stepsPerRevolution, 8,9,10,11);
-
-int stepCount = 0; // number of steps the motor has taken
-
-void setup() {
- // nothing to do inside the setup
-}
-
-void loop() {
- // read the sensor value:
- int sensorReading = analogRead(A0);
- // map it to a range from 0 to 100:
- int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
- // set the motor speed:
- if (motorSpeed > 0) {
- myStepper.setSpeed(motorSpeed);
- // step 1/100 of a revolution:
- myStepper.step(stepsPerRevolution/100);
- }
-}
-
-
diff --git a/libraries/Stepper/keywords.txt b/libraries/Stepper/keywords.txt
deleted file mode 100644
index 19a0fad..0000000
--- a/libraries/Stepper/keywords.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-#######################################
-# Syntax Coloring Map For Test
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-Stepper KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-step KEYWORD2
-setSpeed KEYWORD2
-version KEYWORD2
-
-######################################
-# Instances (KEYWORD2)
-#######################################
-direction KEYWORD2
-speed KEYWORD2
-
-
-#######################################
-# Constants (LITERAL1)
-#######################################