7 #include <unordered_map>
27 m_handlers[
static_cast<uint8_t
>(serviceId)] = std::move(handler);
32 m_handlers[
static_cast<uint8_t
>(serviceId)] = std::make_unique<LambdaUdsHandler>(std::move(fn));
37 m_handlers.erase(
static_cast<uint8_t
>(serviceId));
41 void clear() { m_handlers.clear(); }
66 const std::array<UdsService, 19> services = {
88 for (
auto s : services) {
100 negativeResponse.emplace_back(0x7F);
101 negativeResponse.emplace_back(request.empty() ? 0x00 : request[0]);
102 negativeResponse.emplace_back(
static_cast<uint8_t
>(responseCode));
103 return negativeResponse;
108 positiveResponse.insert(positiveResponse.end(), extraData.begin(), extraData.end());
109 return positiveResponse;
112 std::unordered_map<uint8_t, IUdsServiceHandlerPtr> m_handlers;
void unregisterService(UdsService serviceId)
void registerDiagnosticSessionControlHandler(std::function< UdsResponse(uint8_t sessionType)> handler)
void registerReadDataByIdentifierHandler(std::function< UdsResponse(uint16_t did)> handler)
void registerWriteDataByIdentifierHandler(std::function< UdsResponse(uint16_t did, ByteArray value)> handler)
void registerDefaultServices()
void registerService(UdsService serviceId, IUdsServiceHandlerPtr handler)
void registerECUResetHandler(std::function< UdsResponse(uint8_t resetType)> handler)
void registerService(UdsService serviceId, std::function< UdsResponse(const ByteArray &)> fn)
void registerTesterPresentHandler(std::function< UdsResponse(uint8_t subFunction)> handler)
ByteArray handleDiagnosticRequest(const ByteArray &request) const
std::unique_ptr< IUdsServiceHandler > IUdsServiceHandlerPtr
constexpr uint8_t UDS_POSITIVE_RESPONSE_OFFSET
std::pair< UdsResponseCode, ByteArray > UdsResponse
@ DynamicallyDefineDataIdentifier
@ ClearDiagnosticInformation
@ ReadDataByPeriodicIdentifier
@ DiagnosticSessionControl
@ SecuredDataTransmission
@ ReadScalingDataByIdentifier
A dynamic array of bytes with utility methods for network protocol handling.