aboutsummaryrefslogtreecommitdiff
path: root/libraries
AgeCommit message (Collapse)Author
2015-09-28Added Arduino Zero exclusion to READMEArturo Guadalupi
2015-09-21Modified reference to Leonardo only in the examplesArturo Guadalupi
According to #3786 removed the reference to Leonardo only in while(!Serial) of the examples. Changed in in "wait for serial port to connect. Needed for native USB port only"
2015-09-20Remove Raw HID definitions at wrong placeNico
2015-09-18Fixed wrong category in EEPROMCristian Maglie
See #3812
2015-09-18Added categories to librariesCristian Maglie
Fix #3812
2015-08-26Wire (AVR): Fix bug with repeated STARTNate Williams
Fix #66
2015-08-25implement Wire.end() for AVR coreSandeep Mistry
2015-08-12Added 16 byte endpoint supportNicoHood
2015-08-12Fixed HID Reports >255 bytesNicoHood
2015-07-16rework HID-based libraries and add Due fallbackMartino Facchin
2015-07-16allow HID submodules to create runtime descriptorsMartino Facchin
with this PR you can add \#include Keyboard.h \#include Mouse.h \#include HID.h in the top of the sketch and you will expose a Mouse+Keyboard From the library pow, simply add static HID_Descriptor cb = { .length = sizeof(_hidReportDescriptor), .descriptor = _hidReportDescriptor, }; static HIDDescriptorListNode node(&cb); HID.AppendDescriptor(&node); in the class' constructor and you are done!
2015-07-16rework HID class functions scopesMartino Facchin
2015-07-16rename Setup typedef struct to USBSetupMartino Facchin
was really too common
2015-07-16fix HID headersMartino Facchin
2015-07-16fix HID descriptors bigger than 127 bytesMartino Facchin
2015-07-16move HID library to AVR specific locationMartino Facchin
2015-07-06Examples: mass code format. See example_formatter.confFederico Fissore
2015-07-03Support for repeated starts added to SAM Wire libraryMatthew Lowe
Additional interface method ported to avr for compatibility Fix issue #2428.
2015-05-20Due to website configuration changes, every url starting with ↵Federico Fissore
http://arduino.cc has been changed to http://www.arduino.cc. Fixes #3191
2015-05-19Libraries bundled with cores will take the type of that core, instead of ↵Federico Fissore
relying on an undocumented 'types' property. Fixes #2875
2015-05-14Fixes #2969:Arturo Guadalupi
This fixes the Wire examples that uses I2C reserved address (from 0 to 7) substituting them with 8 that is the first one available and that can be used. I also modified the wire reference http://www.arduino.cc/en/reference/wire according to this fact.
2015-03-27LibraryManager: better type filteringFederico Fissore
2015-03-24Merge pull request #2812 from facchinm/test_pr2794Martino Facchin
EEPROM library V2
2015-03-24EEPROM: examples: fix Serial for board LeonardoMartino Facchin
2015-03-24Fixed EEPROM examples and added readmeChris--A
2015-03-20Updated EEPROM examples.Chris--A
Removed hard coded lengths, which were incorrect for standard Arduino's now.
2015-03-19Small tweaks to EEPROM lib and examples.Chris--A
2015-03-18Do not influence state of SS if it's already been set to an output ↵Victor Aprea
previously, e.g. by user sketch squashes and closes PR #2659
2015-03-18Updated EEPROM storage classChris--A
To avoid having a .cpp just for an extern variable definition, `static` has been chosen over `extern`. As the `EEPROMClass` class simply wraps functionality located elsewhere, it is completely compiled away. Even though each translation unit which includes the header will get a copy with internal linkage, there is no associated overhead. More info [here](http://stackoverflow.com/questions/29098518/extern-variable-only-in-header-unexpectedly-working-why)
2015-03-17Added additional examples to EEPROM libChris--A
2015-03-17Added new version of EEPROM library.Chris--A
2015-03-05Merge branch 'ide-1.5.x' into SoftwareSerialMartino Facchin
2015-03-05SoftwareSerial: match bool API with HardwareSerialMartino Facchin
2015-02-05Corrected some email contacts.Cristian Maglie
2015-01-26Prevent low pulse on TX initialization in SoftwareSerialMatthijs Kooijman
Previously, the TX pin would be set to output first and then written high (assuming non-inverted logic). When the pin was previously configured for input without pullup (which is normal reset state), this results in driving the pin low for a short when initializing. This could accidenttally be seen as a stop bit by the receiving side. By first writing HIGH and then setting the mode to OUTPUT, the pin will have its pullup enabled for a short while, which is harmless.
2015-01-26Remove unneeded #ifdef in SoftwareSerialMatthijs Kooijman
The debugPulse function definition already checks for _DEBUG, resulting in an empty function definiton and the function call being optimized away.
2015-01-26Fix SoftwareSerial timingsMatthijs Kooijman
Instead of using a lookup table with (wrong) timings, this calculates the timings in SoftwareSerial::begin. This is probably a bit slower, but since it typically happens once, this shouldn't be a problem. Additionally, since the lookup tables can be removed, this is also a lot smaller, as well as supporting arbitrary CPU speeds and baudrates, instead of the limited set that was defined before. Furthermore, this switches to use the _delay_loop_2 function from avr-libc instead of a handcoded delay function. The avr-libc function only takes two instructions, as opposed to four instructions for the old one. The compiler also inlines the avr-libc function, which makes the timings more reliable. The calculated timings directly rely on the instructions generated by the compiler, since a significant amount of time is spent processing (compared to the delays, especially at higher speeds). This means that if the code is changed, or a different compiler is used, the calculations might need changing (though a few cycles more or less shouldn't cause immediate breakage). The timings in the code have been calculated from the assembly generated by gcc 4.8.2 and gcc 4.3.2. The RX baudrates supported by SoftwareSerial are still not unlimited. At 16Mhz, using gcc 4.8.2, everything up to 115200 works. At 8Mhz, it works up to 57600. Using gcc 4.3.2, it also works up to 57600 at 16Mhz and up to 38400 at 8Mhz. Note that at these highest speeds, communication works, but is still quite sensitive to other interrupts (like the millis() interrupts) when bytes are sent back-to-back, so there still are corrupted bytes in RX. TX works up to 115200 for all combinations of compiler and clock rates. This fixes #2019
2015-01-26Disable the RX PCINT inside SoftwareSerial::recvMatthijs Kooijman
Before, the interrupt would remain enabled during reception, which would re-set the PCINT flag because of the level changes inside the received byte. Because interrupts are globally disabled, this would not immediately trigger an interrupt, but the flag would be remembered to trigger another PCINT interrupt immediately after the first one is processed. Typically this was not a problem, because the second interrupt would see the stop bit, or an idle line, and decide that the interrupt triggered for someone else. However, at high baud rates, this could cause the next interrupt for the real start bit to be delayed so much that the byte got corrupted. By clearing the interrupt mask bit for just the RX pin (as opposed to the PCINT mask bit for the entire port), any PCINT events on other bits can still set the PCINT flag and be processed as normal. In this case, it's likely that there will be corruption, but that's inevitable when (other) interrupts happen during SoftwareSerial reception.
2015-01-26Optimize SoftwareSerial::setRxIntMsk()Matthijs Kooijman
This precalculates the mask register and value, making setRxIntMask considerably less complicated. Right now, this is not a big deal, but simplifying it allows using it inside the ISR next.
2015-01-26In SoftwareSerial::recv, only calculate the new tail onceMatthijs Kooijman
This shortens the generated code a bit more.
2015-01-26Mark SoftwareSerial::recv and handle_interrupt as always_inlineMatthijs Kooijman
Since those functions are only called once now, it makes sense to inline them. This saves a few bytes of program space, but also saves a few cycles in the critical RX path.
2015-01-26In SoftwareSerial, use ISR_ALIASOF to prevent duplicationMatthijs Kooijman
Previously, up to four separate but identical ISR routines were defined, for PCINT0, PCINT1, PCINT2 and PCINT3. Each of these would generate their own function, with a lot of push-popping because another function was called. Now, the ISR_ALIASOF macro from avr-libc is used to declare just the PCINT0 version and make all other ISRs point to that one, saving a lot of program space, as well as some speed because of improved inlining. On an Arduino Uno with gcc 4.3, this saves 168 bytes. With gcc 4.8, this saves 150 bytes.
2015-01-26Optimize SoftwareSerial::recvMatthijs Kooijman
Similar to SoftwareSerial::write, this rewrites the loop to only touch the MSB and then shift those bits up, allowing the compiler to generate more efficient code. Unlike the write function however, it is not needed to put all instance variables used into local variables, for some reason the compiler already does this (and doing it manually even makes the code bigger). On the Arduino Uno using gcc 4.3 this saves 26 bytes. Using gcc 4.8 this saves 30 bytes. Note that this removes the else clause in the code, making the C code unbalanced, which looks like it breaks timing balance. However, looking at the code generated by the compiler, it turns out that the old code was actually unbalanced, while the new code is properly balanced.
2015-01-26Further optimize SoftwareSerial::writeMatthijs Kooijman
This change restructures the loop, to help the compiler generate shorter code (because now only the LSB of the data byte is checked and subsequent bytes are shifted down one by one, it can use th "skip if bit set" instruction). Furthermore, it puts most attributes in local variables, which causes the compiler to put them into registers. This makes the timing-critical part of the code smaller, making it easier to provide accurate timings. On an Arduino uno using gcc 4.3, this saves 58 bytes. On gcc 4.8, this saves 14 bytes.
2015-01-26Mark SoftwareSerial::tx_pin_write as "always_inline"Matthijs Kooijman
Somehow gcc 4.8 doesn't inline this function, even though it is always called with constant arguments and can be reduced to just a few instructions when inlined. Adding the always_inline attribute makes gcc inline it, saving 46 bytes on the Arduino uno. gcc 4.3 already inlined this function, so there are no space savings there.
2015-01-26Simplify SoftwareSerial::writeMatthijs Kooijman
Before, there was nearly identical code for the inverted and regular cases. However, simply inverting the byte in the inverted case allows using the regular code twice, reducing the generated code size by 100 bytes (on an Arduino Uno and gcc 4.3, on gcc 4.8 the reduction is 50 bytes).
2015-01-26Use stopListening() in SoftwareSerial::end()Matthijs Kooijman
stopListening also disabled the interrupt, if needed, so calling that function makes more sense. Since stopListening only disables the interrupt when the current SoftwareSerial is the active object, and that can only be the case when _rx_delay_stopbit is non-zero, there is no need to separately check _rx_delay_stopbit anymore.
2015-01-26Fix race condition in SoftwareSerial::overflow()Matthijs Kooijman
If an interrupt causing overflow would occur between reading _buffer_overflow and clearing it, this overflow condition would be immediately cleared and never be returned by overflow(). By only clearing the overflow flag if an overflow actually occurred, this problem goes away (worst case overflow() returns false even though an overflow _just_ occurred, but then the next call to overflow() will return true).
2015-01-26Toggle SoftwareSerial interrupts when starting / stopping to listenMatthijs Kooijman
This prevents interrupts from triggering when the SoftwareSerial instance is not even listening. Additionally, this removes the need to disable interrupts in SoftwareSerial::listen, since no interrupts are active while it touches the variables.
2015-01-26Add SoftwareSerial::stopListening()Matthijs Kooijman
This allows one to explicitly stop a SoftwareSerial instance from listening, without having to make another one listening.