Commit Graph

606 Commits

Author SHA1 Message Date
Matt Robinson 166a6c28ed Clean up unused var from HardwareSerial_private.h 2014-01-28 20:39:15 +00:00
Matthijs Kooijman c3cd35f197 In HardwareSerial::write, bypass the queue when it's empty
This helps improve the effective datarate on high (>500kbit/s) bitrates,
by skipping the interrupt and associated overhead. At 1 Mbit/s the
implementation previously got up to about 600-700 kbit/s, but now it
actually gets up to the 1Mbit/s (values are rough estimates, though).
2014-01-22 12:06:02 +01:00
Cristian Maglie 49fc2ab8ad Inlined HardwareSerial calls to RX ISR.
Moreover, declaring pointers-to-registers as const and using initializer
list in class constructor allows the compiler to further improve inlining
performance.

This change recovers about 50 bytes of program space on single-UART devices.

See #1711
2014-01-22 11:19:35 +01:00
Matthijs Kooijman 1848db3d66 Put each HardwareSerial instance in its own .cpp file
By putting the ISRs and HardwareSerial instance for each instance in a
separate compilation unit, the compile will only consider them for
linking when the instance is actually used. The ISR is always referenced
by the compiler runtime and the Serialx_available() function is always
referenced by SerialEventRun(), but both references are weak and thus do
not cause the compilation to be included in the link by themselves.

The effect of this is that when multiple HardwareSerial ports are
available, but not all are used, buffers are only allocated and ISRs are
only included for the serial ports that are used. On the mega, this
lowers memory usage from 653 bytes to just 182 when only using the first
serial port.

On boards with just a single port, there is no change, since the code
and memory was already left out when no serial port was used at all.

This fixes #1425 and fixes #1259.
2014-01-22 09:39:19 +01:00
Matthijs Kooijman 99f7ef7c67 Centrally decide which hardware UARTS are available
Before, this decision was made in few different places, based on
sometimes different register defines.

