Skip to content

Commit 586ab41

Browse files
authored
Overloaded +=, -=, *=, and /= operators for CANSignals (#49)
1 parent 9dcdbd2 commit 586ab41

3 files changed

Lines changed: 33 additions & 1 deletion

File tree

include/can_interface.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ class ITypedCANSignal : public ICANSignal
102102

103103
void operator=(const SignalType &signal) { signal_ = signal; }
104104

105+
SignalType operator+=(const SignalType &signal) { return signal_ += signal; }
106+
107+
SignalType operator-=(const SignalType &signal) { return signal_ -= signal; }
108+
109+
SignalType operator*=(const SignalType &signal) { return signal_ *= signal; }
110+
111+
SignalType operator/=(const SignalType &signal) { return signal_ /= signal; }
112+
105113
operator SignalType() const { return signal_; }
106114

107115
protected:
@@ -269,6 +277,14 @@ class CANSignal : public ITypedCANSignal<SignalType>
269277
}
270278

271279
void operator=(const SignalType &signal) { ITypedCANSignal<SignalType>::operator=(signal); }
280+
281+
SignalType operator+=(const SignalType &signal) { return ITypedCANSignal<SignalType>::operator+=(signal); }
282+
283+
SignalType operator-=(const SignalType &signal) { return ITypedCANSignal<SignalType>::operator-=(signal); }
284+
285+
SignalType operator*=(const SignalType &signal) { return ITypedCANSignal<SignalType>::operator*=(signal); }
286+
287+
SignalType operator/=(const SignalType &signal) { return ITypedCANSignal<SignalType>::operator/=(signal); }
272288
};
273289

274290
// Macros for making signed and unsigned CAN signals, default little-endian

platformio.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
; https://docs.platformio.org/page/projectconf.html
1010

1111
[platformio]
12-
default_envs = esp32dev
12+
default_envs = native
1313

1414
[env]
1515
check_skip_packages = yes

test/test_main.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,21 @@ void MITMotorBigEndianCANSignalTest(void)
153153
TEST_ASSERT_EQUAL(bswap(uint64_t(0x8005800000fff800)), *full_msg);
154154
}
155155

156+
void OperatorsTest(void)
157+
{
158+
MakeSignedCANSignal(float, 0, 32, 1, 0) test_signal;
159+
test_signal = 0;
160+
TEST_ASSERT_EQUAL_FLOAT(0, test_signal);
161+
test_signal += 10;
162+
TEST_ASSERT_EQUAL_FLOAT(10, test_signal);
163+
test_signal -= 5;
164+
TEST_ASSERT_EQUAL_FLOAT(5, test_signal);
165+
test_signal *= 2;
166+
TEST_ASSERT_EQUAL_FLOAT(10, test_signal);
167+
test_signal /= 2;
168+
TEST_ASSERT_EQUAL_FLOAT(5, test_signal);
169+
}
170+
156171
int runUnityTests(void)
157172
{
158173
UNITY_BEGIN();
@@ -163,6 +178,7 @@ int runUnityTests(void)
163178
RUN_TEST(TypedCanSignalTest);
164179
RUN_TEST(EnumClassSignalTest);
165180
RUN_TEST(MITMotorBigEndianCANSignalTest);
181+
RUN_TEST(OperatorsTest);
166182
return UNITY_END();
167183
}
168184

0 commit comments

Comments
 (0)