* dynamic WiFi.hostname("newname")
* WiFi.hostname() back to String return type
* no silent hostname fix but proceed with debug message and returning false
* Add full gdb support with uart/Serial integration
* Fix GDB merge errors
* Update to unpatched GDB protocol specification
It appears that Espressif patched the open source xtensa GDB port in
order to build their old GDB executable and their old gdbstub (basically
removing any register in a generic xtensa and only leaving those
present in the chip they synthesized). Their GDBStub also assumed this
behavior.
Unpatched upstream GNU GDB now expects all the registers in
xtensa-config.c to be sent/read on a 'g' command. Change the GDB stub
to send "xxxxxxxx"s (legal per the spec) for unimplemented registers.
This makes the 'g' response much longer, but it's results are cached
and in an interactive debugger it isn't noticeable.
* Fix .iram.literal to come before .iram.text for GDB
* Move functions to flash, call using wrappers
All functions which are not interrupt or exception called are now in
flash. A small IRAM wrapper enables flash when processing main GDB ops
by calling Cache_Read_Enable_New() and then jumping to the main flash
code. This seems to work for catching exceptions, data and code breaks,
and Ctrl-C.
The UART ISR handler and exception handler register-saving bits of
code in ASM are still in IRAM.
GDB IRAM usage is now about 670 bytes.
* Remove LWIP2 builder commit
* Add documentation and gdbstub_init header
Add some simple GDB documentation to the main tree showing a worked
example.
Adds the definition of `void gdbstub_init()` to <GDBStub.h>
* Clean up GDB include and library dir
Replace GDBstub.h with the version in the internal/ directory, and
adjust stub code accordingly. This way, only one copy of a file called
"GDBstub.h" will exist.
Update the gdbcommands and replace the obsolete ESPRESSIF readme with
@kylefleming's version since we're mainly doing serial, not TCP,
connected debugging.
Bump the library rev. number since this is a pretty big functionality
change.
Minor documentation tweak.
* Undo much of UART refactoring, set fifo IRQ to 16
Remove the refactoring of pin control and other little things not directly
related to GDB processing. Should greatly reduce the diff size in uart.c.
Should also remove any register value changes (intended or otherwise)
introduced in the original PR from @kylefleming.
Set the FIFO interrupt to 16 chars when in GDB mode, matching the latest
UART configuration for highest speed.
* Add architecture comments, cleanup uart.c code
Comments added to UART.c trying to explain (as best as I understand it)
the changes done to support GDB and how they interact with standard
operation.
Fix the uart_uninit to stop the ISR and then free appropriately.
Fix uart_isr_handle_data (GDB's shim for sending chars to the 8266 app)
to do the exact same thing as the standard UART handler including set
the overflow properly and either discard or overwrite in that case.
Fix serial reception when GDB enabled by enabling the user recv ISR.
Remove commented attributes from gdbstub, leftover from the move to
flash.
General logic cleanup per comments in the PR.
* Also set the UART flags for HW error in GDB
Ensure we also check the UART flags and set the uart status
appropriately when in GDB mode.
- Better separation of ESP wifi thread code from user thread code
- Added a flag for 'update()'-less use (disabled by default)
- The too fast updates for service queries are fixed
- Switched fully to PolledTimeout; LEATimeFlag not needed anymore (BTW: a const 'expired()' method would be helpful)
- The device should stay visible now even after the first TTL timeout
- Improved service querying (queries five times now)
- Fixed TTL (bug introduced with Fixes 1.0)
* Release referenced resources in destructor
* Release referenced resources in destructor, corrected for IPV6
* Release referenced resources in destructor, per suggested changes
* Add fix for SoftwareSerial submodule errors to documentation
* Update installing.rst
Replaces and based on #5602Fixes#5583
* Update installing.rst
Remove forgotten section
Add update section for Other OS
* Fixes 1.1
- Better separation of ESP wifi thread code from user thread code
- Added a flag for 'update()'-less use (disabled by default)
- The too fast updates for service queries are fixed
- Switched fully to PolledTimeout; LEATimeFlag not needed anymore (BTW: a const 'expired()' method would be helpful)
- The device should stay visible now even after the first TTL timeout
- Improved service querying (queries five times now)
* Update mDNS_Clock.ino
Removed references to LEATimeFlag.h
* Update mDNS_Clock.ino
Styling
* Remove broken ltoa/ultoa, call itoa/utoa
Use the newlib integer-to-ASCII non-POSIX calls instead of rolling
our own. Should be safe as sizeof(long) == sizeof(int).
The custom functions behaved differently from itoa when passed in
negative values in non-base-10.
Add host tests for negative non-base-10 int/longs
* Make waveform generator a NMI to run always
Make the waveform generator an NMI using the same code as in 2.4.0.
Making it NMI will ensure it runs even when interrupts are disabled.
Fixes#5568
* Move to a lockless waveform generator
Make the waveform generator lockless by doing all dangerous structure
updates in the interrupt handler. start/stopWaveform set a flag and
cause an interrupt. They wait for the interrupt to complete and clear
those flags before returning.
Also rework the Waveform[] array to be lockless.
* Optimize IRAM and CPU usage in IRQ
Try and minimize the IRAM needed to run the IRQ while keeping performance at
or better than before.
* Avoid WDT errors, optimize pin scans
Calculate first and last pins to scan for PWM, significantly increasing
accuracy for pulses under 10us at 80MHz. Now if you are using a single
PWM channel at 80MHz you can generate a 1.125us pulse (down from ~4us).
Rework the IRQ logic to avoid potential WDT errors. When at 80MHz it
appears that interrupts occuring faster than 10us apart on the timer
cause WDT errors. Avoid it by increasing the minimum delay between
IRQs on the timer accordingly.
* Clean up format/comment, remove delay() in stop
stopWaveform may be called from an interrupt (it's called by digitalWrite)
so we can't call delay(). Make it a busy wait for the IRQ to clear the
waveform.
Only set a new timeout of 10us when starting a new waveform when there
is no other event coming sooner than that.
Update formatting and comments per @devyte's requests.
Replace MicrosecondsToCycles() with standard Arduino call.
All interrupt service routines are supposed to be in IRAM now, so there
is no need to keep interrupts disabled while doing flash operations.
Remove the IRQ disable/enable from the ESP.flash* methods.
Related to #5568
There is a bug in the BearSSL PEM decoder when Windows EOLs (\r\n) are
passed in. Avoid the issue by silenly discarding \rs as they are read
from the PEM source in the C code, to keep my sanity by avoiding reworking
the pseudo-Forth parser code.
Fixes#5591
* DNSServer: Handle examplewww.com correctly
Just replacing 'www.' with the empty string when we assign the
domainname will remove all occurrences of 'www.', not just those
at the start of the string.
Change this to a startsWith check so that only "www." at the
beginning of the string is removed.
* DNSServer: Rework request handling
Rewrite the request handling in the DNSServer code to address the
following issues:
Compatibility with EDNS #1:
RFC6891 says that
"Responders that choose not to implement the protocol
extensions defined in this document MUST respond with a
return code (RCODE) of FORMERR to messages containing an
OPT record in the additional section and MUST NOT include an
OPT record in the response"
If we have any additional records in the request, then we need
to return a FORMERR, and not whatever custom error code the user
may have set.
Compatibility with EDNS #2:
If we're returning an error, we need to explicitly zero all of
the record counters. In the existing code, if there is an
additional record present in the request, we return an ARCOUNT
of 1 in the response, despite including no additional records
in the payload.
Don't answer non-A requests
If we receive an AAAA request (or any other non-A record)
requests, we shouldn't respond to it with an A record.
Don't answer non-IN requests
If we receive a request for a non-IN type, don't answer it
(it's unlikely that we'd see this in the real world)
Don't read off the end of malformed packets
If a packet claims to have a query, but then doesn't include
one, or includes a query with malformed labels, don't read off
the end of the allocated data structure.
* DNSServer: Clarify and tidy writing the answer record
Modify the code used to write the answer record back to the server
so that it is clearer that we are writing network byte order
16-bit quantities, and to clarify what's happening with the pointer
used at the start of the answer.
PR #5538 made exceptions disabled by default and changed some file names
which didn't get updated in the linker file, resulting in exceptions ending up
back in IRAM.
Scripts, makefiles, and users who do no changes will not have exceptions
enabled during builds. This should avoid the sketch inflation issue for
users who are space constrained, while allowing users who care about
exceptions to enable them through the IDE.
* [PUYA] Applied ESPeasy puya_v3.patch
Applied the patch to get the starting point as described in https://github.com/esp8266/Arduino/issues/5493
* [PUYA] Only allocate memory when PUYA detected
core 2.5.0 PUYA patch, no puya:
Description Function #calls call/sec min (ms) Avg (ms) max (ms)
Save File 4 0.25 34.755 45.264 67.620
Free Mem: 16168
core 2.5.0 PUYA patch, Faked Puya detect:
Description Function #calls call/sec min (ms) Avg (ms) max (ms)
Save File 2 0.04 41.332 57.544 73.756
Free Mem: 11560
* [PUYA] Check for PUYA chip as soon as possible at boot
Check for PUYA chip in call for `getFlashChipId()`
This will only be done once and the result of the get function is also cached.
* [PUYA] Use limited buffer (512 byte) allocated at first write
No need to allocate a buffer when not writing to flash.
The default buffer size is 512 bytes, which is 2 pages in the flash chip.
* [PUYA] Lower PUYA flash buffer to 1 page (256 B)
As discussed here: https://github.com/esp8266/Arduino/issues/5493#issuecomment-447543279
* [PUYA] Fix indents naming and return conditions
* [PUYA] Move Puya write code to spi_flash_write_puya
* [PUYA] Make spi_flash_write_puya static and define PUYA_SUPPORT
* [PUYA] Add some SPI flash vendor IDs
As requested by @igrr https://github.com/esp8266/Arduino/pull/5504#discussion_r242016184
* [PUYA] All suggested changes.
See: https://github.com/esp8266/Arduino/pull/5504#pullrequestreview-186145820