I know I'm missing something but I cannot find it:
Right from the arduino sketchbook:
/*
* Time_NTP.pde
* Example showing time sync to NTP time source
*
* This sketch uses the Ethenet library with the user contributed UdpBytewise extension
*/
#include <Time.h>
#include <Ethernet.h>
#include <UdpBytewise.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
#if UDP_TX_PACKET_MAX_SIZE <64 || UDP_RX_PACKET_MAX_SIZE < 64
#error : UDP packet size to small - modify UdpBytewise.h to set buffers to 64 bytes
#endif
/*
*
* You may need to modify the UdpBytewise.h library to allow enough space in the buffers for the NTP packets.
* Open up UdpBytewse.h and set the following buffers to 64 bytes:
* #define UDP_TX_PACKET_MAX_SIZE 64
* #define UDP_RX_PACKET_MAX_SIZE 64
*/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 44 }; // set the IP address to an unused address on your network
byte SNTP_server_IP[] = { 192, 43, 244, 18}; // time.nist.gov
//byte SNTP_server_IP[] = { 130,149,17,21}; // ntps1-0.cs.tu-berlin.de
//byte SNTP_server_IP[] = { 192,53,103,108}; // ptbtime1.ptb.de
time_t prevDisplay = 0; // when the digital clock was displayed
const long timeZoneOffset = 0L; // set this to the offset in seconds to your local time;
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac,ip);
Serial.println("waiting for sync");
setSyncProvider(getNtpTime);
while(timeStatus()== timeNotSet)
; // wait until the time is set by the sync provider
}
void loop()
{
if( now() != prevDisplay) //update the display only if the time has changed
{
prevDisplay = now();
digitalClockDisplay();
}
}
void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
/*-------- NTP code ----------*/
unsigned long getNtpTime()
{
sendNTPpacket(SNTP_server_IP);
delay(1000);
if ( UdpBytewise.available() ) {
for(int i=0; i < 40; i++)
UdpBytewise.read(); // ignore every field except the time
const unsigned long seventy_years = 2208988800UL + timeZoneOffset;
return getUlong() - seventy_years;
}
return 0; // return 0 if unable to get the time
}
unsigned long sendNTPpacket(byte *address)
{
UdpBytewise.begin(123);
UdpBytewise.beginPacket(address, 123);
UdpBytewise.write(B11100011); // LI, Version, Mode
UdpBytewise.write(0); // Stratum
UdpBytewise.write(6); // Polling Interval
UdpBytewise.write(0xEC); // Peer Clock Precision
write_n(0, 8); // Root Delay & Root Dispersion
UdpBytewise.write(49);
UdpBytewise.write(0x4E);
UdpBytewise.write(49);
UdpBytewise.write(52);
write_n(0, 32); //Reference and time stamps
UdpBytewise.endPacket();
}
unsigned long getUlong()
{
unsigned long ulong = (unsigned long)UdpBytewise.read() << 24;
ulong |= (unsigned long)UdpBytewise.read() << 16;
ulong |= (unsigned long)UdpBytewise.read() << 8;
ulong |= (unsigned long)UdpBytewise.read();
return ulong;
}
void write_n(int what, int how_many)
{
for( int i = 0; i < how_many; i++ )
UdpBytewise.write(what);
}
getting this error:
TimeNTP.pde:9:22: fatal error: Ethernet.h: No such file or directory
compilation terminated.
Error compiling.
OK, so I discovered Ethernet.h file was somehow deleted...
now I have this error
Arduino: 1.5.8 (Mac OS X), Board: "Arduino Pro or Pro Mini, ATmega328 (3.3V, 8 MHz)"
Build options changed, rebuilding all
Using library Time in folder: /Users/bulldoglowell/Documents/Arduino/libraries/Time (legacy)
Using library Ethernet in folder: /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet (legacy)
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=158 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/eightanaloginputs -I/Users/bulldoglowell/Documents/Arduino/libraries/Time -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build1537711412417436282.tmp/TimeNTP.cpp -o /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build1537711412417436282.tmp/TimeNTP.cpp.o
In file included from TimeNTP.pde:10:0:
/Users/browerjames/Documents/Arduino/libraries/Ethernet/UdpBytewise.h:70:15: error: conflicting return type specified for 'virtual void UdpBytewiseClass::write(uint8_t)'
virtual void write(uint8_t); // add a byte to the currently assembled packet (if there's space)
^
In file included from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/Stream.h:26:0,
from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/HardwareSerial.h:29,
from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/Arduino.h:223,
from /Users/bulldoglowell /Documents/Arduino/libraries/Ethernet/EthernetClient.h:3,
from /Users/bulldoglowell /Documents/Arduino/libraries/Ethernet/Ethernet.h:7,
from TimeNTP.pde:9:
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/Print.h:48:20: error: overriding 'virtual size_t Print::write(uint8_t)'
virtual size_t write(uint8_t) = 0;
^
Error compiling.
I have only had these problems since upgrading to 1.5.8 Is that my issue?
Just downloaded all the libraries and attempted to compile (on various versions of the IDE) and I'm getting errors all over the place. At first glance it appears that Ethernet.h and UdpBytewise.h are duplicating definitions. (and hence causing errors)
OK So looking through the Ethernet Library that I have, it appears to cover what is available in the udpBytewise library. Maybe udpBytewise is an old library that's no longer compatible with the new ethernet library?
Anyhow with a few modifications I managed to get it to compile but I'm not especially confident that it'll work. Basically what I did was:
Added
EthernetUDP ethUDP;
Remarked out: #include <ethUDP.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008 #if UDP_TX_PACKET_MAX_SIZE <64 || UDP_RX_PACKET_MAX_SIZE < 64 #error : UDP packet size to small - modify ethUDP.h to set buffers to 64 bytes #endif
In Setup
ethUDP.begin(1800); // just a random port address
Global search and replace of UdpBytewise with ethUDP
Then had to change ethUDP.write commands to specifically cast the arguments as (bytes)
Apparently it's ambiguous otherwise :\
BTW the function unsigned long sendNTPpacket(byte *address) still doesn't return anything! (not my fault)
And if this thing works it'll be a * miracle. But I don't have the hardware to even begin to test it.
/*
* Time_NTP.pde
* Example showing time sync to NTP time source
*
* This sketch uses the Ethenet library with the user contributed ethUDP extension
*/
#include <Time.h>
#include <Ethernet.h>
EthernetUDP ethUDP;
//#include <ethUDP.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
//#if UDP_TX_PACKET_MAX_SIZE <64 || UDP_RX_PACKET_MAX_SIZE < 64
//#error : UDP packet size to small - modify ethUDP.h to set buffers to 64 bytes
//#endif
/*
*
* You may need to modify the ethUDP.h library to allow enough space in the buffers for the NTP packets.
* Open up UdpBytewse.h and set the following buffers to 64 bytes:
* #define UDP_TX_PACKET_MAX_SIZE 64
* #define UDP_RX_PACKET_MAX_SIZE 64
*/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 44 }; // set the IP address to an unused address on your network
byte SNTP_server_IP[] = { 192, 43, 244, 18}; // time.nist.gov
//byte SNTP_server_IP[] = { 130,149,17,21}; // ntps1-0.cs.tu-berlin.de
//byte SNTP_server_IP[] = { 192,53,103,108}; // ptbtime1.ptb.de
time_t prevDisplay = 0; // when the digital clock was displayed
const long timeZoneOffset = 0L; // set this to the offset in seconds to your local time;
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac,ip);
ethUDP.begin(1800);
Serial.println("waiting for sync");
setSyncProvider(getNtpTime);
while(timeStatus()== timeNotSet)
; // wait until the time is set by the sync provider
}
void loop()
{
if( now() != prevDisplay) //update the display only if the time has changed
{
prevDisplay = now();
digitalClockDisplay();
}
}
void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
/*-------- NTP code ----------*/
unsigned long getNtpTime()
{
sendNTPpacket(SNTP_server_IP);
delay(1000);
if ( ethUDP.available() ) {
for(int i=0; i < 40; i++)
ethUDP.read(); // ignore every field except the time
const unsigned long seventy_years = 2208988800UL + timeZoneOffset;
return getUlong() - seventy_years;
}
return 0; // return 0 if unable to get the time
}
unsigned long sendNTPpacket(byte *address)
{
ethUDP.begin(123);
ethUDP.beginPacket(address, 123);
//ethUDP.write(B11100011); // LI, Version, Mode
ethUDP.write((byte) 0); // Stratum
ethUDP.write((byte) 6); // Polling Interval
ethUDP.write(0xEC); // Peer Clock Precision
write_n(0, 8); // Root Delay & Root Dispersion
ethUDP.write((byte) 49);
ethUDP.write((byte) 0x4E);
ethUDP.write((byte) 49);
ethUDP.write((byte)1);
write_n(0, 32); //Reference and time stamps
ethUDP.endPacket();
}
unsigned long getUlong()
{
unsigned long ulong = (unsigned long)ethUDP.read() << 24;
ulong |= (unsigned long)ethUDP.read() << 16;
ulong |= (unsigned long)ethUDP.read() << 8;
ulong |= (unsigned long)ethUDP.read();
return ulong;
}
void write_n(int what, int how_many)
{
for( int i = 0; i < how_many; i++ )
ethUDP.write(what);
}
Using library Time in folder: /Users/bulldoglowell/Documents/Arduino/libraries/Time (legacy)
Using library Ethernet in folder: /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet (legacy)
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=158 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/eightanaloginputs -I/Users/bulldoglowell/Documents/Arduino/libraries/Time -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/TimeNTP.cpp -o /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/TimeNTP.cpp.o
In file included from TimeNTP.pde:10:0:
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/UdpBytewise.h:70:15: error: conflicting return type specified for 'virtual void UdpBytewiseClass::write(uint8_t)'
virtual void write(uint8_t); // add a byte to the currently assembled packet (if there's space)
^
In file included from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/Stream.h:26:0,
from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/HardwareSerial.h:29,
from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/Arduino.h:223,
from /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/EthernetClient.h:3,
from /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.h:7,
from TimeNTP.pde:9:
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/Print.h:48:20: error: overriding 'virtual size_t Print::write(uint8_t)'
virtual size_t write(uint8_t) = 0;
^
Error compiling.
mind boggling that I cannot find another example of a NTP synced clock (Ethernet.h plus Time.h)
I use NTP on my Mega using either an ethernet shield or wifi shield, and it keep great time, even without a system clock (RTC). It stays within a couple seconds of the correct time.
Have you tried the UdpNtpClient sketch in the examples? Does it get the correct time?
I haven't tried this on IDE v1.5.8 tho. Seemed to work on earlier v1.5.x and v1.0.x versions.
thanks Tim... I tried your recommendation on UdpNtpClient and could not compile either:
I must have screwed up my libraries importing UdpBytewise.h or there is a problem with 1.5.8 and these libs
errors from UdpNtpClient
Build options changed, rebuilding all
Using library SPI in folder: /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI
Using library Ethernet in folder: /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet (legacy)
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=158 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/eightanaloginputs -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/UdpNtpClient.cpp -o /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/UdpNtpClient.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=158 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/eightanaloginputs -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI/utility /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI/SPI.cpp -o /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/SPI/SPI.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=158 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/eightanaloginputs -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Dhcp.cpp -o /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/Ethernet/Dhcp.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=158 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/eightanaloginputs -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Dns.cpp -o /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/Ethernet/Dns.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=158 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/eightanaloginputs -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet -I/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp -o /var/folders/r7/cw1jznxs6dj06v6_pgttpkh00000gn/T/build5128148844008357619.tmp/Ethernet/Ethernet.cpp.o
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp: In member function 'void EthernetClass::begin(uint8_t*, IPAddress, IPAddress, IPAddress, IPAddress)':
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:65:39: error: no matching function for call to 'W5100Class::setIPAddress(IPAddress::&)'
W5100.setIPAddress(local_ip._address);
^
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:65:39: note: candidate is:
In file included from /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:1:0:
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility/w5100.h:392:6: note: void W5100Class::setIPAddress(uint8_t*)
void W5100Class::setIPAddress(uint8_t _addr) {
^
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility/w5100.h:392:6: note: no known conversion for argument 1 from 'IPAddress::' to 'uint8_t {aka unsigned char*}'
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:66:38: error: no matching function for call to 'W5100Class::setGatewayIp(IPAddress::&)'
W5100.setGatewayIp(gateway._address);
^
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:66:38: note: candidate is:
In file included from /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:1:0:
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility/w5100.h:368:6: note: void W5100Class::setGatewayIp(uint8_t*)
void W5100Class::setGatewayIp(uint8_t _addr) {
^
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility/w5100.h:368:6: note: no known conversion for argument 1 from 'IPAddress::' to 'uint8_t {aka unsigned char*}'
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:67:38: error: no matching function for call to 'W5100Class::setSubnetMask(IPAddress::&)'
W5100.setSubnetMask(subnet._address);
^
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:67:38: note: candidate is:
In file included from /Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/Ethernet.cpp:1:0:
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility/w5100.h:376:6: note: void W5100Class::setSubnetMask(uint8_t*)
void W5100Class::setSubnetMask(uint8_t _addr) {
^
/Users/bulldoglowell/Documents/Arduino/libraries/Ethernet/utility/w5100.h:376:6: note: no known conversion for argument 1 from 'IPAddress::' to 'uint8_t {aka unsigned char*}'
Error compiling.
I can't get to my computer that has the Arduino IDEs on it right now. I do have v1.5.8 installed on it already. It will be several hours before I can get to it, but I will try the UdpNtpClient example sketch for you then. I'll post here when I do the test.
If that works, I'll try my time sketch and if it works, I'll post it here for you.
Time.h has problems with IDE v1.5.8. My version doesn't throw as many errors as yours does, but it won't compile. It complains about two PROGMEM month and day array variables in the DateStrings.cpp file. It does compile and run with IDE v1.0.6. Would you like my code?
SurferTim:
Time.h has problems with IDE v1.5.8. My version doesn't throw as many errors as yours does, but it won't compile. It complains about two PROGMEM month and day array variables in the DateStrings.cpp file. It does compile and run with IDE v1.0.6. Would you like my code?
no thanks Tim, I just reverted to V1.0.6 of the IDE and was able to get things cooking.
OK. Maybe someone will see this post and fix Time.h for us. I don't know what has changed, and I wouldn't want to mess things up for the new devices that IDE v1.5.x supports.