Yuri D'Elia
5e04d4ccaf
Add getters/setters for Jerk in Motion/PulseGen
...
This allows us to make tests that expect jerk to be the same across two
axes, even if they're statically configured differently.
2021-07-25 01:24:40 +02:00
D.R.racer
f62cb99b13
Fix TMC2130 stub
...
so that motion unit tests build and run
2021-07-14 08:38:10 +02:00
Yuri D'Elia
f28567a051
Motion tests: improve comments
2021-07-13 20:21:28 +02:00
Yuri D'Elia
324fb92fd5
Motion: implement timer multiplexing
2021-07-13 19:21:13 +02:00
Yuri D'Elia
d0581bf494
Motion: Add more methods and tests
...
- Add SetPosition/CurPosition (not only) for testing
- Implement some real tests
2021-07-13 17:43:50 +02:00
Yuri D'Elia
4fd22f0656
Motion: add initial test infrastructure and stubs
2021-07-13 16:16:56 +02:00
Yuri D'Elia
18ced44341
Merge remote-tracking branch 'upstream/main' into motion_wip
2021-07-13 15:31:31 +02:00
Yuri D'Elia
98845008aa
Rename Motion::CurrentPos to Position()
...
This matches PulseGen::Position() and avoids confusion around the term
"current": Position() returns the head position in the queue, not the
"live" axis position.
We have PulseGen::CurPosition() now for this purpose, although we don't
expose it to Motion yet.
2021-07-13 01:03:03 +02:00
Yuri D'Elia
16e7f62aee
PulseGen: introduce CurPosition() for testing
...
CurPosition() returns the live axis position, which in this
implementation is inherently expensive to compute.
This shouldn't be required for the MMU, but it /will/ come in handy to
check for the axis position/s in Motion tests.
2021-07-13 00:48:44 +02:00
D.R.racer
eed1c3f07a
Fix buttons unit tests after ADC update
2021-07-12 18:01:57 +02:00
Yuri D'Elia
a5a91cbaa8
tests: remove relative cmake paths in pulse_gen/speed_table
2021-07-12 11:11:49 +02:00
Yuri D'Elia
787c73ecff
Merge remote-tracking branch 'upstream/main' into motion_wip
2021-07-12 10:25:06 +02:00
Yuri D'Elia
9b0dd2d633
Motion: fix new Step() prototype
2021-07-12 09:58:53 +02:00
Alan Dragomirecký
cf5b1c3955
Do not use hard-to-read relative paths in CMake
2021-07-12 09:09:21 +02:00
Alan Dragomirecký
3a131cfa0a
Remove mentions of the -m32 flag (commented code)
2021-07-12 09:09:21 +02:00
Yuri D'Elia
9b77623be1
PulseGen: ensure Abort calculates the current remainder correctly
...
Instead of stepping halfway, step ~1/3 of the way through.
This ensures we can check if the steps performed is correct due to the
internal step subtraction.
2021-07-11 22:19:44 +02:00
Yuri D'Elia
9e935f6a07
Comment Typo
2021-07-11 22:17:04 +02:00
Yuri D'Elia
7337e97765
Rename Motion::DisableAxis to Disable
...
Implement Motion::SetEnabled (for symmetry with TMC2130::SetEnabled).
Rename DisableAxis to Disable and use the new SetEnabled. This makes the
member names more consistent.
2021-07-11 21:38:01 +02:00
Yuri D'Elia
066aab7adc
Move cpuFrequencyDivider to config::stepTimerFrequencyDivider
2021-07-11 21:17:08 +02:00
Yuri D'Elia
0c47d8f0d1
PulseGen: add comprehensive tests (no acceleration yet)
2021-07-11 20:52:27 +02:00
Yuri D'Elia
5250cfd4fe
Implement the SHR16::SetTMCDir stub for testing
2021-07-11 20:33:59 +02:00
Yuri D'Elia
1ff9b81630
Rename PulseGen::Move to PlanMoveTo
...
Make Motion and PulseGen intentionally very similar.
2021-07-07 16:59:40 +02:00
Yuri D'Elia
16cf02726b
test_speed_table: improve static assertion
...
Test against the resulting timer speed, not against the CPU clock
2021-07-07 16:59:40 +02:00
Yuri D'Elia
d87db1ff76
Revised WIP for the Motion API
...
- Remove the combined PlanMove(a,b,c,rate) call. If we allow the units
of the various motors to be changed at compile time, the unit of
rate can vary between axes.
- Build PlanMove on top of the absolute PlanMoveTo.
- Add required stubs for TMC2130.
- Allow each axis mode to be set independently, since we have this
feature for free anyway.
- Rework internals to use PulseGen data types and structs.
2021-07-07 16:59:39 +02:00
Yuri D'Elia
ed04bd02e2
PulseGen/speed_tables: cleanup constants
2021-07-07 16:59:04 +02:00
Yuri D'Elia
006dfd4abc
PulseGen: remove all floating point calculations
...
Work in steps, steps/s, steps/s2 directly.
2021-07-07 16:59:04 +02:00
Yuri D'Elia
cf5be5aade
PulseGen: initial version of the ramp/pulse generator
2021-07-07 16:59:04 +02:00
Yuri D'Elia
de88ed4c6b
Add initial Axis configuration static structs
2021-07-07 16:59:04 +02:00
Yuri D'Elia
ef7c776461
Update Motion for the new TMC2130/pins definitions
2021-07-07 16:59:04 +02:00
Yuri D'Elia
531f60ed27
Add modules::speed_table for acceleration lookup tables
2021-07-07 16:59:04 +02:00
Alan Dragomirecký
996f0f5dc0
Fix formatting of cmake files
2021-07-07 16:33:16 +02:00
Alan Dragomirecký
9448c04b36
Disable preprocessor code indentation
2021-07-07 16:33:03 +02:00
Yuri D'Elia
4362d77083
CircularIndex: alternate index management for full capacity
...
Comparing head/tail indexes cannot distinguish between empty/full cases,
so we end up wasting one item in the circular buffer. This also limits
the smallest and efficient size choice to be 4.
If the circular buffer is large, there's no issue, however for the
motion planner the block size is significant, and I was planning to use
exactly a ring buffer of two: one busy block, plus one planned.
Modify the indexer to store the internal "index" (aka cursor) pointer to
be one extra bit deeper than the final index. Comparing the underlying
cursor allow to distinguish the empty/full case due to the extra bit,
while producing the final index requires simple masking.
This is just as efficient if the size is a power of two with
2-complement wrap-around logic, which is the optimized case. However
the implementation also works for non-power-of-two sizes.
Add tests for more failure cases in the CircularBuffer which is built on
top.
(tecnique described in the Art of Computer Programming by Knuth)
2021-07-06 12:51:56 +02:00
D.R.racer
43a423f299
Change buttons' ADC limits into an array
...
as proposed by @vintagePC
cleaned-up some of the unit tests by this change
2021-07-05 18:07:54 +02:00
D.R.racer
b484eeacb6
Start using config.h
...
Added some constexpr vars for buttons, finda, fsensor and
applied them in the FW and unit tests accordingly.
2021-07-05 18:07:54 +02:00
Yuri D'Elia
3ccfc3adfb
GPIO: correctly stub known ports
...
- Use the correct port name in the #define
- Fully qualify all references
2021-07-05 15:20:11 +02:00
Yuri D'Elia
7c7aa95445
Mock GPIO when building tests
...
Add some conditional statements in gpio.h so that we can mock the GPIO
registers when building tests.
2021-07-05 15:20:11 +02:00
Yuri D'Elia
ea8b335f8d
progmem: fix for AVR
...
- Fix header name
- Rename pgm_read_word to read_word since pgm_read_word is a macro
and cannot be scoped
2021-07-05 13:33:49 +02:00
Yuri D'Elia
a9937b94e2
Add initial AVR PROGMEM abstraction in hal::progmem
2021-07-05 13:33:49 +02:00
D.R.racer
9efb127acb
Explain and fix the LED states while cutting filament
...
now the test is correct including LEDs
2021-07-01 08:12:47 +02:00
D.R.racer
d81b00a0f8
Test all filament slots
2021-07-01 08:12:47 +02:00
D.R.racer
974c1ba6db
Verify Cut filament state machine + update unit tests
2021-07-01 07:03:39 +02:00
D.R.racer
75fe7b20b5
Verify and fix Tool Change state machine + unit tests
2021-07-01 07:03:02 +02:00
D.R.racer
ffae941a28
Fix unit tests of load/unload filament
2021-06-30 07:39:31 +02:00
D.R.racer
9a8038ccb6
Add user_input module and use it instead of raw buttons
...
Encapsulates buttons and commands coming from the communication
2021-06-30 07:39:31 +02:00
D.R.racer
c15b1d59c4
Introduce Doxyfile + fix modules documentation
2021-06-30 07:39:31 +02:00
D.R.racer
f6e5d4ae76
Improve and verify Load filament alg and unit tests
2021-06-30 07:39:31 +02:00
D.R.racer
46a40f7488
Extend Unload filament unit tests
...
+ now error states are covered as well
+ greatly cleaned-up code
2021-06-30 07:39:31 +02:00
D.R.racer
ce20f0b001
Greatly improve unload filament unit test
...
+ relevant changes for other unit tests -> prepare for improving
of the other unit tests as well
2021-06-30 07:39:31 +02:00
D.R.racer
807eda7db3
Add prototypes of remaining logic layer's unit tests
...
- load filament
- feed to bondtech
- tool change
2021-06-30 07:39:31 +02:00
D.R.racer
f81ecf1294
Circular buffer - basic unit test
2021-06-29 12:17:10 +02:00
Yuri D'Elia
3cd94996e9
Remove invalid/useless test sizeof(ptr) == 4
...
This test is currently valid only for 32bit architectures.
There doesn't seem to be a true reason for this test to
ensure a pointer is exactly 4 bytes, so remove the test.
2021-06-29 08:59:36 +02:00
D.R.racer
4d6d6fe0af
Add more checks (esp. positions of idler and selector)
...
that resulted in finding several weak spots and now Cut and Eject filament
do not pass the test (which is correct, they really have logical issues)
2021-06-21 10:28:56 +02:00
D.R.racer
317a486d1e
Logic layer Eject filament unit tests
...
initial setup, it compiles, but is blocked by Unload filament
2021-06-21 10:26:04 +02:00
D.R.racer
1f8934c2c1
Fix+verify Cut filament unit test
...
it now finished ok, but future tweaks and improvements are expected
2021-06-21 10:22:17 +02:00
D.R.racer
ede475c5a6
Introduce Timebase module, refactor timing code + unit tests
2021-06-21 10:22:17 +02:00
D.R.racer
398181e26c
Feed to FINDA unit tests : green
2021-06-21 10:22:17 +02:00
D.R.racer
d9b368bb92
Verify+fix second Feed to FINDA's unit test
2021-06-21 10:22:17 +02:00
D.R.racer
85910497f7
Unify buttons' API with other modules
...
- accepts millis() instead of doing the timing internally (which has
been a temporary solution just for the tests until now)
2021-06-21 10:22:17 +02:00
D.R.racer
b338949acb
Shorten ADC reinit usage
2021-06-21 10:22:17 +02:00
D.R.racer
3cb3cebed9
Add forced reinit of all automata for the unit tests
...
+ added a few constexpr to constructors on the way
2021-06-21 10:22:17 +02:00
D.R.racer
b8f6bc9a4e
Tune Feed to FINDA state machine and its unit test
...
so that it works as expected
Still, there is a task of resetting all of the state machines just for
the next unit test to be run.
2021-06-21 10:22:17 +02:00
D.R.racer
f0a042c1b6
Add unit tests for Feed to FINDA state machine
...
+ improve infrastructure
2021-06-21 10:22:17 +02:00
D.R.racer
925201d77a
Basic unit test structure for the logic layer
...
It compiles the Cut Filament unit test with all the necessary components.
Still, the unit test does nothing.
2021-06-21 10:22:17 +02:00
D.R.racer
019f74d6f2
Add debouncing for FINDA
2021-06-08 07:00:07 +02:00
D.R.racer
bd335ec30d
Unit test for LEDs interface + fixes
2021-05-26 11:39:24 +02:00
D.R.racer
c377674aee
Prepare unit tests for LEDs
2021-05-25 12:33:50 +02:00
D.R.racer
9226230fd5
Reformat sources to fit the new namespace formatting rules
2021-05-25 12:24:19 +02:00
D.R.racer
fce2195558
Interface module for driving LEDs
...
+ start shaping up main.cpp
+ make the usage of namespaces and class names more consistent throughout the whole project
+ refactor related unit tests accordingly
2021-05-25 11:00:30 +02:00
D.R.racer
7611b98830
Add more unit tests and optimize (saved 1 byte per button on the AVR)
2021-05-25 10:02:02 +02:00
D.R.racer
ba8eacfe33
Buttons module implementation
...
A module representing a model of the 3 buttons
Includes a unit test project (empty at this stage)
2021-05-25 10:02:02 +02:00
D.R.racer
6ebb281eda
Update CMakeFiles.txt and temporarily fix compilation of unit tests
2021-05-18 08:58:23 +02:00
D.R.racer
fe0ac4f9f9
More unit tests for decoding of response messages
...
+ related changes in code
2021-05-18 08:18:11 +02:00
D.R.racer
30fbf6d870
Unit tests for decoding requests and responses
...
+errors on requests
2021-05-18 08:18:11 +02:00
D.R.racer
0633dea881
Protocol implementation
...
+ unit tests for encoding of messages
API still subject to minor changes
2021-05-18 08:18:11 +02:00
D.R.racer
7eb346a54d
Add first unit test
...
+proof of concept of Catch2 builds working in our repo
2021-05-13 17:35:08 +02:00
D.R.racer
257d0ec340
Prepare parts of the build system
...
extracted and slightly modified from Buddy-FW, still doesn't work
2021-04-19 07:03:47 +02:00