libdoip  0.1.0
DoIP (Diagnostics over Internet Protocol) ISO 13400 C++17 Library
UdsResponseCode.h
Go to the documentation of this file.
1 #ifndef UDSRESPONSE_H
2 #define UDSRESPONSE_H
3 
4 #include <stdint.h>
5 
6 #include "AnsiColors.h"
7 #include <iostream>
8 #include <iomanip>
9 
10 namespace doip::uds {
11  enum class UdsResponseCode : uint8_t {
12  OK = 0, // positive response
13  // Negative Response Codes (NRCs) as defined in ISO14229-1:2020 Table A.1 - Negative Response
14  // Code (NRC) definition and values
15  PositiveResponse = 0x0,
16  // 0x01 to 0x0F are reserved by ISO14229-1:2020
17  GeneralReject = 0x10,
18  ServiceNotSupported = 0x11,
21  ResponseTooLong = 0x14,
22  // 0x15 to 0x20 are reserved by ISO14229-1:2020
23  BusyRepeatRequest = 0x21,
24  ConditionsNotCorrect = 0x22,
25  RequestSequenceError = 0x24,
28  // 0x27 to 0x30 are reserved by ISO14229-1:2020
29  RequestOutOfRange = 0x31,
30  // 0x32 is reserved by ISO14229-1:2020
31  SecurityAccessDenied = 0x33,
33  InvalidKey = 0x35,
39  // 0x3B to 0x4F are reserved by ISO14229-1:2020
54  // 0x5E to 0x6F are reserved by ISO14229-1:2020
56  TransferDataSuspended = 0x71,
59  // 0x74 to 0x77 are reserved by ISO14229-1:2020
61  // 0x79 to 0x7D are reserved by ISO14229-1:2020
64  // 0x80 is reserved by ISO14229-1:2020
65  RpmTooHigh = 0x81,
66  RpmTooLow = 0x82,
67  EngineIsRunning = 0x83,
68  EngineIsNotRunning = 0x84,
69  EngineRunTimeTooLow = 0x85,
70  TemperatureTooHigh = 0x86,
71  TemperatureTooLow = 0x87,
72  VehicleSpeedTooHigh = 0x88,
73  VehicleSpeedTooLow = 0x89,
74  ThrottlePedalTooHigh = 0x8A,
75  ThrottlePedalTooLow = 0x8B,
78  // 0x8E is reserved by ISO14229-1:2020
79  BrakeSwitchNotClosed = 0x8F,
80  ShifterLeverNotInPark = 0x90,
82  VoltageTooHigh = 0x92,
83  VoltageTooLow = 0x93,
85  };
86 
87 
88  inline std::ostream &operator<<(std::ostream &os, const UdsResponseCode &code) {
89  os << "UdsResponseCode(0x" << std::hex << std::uppercase << std::setw(2) << std::setfill('0')
90  << static_cast<unsigned int>(code) << std::dec << ")";
91 
92  if (code == UdsResponseCode::OK) {
93  os << " " << ansi::green << "OK" << ansi::reset;
94  } else {
95  os << " " << ansi::red << "NRC" << ansi::reset;
96  switch(code) {
98  os << " General Reject";
99  break;
101  os << " Service Not Supported";
102  break;
104  os << " SubFunction Not Supported";
105  break;
107  os << " Incorrect Message Length Or Invalid Format";
108  break;
110  os << " Response Too Long";
111  break;
113  os << " Busy Repeat Request";
114  break;
116  os << " Conditions Not Correct";
117  break;
119  os << " Request Sequence Error";
120  break;
122  os << " No Response From Subnet Component";
123  break;
125  os << " Failure Prevents Execution Of Requested Action";
126  break;
128  os << " Request Out Of Range";
129  break;
131  os << " Security Access Denied";
132  break;
134  os << " AuthenticationRequired";
135  break;
137  os << " InvalidKey";
138  break;
140  os << " ExceedNumberOfAttempts";
141  break;
143  os << " RequiredTimeDelayNotExpired";
144  break;
146  os << " SecureDataTransmissionRequired";
147  break;
149  os << " SecureDataTransmissionNotAllowed";
150  break;
152  os << " SecureDataVerificationFailed";
153  break;
155  os << " UploadDownloadNotAccepted";
156  break;
158  os << " TransferDataSuspended";
159  break;
161  os << " GeneralProgrammingFailure";
162  break;
164  os << " WrongBlockSequenceCounter";
165  break;
167  os << " RequestCorrectlyReceived_ResponsePending";
168  break;
170  os << " SubFunctionNotSupportedInActiveSession";
171  break;
173  os << " ServiceNotSupportedInActiveSession";
174  break;
176  os << " RpmTooHigh";
177  break;
179  os << " RpmTooLow";
180  break;
182  os << " EngineIsRunning";
183  break;
185  os << " EngineIsNotRunning";
186  break;
188  os << " EngineRunTimeTooLow";
189  break;
191  os << " TemperatureTooHigh";
192  break;
194  os << " TemperatureTooLow";
195  break;
197  os << " VehicleSpeedTooHigh";
198  break;
200  os << " VehicleSpeedTooLow";
201  break;
203  os << " ThrottlePedalTooHigh";
204  break;
206  os << " ThrottlePedalTooLow";
207  break;
209  os << " TransmissionRangeNotInNeutral";
210  break;
212  os << " TransmissionRangeNotInGear";
213  break;
215  os << " BrakeSwitchNotClosed";
216  break;
218  os << " ShifterLeverNotInPark";
219  break;
221  os << " TorqueConverterClutchLocked";
222  break;
224  os << " VoltageTooHigh";
225  break;
227  os << " VoltageTooLow";
228  break;
230  os << " ResourceTemporarilyNotAvailable";
231  break;
232  default:
233  os << " UnknownNRC";
234  break;
235  }
236  }
237  return os;
238  }
239 } // namespace doip::uds
240 
241 #endif /* UDSRESPONSE_H */
constexpr const char * red
Definition: AnsiColors.h:11
constexpr const char * reset
Definition: AnsiColors.h:7
constexpr const char * green
Definition: AnsiColors.h:12
std::ostream & operator<<(std::ostream &os, const UdsResponse &response)