* Missing include
* 1. Add int16_byte class
2. Add axis factory function for int16_byte instances
(flyweight pattern)
* Separate out axis iteration and I/O conversions
* Optimize for size and performance.
* Fix unit test
* Use table_row_iterator_t to adjust ignitionTable
* Separate 2d & 3d table code, abstract page to table iterator conversion.
This is just moving code around in preparation for future changes.
* Reduce table RAM (.bss) usage
Generate a separate type for each possible
3d axis & size combination.
This turns what was runtime information into
compile time data.
* Save 1 byte per table.
Use a flag value (INT16_MAX) instead of a separate boolean
flag
* File renaming
table_iterator -> table3d_iterator.h
table3d.h -> table3d_interpolate.h
table3d.cpp -> table3d_interpolate.cpp
table3d_types.h -> table3d.h
* Optimize page.cpp: reduce code clutter, maintain performance
* Reduce flash usage
* Encapsulate table metadata
* Performance - hoist if statement
* Replace function with macro
* Use a packed enum as a type identifier
Use a packed enum as a type identifier
Slimmer data types
* Use table iterators for random access to table
values and axis.
* Centralize write buffer check
* Encapsulate 16-bit reference concept
* Performance: make table iterators proper classes
This allows us to chain calls on temporaries - not possible
with regular function calls.
* Performance: encapsulate EEPROM update
& address increment
* Save flash - don't duplicate function
* Performance: directly invalidate table cache
* Separate out iterator reversal
* Separate out entity mapping & per-byte access
Much faster, smaller code footprint & easier to understand
* Code quality fixes
* Separate out axis metadata
* Doxygen comments
* Separate int16_ref into separate file
* Separate out table axies & values into separate types
No need for metadata types & more localised code.
E.g. creating iterators is now alongside the data over
which they iterate.
* Doxygen
* Add Doxygen markup for grouping decoders. Tidy-up doucumentation just enough to make
Doxygen 'Modules' page neat / somewhat consistent (w/o stripping any info, on the contrary
some info is now added for few decoders that had only name present).
Add minimally modified Doxygen Doxyfile configuration.
* Document statuses and config* structure members in globals.h:
- Convert existing documentation to doxygen
- Document some of the undocumented members cross-referencing code files
where they are used (often containing good explanations in code comments) or
deriving meaning from code (leave question mark as marker of uncertainty
or need for clarification)
- Same activity in misc .h header files w. struct declarations.
Misc .ino files with code:
- Convert existing code documentation to doxygen
- Add documentation to undocumented functions (deriving idea from raw code and
code embedded comments)
- Some additions to existing documentation.
End sentences with period, as it has many iportant meanings for Doxygen
e.g. auto-brief ends at first-sentence period and in (doxygen generated)
HTML ascii newline does not break lines (or sentences).
Doxyfile: Add README.md file as INPUT from upper (codebase root) directory.
* fix!: fix ODR violations
* refactor: move page specific code into a separate CPP file
* refactor: page getter/setter share mapping logic
Extract common page-to-entity mapping logic from
getPageValue() & setPageValue() - place in map_page_offset_to_entity()
and share.
* performance: optimize CRC calc
Calculate page CRC by iterating over entities & tables.
* CRC table calculation - use table iterator
* refactor: use iterators for sendPage()
Re-implement sendPage() using page & table iterators
Future proof & fast
* refactor: sendPageASCII()
Pull put shared code into functions.
Use table iterator
* refactor: use shared axis factor
This puts the axis factor usage in one place
* refactor: encapsulate page size & count
Added getPageCount() & getPageSize()
* Added static_assert for all pages.
* Remove C++ language elements
namesapces, scope resolution, enum struct
* Rename comms.ino to comms.cpp
Provides better encapsulation of non-global
data & functions.
INO files are all mashed together by some
custom process. So everything becomes global and
static functions/variables aren't really private to
the translation unit. Thus breaking encapsulation :-(