diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/uds/uds.c | 14 | ||||
-rw-r--r-- | src/uds/uds.h | 17 | ||||
-rw-r--r-- | src/uds/uds_types.h | 4 |
3 files changed, 21 insertions, 14 deletions
diff --git a/src/uds/uds.c b/src/uds/uds.c index 9fec9a88..412f077d 100644 --- a/src/uds/uds.c +++ b/src/uds/uds.c @@ -258,17 +258,13 @@ DiagnosticResponse diagnostic_receive_can_frame(DiagnosticShims* shims, return response; } -float diagnostic_payload_to_float(const DiagnosticResponse* response) { - return bitfield_parse_float(response->payload, - response->payload_length, 0, - response->payload_length * CHAR_BIT, 1.0, 0); +int diagnostic_payload_to_integer(const DiagnosticResponse* response) { + return get_bitfield(response->payload, response->payload_length, 0, + response->payload_length * CHAR_BIT); } -/* Public: - * - * Functions pulled from http://en.wikipedia.org/wiki/OBD-II_PIDs#Mode_01 - */ -float diagnostic_decode_obd2_pid(const DiagnosticResponse* response) { +float diagnostic_decode_obd2_pid(const DiagnosticResponse* response, + int parsed_payload) { // handles on the single number values, not the bit encoded ones switch(response->pid) { case 0xa: diff --git a/src/uds/uds.h b/src/uds/uds.h index a4761ca2..cb132330 100644 --- a/src/uds/uds.h +++ b/src/uds/uds.h @@ -83,7 +83,11 @@ DiagnosticResponse diagnostic_receive_can_frame(DiagnosticShims* shims, const uint16_t arbitration_id, const uint8_t data[], const uint8_t size); -float diagnostic_payload_to_float(const DiagnosticResponse* response); +/* Public: Parse the entier payload of the reponse as a single integer. + * + * response - the received DiagnosticResponse. + */ +int diagnostic_payload_to_integer(const DiagnosticResponse* response); /* Public: Render a DiagnosticResponse as a string into the given buffer. * @@ -97,7 +101,16 @@ float diagnostic_payload_to_float(const DiagnosticResponse* response); // void diagnostic_response_to_string(const DiagnosticResponse* response, // char* destination, size_t destination_length); -float diagnostic_decode_obd2_pid(const DiagnosticResponse* response); +/* Public: For many OBD-II PIDs with a numerical result, translate a diagnostic + * response payload into a meaningful number using the standard formulas. + * + * Functions pulled from http://en.wikipedia.org/wiki/OBD-II_PIDs#Mode_01 + * + * Returns the translated value or 0 if the PID is not in the OBD-II standard or + * does not use a numerical value (e.g. VIN). + */ +float diagnostic_decode_obd2_pid(const DiagnosticResponse* response, + int parsed_payload); #ifdef __cplusplus } diff --git a/src/uds/uds_types.h b/src/uds/uds_types.h index 10d15d62..a71d53c6 100644 --- a/src/uds/uds_types.h +++ b/src/uds/uds_types.h @@ -133,15 +133,13 @@ typedef enum { OBD2_MODE_ENHANCED_DIAGNOSTIC_REQUEST = 0x22 } DiagnosticMode; -/* Public the signature for an optional function to be called when a diagnostic +/* Public: The signature for an optional function to be called when a diagnostic * request is complete, and a response is received or there is a fatal error. * * response - the completed DiagnosticResponse. */ typedef void (*DiagnosticResponseReceived)(const DiagnosticResponse* response); -typedef float (*DiagnosticResponseDecoder)(const DiagnosticResponse* response); - /* Public: A handle for initiating and continuing a single diagnostic request. * * A diagnostic request requires one or more CAN messages to be sent, and one |