Commit Graph

606 Commits

Author SHA1 Message Date
Martino Facchin 6e235622ed Fix MCUs without MPCM0 register 2017-12-18 09:59:29 +01:00
John Holman 58006613a7 Fix flush hanging issue
Make write to UDR and clearing of TXC bit in flush() atomic
to avoid race condition.

Fixes #3745 (second different issue introduced later but discussed
in the same issue)
2017-11-13 17:46:47 +01:00
John Holman 99c294c5a2 Improve how TXCn bit is cleared in USCRnA register
Preserve values of configuration bits MPCMn and U2Xn.
Avoid setting other read-only bits for datasheet conformance.

See #3745
2017-11-13 17:46:47 +01:00
John Holman e9e43cf583 Prevent buffer retransmission when transmit buffer is empty
Moving the head buffer pointer and setting interrupt flag is now
atomic in write(). Previously an intervening ISR could empty the
buffer before the second ISR is triggered causing retransmission.

Fixes: #3745 (original issue only)
2017-11-13 17:46:47 +01:00
John Holman d50e59781e Create macro to guard critical sections for large transmit buffers
New macro TX_BUFFER_ATOMIC makes the following code block atomic
only if the transmit buffer is larger than 256 bytes. SREG is restored
on completion.
The macro is then used to simplify code for availableForWrite()
2017-11-13 17:46:47 +01:00
Scott Allen 7d4bca5041 Always read key to check for new LUFA bootloader
Instead of checking for the NEW_LUFA_SIGNATURE once in program memory and then
setting a flag which is used for further checks, a function is used that always
checks program memory directly.

If a flag is used, there's a slight chance that its location in RAM could fall
on MAGIC_KEY_POS. In this case, an aborted USB auto-reset sequence may fail.
2017-11-13 17:41:34 +01:00
Scott Allen 31223160eb Don't use line coding to trigger USB auto-reset
An auto-reset invoked using USB CDC is triggered by the port closing
(when set to 1200 baud). Closing of the port is indicated by DTR going inactive.
There is no need to have auto-reset invoked by a CDC_SET_LINE_CODING command.
Only the CDC_SET_CONTROL_LINE_STATE command, which indicates a change in the
state of DTR, should be used.
2017-11-13 17:38:02 +01:00
Scott Allen 10e0811c52 Save/restore the watchdog during USB auto-reset
The state of the watchdog timer is saved during a USB auto-reset and then
restored if the reset is aborted, in case the sketch is using the watchdog.
2017-11-13 17:34:41 +01:00
Scott Allen 289faaa759 Fix save/restore of magic key location during reset
In the USB CDC code to invoke an auto-reset, the magic key location could be
restored before it had actually been saved. The sketch would then have a
corrupted value at this location. This fix prevents the value from being
restored if it hasn't previously been saved.
2017-11-13 17:34:41 +01:00
Torben Nielsen fb7c2cc02e Create timer0 overflow interrupt service routine for all ATtinies not just 24, 44 and 84 2017-11-13 16:16:43 +01:00
per1234 f22b9cb94c Update comments to reflect Stream functions changed from private to protected
These functions were changed from private to protected in 99f2a27553 but the comments were not updated at that time.

In conjunction with equivalent pull requests to Arduino SAM Boards and Arduino SAMD Boards, solves https://github.com/arduino/Arduino/issues/6146.
2017-07-07 01:28:27 +02:00
Cristian Maglie c7f8e5b207 Removed unneeded include in Print.h
see https://github.com/arduino/Arduino/pull/5789#discussion_r118007759
2017-05-23 17:03:42 +02:00
Matthijs Kooijman ba9d416862 Move the flush method from Stream to Print
This method originally flushed pending input bytes, which makes sense in
Stream. At some point it was changed to flush output bytes instead, but
it was never moved to Print to reflect this.

