void handleButtonEventMessage(int messageId, uint64_t data, CanSignal* signals, int signalCount, Listener* listener) { CanSignal* buttonTypeSignal = lookupSignal("button_type", signals, signalCount); CanSignal* buttonStateSignal = lookupSignal("button_state", signals, signalCount); if(buttonTypeSignal == NULL || buttonStateSignal == NULL) { debug("Unable to find button type and state signals"); return; } float rawButtonType = decodeCanSignal(buttonTypeSignal, data); float rawButtonState = decodeCanSignal(buttonStateSignal, data); bool send = true; const char* buttonType = stateHandler(buttonTypeSignal, signals, signalCount, rawButtonType, &send); const char* buttonState = stateHandler(buttonStateSignal, signals, signalCount, rawButtonState, &send); if(send) { sendEventedBooleanMessage(BUTTON_EVENT_GENERIC_NAME, buttonType, buttonState, listener); } }
void sendDoorStatus(const char* doorId, uint64_t data, CanSignal* signal, CanSignal* signals, int signalCount, Listener* listener) { float rawAjarStatus = decodeCanSignal(signal, data); bool send = true; bool ajarStatus = booleanHandler(NULL, signals, signalCount, rawAjarStatus, &send); if(send && (signal->sendSame || !signal->received || rawAjarStatus != signal->lastValue)) { signal->received = true; sendEventedBooleanMessage(DOOR_STATUS_GENERIC_NAME, doorId, ajarStatus, listener); } signal->lastValue = rawAjarStatus; }
void sendDoorStatus(const char* doorId, uint64_t data, CanSignal* signal, CanSignal* signals, int signalCount, Listener* listener) { if(signal == NULL) { debug("Specific door signal for ID %s is NULL, vehicle may not support", doorId); return; } float rawAjarStatus = decodeCanSignal(signal, data); bool send = true; bool ajarStatus = booleanHandler(NULL, signals, signalCount, rawAjarStatus, &send); if(send && (signal->sendSame || !signal->received || rawAjarStatus != signal->lastValue)) { signal->received = true; sendEventedBooleanMessage(DOOR_STATUS_GENERIC_NAME, doorId, ajarStatus, listener); } signal->lastValue = rawAjarStatus; }
void loop() { ++emulatorRateLimiter; if(emulatorRateLimiter >= EMULATOR_SEND_FREQUENCY) { emulatorRateLimiter = 0; sendNumericalMessage( NUMERICAL_SIGNALS[rand() % NUMERICAL_SIGNAL_COUNT], rand() % 50 + rand() % 100 * .1, &listener); sendBooleanMessage(BOOLEAN_SIGNALS[rand() % BOOLEAN_SIGNAL_COUNT], rand() % 2 == 1 ? true : false, &listener); int stateSignalIndex = rand() % STATE_SIGNAL_COUNT; sendStringMessage(STATE_SIGNALS[stateSignalIndex], SIGNAL_STATES[stateSignalIndex][rand() % 3], &listener); int eventSignalIndex = rand() % EVENT_SIGNAL_COUNT; Event randomEvent = EVENT_SIGNAL_STATES[eventSignalIndex][rand() % 3]; sendEventedBooleanMessage(EVENT_SIGNALS[eventSignalIndex], randomEvent.value, randomEvent.event, &listener); } readFromHost(listener.usb, usbWriteStub); readFromSerial(listener.serial, usbWriteStub); }