145{
146
147 unsigned long starting_millis = millis();
148 unsigned long starting_micros = micros();
149 SysTick_s starting_tick;
150 starting_tick.millis = starting_millis;
151 starting_tick.micros = starting_micros;
152
153
155 interface.init(starting_tick);
156
157 interface.set_use_em_for_soc(false);
158
159 CAN_message_t acu_measurements_can, bms_voltages_can;
160
161
162
164 interface.retrieve_voltage_CAN(bms_voltages_can);
165
166
167 acu_measurements_can =
generate_can_msg_from_uint_16s(2372, HYTECH_pack_filtered_read_ro_toS(0.0), HYTECH_ts_out_filtered_read_ro_toS(0.0), 0,
false);
168 interface.retrieve_current_shunt_CAN(acu_measurements_can);
169
170
171
172
173 SysTick_s tick_zero;
174 tick_zero.millis = starting_millis + 5000;
175 tick_zero.micros = starting_micros + 1000000;
176
177
178 interface.tick(tick_zero);
179
180 TEST_ASSERT_EQUAL_FLOAT(75.0, interface.get_SoC());
181
182
183
184
185
186 SysTick_s tick_one;
187 tick_one.millis = tick_zero.millis + 10;
188 tick_one.micros = tick_zero.micros + 10000;
189
190
191
192
193 interface.tick(tick_one);
194 TEST_ASSERT_EQUAL_FLOAT(74.9994855, interface.get_SoC());
195
196
197
198
199 SysTick_s tick_two;
200 tick_two.millis = tick_zero.millis + 10 + 20;
201 tick_two.micros = tick_zero.micros + 10000 + 20000;
202
203 acu_measurements_can =
generate_can_msg_from_uint_16s(2458, HYTECH_pack_filtered_read_ro_toS(0.0), HYTECH_ts_out_filtered_read_ro_toS(0.0), 0,
false);
204 interface.retrieve_current_shunt_CAN(acu_measurements_can);
205
206
207
208
209 interface.tick(tick_two);
210 TEST_ASSERT_EQUAL_FLOAT(74.9974279f, interface.get_SoC());
211
212
213
214
215
216 acu_measurements_can =
generate_can_msg_from_uint_16s(2457, HYTECH_pack_filtered_read_ro_toS(0.0), HYTECH_ts_out_filtered_read_ro_toS(0.0), 0,
false);
217 interface.retrieve_current_shunt_CAN(acu_measurements_can);
218
219 for (int i = 0; i <= 10000000; i += 20000) {
220 SysTick_s curr_tick;
221 curr_tick.millis = tick_zero.millis + 10 + 20 + i/1000;
222 curr_tick.micros = tick_zero.micros + 10000 + 20000 + i;
223 interface.tick(curr_tick);
224 }
225
226
227
228
229 TEST_ASSERT_EQUAL_FLOAT(73.9686f, interface.get_SoC());
230
231}
CAN_message_t generate_can_msg_from_uint_16s(uint16_t first, uint16_t second, uint16_t third, uint16_t fourth, bool use_little_endian)
CANBufferType CAN_BUFFER_CC_TESTS
this class is for interfacing with the AMS (accumulator management system)