summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/uds/uds.c14
-rw-r--r--src/uds/uds.h17
-rw-r--r--src/uds/uds_types.h4
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