Skip to content

Commit dc0cbbd

Browse files
committed
temp
1 parent 55c7364 commit dc0cbbd

21 files changed

Lines changed: 413 additions & 251 deletions

File tree

.cubemx-manifest.json

Lines changed: 77 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"boards": {
55
"BMS": {
66
"ioc_checksum": "08670b75875f2feedea3280eecc4821f36b742ccf7680976ae6f87bc3937ebfc",
7-
"generated_at": "2026-05-23T23:02:29Z",
7+
"generated_at": "2026-05-25T04:41:50Z",
88
"files": {
99
"Core/Inc/FreeRTOSConfig.h": "363755b7a21dd5a790f0bafbfd68f00abe141fd8691720b3604bc84b7dbaa81b",
1010
"Core/Inc/adc.h": "0ac97025a4065f07b7b65a906bd0c45ea800215434ed43c287c1685507f3f612",
@@ -75,7 +75,7 @@
7575
},
7676
"DASH": {
7777
"ioc_checksum": "919253252bb89abb628b9105693f93510957783991dc2f4608e8da228a4235ea",
78-
"generated_at": "2026-05-23T23:02:31Z",
78+
"generated_at": "2026-05-25T04:41:52Z",
7979
"files": {
8080
"Core/Inc/FreeRTOSConfig.h": "692168cbc9c915133ce3f329cec850c5372c1759ec0412ced61fc14741de14be",
8181
"Core/Inc/can.h": "d9c82c8382c196a76d472a6b82a292a0384a086536ca280ce701ebbba9f5c682",
@@ -177,7 +177,7 @@
177177
},
178178
"DART": {
179179
"ioc_checksum": "5e40a62867a13bf2ccbc21a8343b896b2979b658d024cb6721e46e05b32b5a45",
180-
"generated_at": "2026-05-23T23:02:32Z",
180+
"generated_at": "2026-05-25T04:41:52Z",
181181
"files": {
182182
"Core/Inc/can.h": "8bb6621564cd436d9b9697bc86bc4c6f6ae0492b84673344dfa5a3a2d0ee06cb",
183183
"Core/Inc/dma.h": "7cf6f7450a29d26303cbba5a3ca8c6cb24a02635d6a5ba4d05141fdfc75c4c49",
@@ -203,23 +203,84 @@
203203
},
204204
"DCU": {
205205
"ioc_checksum": "1897fddbae0d70adffbb05afce5d5d2ae8f76fef77b684b121ff3e8f6f6dc2ea",
206-
"generated_at": "2026-05-23T23:02:32Z",
206+
"generated_at": "2026-05-25T04:41:54Z",
207207
"files": {
208208
"Core/Inc/FreeRTOSConfig.h": "86f1fd7d3548ad19ef6466838128e59d8e2359bdee26eeb29f7fa19514b9e91d",
209+
"Core/Inc/can.h": "98925d7f4010f054e17d240116244377377c15248a5413a09ff811cdc23084e5",
210+
"Core/Inc/dma.h": "7cf6f7450a29d26303cbba5a3ca8c6cb24a02635d6a5ba4d05141fdfc75c4c49",
209211
"Core/Inc/gpio.h": "e2d62f964a0b7f238384ed6a20a181d09df9647240a268dc547acf5b35099f74",
210-
"Core/Inc/main.h": "66747dd66660711ee441a62d989469daa0ab4813d00b1096d90ab925ff0806db",
211-
"Core/Inc/stm32f4xx_hal_conf.h": "a7456a03b7c563da74771c7f179d5787d760b0f5508f4d739213e07f8604b0d8",
212-
"Core/Inc/stm32f4xx_it.h": "a96c6c7347c880644aeab9f9fe3ca9be2d61f123389fe8c2ce7dc4321501993a",
212+
"Core/Inc/i2c.h": "61d9641a97b80c573f09879c391c8de322408051b8dca6ddd4af752653b0aef8",
213+
"Core/Inc/main.h": "54a6319eec76f6997ae08a6ed92814968f50e2dc9381e9e00750b5587b3e6472",
214+
"Core/Inc/spi.h": "3adf7d89554e67075645b40e3fad2910420ba84608e28e3f675c1d8fdc4b54d9",
215+
"Core/Inc/stm32f4xx_hal_conf.h": "55cd77ef852b86aa9bcd5b5732819d7e65b452ed850bc54c5aac0e4fdfd5e166",
216+
"Core/Inc/stm32f4xx_it.h": "7a0ceb6ad17c3d1ce22097f540160cf042cc7aa767b14948985ac4fa8bef366c",
213217
"Core/Inc/usart.h": "2ddd1eaf81e3750b46df7222f4c34ae295bcdaaaa1152e4be4933d3a0ca90181",
218+
"Core/Src/can.c": "ab6dabfdeb68f4cb0a7860fb491e0957922c843c237a606f4999f32242519265",
219+
"Core/Src/dma.c": "39a7795baece2283005463b75ecd55761f923e3bf04fe2d4bf86734f4309dd15",
214220
"Core/Src/freertos.c": "475d89b939a986687725273e525c1c9f7d9869356aedf696b248a453ec5394a5",
215221
"Core/Src/gpio.c": "2f989a51b63a53279dff0b6d9393cb0e53226987e9bb0de129059cc570c1bcd5",
216-
"Core/Src/main.c": "b62bcad56cea422539445e80872c3710d3deac6433d136add4f416fa8bceeb21",
222+
"Core/Src/i2c.c": "d616e686a119d6a1cfad6eee39d81b9245743036d643477d1fb9a3a2b588a157",
223+
"Core/Src/main.c": "d63070c92e6c786b08681fb17e6f5d5751a1bbc6083a2037adb4616a37ffa9f6",
217224
"Core/Src/spi.c": "5ae02d7fc6acbaa0be3380987e9c4938d0944ef6ac36047fd97f71bf35bba68e",
218-
"Core/Src/stm32f4xx_hal_msp.c": "3217d99dc7006dc46ac384717641fe84386f05fc71db0a3340fa0eae810bc1b7",
219-
"Core/Src/stm32f4xx_it.c": "6cdfba6e76754e5838ae60c659793a49f4f635f7aa5d7451c0bbd0bbc502e1c7",
225+
"Core/Src/stm32f4xx_hal_msp.c": "72185148391041d5c2cc7e25afdba43f678b36ffa48a5a8b6703daaed4e70cb2",
226+
"Core/Src/stm32f4xx_hal_timebase_tim.c": "fa1c37ade77abe36b428374516b418d5bbd669378d95220f6bdd07e168b09908",
227+
"Core/Src/stm32f4xx_it.c": "2c5b50046b5d0b8e7f4a38ed7de64149359c0a193348584e7e0e8fe80be0cfc0",
220228
"Core/Src/syscalls.c": "03c06c72eafb44b499814cf9234aba57dd830f345d9b8779b5d7090e78517600",
221229
"Core/Src/sysmem.c": "ad20f7b1fa1e7c73330727747222cf2ffa3245ebf035230ee9a157545e79df95",
222-
"Core/Src/usart.c": "f278cb5046ca6c2101b713ceddb7ac9fd5e07e4fc69f11039d48d143b13b9c0a",
230+
"Core/Src/usart.c": "239ff7f4f2283c2bf1a52bf93362037ac66532723779f74d9d323fb6edb54687",
231+
"Middlewares/Third_Party/FatFs/src/diskio.c": "cc80dbfeed02589df9effc6b45b250f521fc1a3db5abe58461b28e99b17900ea",
232+
"Middlewares/Third_Party/FatFs/src/diskio.h": "1c30db73df9e5ce75e3e752a4bda0938a1312575168365d678e21bf33e4a311f",
233+
"Middlewares/Third_Party/FatFs/src/ff.c": "511a87724dadd27a358bac32e37e66d6808eeb514eb773734f18878ed731b3dc",
234+
"Middlewares/Third_Party/FatFs/src/ff.h": "644ecaf33339fc46ff447386f001c0199c54213ec14ea78b0ab77bba2184841d",
235+
"Middlewares/Third_Party/FatFs/src/ff_gen_drv.c": "3480734146b7b7cf86f752ad584cfbb6b95cf5be7e25ab8917caa325d4fee46b",
236+
"Middlewares/Third_Party/FatFs/src/ff_gen_drv.h": "8013f8285c86ab73059f531ef9bb7941fe4675e5b72820fe5d7900b36f11f1e3",
237+
"Middlewares/Third_Party/FatFs/src/ffconf_template.h": "13c638b5a50d4c47cbf4deecc540af197b0414245a11c1783623fb4b90ec17b6",
238+
"Middlewares/Third_Party/FatFs/src/integer.h": "20304085ec29f6cdd6218f411b134d3c677bd8eb9dd46c694871e0d88c2d2cc4",
239+
"Middlewares/Third_Party/FatFs/src/option/cc932.c": "7dcbc01992f75a1c97003360697474368228eeeef7f7b75e030df5a09c820264",
240+
"Middlewares/Third_Party/FatFs/src/option/cc936.c": "3714069db073d38b371dfb55ffdd9fc1a16aa962ee422aeaacf03e39d765a0c5",
241+
"Middlewares/Third_Party/FatFs/src/option/cc949.c": "c956ad1379b82e8283fc19fce5b9d5daac790cbda66692dcd7d7b9c1452a4d3d",
242+
"Middlewares/Third_Party/FatFs/src/option/cc950.c": "a9fffcfcb3b88154af86b77037f220808b48e113cf68916ab1773340bd35403e",
243+
"Middlewares/Third_Party/FatFs/src/option/ccsbcs.c": "263bdbedc0ac6d94ee7fb964bd0bd70a2b61c70476710cc1748f3c618825b47d",
244+
"Middlewares/Third_Party/FatFs/src/option/syscall.c": "19f8f29e1360e1899bcd22d1ffd6095d436a56a885a18f02d934685bb6c0d7b1",
245+
"Middlewares/Third_Party/FatFs/src/option/unicode.c": "72a8fd6aead38cc2e8cfbcf1ea7f2ecd142996295dfd9fd399909f75ef40333b",
246+
"Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h": "9f18b2e616411def39b415994b7fbe8e782a185e045c894ad2645c1ab7e83100",
247+
"Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c": "0dd9ec29eb5862c4520eede87b05e063a4c80223555140c0187e80f97ae9e8aa",
248+
"Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h": "f116a1a3f842194aabbbeddf3d0f9f345ab7d35d4de7be0f04af289f9b1fdfc8",
249+
"Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/freertos_mpool.h": "eed1c836ed2f0cde7d41a93da7e7e208c539d59162e872351526e1ddbd56b1b3",
250+
"Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/freertos_os2.h": "3ddb74193daf32483caee33e31a3ef0d40703e909e0e41e896839ccf37edcffc",
251+
"Middlewares/Third_Party/FreeRTOS/Source/croutine.c": "e31cd1c9c280c919a92edc28885e9bebce589d4cfab71cefab832a73683200fb",
252+
"Middlewares/Third_Party/FreeRTOS/Source/event_groups.c": "a72063c3977fad098a87a5430e04e9fc5b892d703e01fbe09ea907f67aacf20e",
253+
"Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h": "b7a81501c3f4ff9537df5c9a5e0231f37638cdc8324965ae10064128fded840f",
254+
"Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig_template.h": "363d1bbee6bffa74741939c93c9167ce3b499298da750f2ffb49691060bfa21b",
255+
"Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h": "c27d1653d2f7f34292387cab8a8b074426cc1ef73aeaa27663d56ba634f7f8ab",
256+
"Middlewares/Third_Party/FreeRTOS/Source/include/atomic.h": "b74ab6f4aae9a397565adb5f14c9d8e33b9f782a2e35f77535af751413ac68de",
257+
"Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h": "8df4c5eec7eb30262f09b7c47fc2eb0534a27721293b0d260a3398846494f9ac",
258+
"Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h": "382f8a7a0e00240fb69911dff8d8515248beb9dadfe77c22c4e5544f49cc76eb",
259+
"Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h": "3b9cbd64db721c4317544700fff4e42ac68d989f71b7d610b31087bb19175839",
260+
"Middlewares/Third_Party/FreeRTOS/Source/include/list.h": "f9b239f168976f7b167e054fa72616826f55ae4d74d76b87c9e70b2df079363f",
261+
"Middlewares/Third_Party/FreeRTOS/Source/include/message_buffer.h": "504a77558f13b66fd1eec5adf4d81e274f0b54c12880424833c24f577be0800a",
262+
"Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h": "3fafd21399ef619a55b2f8112750d750685c8ae1cb458363d21ee37a105ac6e7",
263+
"Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h": "c1fc47acdb79efb0fb8a0fb8a169ae4423fdc3a6d820b2f81d49e8e077c1ed48",
264+
"Middlewares/Third_Party/FreeRTOS/Source/include/portable.h": "39795c8dded505f24f53646ecd8192251851c74f366d2a5b0aae3fbfa68c191b",
265+
"Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h": "399814721d9735e91d74ca07be3974edb20639acb46a6792230ff9f61f67b353",
266+
"Middlewares/Third_Party/FreeRTOS/Source/include/queue.h": "39d58a203f1b67fdb1099293914a2af9722d223586cfc5ff06e230e047919dea",
267+
"Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h": "b9b2ff28a0c80fa21443690bb28de64c8b9451cccd57e484de0bcf02fc367575",
268+
"Middlewares/Third_Party/FreeRTOS/Source/include/stack_macros.h": "7d1d30b6c9ae34bebb26b14402f78a59a35ae826f460a1ad28534c9590b32151",
269+
"Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h": "0607fcca1927ba782a29a3814481d69db3569e6e53a68ebf2c01f5598a3af2b8",
270+
"Middlewares/Third_Party/FreeRTOS/Source/include/task.h": "830990f7b17b8e0ce3bdb0a7475d2cdc7d659eafff16b88a855c84c06a7a2a3e",
271+
"Middlewares/Third_Party/FreeRTOS/Source/include/timers.h": "7fa62f648014533ce5bd8da1775ddd814cbf208f9af7c748a40bb8b50a8e8912",
272+
"Middlewares/Third_Party/FreeRTOS/Source/list.c": "e735517f308fad5dd77d03b6858c16bdbc937bb9d0754735849fc7799ebe2b59",
273+
"Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c": "89f24a509ec85bf502724334c2607eeb7a432e1f26afbc9b7291254b8f7971dc",
274+
"Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h": "356ce2ec084883d8fc41d380910f828aee559f140e877629974752ea26a89792",
275+
"Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_1.c": "6d8eb84e5171bce4d5cde80abc575ebd7d81ac007b7733f34d5032bac93f1748",
276+
"Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_2.c": "cad8303950c2e3f6e33664075dbb2ee48071665273b33e2a53013ec7765c3db7",
277+
"Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_3.c": "51028411b5a1cb524b444c9311e4db83820741cea1fbf7438dea03f9d1f0788e",
278+
"Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c": "c697b88e48e9906a19cabef187e5797a5a45009144f9e473262752c86a5d2c50",
279+
"Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_5.c": "037dfba301eab4600a1e1402c631aa2995cf2eb7c05c7249d39f1afe792be8a2",
280+
"Middlewares/Third_Party/FreeRTOS/Source/queue.c": "06a153c1ce111213af32dfc8797bd2e5c7819e264dfa338b4049f058dc1edb11",
281+
"Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c": "4376714fecad0f72dc4c8b45236591a7e0ffe24dd018382f56e8b0dfc2230b28",
282+
"Middlewares/Third_Party/FreeRTOS/Source/tasks.c": "8cb1eabe18f130b2b8980e880847f773fb12a4071c763d26c51624223b32a3a4",
283+
"Middlewares/Third_Party/FreeRTOS/Source/timers.c": "0d16405e621a2c4b003b5f0324b9713cd4865364133df6f742f482a6b2dbc773",
223284
"Middlewares/Third_Party/stm32-hal-rfm95/rfm95.c": "c8dbfe5d5fad2ce256c30fff972e24fe9fa63eb816bc2d636174f7cbadc98d24",
224285
"Middlewares/Third_Party/stm32-hal-rfm95/rfm95.h": "9c55f50bab485a1252563081069eb515911725f6d3ae56e8173d19c1648dcb3d",
225286
"STM32F446XX_FLASH.ld": "104cb1a1baa900a864bd01c5aebded70dda1429afc827de8ec3373ce9d64bfb3",
@@ -228,7 +289,7 @@
228289
},
229290
"LVPDB": {
230291
"ioc_checksum": "aad83d2888e50c4498ca882150e6cc94c6266554b55da81220b3a142c5b5e4b2",
231-
"generated_at": "2026-05-23T23:02:33Z",
292+
"generated_at": "2026-05-25T04:41:54Z",
232293
"files": {
233294
"Core/Inc/can.h": "17611aeff90b90e352bc2ace2749644663492ecb10c71539567ef9b1441fd5d9",
234295
"Core/Inc/dma.h": "7cf6f7450a29d26303cbba5a3ca8c6cb24a02635d6a5ba4d05141fdfc75c4c49",
@@ -256,7 +317,7 @@
256317
},
257318
"PCU": {
258319
"ioc_checksum": "dce88e9916056d652c3fdf3d09dd8a7ad066bc7c7b6af576218e9be7277811b8",
259-
"generated_at": "2026-05-23T23:02:33Z",
320+
"generated_at": "2026-05-25T04:41:55Z",
260321
"files": {
261322
"Core/Inc/adc.h": "e36acfe1b822eff1de7e9f93073b8da32c94dd5b09484b716e190c6aa63eb3d0",
262323
"Core/Inc/can.h": "98925d7f4010f054e17d240116244377377c15248a5413a09ff811cdc23084e5",
@@ -286,7 +347,7 @@
286347
},
287348
"Sensor_Nodes": {
288349
"ioc_checksum": "be12ff3a8379f17c1b0a08bbdaf4953fb8f1c19bc8888a1df18d8395bb5a58f1",
289-
"generated_at": "2026-05-23T23:02:34Z",
350+
"generated_at": "2026-05-25T04:41:55Z",
290351
"files": {
291352
"Core/Inc/adc.h": "0ac97025a4065f07b7b65a906bd0c45ea800215434ed43c287c1685507f3f612",
292353
"Core/Inc/can.h": "98925d7f4010f054e17d240116244377377c15248a5413a09ff811cdc23084e5",
@@ -316,7 +377,7 @@
316377
},
317378
"UART": {
318379
"ioc_checksum": "9ff281c674a516d9870dbee5d60587351e97884ecd27127e2d1464987bf16a17",
319-
"generated_at": "2026-05-23T23:02:35Z",
380+
"generated_at": "2026-05-25T04:41:57Z",
320381
"files": {
321382
"Core/Inc/FreeRTOSConfig.h": "2a0e6022391d5ec198a77021ec3bf284583e245f9ce20c420fb7608f638330d6",
322383
"Core/Inc/dma.h": "7cf6f7450a29d26303cbba5a3ca8c6cb24a02635d6a5ba4d05141fdfc75c4c49",
@@ -376,7 +437,7 @@
376437
},
377438
"UART_TEST": {
378439
"ioc_checksum": "06c9618835096e44e3f73cd158bbc2e3fcf76e65dc9a29db68fe607180843efd",
379-
"generated_at": "2026-05-23T23:02:36Z",
440+
"generated_at": "2026-05-25T04:41:58Z",
380441
"files": {
381442
"Core/Inc/FreeRTOSConfig.h": "773dad076864ff18d5d85603d348d4931d29dde9925486e58f95a97ac98b8404",
382443
"Core/Inc/app_freertos.h": "6229601c2ebf192d40ceef377f3c1785571eaf6407f10bc87be5b06357dd3515",

BMS/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.0
1+
1.6.1

DART/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.0
1+
1.6.1

DASH/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.0
1+
1.6.1

DCU/Core/User/Src/FEB_Main.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,7 @@ void FEB_Init(void)
8080

8181
/* Initialize console (registers built-in commands: echo, help, hello, commands,
8282
* version, uptime, reboot, log). The CSV-over-console protocol is handled by
83-
* feb_console's parser directly — no separate init needed.
84-
* NOTE: deliberately no LOG_I before this — the DMA from a pre-console LOG_I
85-
* can collide with the synchronous HAL_UART_Transmit calls inside
86-
* FEB_Console_Init's debug path and wedge the boot. BMS's FEB_Init
87-
* (on origin/main) follows the same order. */
83+
* feb_console's parser directly — no separate init needed. */
8884
FEB_Console_Init(true);
8985

9086
/* CAN-log subsystem's CSV-form handlers. Pair with the pipe-form

DCU/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.0
1+
1.6.1
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
******************************************************************************
3+
* @file : FEB_CAN_BRAKE.h
4+
* @brief : CAN BRAKE Receiving Module
5+
* @author : Formula Electric @ Berkeley
6+
******************************************************************************
7+
*/
8+
9+
#ifndef FEB_CAN_BRAKE_H
10+
#define FEB_CAN_BRAKE_H
11+
12+
#include <stdbool.h>
13+
#include <stdint.h>
14+
15+
typedef struct
16+
{
17+
volatile uint8_t brake_percent;
18+
volatile uint32_t last_rx_tick;
19+
} BRAKE_State_t;
20+
21+
void FEB_CAN_BRAKE_Init(void);
22+
uint8_t FEB_CAN_BRAKE_GetPercent(void);
23+
bool FEB_CAN_BRAKE_IsDataFresh(uint32_t timeout_ms);
24+
25+
#endif /* FEB_CAN_BRAKE_H */
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
******************************************************************************
3+
* @file : FEB_CAN_BRAKE.c
4+
* @brief : CAN BRAKE Receiving Module Implementation
5+
* @author : Formula Electric @ Berkeley
6+
******************************************************************************
7+
*/
8+
9+
#include "FEB_CAN_BRAKE.h"
10+
#include "feb_can.h"
11+
#include "feb_can_lib.h"
12+
#include "stm32f4xx_hal.h"
13+
#include <stdbool.h>
14+
15+
static BRAKE_State_t brake_state = {};
16+
17+
/* ============================================================================
18+
* RX Callback Handlers
19+
* ============================================================================ */
20+
21+
static void rx_callback(FEB_CAN_Instance_t instance, uint32_t can_id, FEB_CAN_ID_Type_t id_type, const uint8_t *data,
22+
uint8_t length, void *user_data)
23+
{
24+
struct feb_can_brake_t msg;
25+
if (feb_can_brake_unpack(&msg, data, length) == 0)
26+
{
27+
brake_state.brake_percent = msg.brake_percent;
28+
29+
__DMB();
30+
brake_state.last_rx_tick = HAL_GetTick();
31+
}
32+
}
33+
34+
/* ============================================================================
35+
* API Implementation
36+
* ============================================================================ */
37+
38+
void FEB_CAN_BRAKE_Init(void)
39+
{
40+
FEB_CAN_RX_Params_t rx_params = {
41+
.instance = FEB_CAN_INSTANCE_1,
42+
.can_id = FEB_CAN_BRAKE_FRAME_ID,
43+
.id_type = FEB_CAN_ID_STD,
44+
.filter_type = FEB_CAN_FILTER_EXACT,
45+
.fifo = FEB_CAN_FIFO_0,
46+
.callback = rx_callback,
47+
.user_data = NULL,
48+
};
49+
50+
(void)FEB_CAN_RX_Register(&rx_params);
51+
}
52+
53+
uint8_t FEB_CAN_BRAKE_GetPercent(void)
54+
{
55+
return brake_state.brake_percent;
56+
}
57+
58+
bool FEB_CAN_BRAKE_IsDataFresh(uint32_t timeout_ms)
59+
{
60+
uint32_t last = brake_state.last_rx_tick;
61+
if (last == 0)
62+
return false;
63+
return (HAL_GetTick() - last) < timeout_ms;
64+
}

LVPDB/Core/User/Src/FEB_Main.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "main.h"
1111
#include <stdint.h>
1212
#include <stdio.h>
13+
#include "FEB_CAN_BRAKE.h"
1314
#include "FEB_CAN_DASH.h"
1415

1516
extern CAN_HandleTypeDef hcan1;
@@ -315,6 +316,7 @@ void FEB_Main_Setup(void)
315316
// Initialize ping/pong module
316317
FEB_CAN_PingPong_Init();
317318
FEB_CAN_DASH_Init();
319+
FEB_CAN_BRAKE_Init();
318320

319321
LOG_I(TAG_MAIN, "LVPDB Setup Complete");
320322
LOG_I(TAG_MAIN, "Type 'help' for available commands");
@@ -387,6 +389,9 @@ void FEB_Main_Loop(void)
387389

388390
// FEB_TPS_Enable(tps_handles[3], true); // BM_L
389391

392+
bool brake_on = FEB_CAN_BRAKE_IsDataFresh(250) && (FEB_CAN_BRAKE_GetPercent() > 10);
393+
HAL_GPIO_WritePin(BL_Switch_GPIO_Port, BL_Switch_Pin, brake_on ? GPIO_PIN_SET : GPIO_PIN_RESET);
394+
390395
FEB_UART_ProcessRx(FEB_UART_INSTANCE_1);
391396
}
392397

LVPDB/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.0
1+
1.6.1

0 commit comments

Comments
 (0)