|
1 | 1 | #include "CuTest.h" |
2 | 2 |
|
| 3 | +extern void TEST_CHAN_SetChannelValue(int channel, s32 value); |
| 4 | + |
3 | 5 | extern struct Transmitter Transmitter; |
4 | 6 | extern u8 TEST_Button_InterruptLongPress(); |
5 | 7 |
|
| 8 | +void TestGetAllMixers(CuTest *t) |
| 9 | +{ |
| 10 | + CuAssertPtrEquals(t, MIXER_GetAllMixers(), Model.mixers); |
| 11 | +} |
| 12 | + |
| 13 | +void TestGetAllTrims(CuTest *t) |
| 14 | +{ |
| 15 | + CuAssertPtrEquals(t, MIXER_GetAllTrims(), Model.trims); |
| 16 | +} |
| 17 | + |
| 18 | +void TestEvalMixers(CuTest *t) |
| 19 | +{ |
| 20 | + s32 rawdata[NUM_SOURCES + 1] = {0}; |
| 21 | + memset(Model.mixers, 0, sizeof(Model.mixers)); |
| 22 | + rawdata[1] = 1; |
| 23 | + for (unsigned i = 0; i < NUM_MIXERS - 1; i++) { |
| 24 | + Model.mixers[i].src = 1; |
| 25 | + Model.mixers[i].dest = 2; |
| 26 | + Model.mixers[i].scalar = 100; |
| 27 | + Model.mixers[i].flags = MUX_ADD; |
| 28 | + } |
| 29 | + MIXER_EvalMixers(rawdata); |
| 30 | + CuAssertIntEquals(t, NUM_MIXERS -1, rawdata[3 + NUM_INPUTS]); |
| 31 | +} |
| 32 | + |
6 | 33 | void TestMixerMapChannel(CuTest *t) |
7 | 34 | { |
8 | | - unsigned channels[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER}; |
| 35 | + unsigned channels[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER, 5}; |
9 | 36 | Transmitter.mode = MODE_1; |
10 | 37 | for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) { |
11 | | - unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER}; |
| 38 | + unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER, 5}; |
12 | 39 | CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i])); |
13 | 40 | } |
14 | 41 | Transmitter.mode = MODE_2; |
15 | 42 | for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) { |
16 | | - unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_AILERON, INP_RUDDER}; |
| 43 | + unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_AILERON, INP_RUDDER, 5}; |
17 | 44 | CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i])); |
18 | 45 | } |
19 | 46 | Transmitter.mode = MODE_3; |
20 | 47 | for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) { |
21 | | - unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_RUDDER, INP_AILERON}; |
| 48 | + unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_RUDDER, INP_AILERON, 5}; |
22 | 49 | CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i])); |
23 | 50 | } |
24 | 51 | Transmitter.mode = MODE_4; |
25 | 52 | for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) { |
26 | | - unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_RUDDER, INP_AILERON}; |
| 53 | + unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_RUDDER, INP_AILERON, 5}; |
27 | 54 | CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i])); |
28 | 55 | } |
29 | 56 | } |
30 | 57 |
|
| 58 | +void TestUpdateRawInputs(CuTest *t) |
| 59 | +{ |
| 60 | + memset(&Model, 0, sizeof(Model)); |
| 61 | + memset((s32 *)raw, 0, sizeof(raw)); |
| 62 | + for (int i = 1; i <= NUM_TX_INPUTS; i++) { |
| 63 | + TEST_CHAN_SetChannelValue(i, (i + 1) * 200); |
| 64 | + Model.mixers[i].src = i; |
| 65 | + Model.mixers[i].dest = i; |
| 66 | + Model.mixers[i].scalar = 100; |
| 67 | + Model.mixers[i].flags = MUX_REPLACE; |
| 68 | + } |
| 69 | + MIXER_UpdateRawInputs(); |
| 70 | + s32 expected[] = { |
| 71 | + 0, 1000, 800, 600, 400, -10000, 10000, -10000, 10000, -10000, |
| 72 | + 10000, -10000, 10000, -10000, -10000, 10000, -10000, -10000, 10000, |
| 73 | + }; |
| 74 | + for(unsigned i = 0; i < sizeof(raw) / sizeof(raw[0]); i++) { |
| 75 | + s32 exp = i*sizeof(s32) < sizeof(expected) ? expected[i] : 0; |
| 76 | + CuAssertIntEquals(t, exp, raw[i]); |
| 77 | + } |
| 78 | + |
| 79 | + //PPMin = TRAIN2 |
| 80 | + memset((s32 *)raw, 0, sizeof(raw)); |
| 81 | + Model.num_ppmin = PPM_IN_TRAIN2 << 6; |
| 82 | + Model.train_sw = INP_GEAR1; |
| 83 | + raw[Model.train_sw] = 100; |
| 84 | + for(int i = 0; i < MAX_PPM_IN_CHANNELS; i++) { |
| 85 | + Model.ppm_map[i] = i; |
| 86 | + ppmChannels[i] = -100 * i ; |
| 87 | + } |
| 88 | + MIXER_UpdateRawInputs(); |
| 89 | + for(unsigned i = 0; i < MAX_PPM_IN_CHANNELS; i++) { |
| 90 | + CuAssertIntEquals(t, 0, raw[i]); |
| 91 | + } |
| 92 | + ppmSync = 1; |
| 93 | + MIXER_UpdateRawInputs(); |
| 94 | + for(unsigned i = 0; i < MAX_PPM_IN_CHANNELS; i++) { |
| 95 | + CuAssertIntEquals(t, -100 * i, raw[i]); |
| 96 | + } |
| 97 | + |
| 98 | + //PPMin = Source |
| 99 | + ppmSync = 1; |
| 100 | + memset((s32 *)raw, 0, sizeof(raw)); |
| 101 | + Model.num_ppmin = (PPM_IN_SOURCE << 6) | MAX_PPM_IN_CHANNELS; |
| 102 | + MIXER_UpdateRawInputs(); |
| 103 | + for(unsigned i = 0; i < MAX_PPM_IN_CHANNELS; i++) { |
| 104 | + CuAssertIntEquals(t, -100 * i, raw[1 + NUM_INPUTS + NUM_OUT_CHANNELS + NUM_VIRT_CHANNELS + i]); |
| 105 | + } |
| 106 | +} |
| 107 | + |
31 | 108 | void TestApplyMixerSimple(CuTest *t) |
32 | 109 | { |
33 | 110 | struct Mixer initmixer = { |
|
0 commit comments