summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/OBD/OBD.cpp55
-rw-r--r--libraries/OBD/OBD.h14
2 files changed, 28 insertions, 41 deletions
diff --git a/libraries/OBD/OBD.cpp b/libraries/OBD/OBD.cpp
index b02cea9..c7c6024 100644
--- a/libraries/OBD/OBD.cpp
+++ b/libraries/OBD/OBD.cpp
@@ -14,9 +14,8 @@
#define MAX_CMD_LEN 6
-const char PROGMEM s_initcmd[][MAX_CMD_LEN] = {"ATZ\r","ATE0\r","ATL1\r","0902\r"};
-const char PROGMEM s_cmd_fmt[] = "%02X%02X 1\r";
-const char PROGMEM s_cmd_sleep[] = "atlp\r";
+const char PROGMEM s_initcmd[][MAX_CMD_LEN] = {"ATZ\r","ATE0\r","ATL1\r"};
+#define STR_CMD_FMT "%02X%02X 1\r"
#define STR_SEARCHING "SEARCHING..."
unsigned int hex2uint16(const char *p)
@@ -65,10 +64,10 @@ unsigned char hex2uint8(const char *p)
*************************************************************************/
#include <Wire.h>
-void COBD::sendQuery(unsigned char pid)
+void COBD::sendQuery(byte pid)
{
char cmd[8];
- sprintf_P(cmd, s_cmd_fmt, dataMode, pid);
+ sprintf(cmd, STR_CMD_FMT, dataMode, pid);
#ifdef DEBUG
debugOutput(cmd);
#endif
@@ -201,15 +200,25 @@ bool COBD::getResult(byte& pid, int& result)
return true;
}
-void COBD::sleep(int seconds)
+void COBD::setProtocol(byte h)
{
- char cmd[MAX_CMD_LEN];
- strcpy_P(cmd, s_cmd_sleep);
- write(cmd);
- if (seconds) {
- delay((unsigned long)seconds << 10);
- write('\r');
- }
+ if (h == -1) {
+ write("ATSP00\r");
+ } else {
+ char cmd[8];
+ sprintf(cmd, "ATSP%d\r", h);
+ write(cmd);
+ }
+}
+
+void COBD::sleep()
+{
+ write("ATLP\r");
+}
+
+void COBD::wakeup()
+{
+ write('\r');
}
bool COBD::isValidPID(byte pid)
@@ -409,26 +418,6 @@ byte COBDI2C::receive(char* buffer, int timeout)
return 0;
}
-bool COBDI2C::btInit(uint16_t baudrate)
-{
- return sendCommand(CMD_UART_BEGIN, baudrate / 1200);
-}
-
-bool COBDI2C::btSend(byte* data, byte length)
-{
- return sendCommand(CMD_UART_SEND, 0, data, length);
-}
-
-bool COBDI2C::btReceive(byte* buffer, byte bufsize)
-{
- if (!sendCommand(CMD_UART_RECV, bufsize)) return false;
- memset(buffer, 0, MAX_PAYLOAD_SIZE);
- delay(10);
- Wire.requestFrom((byte)m_addr, (byte)MAX_PAYLOAD_SIZE, (byte)1);
- Wire.readBytes((char*)buffer, MAX_PAYLOAD_SIZE);
- return true;
-}
-
bool COBDI2C::gpsQuery(GPS_DATA* gpsdata)
{
if (!sendCommand(CMD_GPS_QUERY, 0)) return false;
diff --git a/libraries/OBD/OBD.h b/libraries/OBD/OBD.h
index ba44f20..02d677a 100644
--- a/libraries/OBD/OBD.h
+++ b/libraries/OBD/OBD.h
@@ -5,6 +5,8 @@
* (C)2012-2014 Stanley Huang <stanleyhuangyc@gmail.com>
*************************************************************************/
+#include <Arduino.h>
+
#define OBD_TIMEOUT_SHORT 2000 /* ms */
#define OBD_TIMEOUT_LONG 7000 /* ms */
#define OBD_SERIAL_BAUDRATE 38400
@@ -59,7 +61,9 @@ public:
virtual void begin();
virtual bool init();
virtual bool read(byte pid, int& result);
- virtual void sleep(int seconds);
+ virtual void sleep();
+ virtual void wakeup();
+ virtual void setProtocol(byte h = -1);
// Query and GetResponse for advanced usage only
virtual void sendQuery(byte pid);
virtual bool getResult(byte& pid, int& result);
@@ -111,9 +115,6 @@ private:
#define CMD_LOAD_OBD_DATA 0x13
#define CMD_GPS_SETUP 0x20
#define CMD_GPS_QUERY 0x22
-#define CMD_UART_BEGIN 0x30
-#define CMD_UART_SEND 0x31
-#define CMD_UART_RECV 0x32
typedef struct {
uint16_t age;
@@ -145,15 +146,12 @@ public:
bool init();
bool read(byte pid, int& result);
void write(char* s);
+ void setProtocol(bool auto, byte h);
// Asynchronized access API
void setPID(byte pid);
void applyPIDs();
void loadData();
uint16_t getData(byte pid, int& result);
- // Bluetooth communication API
- bool btInit(uint16_t baudrate = 9600);
- bool btSend(byte* data, byte length);
- bool btReceive(byte* buffer, byte bufsize);
// GPS API
bool gpsQuery(GPS_DATA* gpsdata);
void gpsSetup(uint32_t baudrate, const char* cmds = 0);