25 static chibios_rt::Mailbox<CanFrameData*, canFrameCount>
freeBuffers;
37 CanFrameData* frameBuffer;
42 chibios_rt::CriticalSectionLocker csl;
53 frameBuffer->BusIndex = busIndex;
54 frameBuffer->Frame = frame;
55 frameBuffer->Callback = filter->Callback;
59 chibios_rt::CriticalSectionLocker csl;
69 sethvalue2s(L, L->top, t);
71 luaH_resize(L, t, narray, 0);
82 if (data->Callback == NO_CALLBACK) {
84 lua_getglobal(ls,
"onCanRx");
87 lua_rawgeti(ls, LUA_REGISTRYINDEX, data->Callback);
90 if (lua_isnil(ls, -1)) {
92 efiPrintf(
"LUA CAN rx missing function onCanRx");
97 auto dlc = data->Frame.DLC;
100 lua_pushinteger(ls, data->BusIndex);
101 lua_pushinteger(ls, CAN_ID(data->Frame));
102 lua_pushinteger(ls, dlc);
106 lua_getglobal(ls,
"global_can_data");
111 for (
size_t i = 0; i < dlc; i++) {
112 lua_pushinteger(ls, data->Frame.data8[i]);
115 lua_rawseti(ls, -2, i + 1);
119 int status = lua_pcall(ls, 4, 0, 0);
123 auto errMsg = lua_tostring(ls, -1);
124 efiPrintf(
"LUA CAN RX error %s", errMsg);
137 if (msg == MSG_TIMEOUT) {
CanFilter * getFilterForId(size_t busIndex, int Id)
int doLuaCanRx(LuaHandle &ls)
static CanFrameData canFrames[canFrameCount]
void processLuaCan(const size_t busIndex, const CANRxFrame &frame)
static chibios_rt::Mailbox< CanFrameData *, canFrameCount > filledBuffers
static chibios_rt::Mailbox< CanFrameData *, canFrameCount > freeBuffers
static void handleCanFrame(LuaHandle &ls, CanFrameData *data)
static void lua_createtable_noGC(lua_State *L, int narray)
static constexpr size_t canFrameCount
static bool doOneLuaCanRx(LuaHandle &ls)
@ OBD_PCM_Processor_Fault
engine_configuration_s * engineConfiguration