Now, HardwareSerial.h decides wich UARTS are available, defines
USE_HWSERIALn macros and HardwareSerial.cpp simply checks these macros
(together with some #ifs to decide which registers to use for UART 0).
For consistency, USBAPI.h also defines a HAVE_CDCSERIAL macro when
applicable.

For supported targets, this should change any behaviour. For unsupported
targets, the error messages might subtly change because some checks are
moved or changed.

Additionally, this moves the USBAPI.h include form HardareSerial.h into
Arduino.h and raises an error when both CDC serial and UART0 are
available (previously this would silently use UART0 instead of CDC, but
there is not currently any Atmel chip available for which this would
occur).
2014-01-22 09:38:34 +01:00
Matthijs Kooijman f1cd85da7a Disable the UDRE interrupt sooner in HardwareSerial
Before, the interrupt was disabled when it was triggered and it turned
out there was no data to send. However, the interrupt can be disabled
already when the last byte is written to the UART, since write() will
always re-enable the interrupt when it adds new data to the buffer.

Closes: #1008
2014-01-22 09:38:25 +01:00
Matthijs Kooijman dbe23685c2 Fix lockup when writing to HardwareSerial with interrupts disabled
When interrupts are disabled, writing to HardwareSerial could cause a
lockup. When the tx buffer is full, a busy-wait loop is used to wait for
the interrupt handler to free up a byte in the buffer. However, when
interrupts are disabled, this will of course never happen and the
Arduino will lock up. This often caused lockups when doing (big) debug
printing from an interrupt handler.

Additionally, calling flush() with interrupts disabled while
transmission was in progress would also cause a lockup.

When interrupts are disabled, the code now actively checks the UDRE
(UART Data Register Empty) and calls the interrupt handler to free up
room if the bit is set.

This can lead to delays in interrupt handlers when the serial buffer is
full, but a delay is of course always preferred to a lockup.

Closes: #672
References: #1147
2014-01-22 09:38:16 +01:00
Matthijs Kooijman fa8df58c93 Fix HardwareSerial::flush() when interrupts are kept disabled for a while
It turns out there is an additional corner case. The analysis in the
previous commit wrt to flush() assumes that the data register is always
kept filled by the interrupt handler, so the TXC bit won't get set until
all the queued bytes have been transmitted. But, when interrupts are
disabled for a longer period (for example when an interrupt handler for
another device is running for longer than 1-2 byte times), it could
happen that the UART stops transmitting while there are still more bytes
queued (but these are in the buffer, not in the UDR register, so the
UART can't know about them).

In this case, the TXC bit would get set, but the transmission is not
complete yet. We can easily detect this case by looking at the head and
tail pointers, but it seems easier to instead look at the UDRIE bit
(the TX interrupt is enabled if and only if there are bytes in the
queue). To fix this corner case, this commit:
 - Checks the UDRIE bit and only if it is unset, looks at the TXC bit.
 - Moves the clearing of TXC from write() to the tx interrupt handler.
   This (still) causes the TXC bit to be cleared whenever a byte is
   queued when the buffer is empty (in this case the tx interrupt will
   trigger directly after write() is called). It also causes the TXC bit
   to be cleared whenever transmission is resumed after it halted
   because interrupts have been disabled for too long.

As a side effect, another race condition is prevented. This could occur
at very high bitrates, where the transmission would be completed before
the code got time to clear the TXC0 register, making the clear happen
_after_ the transmission was already complete. With the new code, the
clearing of TXC happens directly after writing to the UDR register,
while interrupts are disabled, and we can be certain the data
transmission needs more time than one instruction to complete. This
fixes #1463 and replaces #1456.
2014-01-22 09:38:04 +01:00
Matthijs Kooijman 560295c983 Improve HardwareSerial::flush()
The flush() method blocks until all characters in the serial buffer have
been written to the uart _and_ transmitted. This is checked by waiting
until the "TXC" (TX Complete) bit is set by the UART, signalling
completion. This bit is cleared by write() when adding a new byte to the
buffer and set by the hardware after tranmission ends, so it is always
guaranteed to be zero from the moment the first byte in a sequence is
queued until the moment the last byte is transmitted, and it is one from
the moment the last byte in the buffer is transmitted until the first
byte in the next sequence is queued.

However, the TXC bit is also zero from initialization to the moment the
first byte ever is queued (and then continues to be zero until the first
sequence of bytes completes transmission). Unfortunately we cannot
manually set the TXC bit during initialization, we can only clear it. To
make sure that flush() would not (indefinitely) block when it is called
_before_ anything was written to the serial device, the "transmitting"
variable was introduced.

This variable suggests that it is only true when something is
transmitting, which isn't currently the case (it remains true after
transmission is complete until flush() is called, for example).
Furthermore, there is no need to keep the status of transmission, the
only thing needed is to remember if anything has ever been written, so
the corner case described above can be detected.

This commit improves the code by:
 - Renaming the "transmitting" variable to _written (making it more
   clear and following the leading underscore naming convention).
 - Not resetting the value of _written at the end of flush(), there is
   no point to this.
 - Only checking the "_written" value once in flush(), since it can
   never be toggled off anyway.
 - Initializing the value of _written in both versions of _begin (though
   it probably gets initialized to 0 by default anyway, better to be
   explicit).
2014-01-22 09:37:54 +01:00
Matthijs Kooijman bd194db4e3 Use bit_is_clear in HardwareSerial::flush()
This is slightly more clear than the previous explicit comparison.
2014-01-22 09:37:44 +01:00
Matthijs Kooijman 80d6af6273 Move interrupt handlers into HardwareSerial class
The actual interrupt vectors are of course defined as before, but they
let new methods in the HardwareSerial class do the actual work. This
greatly reduces code duplication and prepares for one of my next commits
which requires the tx interrupt handler to be called from another
context as well.

The actual content of the interrupts handlers was pretty much identical,
so that remains unchanged (except that store_char was now only needed
once, so it was inlined).

Now all access to the buffers are inside the HardwareSerial class, the
buffer variables can be made private.

One would expect a program size reduction from this change (at least
with multiple UARTs), but due to the fact that the interrupt handlers
now only have indirect access to a few registers (which previously were
just hardcoded in the handlers) and because there is some extra function
call overhead, the code size on the uno actually increases by around
70 bytes. On the mega, which has four UARTs, the code size decreases by
around 70 bytes.
2014-01-16 16:59:06 +01:00
Matthijs Kooijman 3babfc2a85 Use constants for register bit positions in HardwareSerial
Previously, the constants to use for the bit positions of the various
UARTs were passed to the HardwareSerial constructor. However, this
meant that whenever these values were used, the had to be indirectly
loaded, resulting in extra code overhead. Additionally, since there is
no instruction to shift a value by a variable amount, the 1 << x
expressions (inside _BV and sbi() / cbi()) would be compiled as a loop
instead of being evaluated at compiletime.

Now, the HardwareSerial class always uses the constants for the bit
positions of UART 0 (and some code is present to make sure these
constants exist, even for targets that only have a single unnumbered
UART or start at UART1).

This was already done for the TXC0 constant, for some reason. For the
actual register addresses, this approach does not work, since these are
of course different between the different UARTs on a single chip.

Of course, always using the UART 0 constants is only correct when the
constants are actually identical for the different UARTs. It has been
verified that this is currently the case for all targets supported by
avr-gcc 4.7.2, and the code contains compile-time checks to verify this
for the current target, in case a new target is added for which this
does not hold. This verification was done using:

for i in TXC RXEN TXEN RXCIE UDRIE U2X UPE; do echo $i; grep --no-filename -r "#define $i[0-9]\? " /usr/lib/avr/include/avr/io* | sed "s/#define $i[0-9]\?\s*\(\S\)\+\s*\(\/\*.*\*\/\)\?$/\1/" | sort | uniq ; done

This command shows that the above constants are identical for all uarts
on all platforms, except for TXC, which is sometimes 6 and sometimes 0.
Further investigation shows that it is always 6, except in io90scr100.h,
but that file defines TXC0 with value 6 for the UART and uses TXC with
value 0 for some USB-related register.

This commit reduces program size on the uno by around 120 bytes.
2014-01-16 16:36:06 +01:00
Matthijs Kooijman 494929495e Define a _NOP() macro
Recent avr-libc releases define one, but this allows using it also on
older avr-libc releases.
2014-01-16 16:29:41 +01:00
Matthijs Kooijman fc45ef0846 Simplify HardwareSerial::begin()
This simplifies the baud rate calculation, removing the need for a goto
and shortening the code a bit. Other than that, this code should not use
any different settings than before.

Code was suggested by Rob Tillaart on github.

Closes: #1262
2014-01-16 16:04:33 +01:00
Matthijs Kooijman d43fd2014c Remove unused variable 2014-01-16 13:52:40 +01:00
Cristian Maglie 0a0cda4f04 Slightly reduce code utilization by inlining HardwareSerail begin(baud) and operator bool() 2014-01-16 13:50:59 +01:00
Matthijs Kooijman 4bc8aa15e3 Remove duplicate code from HardwareSerial::begin() methods.
There are two begin methods, one which accepts just a baud rate and
uses the default bit settings and one which accepts both a baudrate and
a bit config. Previously, both of these contained a complete
implementation, but now the former just calls the latter, explicitely
passing the default 8N1 configuration.

Technically, this causes a small change: Before the UCSRC register was
untouched when calling begin(baud), now it is explicitely initialized
with 8N1. However, since this is the default configuration for at least
the Uno and the Mega (didn't check any others), probably for all avrs,
this shouldn't effectively change anything. Given that the Arduino
documentation also documents this as the default when none is passed,
explicitly setting it is probably a good idea in any case.
2014-01-16 13:20:11 +01:00
Matthijs Kooijman 46b0ada9a9 Make some operators in IPAddress const
These functions do not modify the IPAddress object, but were not marked
as const. This meant that you could not do:

void set_ip(const IPAddress& ip) {
	uint32_t copy = ip;
}

Since calling operator uint32_t() on ip would discard the constness of
the reference.
2014-01-15 16:20:48 +01:00
Federico Fissore 1c99bf0e83 Removed = char from #define. See https://github.com/arduino/Arduino/issues/1792#issuecomment-31650586 2014-01-06 18:20:37 +01:00
Federico Fissore 64a9681935 Added new EULER constant. Fixes #1792 2014-01-06 09:48:34 +01:00
Cristian Maglie 1eee97d980 Improved portability of String class (maniacbug) 2014-01-01 17:22:40 +01:00
Cristian Maglie bf37051397 Merge branch 'cast' of github.com:Lauszus/Arduino into Lauszus-cast
Conflicts:
	hardware/arduino/avr/cores/arduino/Print.cpp
2013-12-31 20:11:08 +01:00
Matthijs Kooijman 1978e82e4e Use PGM_P instead of prog_char
On later versions of avr-libc, prog_char is deprecated. In 0acebeeff48
the one occurence of prog_char was replaced by "char PROGMEM", which is
not entirely correct (PROGMEM is supposed to be an attribute on a
variable, not on a type, even though this is how things work in older
libc versions). However, in 1130fede3a2 a few new occurences of
prog_char are introduced, which break compilation on newer libc versions
again.

This commit changes all these pointer types to use the PGM_P macro from
<avr/pgmspace.h>. This macro is just "const char *" in newer libc
versions and "const prog_char *" in older versions, so it should always
work.

References #795
2013-12-31 20:01:40 +01:00
Kristian Lauszus ad9f78d727 Use reinterpret_cast to cast __FlashStringHelper to const char* 2013-12-27 20:01:03 +01:00
Matthijs Kooijman 94cf4c2830 Remove unneeded casts in Print::write(const String&)
Now that Print::write(const char*) is also available, these casts are no
longer needed.
2013-12-24 13:22:43 +01:00
Matthijs Kooijman 0fd4002607 Add uint8_t* versions of methods in Stream
The new functions just call their char* equivalents, but this allows
reading bytes into a buffer of uint8_t as well as chars.
2013-12-24 13:22:42 +01:00
Matthijs Kooijman 7ded037878 Add Print::write(const char *, size_t)
The new function just calls Print::write(const uint8_t *, size_t), but
this allows writing out a buffer of chars (without having to learn about
casts).
2013-12-24 13:22:42 +01:00
Federico Fissore dce9146485 Print.print optimization. Closes #1760 2013-12-23 11:50:39 +01:00
ntruchsess faffdc1585 remove all Changes besides operator== 2013-12-06 19:05:31 +01:00
ntruchsess 6cdf45953f add localPort to EthernetClient, simplify operator== 2013-11-27 10:40:57 +01:00
ntruchsess 68e218dda8 add operator==, remoteIP and remotePort to EthernetClient 2013-11-26 00:12:44 +01:00
Cristian Maglie 9b4562c4c5 Using NOT_AN_INTERRUPT defined constant 2013-10-31 12:44:24 +01:00
Cristian Maglie d7ed6ec361 Merge branch 'master' into ide-1.5.x 2013-09-30 16:25:10 +02:00
Cristian Maglie 1d865de59a Merge branch 'ide-1.5.x' into dev-ide-1.5.x-discovery
Conflicts:
	build/shared/revisions.txt
2013-09-10 12:10:57 +02:00
Cristian Maglie eb45bb95e0 Fixed HardwareSerial bug introduced in 1.5.3.
Fixes #1568
2013-09-09 13:09:27 +02:00
Federico Fissore 35f10e412f Merge remote-tracking branch 'arduino/ide-1.5.x' into dev-ide-1.5.x-discovery 2013-09-06 12:59:24 +02:00
Cristian Maglie cbeaa543fc Fixed String class regression after f80c6c5f35cddcf4761a3c97feb8504425e9d27d
This should make explicit String-from-integer constructor working again:

   int a = 10;
   String(a, 4);
2013-09-03 18:40:30 +02:00
Paul Brook 0ade989a2d USB CDC two argument begin()
Add two argument form of Serial_::begin

Signed-off-by: Paul Brook <paul@nowt.org>
2013-09-02 19:15:12 +01:00
Paul Brook c2a0030473 USB serial baud arg type
Make USB Serial_::begin() function take an unsigned long argument for
consistency with HardwareSerial.

Signed-off-by: Paul Brook <paul@nowt.org>
2013-09-02 19:02:55 +01:00
Cristian Maglie 540743129b Merge branch 'ide-1.5.x' into dev-ide-1.5.x-discovery
Conflicts:
	app/src/processing/app/Preferences.java
	app/src/processing/app/debug/Uploader.java
2013-08-23 15:59:24 +02:00
Cristian Maglie b3348a6706 Removed unused flags from String (free 1 byte of SRAM) 2013-08-20 15:15:47 +02:00
Cristian Maglie 023434a6be Merge branch 'master' into ide-1.5.x 2013-07-31 17:33:55 +02:00
Cristian Maglie 40b622a5d1 Merge branch 'issue1366' of github.com:Lauszus/Arduino into Lauszus-issue1366 2013-07-31 17:22:12 +02:00
Cristian Maglie acb3df6d43 Merge branch 'ide-1.5.x' into dev-ide-1.5.x-discovery
Conflicts:
	hardware/arduino/avr/cores/arduino/USBCore.cpp
2013-07-30 10:45:44 +02:00
Cristian Maglie 4de497b725 Move buffers into USB CDC (look #947 and #1369 for reference) 2013-07-27 12:06:42 +02:00
Cristian Maglie 090d53a74e Fixed compile problem for Leonardo after 0bd6a2d20fb9664255b20e0db11dd4586ebe9007 2013-07-26 12:50:17 +02:00
Matthijs Kooijman d1da7ef303 Make private members of HardwareSerial protected
This allows users to create subclasses.

Closes: #947
2013-07-26 12:41:35 +02:00
Matthijs Kooijman 714874dd8c Move buffers into HardwareSerial
This removes the need for doing an extra pointer dereference on every
access to the buffers, shrinking the code by around 100 bytes.

The members for these buffers must be public for now, since the
interrupt handlers also need to access them. These can later be made
private again.

Furthermore, the struct ring_buffer was removed. This allows the all
head and tail pointers to be put into the HardwareSerial struct before
the actual buffers, so the pointers all end up in the first 32 bytes of
the struct that can be accessed using a single instruction (ldd).

References: #947
2013-07-26 12:39:56 +02:00
Matthijs Kooijman a056282246 Use uint8_t for HardwareSerial ringbuffer pointers
Since the buffers aren't bigger than 64 bytes, these values can be
smaller. This saves a few bytes of ram, but also saves around 50 bytes
of program space, since the values can now be loaded using a single
instruction.

To prevent problems when people manually increase the buffer size, a
compile-time check is added.

Closes: #1078
2013-07-26 12:18:56 +02:00
Angus Gratton ff47a782f5 Remove hardcoded product names (all provided for in boards.txt) 2013-07-17 14:38:05 +02:00
Angus Gratton 0340b90366 Fix whitespace (tabify), oops 2013-07-17 14:37:49 +02:00
Angus Gratton a33cba585f Allow USB product and manufacturer strings to be supplied in boards.txt 2013-07-17 14:37:29 +02:00
Cristian Maglie d1db9d9810 Refactored YunClient and YunServer classes.
Added YunClient.connect() methods.
2013-07-04 17:15:52 +02:00
Federico Fissore 737ab5164d Merge remote-tracking branch 'arduino/ide-1.5.x' into dev-ide-1.5.x-discovery 2013-06-28 15:36:50 +02:00
Cristian Maglie 620fe0a3ac String: fixed number of whitespaces in concat() methods 2013-06-28 09:53:25 +02:00
Federico Fissore da361cac0d Merge remote-tracking branch 'arduino/ide-1.5.x' into ide-1.5.x-discovery 2013-06-25 16:13:56 +02:00
Cristian Maglie a7ba61d1b7 String: changed default to 2 decimal digits 2013-06-21 21:23:12 +02:00
Cristian Maglie 514b18bb05 Merge branch 'ide-1.5.x' into ide-1.5.x-discovery 2013-06-07 00:38:42 +02:00
Cristian Maglie f25e5e94f7 Fixed buffer overflow on String class (Paul Stoffregen) 2013-06-06 20:04:43 +02:00
Cristian Maglie 550b6adcfc Merged various bugfix / improvements to String class.
Merge branch 'master' into ide-1.5.x
2013-06-06 19:54:58 +02:00
Cristian Maglie db286ac0c1 Added support for Flash string on String class. 2013-06-06 16:33:20 +02:00
Cristian Maglie 2719777a48 String class: removed deep copy on substring method.
Small code cleanup.
2013-06-06 16:33:20 +02:00
Tevin Zhang c8a79d0d0c add String.toFloat 2013-06-06 16:19:34 +02:00
Ryan Esteves 6bef2ada06 Added remove methods to WString 2013-06-05 14:08:59 -04:00
Cristian Maglie 177ad96f86 Merge branch 'merge-1.0.5' into ide-1.5.x-discovery 2013-06-01 23:16:02 +02:00
Cristian Maglie d90fcca583 Merged 1.0.5 2013-05-29 18:30:36 +02:00
Federico Fissore 5ab307f06f Etheris references renamed Yun without accent to avoid encoding issues 2013-05-23 09:53:56 +02:00
Federico Fissore 09749bdf01 right etheris values 2013-05-16 15:37:42 +02:00
Fede85 cc5f2a52b4 Added support to INT6 on Leonardo.
Fixes #988
2013-05-13 21:22:59 +02:00
Cristian Maglie 7207108255 Merged 1.0.5
Still missing:
- updates to WiFi lib for sam.
- updates to examples of Ehternet and WiFi for sam.

Merge remote-tracking branch 'arduino/master' into ide-1.5.x

Conflicts:
	app/src/processing/app/Base.java
	app/src/processing/app/Editor.java
	app/src/processing/app/helpers/FileUtils.java
	app/src/processing/app/i18n/Resources_fr.po
	app/src/processing/app/i18n/Resources_fr.properties
	build/shared/revisions.txt
	hardware/arduino/avr/libraries/Ethernet/examples/DnsWebClient/DnsWebClient.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiChatServer/WifiChatServer.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiPachubeClient/WifiPachubeClient.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiPachubeClientString/WifiPachubeClientString.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiTwitterClient/WifiTwitterClient.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiUdpSendReceiveString/WifiUdpSendReceiveString.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiWebClient/WifiWebClient.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiWebClientRepeating/WifiWebClientRepeating.ino
	hardware/arduino/avr/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino
	libraries/WiFi/examples/WiFiChatServer/WiFiChatServer.ino
	libraries/WiFi/examples/WiFiPachubeClient/WiFiPachubeClient.ino
	libraries/WiFi/examples/WiFiPachubeClientString/WiFiPachubeClientString.ino
	libraries/WiFi/examples/WiFiTwitterClient/WiFiTwitterClient.ino
	libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino
	libraries/WiFi/examples/WiFiWebClient/WiFiWebClient.ino
	libraries/WiFi/examples/WiFiWebClientRepeating/WiFiWebClientRepeating.ino
	libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino
	libraries/WiFi/examples/WifiChatServer/WifiChatServer.ino
	libraries/WiFi/examples/WifiPachubeClient/WifiPachubeClient.ino
	libraries/WiFi/examples/WifiPachubeClientString/WifiPachubeClientString.ino
	libraries/WiFi/examples/WifiTwitterClient/WifiTwitterClient.ino
	libraries/WiFi/examples/WifiUdpSendReceiveString/WifiUdpSendReceiveString.ino
	libraries/WiFi/examples/WifiWebClient/WifiWebClient.ino
	libraries/WiFi/examples/WifiWebClientRepeating/WifiWebClientRepeating.ino
	libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino
2013-05-11 14:37:25 +02:00
Cristian Maglie eb40f35b2d Added const modifier to String.c_str() 2013-05-06 18:10:29 +02:00
Cristian Maglie 8673113e43 Added c_str() method to String class. 2013-05-06 08:57:06 +02:00
Cristian Maglie ccf7eb9a56 Stream "_timeout" field and related methods are now protected instead of private.
This allows better optimization on classes that extends Stream without losing
timeout capabilities.
2013-05-06 08:52:31 +02:00
Kristian Sloth Lauszus 8d7deb7a1f Removed double instance of the same code 2013-05-02 01:00:17 +02:00
Kristian Sloth Lauszus 0a7b402c45 Check if ATmega32u4 is defined
Needed in order to work with Arduino Leonardo
2013-04-18 00:15:06 +02:00
Kristian Sloth Lauszus 8d26462be2 Removed call to analogPinToChannel for Leonardo 2013-04-18 00:07:33 +02:00
Kristian Sloth Lauszus b9717187fd Use analogPinToChannel if it's defined 2013-04-17 19:49:40 +02:00
Kristian Sloth Lauszus ed42d95412 Added support for all variants of Sanguino 2013-04-04 20:55:15 +02:00
Cristian Maglie ee90e68e86 Merged 1.0.5
Merge remote-tracking branch 'arduino/master' into ide-1.5.x

Conflicts:
	app/src/processing/app/Base.java
	build/shared/revisions.txt
	hardware/arduino/avr/cores/arduino/malloc.c
	hardware/arduino/cores/arduino/avr-libc/malloc.c
	hardware/arduino/cores/arduino/malloc.c
	todo.txt
2013-04-03 13:51:04 +02:00
Cristian Maglie f50c307be2 Fix deprecated ISR names for ATmega8.
See #881
2013-03-29 15:17:54 +01:00
Cristian Maglie ab41589c2b Removed deprecated interrupt handlers
Fixes #831 #881 #955 #1123 #1140
2013-03-29 14:41:36 +01:00
Cristian Maglie f39a246be5 Increased malloc margin to 128.
https://github.com/arduino/Arduino/pull/1329#issuecomment-15609148
See #857 #1329
2013-03-29 11:48:35 +01:00
Cristian Maglie f567db7573 Backported malloc and realloc from avr-libc 1.8.0 (without test code)
See #857
2013-03-23 21:40:52 +01:00
David A. Mellis aa218e803a Use analogPinToChannel() macro if present for ATtiny25/45/85.
This allows use of A0, A1, A2, A3 constants and for them to be mapped to the appropriate analog input channel. It should only be used if the macro is actually defined.
2013-03-06 17:49:44 -05:00
Cristian Maglie 5f4e55a3d2 Merged 1.0.4 pre-release into 1.5 2012-12-17 16:53:45 +01:00
Cristian Maglie 09b755fb9c Add trivial new[] and delete[] operators (Justin R. Cutler)
Fixes #73
Fixes #883
2012-12-16 14:30:12 +01:00
Cristian Maglie 025ec2bc84 Fixed malloc() bug. (Paul Stoffregen)
Fixes #857
2012-12-16 14:16:35 +01:00
Cristian Maglie 433090f18b Merged 1.0.3 2012-12-10 15:55:05 +01:00
Federico Fissore c453e0a32e fixed permissions on a lot of text files. see #1116 2012-12-10 10:42:49 +01:00
David A. Mellis c4337d812b Moving TXCO definition into HardwareSerial.cpp from HardwareSerial.h.
Otherwise, you get an error when compiling for processors with no serial port because the header file is always compiled.

See, for an example of the problem: https://github.com/damellis/attiny/issues/8
2012-12-08 10:44:48 -05:00
Cristian Maglie 1668039101 Added support for Arduino Esplora 2012-12-07 18:11:07 +01:00
David A. Mellis 9d638ca052 Clarifying comment. 2012-11-29 13:55:59 -05:00
David A. Mellis 4a01b84cab Moving TXCO definition into HardwareSerial.cpp from HardwareSerial.h.
Otherwise, you get an error when compiling for processors with no serial port because the header file is always compiled.

See, for an example of the problem: https://github.com/damellis/attiny/issues/8
2012-11-29 13:48:01 -05:00
Cristian Maglie 706f5c74b2 Merged 1.0.2
Merge remote-tracking branch 'arduino/master' into ide-1.5.x

Conflicts:
	app/src/processing/app/debug/AvrdudeUploader.java
	build/shared/examples/09.USB/Keyboard/KeyboardLogout/KeyboardLogout.ino
	build/shared/examples/09.USB/Keyboard/KeyboardReprogram/KeyboardReprogram.ino
	build/shared/examples/09.USB/Keyboard/KeyboardSerial/KeyboardSerial.ino
	build/shared/examples/09.USB/Mouse/ButtonMouseControl/ButtonMouseControl.ino
	build/shared/examples/09.USB/Mouse/JoystickMouseControl/JoystickMouseControl.ino
	hardware/arduino/boards.txt
2012-11-04 22:49:14 +01:00
Cristian Maglie 69aead513d Added general yield()-hook for cooperative scheduling development (part 2) 2012-11-02 18:12:21 +01:00
David A. Mellis 769aab0115 HardwareSerial: change byte to uint8_t (since byte definition isn't present). 2012-11-02 09:24:51 -04:00
David A. Mellis cfec7864e9 Adding LilyPad Arduino USB. 2012-11-01 10:45:50 -04:00
Cristian Maglie 6e2b0e8755 Added general yield()-hook for cooperative scheduling development 2012-10-31 01:37:37 +01:00
David A. Mellis 42ca56fb83 Adding Micro. 2012-10-27 14:12:26 -04:00
David A. Mellis 69fa44473b Updating USB core to work at 8 MHz (different PLLCSR value). 2012-10-18 15:03:23 -04:00
Cristian Maglie 037020e938 Merged latest changes in AVR arduino core 2012-10-18 18:47:50 +02:00
Cristian Maglie 6a45ba48ab Merged upstream arduino branch 2012-10-18 15:50:09 +02:00
David A. Mellis 6d296e0fab Adding ATmega644P check to ATmega1284P check. 2012-10-09 13:53:09 -04:00
David A. Mellis 1a0f22225b Moving ATmega32U4 Timer 2 #undef's to Leonardo pins_arduino.h file. 2012-09-13 09:19:52 -04:00
David A. Mellis 999619579b Merge pull request #102 from sgk/leonardoTone
Fix for tone() on Leonardo.
2012-09-13 06:07:10 -07:00
Peter Van Hoyweghen dc86d26a11 Avoid serial buffer overrun on leonardo 2012-09-13 08:46:45 -04:00
David A. Mellis 5ca747e312 Changing setting of the UMSELn bits (for UART mode) and serial config values.
Before, the UMSELn1 bit was being to set to 1, putting the UART into a reserved mode. Now, we only set the high (0x80) bit to 1 for the ATmega8, which is needed to access UCSRnC (whose i/o address is shared with UBRRH).

Also, no longer bitwise-or the new config with the existing register value, because we're actually configuring all the settings in the register. (We're not using UCPOL, but it's supposed to be 0 in asynchronous mode.)
2012-08-30 08:47:35 -04:00
David A. Mellis 1650169f5d Renaming serial config constants to, e.g., SERIAL_8N1. 2012-08-30 08:21:12 -04:00
David A. Mellis 6542625bc2 Merge pull request #109 from Alarus/master
Serial.begin() parameter to set data bits, parity, stop bits.
2012-08-30 05:08:28 -07:00
David A. Mellis 70b6f11d63 Fixing Serial.flush() breakage on Leonardo (WestFW).
http://code.google.com/p/arduino/issues/detail?id=1020
2012-08-30 07:44:25 -04:00
David A. Mellis 912092b03f Fixing ATmega8 breakage from flush() change. (WestFW)
http://code.google.com/p/arduino/issues/detail?id=1019
2012-08-29 20:52:30 -04:00
David A. Mellis c29b408a9d Adding overloads so Serial.write(0) works.
http://code.google.com/p/arduino/issues/detail?id=1006
2012-08-29 16:32:05 -04:00
David A. Mellis 00ab72619e Serial.flush() waits for last character to be transmitted (michele.mazzucchi)
http://code.google.com/p/arduino/issues/detail?id=871
2012-08-28 08:02:54 -04:00
Adam Dunlap c40ab91c41 Fix issue 866
Fix issue 866 by adding a const qualifier to what the F macro casts to.
2012-08-16 20:59:33 -07:00
Alarus af8ff1d1e0 Update hardware/arduino/cores/arduino/HardwareSerial.cpp
New Serial.begin(baud, config);
2012-08-14 19:55:13 +06:00
Alarus 1cda182f33 Update hardware/arduino/cores/arduino/HardwareSerial.h
New Serial.begin(baud, config);
2012-08-14 19:52:00 +06:00
Alarus b6faa6e254 Update hardware/arduino/cores/arduino/HardwareSerial.cpp
New Serial.begin(baud, config);
2012-08-14 19:50:36 +06:00
Alarus 0c0defa645 Update hardware/arduino/cores/arduino/HardwareSerial.cpp
Adding advanced begin (); with the ability to specify the length of bits, parity, stop bits.
2012-08-12 22:07:42 +06:00
Alarus ed699cf636 Update hardware/arduino/cores/arduino/HardwareSerial.cpp
Adding advanced begin (); with the ability to specify the length of bits, parity, stop bits.
2012-08-12 21:35:48 +06:00
Alarus 1f6dd92313 Update hardware/arduino/cores/arduino/HardwareSerial.cpp
Adding advanced begin (); with the ability to specify the length of bits, parity, stop bits.
2012-08-12 20:57:57 +06:00
Alarus 03a4b50b8e Update hardware/arduino/cores/arduino/HardwareSerial.h
Adding advanced begin (); with the ability to specify the length of bits, parity, stop bits.
2012-08-12 20:23:00 +06:00
Alarus b9bbc71dca Update hardware/arduino/cores/arduino/HardwareSerial.h
Adding advanced begin (); with the ability to specify the length of bits, parity, stop bits.
2012-08-12 20:18:50 +06:00
Shigeru KANEMOTO 4293079076 Fix for tone() on Leonardo. 2012-08-08 18:27:40 +09:00
David A. Mellis e77ee2903b Print "ovf" if float to be printed doesn't fit in a long.
http://code.google.com/p/arduino/issues/detail?id=967
2012-06-28 23:20:56 -04:00
David A. Mellis 2ef2f9d5c7 Print "inf" for infinite floating point numbers (using isinf()).
http://code.google.com/p/arduino/issues/detail?id=961
2012-06-23 10:37:35 -05:00
David A. Mellis 29ff4f779a Adding write(str) and write(buf, size) for USB CDC.
So that they work on the Leonardo.

http://code.google.com/p/arduino/issues/detail?id=958
2012-06-14 15:54:13 +01:00
David A. Mellis 3436ca97cb Printing NaN values as "nan" in printFloat().
http://code.google.com/p/arduino/issues/detail?id=946
2012-06-04 23:30:41 -04:00
David A. Mellis 57973bcd49 Check for NULL pointer in Print.write().
Otherwise, trying to print(NULL) or write(NULL) could print a random
character.

http://code.google.com/p/arduino/issues/detail?id=941
2012-06-03 07:48:32 -04:00
Kristian Lauszus 4ed0bd2bd5 Added support for interrupt on INT2 and INT3 on the Leonardo 2012-06-02 20:08:46 +02:00
David A. Mellis 810803c6d3 Merge remote-tracking branch 'upstream/master' 2012-05-21 09:31:54 -07:00
David A. Mellis b495294aa3 Adding readString() and readStringUntil() to Stream (Adrian McEwen).
This isn't necessarily a particularly efficient implementation (it
allocates memory one character at a time and so may lead to
fragmentation) but it seems to work.

http://code.google.com/p/arduino/issues/detail?id=454
2012-05-16 15:39:34 -04:00
Zach Eveland efa7593772 Mouse.isPressed() now checks only for left button by default
if no argument is given now checks left button by default to be consistent with press() and release() (thanks, David Mellis)
2012-05-15 15:48:51 -04:00
Zach Eveland 757a77ab67 renamed Leonardo USB_ class to USBDevice_ to be unambiguous. renamed "USB" object to "USBDevice" to prevent conflict with USB Host library (thanks Massimo) 2012-05-01 11:18:15 -04:00
Zach Eveland d755d0035d changed PID values for Leonardo bootloader and sketch
done to avoid driver problems for users who installed the pre-release bootloader and driver
2012-04-25 15:56:18 -04:00
Zach Eveland 6ae1a17235 bugfix for configuring PWM on D6 and D13 too early. (thanks to Limor Fried)
was starting PWM on these pins too soon - in init() instead of when analogWrite() was called.  as a result doing output on port registers directly failed.
2012-04-19 15:52:16 -04:00
Zach Eveland 56ddc4637d bugfix for boards with a timer 4 but no channel D
compilation failed for Mega because the COM4D1 and OCR4D registers are defined for 32U4 but not for Mega
2012-04-19 15:46:32 -04:00
Zach Eveland 49f7fb00fd fixed logic bug in Caterina that could stop the bootloader from entering self-programming mode 2012-04-11 23:19:05 -04:00
Zach Eveland e2e0260094 Micro I hardly knew ye 2012-04-09 10:12:14 -04:00
Zach Eveland ec83f55b62 sketch USB VID and PID values are passed in from boards.txt at compile time now. changed sketch PIDs to final values. also uncommented Micro section in boards.txt 2012-04-09 08:06:35 -04:00
Zach Eveland ee611dc194 Revert "Revert "added a short delay and comment to boolean operator in CDC""
This reverts commit 200eefb4e2ac7796c5c901e8fd9369c85ec544c5.
2012-04-06 21:23:17 -04:00
Federico Vanzati 02c5849501 Revert "added a short delay and comment to boolean operator in CDC"
This reverts commit ade4893f585e3e94fa6cf683620e1d12afc88ecd.
2012-04-06 17:36:09 +02:00
Zach Eveland dd55096901 added a short delay and comment to boolean operator in CDC
Delay fixes problem where the port has been configured but not quite opened.  Federico found that 10 ms was the minimum time needed to avoid problems.
2012-04-03 10:52:38 -04:00
Zach Eveland a984b581a8 added Boolean operators to HardwareSerial and CDC to test whether the port is ready to send data.
Mostly useful for Leonardo - simple way to test whether the port is actually opened by an application and ready to receive data.  For Serial objects attached to real UARTs always returns true.
2012-04-01 12:54:35 -04:00
Zach Eveland 1534b2b730 fixed logic error in Keyboard.release() - now removes every occurrence of a key if it's present more than once 2012-03-28 19:46:32 -04:00
Zach Eveland 83feb14013 removed horrible multi-key Keyboard.press() and Keyboard.release() methods
Saves 924 bytes of Flash
2012-03-28 18:46:10 -04:00
Zach Eveland d3eabc9c01 eliminated Keyboard.type() - unnecessary duplication of Keyboard.write() (David Mellis). Also edit KeyboardReprogram example which was the only example using type() 2012-03-28 18:35:26 -04:00
Zach Eveland 58c36f76d5 added methods to Keyboard to handle multiple simultaneous key presses or releases (up to six each) 2012-03-26 17:28:02 -04:00
Zach Eveland f646c9186d Keyboard.type() now just presses and releases the key indicated - doesn't releaseAll() 2012-03-26 17:00:16 -04:00
Zach Eveland 9c040a8a2b added stub methods for begin() and end() to Mouse and Keyboard 2012-03-26 16:02:40 -04:00
Zach Eveland 8c618773b5 reduced delay before starting the Leonardo bootloader
Since we use a magic RAM flag to signal to the bootloader there's a risk of the sketch overwriting the magic RAM location before the bootloader starts.  By reducing the watchdog timeout we reduce the chance of this happening.
2012-03-14 18:17:22 -04:00
Cristian Maglie b407337677 Fix for some strange behaviours during board reset 2012-03-07 16:21:04 +01:00
Zach Eveland 1566006871 Added Keyboard support for all modifier and all common non-printing keys. 2012-03-03 23:37:39 -05:00
Zach Eveland 54fb0bf3f5 Removed support for key mapping in Keyboard.
Was no longer being used and would be damn near impossible to support with the new scheme for handling modifiers and non-printing keyboard characters.
2012-03-03 23:06:44 -05:00
Zach Eveland fbea67532a added Keyboard methods press(), release(), and releaseAll()
Changes mean that a single, persistent key report must be used so keys can be added or removed.  Also reimplemented type() using the new methods.
2012-03-03 22:54:45 -05:00
Zach Eveland 74863e4bdf Merge branch 'master' of github.com:arduino/Arduino into LUFA_bootloader
Conflicts:
	.gitignore
2012-03-03 13:28:39 -05:00
Zach Eveland 8f5869009c fixed minor compilation warnings for Leonardo 2012-03-03 13:26:57 -05:00
David A. Mellis 4fade7007f Small changes for the ATmega1284.
http://code.google.com/p/arduino/issues/detail?id=736
2012-03-02 18:58:53 -05:00
Zach Eveland c8ca7f9636 changed auto-reset logic for Leonardo. only do WDT manipulation if the port is opened at 1200 bps. (Dave Mellis) 2012-03-01 08:51:16 -05:00
Cristian Maglie 73066a4ca2 Autoreset 1200 bps fix. 2012-02-27 17:41:38 +01:00
Zach Eveland 0138ee9b01 shortened the watchdog period for resetting Leonardo from 2 s to 250 ms. Reset into bootloader is much snappier. 2012-02-22 22:33:44 -05:00
Zach Eveland 66019a7550 Merge branch 'master' of github.com:arduino/Arduino into LUFA_bootloader 2012-02-22 15:19:32 -05:00
Zach Eveland 7948125208 Leonardo now checks whether bootloader should be run after a WDT event.
Before the sketch initiates an auto-reset for upload it pokes a magic word into a specific RAM address.  On starting the bootloader checks this address.  If it finds the magic word it knows the bootloader code should run. If not it jumps straight back to sketch.

Test in a sketch by adding to setup():
wdt_enable(WDTO_2S);

Sketch should upload, start, run for two seconds, WDT, and sketch should restart (not bootloader).

Had to cut out unused descriptor code to make the bootloader still fit in 4k.
2012-02-14 12:17:30 -05:00
Zach Eveland 924e5a4846 Leonardo auto-reset-and-upload changes for Windows (explanation below)
On Windows COM port changes when board switched between bootloader and sketch.  No way to prevent this so now Windows users have to select the upload port separate from the comm port.  Also, handling of reset into bootloader was broken on Windows.  Would occasionally leave the original COM port completely unusable.  Changed the way this reset is initiated.
Finally, had to add upload.disable.flushing=true flag to boards.txt so IDE wouldn't try to flush the original COM port after it disappeared.
2012-02-13 00:56:06 -05:00
Zach Eveland ac3aca0acf changed Leonardo bootloader and sketch PID values again (now 0x0701 for bootloader, 0x0801 for sketch) 2012-02-13 00:10:16 -05:00
David A. Mellis a7afdf40ba prog_char -> char PROGMEM in Print.cpp
http://code.google.com/p/arduino/issues/detail?id=795
2012-02-12 19:52:03 -05:00
Zach Eveland 35bbf80ba9 adjusting descriptors - trying to prevent sketch and bootloader from grabbing different COM numbers on Windows 2012-02-08 01:16:56 -05:00
Zach Eveland d7b0507e8a fixed starting Leonardo bootloader from sketch
AvrdudeUploader class opens and closes Leonardo port at the magic baudrate before starting avrdude; reduced reset timeout from 250 ms to 15 ms
2012-02-03 21:42:46 -05:00
Zach Eveland a794f295e0 Merge branch 'master' of github.com:arduino/Arduino into LUFA_bootloader 2012-02-03 19:54:33 -05:00
David A. Mellis e1438efb3a Making head and tail unsigned to avoid division in serial ISR.
http://code.google.com/p/arduino/issues/detail?id=776
2012-02-03 17:24:29 -05:00
Zach Eveland 45d3b10295 Caterina now cleanly hands off operation to the sketch
had to remove TIMER1 operation from bootloader - was interfering with normal sketch operation
2012-01-24 18:04:10 -05:00
Zach Eveland 989f672d34 Merge branch 'master' of github.com:arduino/Arduino into new-extension 2012-01-10 12:02:27 -05:00
David A. Mellis 6c00397e22 Adding INPUT_PULLUP option pinMode(). (Paul Stoffregen).
This also changes pinMode(pin, INPUT); to explicitly disable the pull-up resistor, even if it was previously set.

http://code.google.com/p/arduino/issues/detail?id=246
2012-01-02 14:20:28 -05:00
David A. Mellis 3b962be273 Fixing findUntil() problem with repeated initial characters. (Jeffery.zksun)
http://code.google.com/p/arduino/issues/detail?id=768
2012-01-02 13:49:59 -05:00
David A. Mellis 95b51c7728 Fixing warnings (unsigned comparisons to 0). (maniacbug) 2012-01-02 12:57:23 -05:00
David A. Mellis 3f429a9c61 Fixing static is not at beginning of declaration warnings (maniacbug). 2012-01-02 12:38:23 -05:00
Zach Eveland cbce8ed4bf Merge branch 'master' of github.com:arduino/Arduino into new-extension 2011-12-31 11:21:44 -05:00
David A. Mellis 3ece2827a4 Simplifying microseconds <-> clock cycles conversions. (Rob Tillaart)
This should fix problems with overflows in pulseIn().  It may make millis() slightly less precise for clock speeds that aren't multiple of 1 million, but we don't really support those anyway.

http://code.google.com/p/arduino/issues/detail?id=675
2011-12-30 18:05:12 -05:00
Zach Eveland 4e9fb924b2 changed Keyboard write() method to type(). Made write() an alias for type() to allow subclassing by Stream. 2011-12-20 17:09:44 -05:00
Zach Eveland e405a6eb60 Revert "changed Keyboard write() method to type(). Made write() an alias for type() to allow subclassing by Stream."
This reverts commit de1d5fc0cb82874c0dcb766c5fb27ab36c5cb32c.
2011-12-20 17:08:07 -05:00
Zach Eveland e4930f866d changed Keyboard write() method to type(). Made write() an alias for type() to allow subclassing by Stream. 2011-12-20 17:00:19 -05:00
Zach Eveland 6dc00061df fixed attachInterrupt() on Leonardo
had to define a separate block for the 32U4 since it looks like a Mega-series board based on a simple register trick.  Only two useable HW interrupts though, compared to the Megas' 8, and numbering differs.
2011-12-19 15:40:12 -05:00
Zach Eveland 58fc0d17cc added asynchronous buffering of received CDC characters
This fixes the issue Federico reported where bytes written by host but not read by sketch would cause serial connection to lock up.  Ring buffer implementation is based on HardwareSerial.cpp.

Adds public accept() method to CDC.
2011-12-18 17:52:35 -05:00
Zach Eveland 177641003c fixed digitalWrite on timer 4 pins (D6 and D13) 2011-12-18 14:18:38 -05:00
Zach Eveland c58fcf5554 fixed TIMER4 use on Leonardo
ATMEGA32U4 has major differences in TIMER4 registers compared to ATMEGA1280 and 2560.  turnOffPWM, analogWrite, and initialize routines had wrong registers, bit names, etc.
2011-12-11 19:56:50 -05:00
David A. Mellis a9d1368e4c Updated reference voltage defines for ATmega1284P.
http://code.google.com/p/arduino/issues/detail?id=728
2011-12-02 17:18:15 -05:00
David A. Mellis c2263dfc0b Support 3rd external interrupt on ATmega1284P (maniacbug)
http://code.google.com/p/arduino/issues/detail?id=728
2011-12-02 17:17:27 -05:00
David A. Mellis aae9972a2b Fixing delayMicroseconds() timing for 20 MHz clocks. (Erdem U. Altinyurt)
http://code.google.com/p/arduino/issues/detail?id=306
2011-12-02 17:04:20 -05:00
David A. Mellis b86a613d99 readBytes() and readBytesUntil() handle zero bytes and return # of bytes read.
http://code.google.com/p/arduino/issues/detail?id=586
2011-11-19 16:23:19 -05:00
Zach Eveland 3c60b1e54f Fixed handling of Ax constants on Leonardo
Fixed mistake in assignment and handling of A6-A11 constants.  Renumbered constants for all Ax channels.
2011-11-16 10:49:41 -05:00
Zach Eveland 4b7771a815 restored original non-interrupt-driven DiskLoader
Interrupt-driven version was a dead-end - too many bugs with that approach.
2011-11-09 14:04:59 -05:00
Zach Eveland 61b03fc985 Merge branch 'new-extension' of github.com:arduino/Arduino into diskloader_reboot 2011-10-31 21:42:09 -04:00
David A. Mellis aaa69be264 Protecting the version of parseInt() and parseFloat(). (Paul Stoffregen)
This should allow us more flexibility in determining how to handle these functions later.  For example, in specifying that initial characters shouldn't be skipped.

http://code.google.com/p/arduino/issues/detail?id=698
2011-10-29 17:40:23 -04:00
Zach Eveland 3524f2ff0b Revert "Merge branch 'master' of github.com:arduino/Arduino into diskloader_reboot"
This reverts commit df9835efafd13685251749bc210c0b96a18a96a5, reversing
changes made to ec45af8bfa9222a807c075dd1db4b5aa798bba03.

Conflicts:

	hardware/arduino/variants/mega/pins_arduino.h
	libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino
2011-10-27 11:45:13 -04:00
Zach Eveland ec93cd74a1 Merge branch 'new-extension' of github.com:arduino/Arduino into diskloader_reboot
Conflicts:
	hardware/arduino/variants/mega/pins_arduino.h
	libraries/Ethernet/examples/PachubeClient/PachubeClient.ino
	libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino
2011-10-27 11:41:02 -04:00
Zach Eveland 415a5e119d changes in core and boards.txt to support new bootloader
old bootloader could fit in only 2 kB of flash.  new version has to have a 4 kB block - jump-to address and boards.txt must reflect this.
2011-10-27 11:36:10 -04:00
Zach Eveland 29cfd9e9fe Merge branch 'master' of github.com:arduino/Arduino into diskloader_reboot
Conflicts:
	app/src/processing/app/Editor.java
	app/src/processing/app/Sketch.java
	build/shared/examples/4.Communication/SerialCallResponse/SerialCallResponse.pde
	build/shared/lib/theme/theme.txt
	hardware/arduino/cores/arduino/HardwareSerial.h
	hardware/arduino/cores/arduino/Print.cpp
	hardware/arduino/cores/arduino/WString.h
	hardware/arduino/variants/mega/pins_arduino.h
	libraries/Ethernet/examples/PachubeClient/PachubeClient.ino
	libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino
	libraries/Firmata/examples/EchoString/EchoString.ino
	libraries/SD/File.cpp
	libraries/SoftwareSerial/SoftwareSerial.cpp
	libraries/SoftwareSerial/SoftwareSerial.h
	libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino
	libraries/SoftwareSerial/keywords.txt
2011-10-27 09:32:27 -04:00
David A. Mellis 5c9d10ad94 Bug fix in replace().
http://code.google.com/p/arduino/issues/detail?id=694
2011-10-25 11:15:14 -04:00
David A. Mellis 8d48010edf Moving ARDUINO_MAIN from main.cpp to wiring_digital.c and hiding PA, PB, etc.
http://code.google.com/p/arduino/issues/detail?id=677
http://code.google.com/p/arduino/issues/detail?id=691
2011-10-24 16:50:15 -04:00
David A. Mellis 85f10a7150 Correcting analogReference() constants for ATtiny24/44/84 and 25/45/85.
DEFAULT, EXTERNAL, and INTERNAL have different values on those processors.
2011-10-24 15:44:01 -04:00
David A. Mellis d3fa070d10 Lowering timer 1 prescale factor (to 8 from 64) for F_CPU less than 8 MHz.
Otherwise, you can see flicker on an LED.
2011-10-21 11:54:11 -04:00
David A. Mellis 77cdeb5b93 Fixing more warnings (Paul Stoffregen). 2011-10-10 11:28:44 -04:00
David A. Mellis 075bb009b9 Fixing warnings in Stream (Paul Stoffregen)
http://code.google.com/p/arduino/issues/detail?id=208
2011-10-02 09:44:21 -04:00
David A. Mellis e0c524b057 Using alternate timer 0 overflow interrupt signal name for ATtiny24/44/84. 2011-09-30 11:24:44 -04:00
Zach Eveland d004d6a9b4 added Mouse.isPressed() method 2011-09-16 16:59:14 -04:00
Zach Eveland 3287477db1 made some Keyboard methods private 2011-09-16 16:43:07 -04:00
Zach Eveland 5bbe2a63e4 added support for TIMER4D used for PWM on Leonardo and Micro D6 2011-09-16 16:36:42 -04:00
Zach Eveland 8e0f035c9b added automatic one-shot TX and RX LED control for sketch USB 2011-09-16 14:32:25 -04:00
Zach Eveland 7166603c89 added to sketch iProduct and iManufacturer strings identifying board as either an "Arduino Leonardo" or "Arduino Micro" manufactured by "Arduino LLC" 2011-09-16 12:29:47 -04:00
Zach Eveland 983cfc058e Merge branch 'new-extension' of https://github.com/arduino/Arduino into new-extension 2011-09-16 10:27:11 -04:00
Zach Eveland d0b0f3e45d fixed analog pin mapping for 32u4 2011-09-13 23:52:26 -04:00
Zach Eveland 15c4c96929 fixed Mouse button assignments 2011-09-13 21:37:46 -04:00
Zach Eveland d3c96622b3 made Mouse.buttons() private. removed MOUSE_ALL macro 2011-09-12 08:14:13 -04:00
David A. Mellis 023ea285e1 Don't consume trailing char in parseInt() and parseFloat (Paul Stoffregen).
http://code.google.com/p/arduino/issues/detail?id=624
2011-09-09 16:24:47 -04:00
Zach Eveland c0ad36ad43 Merge branch 'new-extension' of https://github.com/arduino/Arduino into new-extension
Conflicts:
	build/linux/dist/tools/avrdude.conf
2011-09-08 20:26:47 -04:00
Zach Eveland e52cf0e420 fixed bug where sketches over 28k caused subsequent auto-reset-and-upload attempts to fail. fixed bug in reboot routine, changed fuses to select 1024-word bootloader size, disabled hardware boot enable. 2011-09-08 19:31:18 -04:00
Zach Eveland 63ec4aba22 added compile-time definition of sketch PID. PID is pulled from variants/leonardo or the new variants/micro as appropriate. 2011-09-08 15:52:05 -04:00
Zach Eveland 6cca25b8c4 Revert "support compile-time passing of PID to Leonardo/Micro sketches. PID comes from boards.txt - different for Micro and Leonardo"
This reverts commit 3e0d195492247a7e7c2ec72476bf2a0991ea6d48.
2011-09-08 15:39:17 -04:00
Zach Eveland 10c041de80 support compile-time passing of PID to Leonardo/Micro sketches. PID comes from boards.txt - different for Micro and Leonardo 2011-09-08 11:23:55 -04:00
David A. Mellis 8b13206e65 Making Print::write(char *) non-virtual.
http://code.google.com/p/arduino/issues/detail?id=607
2011-09-07 18:41:05 -04:00
David A. Mellis 3c66dc1b8d Changing to a simpler mental model for serialEvent (Paul Stoffregen).
http://code.google.com/p/arduino/issues/detail?id=626
2011-09-07 17:47:17 -04:00
Zach Eveland d81084e8e9 changed auto-reset trigger condition to fix auto-reset-and-upload for Windows. now reboots when a port, opened at 1200 bps, is closed. 2011-09-06 20:58:00 -04:00
Zach Eveland 95fd39090e changed baudrate for auto-reset-and-upload back to 1200 bps. specified arduino protocol for Leonardo avrdude upload. 2011-09-05 13:08:05 -04:00
Zach Eveland 280f381265 Merge branch 'new-extension' of https://github.com/arduino/Arduino into new-extension
Conflicts:
	build/macosx/dist/tools-universal.zip
	build/windows/avr_tools.zip
	hardware/arduino/cores/arduino/HardwareSerial.cpp
2011-09-05 12:53:45 -04:00
David A. Mellis 7b0d88b954 Moving serialEvent() calls from RX interrupts to main for() loop (after loop()).
http://code.google.com/p/arduino/issues/detail?id=584
2011-08-31 15:52:56 -04:00
David A. Mellis 84a0ad9fd3 Renaming writeError() to getWriteError() in Print (and Stream and friends).
http://code.google.com/p/arduino/issues/detail?id=608
2011-08-31 15:39:20 -04:00
Zach Eveland 90ea0707e6 added Mouse press() and release() 2011-08-30 20:23:06 -04:00
Zach Eveland df068274f4 on a CDC or HID write() error, call setWriteError(). better handling of USB_Send errors in CDC. 2011-08-30 17:25:35 -04:00
amcewen 527ff3c7f8 Created an abstract base class UDP to match the Client and Server classes, and reworked the Ethernet library to use it and derive EthernetUDP. 2011-08-30 21:27:31 +01:00
Zach Eveland af635024db support for non-Leonardo boards is back! 2011-08-30 11:50:08 -04:00
Zach Eveland 481fdeab79 CDC and HID write() routines now return non-void - brought in line with new write behavior 2011-08-30 11:04:34 -04:00
Zach Eveland 4ce1dea595 Merge branch 'mainline' into new-extension 2011-08-30 08:38:06 -04:00
amcewen 3f7d2c8977 Changed names of the Ethernet classes: Client -> EthernetClient, NetClient -> Client, and basic testing performed 2011-08-29 22:36:28 +01:00
amcewen 528e95b14d Final changes to integrate latest core updates to WiFly branch 2011-08-28 22:26:07 +01:00
amcewen 8ce77304f7 Merge branch 'master' into wifly_integration 2011-08-28 20:28:53 +01:00
Zach Eveland 39e0796aad auto-upload-and-reset works now at 300 bps. patched avrdude for Mac to support 300 bps connection, changed core and boards.txt to match 2011-08-27 20:32:34 -04:00
amcewen f9d50a7930 Merge branch 'new-extension' of https://github.com/arduino/Arduino 2011-08-27 23:53:42 +01:00
David A. Mellis 5130a13294 Moving write errors out of return value into separate API methods.
write(), print(), println() now return size_t (and don't use negative values to signal errors).
Print adds writeError() for checking for write errors, clearWriteError() to reset the flag to false, and a protected setWriteError() for signalling errors.

http://code.google.com/p/arduino/issues/detail?id=598
2011-08-26 16:08:14 -04:00
David A. Mellis 0635790dd1 Changing from long to ssize_t (int) for write(), print(), println() return. 2011-08-26 14:20:41 -04:00
Zach Eveland f0ac64d2db bugfix - Serial.write() would try to send even if no CDC connection was open. 2011-08-24 21:04:30 -04:00
Zach Eveland 160bf890e0 changed auto-reset method for upload: now triggered by opening port at 1200 bps 2011-08-24 17:12:28 -04:00
David A. Mellis f282cbaf96 write(), print(), and println() now return number of bytes written.
The type is long, and negative values indicate errors.  Needs more testing.
http://code.google.com/p/arduino/issues/detail?id=551
2011-08-23 19:12:03 -04:00
Zach Eveland 0d592a5fea USB microcontrollers will call USB.attach() after init(), before setup() 2011-08-18 19:59:35 -04:00
Zach Eveland 7d575222af HW Serial on pins 0 and 1 works. Accessed by Serial1.* methods 2011-08-18 19:40:04 -04:00
David A. Mellis 9bc7be0d9a Stream.readBytesUntil() now writes null terminator within length. 2011-08-18 15:13:47 -04:00
David A. Mellis 8dd6a40334 A few API changes to new Stream parsing functions.
Renamed readChars() -> readBytes(), readCharsUntil() -> readBytesUntil().
Changed timeouts to milliseconds from seconds; default from 5 to 1 seconds.
Removed readCharsBetween().
2011-08-17 14:16:47 -04:00
David A. Mellis 31ff05504f Integrating Stream searching & parsing (Michael Margolis)
This from Michael's TextFinder library, incorporated into the Stream class: find(), findUntil(), parseInt(), parseFloat(), readChars(), readCharsUntil(), readCharsBetween(), setTimeout().
2011-08-17 13:53:49 -04:00
Zach Eveland 84c0d2cff8 Temporary fix for auto-reset from IDE. Will reset chip when DTR is asserted, no matter what CDC baud rate is selected. 2011-08-16 13:43:55 -04:00
Zach Eveland ddd3418a4f Serial via USB works
Integrated rest of Peter's USB implementation
2011-08-14 16:59:34 -04:00
Zach Eveland 4c537c1b6d committed USB API, initial HardwareSerial-USBSerial integration 2011-08-11 14:08:38 -04:00
amcewen 58aaa903f8 Merge remote branch 'upstream/new-extension'
Moved my fork to the Arduino 1.0 codebase
2011-06-11 21:27:18 +01:00
David A. Mellis a239d2c541 Added Printable interface class to allow printing of classes such as IPAddress 2011-06-04 09:19:17 -04:00
David A. Mellis 664e9af2cd Fixing 300 baud communication for serial.
Because UBBR is only 12 bits, we were overflowing it at 300 baud because of the use of the U2X bit.  Now we turn off U2X if it would yield a UBBR value that would overflow.

Note that this breaks 300 baud communication with the computer on the Uno and Mega 2560 because the 8U2 USB-serial firmware has this same bug (and previously they cancelled each other out).  Since, however, it seems more likely that people will need to use 300 baud to communicate with other (legacy) hardware than with the computer, I'm making this change.  Issue for 8U2 firmware bug: http://code.google.com/p/arduino/issues/detail?id=542

http://code.google.com/p/arduino/issues/detail?id=522
2011-05-20 13:29:13 -04:00
David A. Mellis f25e71c3c1 Fixing 300 baud communication for serial.
Because UBBR is only 12 bits, we were overflowing it at 300 baud because of the use of the U2X bit.  Now we turn off U2X if it would yield a UBBR value that would overflow.

Note that this breaks 300 baud communication with the computer on the Uno and Mega 2560 because the 8U2 USB-serial firmware has this same bug (and previously they cancelled each other out).  Since, however, it seems more likely that people will need to use 300 baud to communicate with other (legacy) hardware than with the computer, I'm making this change.  Issue for 8U2 firmware bug: http://code.google.com/p/arduino/issues/detail?id=542

http://code.google.com/p/arduino/issues/detail?id=522
2011-05-14 12:25:39 -04:00
David A. Mellis 90c487402c Small optimization in HardwareSerial.
begin(long) -> begin(unsigned long)

Conflicts:

	hardware/arduino/cores/arduino/HardwareSerial.h
2011-05-12 16:58:56 -04:00
David A. Mellis 5e5cce8124 Optimizing printing of numbers (writing a single buffer).
Fix from Bill Greiman via Limor.
2011-05-07 18:17:32 -04:00
David A. Mellis ac5defcea6 Adding serialEvent(), serialEvent1(), etc.
Called from within the serial receive interrupt.  These are implemented as an empty weak function in the core that be overridden by the user's sketch.

http://code.google.com/p/arduino/issues/detail?id=263
2011-05-07 13:04:13 -04:00
David A. Mellis 111c55581b Refactoring the UART0 / USART0 receive interrupt handler. 2011-05-07 12:47:43 -04:00
David A. Mellis c7c7302d9d Changing Serial.flush() to write outgoing data, not drop incoming data.
This brings it in line with most other uses of flush(), both in and out of Arduino.
http://code.google.com/p/arduino/issues/detail?id=497
2011-05-07 12:05:27 -04:00
amcewen edee02eaf1 Added virtual destructor to Printable, which also requires new and delete operators to be added 2011-04-10 11:34:40 +01:00
amcewen 49155d0a46 Added a brief explanation of how you'd use Printable 2011-04-02 11:33:27 +01:00
amcewen 2cedbeef13 Added Printable interface class to allow printing of classes such as IPAddress 2011-04-01 21:10:38 +01:00
amcewen e852be3e97 Pulled out Server API into the NetServer base class, and a few minor changes to get the NetClient API to work well with the WiFly library 2011-03-31 16:19:17 +01:00
David A. Mellis 1cac0f3eb7 Restoring concatenation of built-in types with String. 2011-03-31 10:56:14 -04:00
amcewen e011dab7b4 Pulled out Client API into a base class to allow multiple derived classes to use it, and moved it (plus IPAddress) out of the Ethernet library so that other libraries can find it. First steps in integrating the WiFly code so it's easier to switch between that and Ethernet 2011-03-28 12:08:53 +01:00
David A. Mellis ffe7bc53c1 Adding F("foo") syntax for flash strings. 2011-03-27 15:06:20 -04:00
David A. Mellis 99e642a26d String: removing implicit numeric conversions and new approach to "if (s)".
This makes explicit the String constructors that take numeric types and chars and removes the versions of concat() and operator=() and operator+() that accept numberic types.

It also replaces the operator bool() with a operator that converts to a function pointer.  This allows for uses like "if (s)" but not "s + 123".  See: http://www.artima.com/cppsource/safebool.html.  This allowed removing the disambiguating operator+() functions and relying solely on StringSumHelper and anonymous temporaries once again.

Also, now treating unsigned char's like int when constructing Strings from them, i.e. String(byte(65)) is now "65" not "A".  This is consistent with the new behavior of Serial.print(byte).
2011-03-26 18:52:54 -04:00
David A. Mellis cedea72273 Commenting String API behavior. 2011-03-23 22:42:05 -04:00
David A. Mellis 58d04ab3a3 Return an invalid string (not a partial one) when operator+() fails. 2011-03-19 11:14:17 -04:00
David A. Mellis 7dea0522f4 Starting to distinguish between empty strings and invalid (null) ones. 2011-03-18 21:45:27 -04:00
David A. Mellis 45884b1231 Protecting String copy() and move(). 2011-03-13 19:39:04 -04:00
David A. Mellis a5f6e65242 Adding additional String + operators for disambiguation.
The operator bool() means that you could implicitly convert a String to a bool and then add it to it an int, for example.  Which means our operator+ has to match exactly or it will be ambiguous.
2011-03-13 19:31:10 -04:00
David A. Mellis 76776e7a46 Moving move() to __GXX_EXPERIMENTAL_CXX0X__ only, adding operator bool(). 2011-03-13 16:46:06 -04:00
David A. Mellis 98b403114c Modifying String.concat() to return success or failure, not this.
Which means you can't chain multiple concat() calls together, but you can check if they succeeded or not.
2011-03-12 14:03:34 -05:00
David A. Mellis b4b32f60f1 Don't return the string when modifying its value.
Changing toLowerCase(), toUpperCase(), trim() and replace() to return void instead of a reference to the string that's just been changed.  That way, it's clear that the functions modify the string they've been called on.
2011-03-11 18:54:58 -05:00
David A. Mellis 99e0c131fc Renaming append() back to concat(). 2011-03-11 18:04:31 -05:00
David A. Mellis 22786eaed2 Removing F("string") syntax for now.
We should probably add something like this back in later, but I want to do one thing at a time.  This removes the __FlashStringHelper class as well.
2011-03-11 18:01:40 -05:00
David A. Mellis 438bca3cb2 Rewrite of the String class by Paul Stoffregen.
http://www.pjrc.com/teensy/string_class_experimental.html
2011-03-11 17:56:10 -05:00
David A. Mellis 0ba1f0ec50 Flushing outgoing and incoming data in Serial.end().
That is, waiting for outgoing data to transmit and dropping any received data.
2011-03-06 12:20:42 -05:00
David A. Mellis 01d82d8277 Fixing race condition in Serial write (Brian Cook). 2011-03-06 11:47:18 -05:00
David A. Mellis bc416b14bd Moving TCCR1B reset into #ifdef check. 2011-03-06 11:29:35 -05:00
David A. Mellis d8d233ad3e Implemented serial transmit buffering.
Now Serial.write() places characters in the transmit buffer, and the data register empty interrupt reads and transmit them.  Based loosely on the implementation here: ftp://wookey.org.uk/arduino.

http://code.google.com/p/arduino/issues/detail?id=262
2011-03-05 14:17:26 -05:00
David A. Mellis a19a23ff92 Factoring pin definitions out of the core.
That is, there's now a pins/ directory in a platform, which includes multiple directories, each of which has its own pins_arduino.h.  The boards.txt gets a new preferences, <BOARD>.build.pins, whose values is a sub-directory of the pins/ directory (possibly with a "platform:" prefix).  That sub-directory is then placed in the include path during compilation.
2011-03-04 21:05:05 -05:00
David A. Mellis 6cd58c57db Moving all pin definitions into pins_arduino.h.
This is a step towards providing portability across AVR's by simply including an appropriate header file.
2011-03-03 23:54:33 -05:00
David A. Mellis 5e721df32a Fixing warnings (David H. Lynch Jr). 2011-03-03 22:56:20 -05:00
David A. Mellis b0ab2bc48b Rearranging internal #defines in headers. 2011-03-03 18:57:05 -05:00
David A. Mellis 58d683239d Removing optimized digitalWrite(), digitalRead(), pinMode(). 2011-03-03 18:46:45 -05:00
David A. Mellis d7a87f18f0 Re-arranging header files and small fixes to optimized core functions. 2011-03-02 23:05:25 -05:00
David A. Mellis 218eb5e807 Moving wiring.h contents into Arduino.h. 2011-03-01 20:00:16 -05:00
David A. Mellis e009c5c6c6 Renamed WProgram.h to Arduino.h. 2011-03-01 19:52:13 -05:00
David A. Mellis c8b8b8724c Removing BYTE keyword (use Serial.write() instead). 2011-02-26 13:58:03 -05:00
David A. Mellis 5515442dbb Small optimization in HardwareSerial.
begin(long) -> begin(unsigned long)
2011-02-25 18:36:46 -05:00
David A. Mellis 860c6f2031 Revert "Changes to optimized digitalWrte(), etc."
This reverts commit aa1f1cbda9d6bb52785f98b40746920853d6579b.
2011-02-18 10:41:29 -05:00
David A. Mellis 63515122ca Revert "Adding noAnalogWrite() function to disable PWM."
This reverts commit 38d4a34fec6925b29a732d13e200f54ee4b42025.
2011-02-18 10:40:56 -05:00
David A. Mellis cd050d05d1 Adding noAnalogWrite() function to disable PWM.
Also, removing the inline version of digitalPinToTimer() (since we're not optimizing the functions that use it anyway).  The noAnalogWrite() function is in wiring_analog.c, deriving from the previous turnOffPWM() which has moved from wiring_digital.c.

http://code.google.com/p/arduino/issues/detail?id=476
2011-02-12 14:47:08 -05:00
David A. Mellis eed15e48d6 Changes to optimized digitalWrte(), etc.
Factoring out the implementation of digitalWrite(), digitalRead(), and pinMode() into macros that can either be inlined (for constant pin numbers) or executed within a function (non-constant pins).  Removing testing for timers on pins in digitalWrite(), digitalRead(), and pinMode().  Moving pin to port macros from pins_arduino.h to wiring.h.
2011-02-11 19:29:46 -05:00
David A. Mellis 3696fa0446 Optimized digitalWrite(), etc. from Alvaro Lopez. 2011-02-11 17:53:24 -05:00
David A. Mellis 11dd06436d Changing String append to use realloc(); thanks to Paul Stoffregen.
http://code.google.com/p/arduino/issues/detail?id=332
2010-12-11 15:22:07 -05:00
David A. Mellis 053ec1b989 Replacing custom String.toInt() function with a call to atol(). 2010-12-03 23:12:41 -05:00
David A. Mellis 4a90c4bd40 Redoing 448222e4b65e0cf44dfc0c494f7f76901f1fabea without all the extra files.
Adds toInt() to String, WCharacter.h (from Wiring), and an SD Datalogger example.
2010-11-29 15:20:30 -05:00
David A. Mellis 80c5173bfd Revert "added toInt() function to WString".
This reverts commit 448222e4b65e0cf44dfc0c494f7f76901f1fabea.
2010-11-29 15:14:10 -05:00