| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | ||||
| 2 | #include "pch.h" | |||
| 3 | ||||
| 4 | #include "gppwm_channel.h" | |||
| 5 | ||||
| 6 | static GppwmChannel channels[GPPWM_CHANNELS]; | |||
| 7 | static OutputPin pins[GPPWM_CHANNELS]; | |||
| 8 | static SimplePwm outputs[GPPWM_CHANNELS]; | |||
| 9 | ||||
| 10 | typedef Map3D<GPPWM_RPM_COUNT, GPPWM_LOAD_COUNT, uint8_t, int16_t, int16_t> gppwm_Map3D_t; | |||
| 11 | ||||
| 12 | static gppwm_Map3D_t table1{"gppwm1"}; | |||
| 13 | static gppwm_Map3D_t table2{"gppwm2"}; | |||
| 14 | static gppwm_Map3D_t table3{"gppwm3"}; | |||
| 15 | static gppwm_Map3D_t table4{"gppwm4"}; | |||
| 16 | ||||
| 17 | static gppwm_Map3D_t* const tables[] = { | |||
| 18 | &table1, | |||
| 19 | &table2, | |||
| 20 | &table3, | |||
| 21 | &table4, | |||
| 22 | }; | |||
| 23 | ||||
| 24 | static const char *channelNames[GPPWM_CHANNELS] = { "GPPWM#1", | |||
| 25 | "GPPWM#2", | |||
| 26 | "GPPWM#3", | |||
| 27 | "GPPWM#4", | |||
| 28 | }; | |||
| 29 | ||||
| 30 | ||||
| 31 | 585 | void initGpPwm() { | ||
| 32 |
2/2✓ Branch 1 taken 2340 times.
✓ Branch 2 taken 585 times.
|
2/2✓ Decision 'true' taken 2340 times.
✓ Decision 'false' taken 585 times.
|
2925 | for (size_t i = 0; i < efi::size(channels); i++) { |
| 33 | 2340 | auto& cfg = engineConfiguration->gppwm[i]; | ||
| 34 | ||||
| 35 | // If no pin, don't enable this channel. | |||
| 36 |
1/2✓ Branch 1 taken 2340 times.
✗ Branch 2 not taken.
|
1/2✓ Decision 'true' taken 2340 times.
✗ Decision 'false' not taken.
|
2340 | if (!isBrainPinValid(cfg.pin)) { |
| 37 | 2340 | continue; | ||
| 38 | } | |||
| 39 | ||||
| 40 | // Determine frequency and whether PWM is enabled | |||
| 41 | ✗ | float freq = cfg.pwmFrequency; | ||
| 42 | ✗ | bool usePwm = freq > 0; | ||
| 43 | ||||
| 44 | // Setup pin & pwm | |||
| 45 | ✗ | pins[i].initPin("gp pwm", cfg.pin); | ||
| 46 | ✗ | if (usePwm) { | ||
| 47 | ✗ | startSimplePwm(&outputs[i], channelNames[i], &engine->scheduler, &pins[i], freq, 0); | ||
| 48 | } | |||
| 49 | ||||
| 50 | // Set up this channel's lookup table | |||
| 51 | ✗ | tables[i]->initTable(cfg.table, cfg.rpmBins, cfg.loadBins); | ||
| 52 | ||||
| 53 | // Finally configure the channel | |||
| 54 | ✗ | channels[i].init(usePwm, &outputs[i], &pins[i], tables[i], &cfg); | ||
| 55 | } | |||
| 56 | 585 | } | ||
| 57 | ||||
| 58 | 1086 | void updateGppwm() { | ||
| 59 |
2/2✓ Branch 1 taken 4344 times.
✓ Branch 2 taken 1086 times.
|
2/2✓ Decision 'true' taken 4344 times.
✓ Decision 'false' taken 1086 times.
|
5430 | for (size_t i = 0; i < efi::size(channels); i++) { |
| 60 | 4344 | auto result = channels[i].update(i); | ||
| 61 | ||||
| 62 | 4344 | engine->outputChannels.gppwmOutput[i] = result.Result; | ||
| 63 | 4344 | engine->outputChannels.gppwmXAxis[i] = result.X; | ||
| 64 | 4344 | engine->outputChannels.gppwmYAxis[i] = result.Y; | ||
| 65 | } | |||
| 66 | 1086 | } | ||
| 67 |