Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class ReadIdentifierPot : public DataIdentifierJob

private:
DiagReturnCode::Type process(
IncomingDiagConnection& connection,
IIncomingDiagConnection& connection,
uint8_t const request[],
uint16_t requestLength) override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include "outputPwm/OutputPwm.h"
#endif

#include "uds/connection/IncomingDiagConnection.h"
#include "uds/connection/IIncomingDiagConnection.h"

namespace uds
{
Expand All @@ -29,7 +29,7 @@ ReadIdentifierPot::ReadIdentifierPot(DiagSessionMask const sessionMask)
}

DiagReturnCode::Type ReadIdentifierPot::process(
IncomingDiagConnection& connection,
IIncomingDiagConnection& connection,
uint8_t const* const /* request */,
uint16_t const /* requestLength */)
{
Expand Down
2 changes: 1 addition & 1 deletion libs/bsw/uds/include/uds/async/AsyncDiagHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class AsyncDiagHelper

::async::ContextType getDiagContext() const override;
StoredRequest* allocateRequest(
IncomingDiagConnection& connection,
IIncomingDiagConnection& connection,
uint8_t const* request,
uint16_t requestLength) override;
void processAndReleaseRequest(AbstractDiagJob& job, StoredRequest& request) override;
Expand Down
10 changes: 5 additions & 5 deletions libs/bsw/uds/include/uds/async/AsyncDiagJob.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ class AsyncDiagJob : public T

protected:
DiagReturnCode::Type process(
IncomingDiagConnection& connection,
IIncomingDiagConnection& connection,
uint8_t const request[],
uint16_t requestLength) override;

private:
void asyncProcess(
IncomingDiagConnection* connection, uint8_t const request[], uint16_t requestLength);
IIncomingDiagConnection* connection, uint8_t const request[], uint16_t requestLength);
using ProcessClosureType
= ::async::Call<::etl::closure<void(IncomingDiagConnection*, uint8_t const*, uint16_t)>>;
= ::async::Call<::etl::closure<void(IIncomingDiagConnection*, uint8_t const*, uint16_t)>>;

