* serial - refactor serial resource handling
- port related resources (tx/rx/inverted,dma)
- are stored sequentially, with space in place of ports that are not
enabled (RESOURCE_UART_COUNT + RESOURCE_LPUART_COUNT +
RESOURCE_SOFTSERIAL_COUNT)
- RESOURCE_UART_OFFSET, RESOURCE_LPUART_OFFSET, RESOURCE_SOFTSERIAL_OFFSET
- resource entries are pointing into this array (UART, LPUART, SOFTSERIAL)
- both pins and DMA
- inverter is supproted only for UART + LPUART (makes sense only
for UART, to be removed)
- softSerialPinConfig is removed, it is no longer necessary
- serialResourceIndex(identifier) is used universally to get correct
index into resource array
- unified handling of resources where possible
- serialOwnerTxRx() + serialOwnerIndex() are used for displaying resources
correctly to user.
- serialType(identifier) implemented
- serialOwnerTxRx / serialOwnerIndex are trivial with it
- large switch() statemens are greatly simplified
* serial - merge code duplicated in all UART implementations
- drivers/serial_uart_hw.c contains merged serialUART code.
Code did not match exactly. Obvious cases are fixed, more complicated
use #ifs
- pin inversion unified
- uartOpen is refactored a bit
* serial - refactor uartDevice
- use 'compressed' enum from uartDeviceIdx_e. Only enabled ports are
in this enum.
- uartDeviceIdx directly indexes uartDevice (no search necessary, no
wasted space)
- use `serialPortIdentifier_e identifier;` for uartHardware
- for DMA remap, define only entries for enabled ports (uartDeviceIdx_e
does not exist disabled port)
* serial - apply changes to inverter
New implementation is trivial
* serial - HAL - rxIrq, txIrq replaces by irqn
There is only one IRQ for serial
* serial - serial_post.h
Generated code to normalize target configuration.
jinja2 template is used to generate header file. Port handling is
unified a lot.
SERIAL_<type><n>_USED 0/1 - always defined, value depends on target configuration
SERIAL_<type>_MASK - bitmask of used ports or given type. <port>1 is BIT(0)
SERIAL_<type>_COUNT - number of enabled ports of given type
SERIAL_<type>_MAX - <index of highest used port> + 1, 0 when no port is enabled
* targets - remove automatically calculated valued from configs
serial_post.h generated it
* serial - remove definitions replaced by serial_post.h
* serial - change LPUART to UART_LP1 in places
LPUART is mostly handled as another UART port, this change reflects it
* serial - use ARRAYLEN / ARRAYEND in some places
replaces constant that may not match actual array size
* serial - adapt softserial to changes
* serial - whitespace, comments
* softserial - fix serialTimerConfigureTimebase
* serial - suspicious code
* serial - unittests
* serial - cleanup
* serial - simpler port names
Is this useful ?
* serial - no port count for SITL necessary
* serial - fix unittests
include serial_post.h, some ports are defined, so normalization will
work fine
* timers - remove obsolete defines from SITL and unittests
* serial - cosmetic improvements
comments, whitespace, minor refactoring
* serial - fix serialInit bug
serialPortToDisable was preventing further tests
* serial - fix possible NULL pointer dereference
* serial - move serialResourceIndex to drivers
* serial - refactor pp/od and pulldown/pullup/nopull
Centralize serial options handling, decouple it from MCU type
Move some code into new drivers/serial_impl.c
* serial - make port.identifier valid early in port initialization
* serial - fix unittest
Code is moved around a bit to make unittests implementation easier
* serial - bug - fix off-by-one error
uart1/softserial1/lpuart was not working properly because of this
* serial - whipespace + formating + style + comments
No functional changes
* utils - add popcount functions
Wrap __builtin_popcount for easier use. Refactor existing code using
it. Update code using BITCOUNT macro in dynamic context (BITCOUNT is
for compile-time use only)
* serial - inverter - simplify code
* pinio - prevent array access overflow
* serial - refactor SERIAL_BIDIR_*
SERIAL_BIDIR_OD / SERIAL_BIDIR_PP
SERIAL_PULL_DEFAULT / SERIAL_PULL_NONE / SERIAL_PULL_PD
* serial - simplify code
minor refactoring
- cleaner AVOID_UARTx_FOR_PWM_PPM (unused anyway)
- serialFindPortConfiguration* - remove code duplication
- use serialType in smartaudio
* serial - add port names
- const string is assiociated with each compiled-in port (easy to pass around)
- findSerialPortByName
* cli - improve serialpassthrough
- support port options (in current mode argument)
- support port names (`serialpassthrough uart1`)
- improve error handling; check more parse errors
* cli - resources - minor refactor
- prevent SERIAL_TX_NONSENSE when parsing resource type
- fix possible NULL pointer dereference
- store resource tag only after checking all conditions
- slighty better error reporting
- `resource serial_tx 1` will print resource assignment
* serial - remane pulldown to SERIAL_PULL_SMARTAUDIO
Make sure nobody uses it by
mistake. SERIAL_PULL_SMARTAUDIO_SUPER_DANGEROUS_USE_AT_YOUR_OWN_RISK_THIS_WILL_BREAK_EVERYTHING_AND_KILL_YOUR_PET_FISH
would be better choice, but try shorter version first.
* smartaudio - minor refactor/improvement
- Fix softserial on AT32
- make it easier to handle SA on per-cpu basis
* softserial - minor refactoring
no functional changes
* UART - move AF handling before MCU dependent code
* UART - adapt APM32 / APM32F4 code
- Modeled after F4 where possible
- come code moved from APM32 to APM32F4, possbily not necessary, but
it improves similarity with STM32F4
* UART - APM32 - remove per-pin AF
* UART - APM32 - bugfix - fix pinswap #if conditions
* UART - apply some improvemnts from APM32 to STM32
* UART - add todo for F4 serial speed
* UART - fix typo
* UART - refactor support for USE_SMARTAUDIO_NOPULLDOWN
* UART - typos, comments, minor improvements
* UART - move code into enableRxIrq
TODO: split into mcu-specific filer (but in sepatate PR)
* UART - add UART_TRAIT_xx
makes #if test easier and more consistent
more traits shall follow
* UART - fix variable name
unused branch, would trigger compilation error otherwise
* UART - use tables instead of switch
* UART - smartaudio
minor style change + better comments
* UART - unify mspPorts iteration
* UART - fix spelling
* UART - another typo
* UART - fix serialResourceIndex
offset must be added, not subtracted
offset can be negative
* UART - fix typo
Bad day ...
* UART - use const table
GCC does optimize it better.
Should not cause functional change
* UART - use OwnerIndex for inverter
- 1 based
- only UART has inversion
* UART - refactor serial_resource a bit
Single table + helper function. New table is easier to read
* UART - serial_impl header is necessary
* UART - style-only changes
typos
unify whitespace
comment improvement
add some const modifiers
use cfg in uartConfigureDma
minor improvemnt of for loops
* UART - remove LPUART inverter
LPUART always supports internal inversion, code was incomplete and
unused
* UART - update jinja template, regenerate files
* UART - enable UART module RCC clk before configuring DMA
Does not change anything, UART RCCs are enabled unconditionally
* Add APM32F4 driver libraries and USB middleware
* Add the APM32F405 and APM32F407 target files
* Add APM32 startup files
* Add APM32F4 linker files
* Add APM32F4.mk
* Add APM32 driver files
* Add APM32F40X MCU type
* Sync with the Betaflight master branch and modify the driver directory structure
* Implement CLI on the APM32
* Implement ADC on the APM32
* Implement config streamer on the APM32
* Implement I2C on the APM32
* Implement SPI on the APM32
* Implement DSHOT on the APM32
* Implement transponder ir on the APM32
* Implement serial uart on the APM32
* Implement MCO on the APM32
* Implement DWT on the APM32
* Update the init.c file, adding APM32 MCO configuration
* Remove all duplicated APM32 driver files and retaining only the APM32 LIB directory
* Create APM32F4.mk
* Add linker files for APM32F405 and APM32F407
* Add startup and library config files for APM32F405 and APM32F407
* Add target files for APM32F405 and APM32F407
* Add apm32 MCU driver files
* Add build configuration for APM32 MCU
* Implement config streamer on APM32
* Implement CLI on the APM32
* Implement ADC on the APM32
* Implement RCC on the APM32
* Implement MCO on the APM32
* Implement I2C on the APM32
* Implement SPI on the APM32
* Implement serial uart on the APM32
* Implement IO on the APM32
* Implement DMA on the APM32
* Implement DSHOT on the APM32
* Implement transponder ir on the APM32
* Update init.c
* Add the inclusion of the 'platform.h' file to the APM USB driver source file
* Merge bus SPI duplicate code from APM32 to STM32
* Update timer_apm32.c
* Merge motor duplicate code from APM32 to STM32
* Merge serial uart duplicate code from APM32 to STM32
* Update APM32F4.mk
* Update cli.c
* Update APM32F4.mk
* Remove the apm32_flash_f4_split.ld
* Associate the apm32 linker file with stm32_flash_f4_split.ld
Add uartWriteBuf() to improve performance
Optimised transmit buffer space check
Tidy up group duration calculations
Add uartBeginWrite, uartEndWrite and serialWriteBufNoFlush
Remove OSD grouping and check on the fly. Implement multi-pass artificial horizon rendering.
Fix rendering of camera frame
Fix stick overlay background rendering
Fix channel rendering
Fix ESC information rendering
Make Spec Prearm Display deterministic
Co-authored-by: Petr Ledvina <ledvinap@gmail.com>
* AT32F435: new target (#12159)
* AT32F435: New target (WIP)
* IO and Timer Updates
* Adding pseudonyms for the STM TypeDef items.
- implementation to follow
* Adding config_streamer support for AT32
* Implementation for IO
* Adding in Peripheral mapping from emsr.
* Warnings cleanup for AT drivers
* Getting things to the linking stage
* Add AT-START-F435 LEDs as default in AT32F435 as a temporary measure to aid bringup
* Remove tabs
* Enable selection of serial port to use for MSP
* Setup defaults for AT-START-F435 to use MSP on UART1
* Fix for most recent 4.5.0 Makefile changes
* Solve for sanity check.
* Add AT32F435 MCU type
* Fix compilation issue with SITL
* Merge conflict resolution
* Minor cleanup
* Adding line feed.
---------
Co-authored-by: Steve Evans <Steve@SCEvans.com>
* UART9 was supported as LPUART on some H7s.
* Newer 100-pin H7 CPUs support UART9 and USART10.
* 100+ pin devices support higher numbered UARTS than UART10.
Use USE_LPUART instead of hacking into UART9 for clarity.
* LPUARTS are different from other types of UARTS.
* They need different ID ranges.
* They have and different capabilities.
* Renumber LPUART1 to 40.
0-19 reserved for UART1-20
40-49 onwards for LPUART instances.
It makes sense to treat them as a different class of UART. Just like we
do for softserial, vcp, etc.
value when DMA was used. For example, if one byte was waiting, the function
returned one less than the size of the buffer.
The reason the bug didn't cause serious problems is that almost all
calls to this function check only whether the returned value is zero or not.
(The only exceptions I found were in "src/main/telemetry/hott.c". Perhaps
that code was tested on a target that did not use DMA.) The case of zero
bytes waiting was the only case in which the correct result was returned.
- Add UART DMA configurability
- Consolidation of DMA settings code
DMA setting code for all MCUs is now in serial_uart.c
- Consolidation of UART buffer
UART buffers are not embedded in uartDevice[] array anymore for all MCUs.
- Consolidation of HAL DMA IRQ handler
- Add missing defs for DMA on UART4 for F3
* Support DTR in serial passthrough mode to enable programming of Arduino
based devices such as MinimOSD.
Use 'serialpassthrough 5 57600 rxtx 56' and then use Ardino to program MinimOSD
Use 'serialpassthrough 5 115200' and then use MWOSD configurator to setup
* Fix comment for CDC_SetCtrlLineStateCb routine
* Handle F7 CDC interface
* Use strToPin() to allow easy port/pin specification
* Fix use of CDC_SetCtrlLineStateCb for all processor types
* Only set baud when specified
* Fix unit tests for cli
* Only register callback if needed
* Fix white space
* Provide implementation of IOConfigGPIO in SITL
* Update serialpassthrough help text
* DTR handling through serial drivers
* Fix F3, F7 and SITL builds
* If serialpassthrough command specifies baud rate of 0, set baud rate over USB. MWOSD configurator can now access config and reflash MinimOSD without rebooting and changing baud rate.
* Fix F3 build
* Fix failing unit tests
* Use resources to declare DTR pin assignment
* Don't assert DTR during normal operation as MW_OSD doesn't like it
* MW_OSD must be built with MAX_SOFTRESET defined in order to support DTR resets
* Minimise changes after dropping DTR pin param from serialpassthrough cmd
* Remove DTR pin param from serialpassthrough cmd
* Treat ioDtrTag as boolean in conditional statements
* Tidy buffer check
* Check buffer size in CDC_Itf_Control
* Fix unit test
* Add documentation for DTR
* Add note on MAX_SOFTRESET to documentation
* Remove superfluous function definitions
* Fix tabs
* Fix tabs
* Removed superfluous entried from vtable
* Backout whitespace changes unrelated to this PR
* Pass true/false to IOWrite()
* Fix line coding packing
* Add LINE_CODING structure defintion
* Revise serial documentation
* Prevent tx buffer overflow in serialPassthrough()
* Revert change unrelated to PR
* Review feedback from ledvinap
* Fix unit test
* Use PINIO to drive DTR
* Fix unit test
* Remove change unrelated to PR
* Fix SITL build
* Use shifted bits for mask definition
* Fix serialpassthrough documentation
* Only compile PINIO functionality if USE_PINIO defined
* IOConfigGPIO not needed
* Move cbCtrlLine callback to cli.c
* serialPassthrough params changed
* Check packed structure size
* Fix unit test
* Tidy up baud rate handling
Add begin write and end write hints. If implemented by the serial
driver, then the driver can buffer up data sent via serialWrite() and
flush it when serialEndWrite() is called.
Implemented at the buffer level as it requires the least change to how
serial_msp and serial_cli are architected.
Also tidy up the visibility in the VCP driver.
Signed-off-by: Michael Hope <mlhx@google.com>
This lets USB send up to 32 bytes in a frame instead of 32 one byte
frames. Add a fallback for drivers that don't implement writeBuf().
Signed-off-by: Michael Hope <mlhx@google.com>