rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
can_filter.cpp
Go to the documentation of this file.
1#include "pch.h"
2#include "can_filter.h"
3#include "can_hw.h"
4
5#ifndef LUA_RX_MAX_FILTER_COUNT
6#define LUA_RX_MAX_FILTER_COUNT 48
7#endif
8
9static size_t filterCount = 0;
10static CanFilter filters[LUA_RX_MAX_FILTER_COUNT];
11
12CanFilter* getFilterForId(size_t busIndex, int Id) {
13 for (size_t i = 0; i < filterCount; i++) {
14 auto& filter = filters[i];
15
16 if (filter.accept(Id)) {
17 if (filter.Bus == ANY_BUS || filter.Bus == (int)busIndex) {
18 return &filter;
19 }
20 }
21 }
22
23 return nullptr;
24}
25
27 // Clear all lua filters - reloading the script will reinit them
28 filterCount = 0;
29}
30
31void addLuaCanRxFilter(int32_t eid, uint32_t mask, int bus, int callback) {
32 if (filterCount >= LUA_RX_MAX_FILTER_COUNT) {
33 criticalError("Too many Lua CAN RX filters");
34 }
35
36 efiPrintf("Added Lua CAN RX filter id 0x%x mask 0x%x with%s custom function", (unsigned int)eid, (unsigned int)mask, (callback == -1 ? "out" : ""));
37
38 filters[filterCount].Id = eid;
39 filters[filterCount].Mask = mask;
40 filters[filterCount].Bus = bus;
41 filters[filterCount].Callback = callback;
42
44}
void addLuaCanRxFilter(int32_t eid, uint32_t mask, int bus, int callback)
static size_t filterCount
Definition can_filter.cpp:9
CanFilter * getFilterForId(size_t busIndex, int Id)
void resetLuaCanRx()
static CanFilter filters[LUA_RX_MAX_FILTER_COUNT]
int32_t Id
Definition can_filter.h:10
int Callback
Definition can_filter.h:14
int32_t Mask
Definition can_filter.h:11