AsyncDiagJobHelper fAsyncJobHelper;
ProcessClosureType fProcess;
Expand Down Expand Up @@ -87,7 +87,7 @@ void AsyncDiagJob<T>::responseSent(

template<class T>
DiagReturnCode::Type AsyncDiagJob<T>::process(
IncomingDiagConnection& connection, uint8_t const request[], uint16_t const requestLength)
IIncomingDiagConnection& connection, uint8_t const request[], uint16_t const requestLength)
{
if (fAsyncJobHelper.hasPendingAsyncRequest())
{
Expand All @@ -108,7 +108,7 @@ DiagReturnCode::Type AsyncDiagJob<T>::process(

template<class T>
void AsyncDiagJob<T>::asyncProcess(
IncomingDiagConnection* connection, uint8_t const request[], uint16_t const requestLength)
IIncomingDiagConnection* connection, uint8_t const request[], uint16_t const requestLength)
{
DiagReturnCode::Type responseCode = T::process(*connection, request, requestLength);
if (responseCode != DiagReturnCode::OK)
Expand Down
10 changes: 5 additions & 5 deletions libs/bsw/uds/include/uds/async/AsyncDiagJobHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
namespace uds
{
class AbstractDiagJob;
class IncomingDiagConnection;
class IIncomingDiagConnection;

/**
* Helper class for handling nested diagnostic requests
Expand Down Expand Up @@ -39,21 +39,21 @@ class AsyncDiagJobHelper
* Note: Call this function only if hasPendingAsyncRequest() returns true
* \return Reference to connection bound to this request
*/
IncomingDiagConnection& getPendingConnection() const;
IIncomingDiagConnection& getPendingConnection() const;

/**
* Try to enqueue a request.
* \param connection Connection to enqueue
* \return Result of enqueuing
*/
DiagReturnCode::Type enqueueRequest(
IncomingDiagConnection& connection, uint8_t const* request, uint16_t requestLength);
IIncomingDiagConnection& connection, uint8_t const* request, uint16_t requestLength);

/**
* Start processing an async request.
* \param connection Reference to connection bound to this request
*/
void startAsyncRequest(IncomingDiagConnection& connection);
void startAsyncRequest(IIncomingDiagConnection& connection);

/**
* End processing an async request. This call will retrigger processing of
Expand All @@ -66,7 +66,7 @@ class AsyncDiagJobHelper

IAsyncDiagHelper& fAsyncHelper;
AbstractDiagJob& fJob;
IncomingDiagConnection* fPendingAsyncConnection;
IIncomingDiagConnection* fPendingAsyncConnection;
::etl::intrusive_list<IAsyncDiagHelper::StoredRequest, ::etl::bidirectional_link<0>>
fPendingRequests;
::async::Function fTriggerNextRequests;
Expand Down
14 changes: 7 additions & 7 deletions libs/bsw/uds/include/uds/async/IAsyncDiagHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
namespace uds
{
class AbstractDiagJob;
class IncomingDiagConnection;
class IIncomingDiagConnection;

/**
* Interface for storing/processing requests
Expand All @@ -20,14 +20,14 @@ class IAsyncDiagHelper
{
public:
StoredRequest(
IncomingDiagConnection& connection, uint8_t const* request, uint16_t requestLength);
IIncomingDiagConnection& connection, uint8_t const* request, uint16_t requestLength);

IncomingDiagConnection& getConnection() const;
IIncomingDiagConnection& getConnection() const;
uint8_t const* getRequest() const;
uint16_t getRequestLength() const;

private:
IncomingDiagConnection* fConnection;
IIncomingDiagConnection* fConnection;
uint8_t const* fRequest;
uint16_t fRequestLength;
};
Expand All @@ -46,7 +46,7 @@ class IAsyncDiagHelper
* \param requestLength requestLength as received in AbstractDiagJob::process
*/
virtual StoredRequest* allocateRequest(
IncomingDiagConnection& connection, uint8_t const* request, uint16_t requestLength)
IIncomingDiagConnection& connection, uint8_t const* request, uint16_t requestLength)
= 0;

/**
Expand All @@ -62,11 +62,11 @@ class IAsyncDiagHelper
* Inline implementation
*/
inline IAsyncDiagHelper::StoredRequest::StoredRequest(
IncomingDiagConnection& connection, uint8_t const* const request, uint16_t const requestLength)
IIncomingDiagConnection& connection, uint8_t const* const request, uint16_t const requestLength)
: fConnection(&connection), fRequest(request), fRequestLength(requestLength)
{}

inline IncomingDiagConnection& IAsyncDiagHelper::StoredRequest::getConnection() const
inline IIncomingDiagConnection& IAsyncDiagHelper::StoredRequest::getConnection() const
{
return *fConnection;
}
Expand Down
9 changes: 5 additions & 4 deletions libs/bsw/uds/include/uds/base/AbstractDiagJob.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class UdsController;
namespace uds
{
class IncomingDiagConnection;
class IIncomingDiagConnection;
class IDiagAuthenticator;
class IDiagSessionManager;
class DiagSubSession;
Expand Down Expand Up @@ -188,7 +189,7 @@ class AbstractDiagJob : public ::etl::uncopyable
* \see process()
*/
DiagReturnCode::Type
execute(IncomingDiagConnection& connection, uint8_t const request[], uint16_t requestLength);
execute(IIncomingDiagConnection& connection, uint8_t const request[], uint16_t requestLength);

/**
* Adds an AbstractDiagJob as child node
Expand Down Expand Up @@ -305,7 +306,7 @@ class AbstractDiagJob : public ::etl::uncopyable
* \see IncomingDiagConnection
*/
virtual DiagReturnCode::Type process(
IncomingDiagConnection& connection, uint8_t const* const request, uint16_t requestLength);
IIncomingDiagConnection& connection, uint8_t const* const request, uint16_t requestLength);

/**
* Compares two byte arrays.
Expand Down Expand Up @@ -404,12 +405,12 @@ class AbstractDiagJob : public ::etl::uncopyable
static DiagJobRoot* sfpDiagJobRoot;

void acceptJob(
IncomingDiagConnection& connection, uint8_t const request[], uint16_t const requestLength);
IIncomingDiagConnection& connection, uint8_t const request[], uint16_t const requestLength);
/**
* Does suppress positive response bit handling
*/
void checkSuppressPositiveResponseBit(
IncomingDiagConnection& connection, uint8_t const request[]) const;
IIncomingDiagConnection& connection, uint8_t const request[]) const;

