can
This commit is contained in:
@@ -25,9 +25,7 @@ void CommInterface::mainLoop() {
|
|||||||
board->customConsoleCommand(response);
|
board->customConsoleCommand(response);
|
||||||
response = response + ch;
|
response = response + ch;
|
||||||
Serial.println(response);
|
Serial.println(response);
|
||||||
if (liveData->bleConnected) {
|
|
||||||
executeCommand(response);
|
executeCommand(response);
|
||||||
}
|
|
||||||
response = "";
|
response = "";
|
||||||
} else {
|
} else {
|
||||||
response = response + ch;
|
response = response + ch;
|
||||||
|
|||||||
@@ -354,5 +354,7 @@ void CommObd2Ble4::mainLoop() {
|
|||||||
void CommObd2Ble4::executeCommand(String cmd) {
|
void CommObd2Ble4::executeCommand(String cmd) {
|
||||||
|
|
||||||
String tmpStr = cmd + "\r";
|
String tmpStr = cmd + "\r";
|
||||||
|
if (liveData->bleConnected) {
|
||||||
liveData->pRemoteCharacteristicWrite->writeValue(tmpStr.c_str(), tmpStr.length());
|
liveData->pRemoteCharacteristicWrite->writeValue(tmpStr.c_str(), tmpStr.length());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
141
CommObd2Can.cpp
141
CommObd2Can.cpp
@@ -1,7 +1,7 @@
|
|||||||
#include "CommObd2Can.h"
|
#include "CommObd2CAN.h"
|
||||||
#include "BoardInterface.h"
|
#include "BoardInterface.h"
|
||||||
#include "LiveData.h"
|
#include "LiveData.h"
|
||||||
#include <mcp_can.h>
|
#include <mcp_CAN.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Connect CAN adapter
|
Connect CAN adapter
|
||||||
@@ -10,8 +10,10 @@ void CommObd2Can::connectDevice() {
|
|||||||
|
|
||||||
Serial.println("CAN connectDevice");
|
Serial.println("CAN connectDevice");
|
||||||
|
|
||||||
|
CAN = new MCP_CAN(pinCanCs);
|
||||||
|
|
||||||
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
|
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
|
||||||
/* if (CAN.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
|
if (CAN->begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
|
||||||
Serial.println("MCP2515 Initialized Successfully!");
|
Serial.println("MCP2515 Initialized Successfully!");
|
||||||
board->displayMessage(" > CAN init OK", "");
|
board->displayMessage(" > CAN init OK", "");
|
||||||
} else {
|
} else {
|
||||||
@@ -20,12 +22,12 @@ void CommObd2Can::connectDevice() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAN.setMode(MCP_NORMAL); // Set operation mode to normal so the MCP2515 sends acks to received data.
|
CAN->setMode(MCP_NORMAL); // Set operation mode to normal so the MCP2515 sends acks to received data.
|
||||||
pinMode(pinCanInt, INPUT); // Configuring pin for /INT input
|
pinMode(pinCanInt, INPUT); // Configuring pin for /INT input
|
||||||
|
|
||||||
// Serve first command (ATZ)
|
// Serve first command (ATZ)
|
||||||
doNextQueueCommand();
|
doNextQueueCommand();
|
||||||
*/
|
|
||||||
Serial.println("init_can() done");
|
Serial.println("init_can() done");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,18 +53,9 @@ void CommObd2Can::scanDevices() {
|
|||||||
void CommObd2Can::mainLoop() {
|
void CommObd2Can::mainLoop() {
|
||||||
|
|
||||||
CommInterface::mainLoop();
|
CommInterface::mainLoop();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
// Receive
|
||||||
Send command to CAN bus
|
/* byte b = receivePID(0);
|
||||||
*/
|
|
||||||
void CommObd2Can::executeCommand(String cmd) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
Serial.println("BMS 220101");
|
|
||||||
sendPID(0x00, 0x00);
|
|
||||||
delay(delayTxRx);
|
|
||||||
byte b = receivePID(0);
|
|
||||||
if (b == 0x10) {
|
if (b == 0x10) {
|
||||||
Serial.println("CONTINUE");
|
Serial.println("CONTINUE");
|
||||||
sendPID(0x01, 0x00);
|
sendPID(0x01, 0x00);
|
||||||
@@ -71,5 +64,121 @@ void CommObd2Can::executeCommand(String cmd) {
|
|||||||
receivePID(0);
|
receivePID(0);
|
||||||
delay(10);
|
delay(10);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Send command to CAN bus
|
||||||
|
*/
|
||||||
|
void CommObd2Can::executeCommand(String cmd) {
|
||||||
|
|
||||||
|
if (cmd.startsWith("AT")) {
|
||||||
|
liveData->canSendNextAtCommand = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// pid
|
||||||
|
/*String atsh = liveData->currentAtshRequest;
|
||||||
|
atsh = atsh.replace(" ", "");
|
||||||
|
atsh = atsh.substring(4); // remove ATSH
|
||||||
|
String tmpCmd = cmd;
|
||||||
|
tmpCmd = tmpCmd.replace(" ", "");
|
||||||
|
sendPID(liveData->hexToDec(liveData->currentAtshRequest, 2, false), tmpCmd);*/
|
||||||
|
//delay(delayTxRx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Send PID
|
||||||
|
*/
|
||||||
|
void CommObd2Can::sendPID(uint16_t pid, String cmd) {
|
||||||
|
|
||||||
|
unsigned char tmp[8];
|
||||||
|
String tmpStr;
|
||||||
|
|
||||||
|
/* tmp[0] = cmd.length() / 2;
|
||||||
|
for (byte i = 1; i < 8; i++) {
|
||||||
|
tmp[i] = 0x00;
|
||||||
|
}
|
||||||
|
for (byte i = 0; i < 7; i++) {
|
||||||
|
tmpStr = cmd;
|
||||||
|
tmpStr = tmpStr.substring(i * 2, ((i + 1) * 2);
|
||||||
|
if (tmpStr != "") {
|
||||||
|
tmp[i + 1] = liveData->hexToDec(tmpString, 1, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
byte sndStat = CAN->sendMsgBuf(pid, 0, 8, tmp); // 11 bit
|
||||||
|
// byte sndStat = CAN->sendMsgBuf(0x7e4, 1, 8, tmp); // 29 bit extended frame
|
||||||
|
if (sndStat == CAN_OK) {
|
||||||
|
Serial.print("SENT ");
|
||||||
|
for (byte i = 0; i < 8; i++) {
|
||||||
|
sprintf(msgString, " 0x%.2X", tmp[i]);
|
||||||
|
Serial.print(msgString);
|
||||||
|
}
|
||||||
|
Serial.println("");
|
||||||
|
} else {
|
||||||
|
Serial.print("Error Sending PID2 0x");
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
sendFlowControlFrame
|
||||||
|
*/
|
||||||
|
void CommObd2Can::sendFlowControlFrame() {
|
||||||
|
|
||||||
|
unsigned char tmp[8];
|
||||||
|
/*
|
||||||
|
Serial.println("Flow control frame");
|
||||||
|
tmp[0] = 0x30;
|
||||||
|
for (byte i = 1; i < 8; i++) {
|
||||||
|
tmp[i] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte sndStat = CAN->sendMsgBuf(pid, 0, 8, tmp); // 11 bit
|
||||||
|
// byte sndStat = CAN->sendMsgBuf(0x7e4, 1, 8, tmp); // 29 bit extended frame
|
||||||
|
if (sndStat == CAN_OK) {
|
||||||
|
Serial.print("SENT ");
|
||||||
|
for (byte i = 0; i < 8; i++) {
|
||||||
|
sprintf(msgString, " 0x%.2X", tmp[i]);
|
||||||
|
Serial.print(msgString);
|
||||||
|
}
|
||||||
|
Serial.println("");
|
||||||
|
} else {
|
||||||
|
Serial.print("Error Sending PID2 0x");
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receive PID
|
||||||
|
*/
|
||||||
|
/*byte CommObd2Can::receivePID() {
|
||||||
|
|
||||||
|
if (!digitalRead(CAN_INT)) // If CAN0_INT pin is low, read receive buffer
|
||||||
|
{
|
||||||
|
Serial.print(" CAN READ ");
|
||||||
|
CAN->readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
|
||||||
|
|
||||||
|
if ((rxId & 0x80000000) == 0x80000000) // Determine if ID is standard (11 bits) or extended (29 bits)
|
||||||
|
sprintf(msgString, "Extended ID: 0x%.8lX DLC: %1d Data:", (rxId & 0x1FFFFFFF), len);
|
||||||
|
else
|
||||||
|
sprintf(msgString, "Standard ID: 0x%.3lX DLC: %1d Data:", rxId, len);
|
||||||
|
|
||||||
|
Serial.print(msgString);
|
||||||
|
|
||||||
|
if ((rxId & 0x40000000) == 0x40000000) { // Determine if message is a remote request frame.
|
||||||
|
sprintf(msgString, " REMOTE REQUEST FRAME");
|
||||||
|
Serial.print(msgString);
|
||||||
|
} else {
|
||||||
|
for (byte i = 0; i < len; i++) {
|
||||||
|
sprintf(msgString, " 0x%.2X", rxBuf[i]);
|
||||||
|
Serial.print(msgString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
} else {
|
||||||
|
Serial.println(" CAN NOT READ ");
|
||||||
|
}
|
||||||
|
|
||||||
|
return rxBuf[0];
|
||||||
|
}*/
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ class CommObd2Can : public CommInterface {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
byte pinCanInt = 15;
|
byte pinCanInt = 15;
|
||||||
//MCP_CAN CAN(12); // Set CS to pin 10
|
byte pinCanCs = 12;
|
||||||
|
MCP_CAN* CAN;
|
||||||
long unsigned int rxId;
|
long unsigned int rxId;
|
||||||
unsigned char len = 0;
|
unsigned char len = 0;
|
||||||
unsigned char rxBuf[512];
|
unsigned char rxBuf[512];
|
||||||
@@ -20,6 +21,8 @@ class CommObd2Can : public CommInterface {
|
|||||||
void mainLoop() override;
|
void mainLoop() override;
|
||||||
void executeCommand(String cmd) override;
|
void executeCommand(String cmd) override;
|
||||||
//
|
//
|
||||||
|
void sendPID(uint16_t pid, String cmd);
|
||||||
|
void sendFlowControlFrame();
|
||||||
/* void startBleScan();
|
/* void startBleScan();
|
||||||
bool connectToServer(BLEAddress pAddress);
|
bool connectToServer(BLEAddress pAddress);
|
||||||
bool doNextAtCommand();
|
bool doNextAtCommand();
|
||||||
|
|||||||
Reference in New Issue
Block a user