void sendOccupancyStatus(const char* seatId, uint64_t data, CanSignal* lowerSignal, CanSignal* upperSignal, CanSignal* signals, int signalCount, Listener* listener) { if(lowerSignal == NULL || upperSignal == NULL) { debug("Upper or lower occupancy signal for seat ID %s is NULL, " "vehicle may not support", seatId); return; } float rawLowerStatus = decodeCanSignal(lowerSignal, data); float rawUpperStatus = decodeCanSignal(upperSignal, data); bool send = true; bool lowerStatus = booleanHandler(NULL, signals, signalCount, rawLowerStatus, &send); bool upperStatus = booleanHandler(NULL, signals, signalCount, rawUpperStatus, &send); if(lowerStatus) { if(upperStatus) { sendEventedStringMessage("occupancy_status", seatId, "adult", listener); } else { sendEventedStringMessage("occupancy_status", seatId, "child", listener); } } else { sendEventedStringMessage("occupancy_status", seatId, "empty", listener); } }
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); if(!send || buttonType == NULL) { debug("Unable to find button type corresponding to %f", rawButtonType); return; } const char* buttonState = stateHandler(buttonStateSignal, signals, signalCount, rawButtonState, &send); if(!send || buttonState == NULL) { debug("Unable to find button state corresponding to %f", rawButtonState); return; } sendEventedStringMessage(BUTTON_EVENT_GENERIC_NAME, buttonType, buttonState, listener); }
void handleGpsMessage(int messageId, uint64_t data, CanSignal* signals, int signalCount, Listener* listener) { float latitudeDegrees = decodeCanSignal( lookupSignal("latitude_degrees", signals, signalCount), data); float latitudeMinutes = decodeCanSignal( lookupSignal("latitude_minutes", signals, signalCount), data); float latitudeMinuteFraction = decodeCanSignal( lookupSignal("latitude_minute_fraction", signals, signalCount), data); float longitudeDegrees = decodeCanSignal( lookupSignal("longitude_degrees", signals, signalCount), data); float longitudeMinutes = decodeCanSignal( lookupSignal("longitude_minutes", signals, signalCount), data); float longitudeMinuteFraction = decodeCanSignal( lookupSignal("longitude_minute_fraction", signals, signalCount), data); latitudeMinutes = (latitudeMinutes + latitudeMinuteFraction) / 60.0; if(latitudeDegrees < 0) { latitudeMinutes *= -1; } latitudeDegrees += latitudeMinutes; longitudeMinutes = (longitudeMinutes + longitudeMinuteFraction) / 60.0; if(longitudeDegrees < 0) { longitudeMinutes *= -1; } longitudeDegrees += longitudeMinutes; sendNumericalMessage("latitude", latitudeDegrees, listener); sendNumericalMessage("longitude", longitudeDegrees, 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; }
float preTranslate(CanSignal* signal, uint64_t data, bool* send) { float value = decodeCanSignal(signal, data); if(!signal->received || signal->sendClock == signal->sendFrequency - 1) { if(send && (!signal->received || signal->sendSame || value != signal->lastValue)) { signal->received = true; } else { *send = false; } signal->sendClock = 0; } else { *send = false; ++signal->sendClock; } return value; }
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; }