Since Stream inherits from Print, this should not really affect any
users of the Stream or Print classes. However to prevent problems with
existing implementations of the Print class that do not provide a
flush() implementation, a default implementation is provided. We should
probably remove this at some point in the future, though.
2017-05-23 17:03:42 +02:00
Eric Wieser 716fba8dd9 Add Print::availableForWrite
If available() is in the base Stream class, then availableForWrite() should be in the base Print class
2017-05-16 14:52:47 +02:00
Cristian Maglie 2a4e2b968f Fixed warning about unused variable 2017-03-20 17:36:08 +01:00
liu nick 611df3c4cc use IAD Descriptor for device descriptor per the definition in "USB 2.0 ECN Interface Association Descriptor" and "USB Interface Association Descriptor Device Class Code and Use Model" 2017-03-16 19:38:01 +02:00
Cristian Maglie 3b0765979d [AVR] USB send ZLP when needed
See #5732 #4864 #4138 #3946
2017-03-16 19:35:47 +02:00
Cristian Maglie f27e8fe194 Revert "Subtract one from USB_EP_SIZE in USB_SendSpace"
This reverts commit 817d700a7503b269f986075cad637ce56c657e37.
2017-03-16 19:35:47 +02:00
Cristian Maglie 1138485b6d AVR: Prevent warnings if BIN is previously defined
Fix #4784
Close #4791
2017-03-08 13:34:17 +01:00
Sandeep Mistry 5a05bf01f4 Add virtual beginMulticast(...) stub to UDP class 2017-02-08 15:33:41 +01:00
Martino Facchin af7655dfcc Merge pull request #5815 from roncapat/master
Change double quotes to single quotes
2017-01-09 10:43:59 +01:00
Patrick Roncagliolo a4227cf02c Remove old TODOs for non-standard ipv4 format support
Signed-off-by: Patrick Roncagliolo <ronca.pat@gmail.com>
2017-01-08 23:51:53 +01:00
Patrick Roncagliolo 5cd4e8c399 Change double quotes to single quotes
- "." is a string literal, and so is treated as the char '.' plus the null char '\0'.
- Single quotes reduces the necessary memory for this literal to only one char instead.
  A string literal as the one actually present may require the use of the
  method "write(const char *str)", so there could be also a performance overhead.
- Another reason to change quotes style is for consistency with line 235.

Signed-off-by: Patrick Roncagliolo <ronca.pat@gmail.com>
2017-01-07 19:48:12 +01:00
Iván Pérez 54c0b616b1 Spaces to tab 2016-09-12 09:00:04 +02:00
Iván Pérez b74a02cb21 WString: add `toDouble`
`toFloat` internally converts into double and then truncates into a
float, so why not add a method to return the double?
2016-09-12 08:56:02 +02:00
Sandeep Mistry 0f959829ba Merge pull request #5300 from mischnic/attiny_anlReference
Add all analog references supported by the ATtinyX5 series
2016-09-08 15:37:27 -04:00
Niklas Mischkulnig bb567ae644 Requested changes to not change code for non ATtinyX5s 2016-09-07 19:02:48 +02:00
Kyle Chisholm 671619100d remove extra semicolon
I was compiling with -Werror and this little error popped up
2016-08-28 21:48:09 -04:00
Niklas Mischkulnig 1a280c0d5b Add all analog references supported by the ATtinyX5 series 2016-08-27 11:48:04 +02:00
Martino Facchin 9a4f49b20e Merge pull request #5128 from facchinm/configurable_usb210
[AVR][USB] Configurable USB_VERSION value via define
2016-07-22 10:08:04 +02:00
Martino Facchin a03982445a Merge pull request #5135 from facchinm/usbsuspend_resume
Send an USB remote wakeup if data need to be written
2016-07-21 10:42:40 +02:00
Sandeep Mistry c48cb93b2c Cast to "unsigned int" instead of just "unsigned" for consistency 2016-07-18 15:04:29 -04:00
Sandeep Mistry 6f3d25ea84 Merge pull request #4667 from bblanchon/patch-1
Speed and size improvement in Print::printFloat()
2016-07-18 14:50:09 -04:00
Sandeep Mistry 0fd650271c Merge pull request #4718 from mattb5906/new-feature/stream-timeout-get-4680
Add getTimeout accessor method.
2016-07-18 14:18:59 -04:00
Cristian Maglie 8ae5b5f43b Merge branch 'invalidated-string-move' of https://github.com/sandeepmistry/Arduino 2016-07-18 18:30:23 +02:00
Martino Facchin 7874386ce2 Send an USB remote wakeup if data need to be written
On Linux, setting autosuspend_delay_ms to N and control to auto allows the host pc to suspend the peripheral. Some Linux distro (Ubuntu, Mint) apply this behaviour by default.
If the sketch's prints where less frequent than N milliseconds the sketch prints would never arrive.
This patch allows sending a remote wakeup event to unsuspend the peripheral and allow the serial prints to be received.
2016-07-14 18:43:43 +02:00
Martino Facchin 5e146c415d [AVR][USB] fix IRQ flags clearing 2016-07-14 18:22:41 +02:00
Martino Facchin c20e271050 configurable USB_VERSION string via define
to allow WebUSB development, provide a way to change the USB_VERSION reported
using an additional core.

