#include "uds/uds.h"
#include "openxc.pb.h"
-#include "../can/can-bus-dev.hpp"
-#include "../can/can-message.hpp"
+#include "../can/can-bus.hpp"
#include "active-diagnostic-request.hpp"
-#include "../low-can-binding.hpp"
-
-/* Private: Each CAN bus needs its own set of shim functions, so this should
+/* Each CAN bus needs its own set of shim functions, so this should
* match the maximum CAN controller count.
*/
#define MAX_SHIM_COUNT can_bus_t.get_can_devices().size()
class active_diagnostic_request_t;
/**
- * @brief The core structure for running the diagnostics module on the VI.
+ * @brief The core structure for running the diagnostics module by the binding.
*
* @desc This stores details about the active requests and shims required to connect
- * the diagnostics library to the VI's CAN peripheral.
+ * the diagnostics library to the CAN device.
*/
class diagnostic_manager_t {
protected:
static void shims_timer();
private:
- DiagnosticShims shims_; /*!< shims_ - A map of shim functions for each CAN bus that plug the diagnostics
- * library (uds-c) into the VI's CAN peripheral.*/
+ DiagnosticShims shims_; /*!< shims_ - Shim functions for each CAN bus that plug the diagnostics
+ * library (uds-c) into the VI's CAN peripheral.*/
std::string bus_; /*!< bus_ - A pointer to the CAN bus that should be used for all standard OBD-II requests, if the bus is not
- * explicitly spcified in the request. Default to the first bus CAN at initialization.*/
+ * explicitly spcified in the request. Default to the first bus CAN at initialization.*/
std::vector<active_diagnostic_request_t*> recurring_requests_; /*!< recurringRequests - A list of active recurring diagnostic requests.*/
std::vector<active_diagnostic_request_t*> non_recurring_requests_; /*!< nonrecurringRequests - A list of active one-time diagnostic requests. When a
* response is received for a non-recurring request or it times out, it is removed*/
void cleanup_active_requests(bool force);
active_diagnostic_request_t* find_recurring_request(const DiagnosticRequest* request);
- bool validate_optional_request_attributes(float frequencyHz);
-
void checkSupportedPids(const active_diagnostic_request_t& request,
const DiagnosticResponse& response, float parsedPayload);
+ // Subscription parts
bool add_request(DiagnosticRequest* request, const std::string name,
bool waitForMultipleResponses, const DiagnosticResponseDecoder decoder,
const DiagnosticResponseCallback callback);
-
+ bool validate_optional_request_attributes(float frequencyHz);
bool add_recurring_request(DiagnosticRequest* request, const char* name,
bool waitForMultipleResponses, const DiagnosticResponseDecoder decoder,
const DiagnosticResponseCallback callback, float frequencyHz);
-
- bool is_diagnostic_response(const active_diagnostic_request_t& adr, const can_message_t& cm) const;
- active_diagnostic_request_t* is_diagnostic_response(const can_message_t& can_message);
-
- openxc_VehicleMessage relay_diagnostic_response(active_diagnostic_request_t* adr, const DiagnosticResponse& response) const;
+ // Sendig requests part
bool conflicting(active_diagnostic_request_t* request, active_diagnostic_request_t* candidate) const;
bool clear_to_send(active_diagnostic_request_t* request) const;
static int send_request(sd_event_source *s, uint64_t usec, void *userdata);
+
+ // Decoding part
+ openxc_VehicleMessage relay_diagnostic_response(active_diagnostic_request_t* adr, const DiagnosticResponse& response);
+ openxc_VehicleMessage relay_diagnostic_handle(active_diagnostic_request_t* entry, const can_message_t& cm);
+ openxc_VehicleMessage find_and_decode_adr(const can_message_t& cm);
+ bool is_diagnostic_response(const can_message_t& cm);
+
};