/** Array containing the request implemented by this job */
uint8_t const* const fpImplementedRequest;
Expand Down
155 changes: 155 additions & 0 deletions libs/bsw/uds/include/uds/connection/IIncomingDiagConnection.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#pragma once

#include "uds/connection/ErrorCode.h"
#include "uds/connection/PositiveResponse.h"
#include "uds/DiagReturnCode.h"

#include <cstdint>

namespace uds
{
class AbstractDiagJob;
class IDiagSessionManager;
class NestedDiagRequest;

/**
* Interface for incoming diagnostic connections.
*/
class IIncomingDiagConnection
{
public:
virtual ~IIncomingDiagConnection() = default;

/**
* Opens the diagnostic connection.
* \param activatePending Whether to activate pending responses
*/
virtual void open(bool activatePending) = 0;

/**
* Terminates the diagnostic connection.
*/
virtual void terminate() = 0;

/**
* Adds an identifier to the response buffer.
*/
virtual void addIdentifier() = 0;

/**
* Returns the number of identifiers added to the response.
*/
virtual uint16_t getNumIdentifiers() const = 0;

/**
* Returns an identifier for a given index.
*/
virtual uint8_t getIdentifier(uint16_t idx) const = 0;

/**
* Returns the maximum response length.
*/
virtual uint16_t getMaximumResponseLength() const = 0;

/**
* Releases the request and returns a positive response buffer.
*/
virtual PositiveResponse& releaseRequestGetResponse() = 0;

/**
* Sends a positive response.
*/
virtual ErrorCode sendPositiveResponse(AbstractDiagJob& sender) = 0;

/**
* Sends a positive response with a specific payload length.
*/
virtual ErrorCode sendPositiveResponseInternal(uint16_t length, AbstractDiagJob& sender) = 0;

/**
* Sends a negative response with the specified response code.
*/
virtual ErrorCode sendNegativeResponse(uint8_t responseCode, AbstractDiagJob& sender) = 0;

/**
* Suppresses positive response transmission.
*/
virtual void suppressPositiveResponse() = 0;

/**
* Disables response timeout.
*/
virtual void disableResponseTimeout() = 0;

/**
* Disables global connection timeout.
*/
virtual void disableGlobalTimeout() = 0;

/**
* Checks if the connection is busy sending a response.
*/
virtual bool isBusy() const = 0;

/**
* Starts a nested diagnostic request.
*/
virtual DiagReturnCode::Type startNestedRequest(
AbstractDiagJob& sender,
NestedDiagRequest& nestedRequest,
uint8_t const request[],
uint16_t requestLength) = 0;

/**
* Terminates the current nested request.
* \return true if nested request was terminated, false otherwise
*/
virtual bool terminateNestedRequest() = 0;

/**
* Sends the response.
*/
virtual ErrorCode sendResponse() = 0;

/**
* Returns the service ID of the diagnostic request.
*/
virtual uint8_t getServiceId() const = 0;

/**
* Returns the target address of the diagnostic connection.
*/
virtual uint16_t getTargetAddress() const = 0;

/**
* Returns the source address of the diagnostic connection.
*/
virtual uint16_t getSourceAddress() const = 0;

/**
* Sets the diagnostic session manager.
*/
virtual void setDiagSessionManager(IDiagSessionManager* sessionManager) = 0;

/**
* Sets the source address.
*/
virtual void setSourceAddress(uint16_t address) = 0;

/**
* Sets the target address.
*/
virtual void setTargetAddress(uint16_t address) = 0;

/**
* Sets the response source address.
*/
virtual void setResponseSourceAddress(uint16_t address) = 0;

/**
* Sets the service ID.
*/
virtual void setServiceId(uint8_t id) = 0;
};

} // namespace uds
Loading
Loading