Age | Commit message (Collapse) | Author |
|
|
|
Allow disabling CDC with -DCDC_DISABLED
|
|
|
|
Sometimes Arduino-based USB devices don't work because some hardware
(like KVM switches) gets confused by the CDC sub-devices.
This change makes it relatively easy to disable CDC at compiletime.
Disabling it of course means that the serial console won't work anymore,
so you need to use the reset button when flashing.
CDC_DISABLED is also used in ArduinoCore-samd for the same purpose.
based on
https://github.com/gdsports/usb-metamorph/tree/master/USBSerPassThruLine
See also https://github.com/NicoHood/HID/issues/225 and
https://github.com/arduino/Arduino/issues/6387 and
https://forum.arduino.cc/index.php?topic=545288.msg3717028#msg3717028
|
|
Improve reading ADC result
|
|
7.3.0-atmel3.6.1-arduino7 gcc fails to optimize separate reading from ADCL and ADCH. It produces additionally three eor commands or in some cases two mov commands in the assembly code (see discussion #344). These commands swap register contents before store them to data area. So they are completely unnecessary. Reading ADC result with ADC macro fixes it and gcc generates the right code..
|
|
The standard dictates that `std::size_t` is used, rather than the plain
`size_t` type.
Even though these types are usually, if not always, exactly the same
type, other code might assume that `std::size_t` is actually used and thus
also available under that name after including `<new>`.
This fixes that by using the right type. One challenge is that it is
usually declared in headers that we do not have available, so this just
defines the `std::size_t` type in the `<new>` header to work around
that.
|
|
This is currently disabled, keeping the old behavior of returning
NULL on failure, but should probably be enabled in the future as code
that does want to do a null check has had a chance to switch to the
more portable nothrow versions.
When enabled, allocation failure calls the weak `std::terminate()`,
which calls `abort()` by default, but can be replaced by user code to do
more specific handling.
To enable this, a macro must be defined (in new.cpp or on the compiler
commandline).
This fixes part of #287.
|
|
This fixes part of #287.
|
|
These are special functions that are presumably put into vtables for
deleted or pure virtual functions. Previously, this would call `abort()`
directly, but calling `std::terminate()` achieves the same effect, but
allows user code to change the behavior (e.g. to print to serial, blink
leds or whatever makes sense).
|
|
This allows calling it from other places later. The default
implementation calls `abort()`, but making it weak allows user code to
override this function (either directly, or by including a library like
uclibc++ that implements `std::set_terminate()`).
Note that this does not add a declaration for this function, since the
standard dictates this to be in `<exception>`, but we cannot
meaningfully or completely implement that header, so better leave it to
be overridden by e.g. libraries like uclibc++.
|
|
This makes these functions weak, so that a sketch or library can replace
them. This does not apply to all of these operators, only for the ones
that the C++ standard specifies as replaceable.
|
|
This makes this header complete up to including C++14, except two
exception classes that cannot be defined without `<exception>`.
The functions related to the "new_handler" are declared but not actually
defined, to prevent overhead and complexity. They are still declared to
allow implementing them in user code if needed.
This makes the implementation of all operator new and delete functions
comply with the C++11/C++14 specification in terms of which should be
actually implemented and which should be delegate to other functions.
There are still some areas where these implementations are not entirely
standards-compliant, which will be fixed in subsequent commits.
This fixes part of #287 and fixes #47.
|
|
Originally, the Arduino core used "new.h", rather than the standard
"new", probably because the implementation was incomplete, and for the
most commonly used new and delete operators, no include is needed at all
(they are defined implicitly by the compiler). However, now Arduino
does expose the "new" name, as an alias for the older "new.h". Given
that the standard name is "new", it makes more sense to put the actual
content in "new", and make "new.h" a compatibility header that includes
"new" instead of the other way around.
|
|
Release 1.8.3
|
|
|
|
|
|
|
|
|
|
* Interrupt ordering for 32u2 and 16u2 MCU
* Added missing chip variants
|
|
No fixed value for USB power current.
|
|
Minor optimization in shiftOut function
|
|
Cast pins to signed integers to avoid Wtype-limits compile warning
|
|
Do not claim AT-protocol in CDC interface descriptor
|
|
|
|
Add placement new operator
|
|
Add parameter names to common prototypes
|
|
using with ternary operator such as bitWrite(value, bit, some_computed_value == 5 ? 1: 0);'
|
|
Fix unused variable warning for non-pluggable USB in SendDescriptor
|
|
checking `length` in below while statement
|
|
|
|
The CDC code presents itself as a virtual serial port. However, it also
sets the "bFunctionProtocol" value to 1, which means it supports
AT-commands, which is not actually the case. This might cause problems
with some software, such as ModemManager.
Originally, ModemManager would be very liberal with probing serial
devices, using a blacklist to prevent probing non-modems such as
Arduinos.
Since version 1.7.990, it has supported a "strict" mode where it tries to be
more restrained in what devices it probes. For CDC ACM devices, this
means it will only probe devices that claim to support AT-commands.
However, it also stopped applying the blacklist (intending to eventually
remove the blacklist), meaning it would again probe Arduinos.
This new strict policy is not the upstream default, but is enabled in
Debian (since Buster) and Ubuntu (since bionic 18.04.2).
The proper way to fix this, is to not claim AT comand support in the USB
device descriptor, which is what this commit does. The Arduino will
still show up as a virtual serial port, just not be probed by
ModemManager in strict mode.
For the commit that introduced the strict mode in ModemManager, see
https://cgit.freedesktop.org/ModemManager/ModemManager/commit/src?id=ee570d44dc117dc69f23e83313dd877f76c5e3e0
|
|
|
|
|
|
Much better than in/out, since using the controller's perspective meant the inverted "in/out" was confusing
|
|
This function never returns an error (-1), and the number of bytes available will never be a negative number.
|
|
Logical reordering, no functional change
|
|
Returns true if the device USB is configured. Although will still return true if the device has been configured and the USB data pins disconnected...
|
|
No reason not to take advantage of this feature, although with the interrupt in place I doubt it will be useful.
|
|
|
|
Using the OUT endpoint interrupt
|
|
|
|
Better to set these where intended so they can be easily overridden if need be.
|
|
|
|
|
|
Easier for the AVR to deal with the memory if the in/out numbers aren't paired.
|
|
|
|
|
|
This will compile but will NOT enumerate properly without a config descriptor. You've been warned...
|
|
Avoids unused variable warning if USB is enabled but pluggable USB is not
|