X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fdiagnostic%2Fdiagnostic-manager.hpp;h=bd5cefb715d2a743e0b7df8b9551bfba5a9ce21d;hb=2ab5cbcde5c8df39b150f590df559e082411c722;hp=1db83636dfe300ff5d831804b659c4e91a7b30fe;hpb=865c6c6d6f4174c5874e4cd5136832c25a3b1198;p=apps%2Flow-level-can-service.git diff --git a/src/diagnostic/diagnostic-manager.hpp b/src/diagnostic/diagnostic-manager.hpp index 1db8363..bd5cefb 100644 --- a/src/diagnostic/diagnostic-manager.hpp +++ b/src/diagnostic/diagnostic-manager.hpp @@ -23,26 +23,23 @@ #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 - * match the maximum CAN controller count. - */ +/// 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() #define DIAGNOSTIC_RESPONSE_ARBITRATION_ID_OFFSET 0x8 class active_diagnostic_request_t; -/** - * @brief The core structure for running the diagnostics module on the VI. - * - * @desc This stores details about the active requests and shims required to connect - * the diagnostics library to the VI's CAN peripheral. - */ +/// +/// @brief The core structure for running the diagnostics module by the binding. +/// +/// This stores details about the active requests and shims required to connect +/// the diagnostics library to the CAN device. +/// class diagnostic_manager_t { protected: static bool shims_send(const uint32_t arbitration_id, const uint8_t* data, const uint8_t size); @@ -50,10 +47,10 @@ 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 recurring_requests_; /*!< recurringRequests - A list of active recurring diagnostic requests.*/ std::vector 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*/ @@ -75,24 +72,27 @@ public: 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); - - - 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); + };