The additional (webUSB) core will survive IDE and AVR core updates
2016-07-13 14:28:17 +02:00
Sandeep Mistry 5dd628a2c2 Make String::move of an invalidated String result in an invalidated String 2016-07-12 17:29:13 -04:00
Arturo Guadalupi 2717fbe05b Merge pull request #4864 from sandeepmistry/avr-usb-tx
Subtract one from USB_EP_SIZE in USB_SendSpace
2016-07-11 18:02:38 +02:00
Ivan-Perez 2d13ebbb3e WString.h: allow modifying the string while iterating 2016-06-28 20:58:38 +02:00
Ivan-Perez 69421dc2c7 WString.h: Add const qualifier to `begin` and `end` functions 2016-06-28 20:58:38 +02:00
Martino Facchin cc4ddc3587 Move Caterina_BL related defines into generic USBCore.h
In an excess of confidence, these defines were added to Leonardo's variant.h
3rd party boards sometimes avoid inheriting this variant but they still define USBCON, thus breaking the build
2016-05-18 14:23:40 +02:00
Cristian Maglie 0e80ea6603 Removed extra whitespaces in WString.h 2016-04-20 20:30:24 +02:00
Christopher Andrews 6d6c9d3622 Removed C++11 dependency for `begin()` and `end()`
As I was not able to base the return types of `begin()` & `end()` off the c_str() function, I have changed the source so the features can be used by C++98 code, while still allowing ranged loops in C++11.
2016-04-20 16:07:52 +02:00
Christopher Andrews 0489fe3ae8 Updated String library to use C++11 iterators.
This will allow using the String library in a ranged for loop:

```C++
String s = "Hi, this is a test";

for( char c : s )
  Serial.print( c );
```
2016-04-20 16:07:52 +02:00
Sandeep Mistry 5e3d08af24 Subtract one from USB_EP_SIZE in USB_SendSpace
This avoids dealing with ZLP’s in USB_Send, because the max packet size
will be EP size - 1.
2016-04-14 10:06:47 -04:00
Martino Facchin 5e194bd8ef [AVR] Discover newer bootloader at runtime
Replaces #4280, only checks for the bootloader once

Tested with Hoodloader2, should work with every LUFA-derived bootloader released after 2014 (.apitable_signatures section must be placed at end of the flash)

BootloaderAPITable.S :

.global BootloaderAPI_Signatures
BootloaderAPI_Signatures:

    .long BOOT_START_ADDR ; Start address of the bootloader
    .word 0xDF00 ; Signature for the CDC class bootloader
    .word 0xDCFB ; Signature for a LUFA class bootloader

makefile:

BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
2016-04-06 17:41:06 +02:00
mattb5906 5976bcabcb Add getTimeout accessor method. 2016-03-18 22:26:37 +00:00
Benoît Blanchon 437eabeaad Speed and size improvement in Print::printFloat()
Avoid using the overload of print() for signed integer since a negative value is not allowed here.
This results in a smaller (unless print(int) is used somewhere else in the program) and faster code because the overload for unsigned integer is simpler.
2016-03-08 22:13:10 +01:00