Advertisement
Guest User

Untitled

a guest
May 4th, 2023
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. #include "OBDSerialComm.h"
  2.  
  3. OBDSerialComm::OBDSerialComm(uint32_t baudRate, uint8_t rxPin, uint8_t txPin) {
  4. setBaudRate(9600); // ###
  5. Serial1.begin(9600); // ###
  6. Serial1.setTimeout(SERIAL_READ_TIMEOUT); // ###
  7. setToDefaults();
  8. }
  9.  
  10. OBDSerialComm::~OBDSerialComm() {
  11. // operator delete(serial);
  12. }
  13.  
  14.  
  15. void OBDSerialComm::writeEnd() {
  16.  
  17. // 1 - write carriage return
  18. // writeTo(0x0D);
  19. writeTo("\n");
  20. // writeTo(13);
  21.  
  22.  
  23. // 2- (optional ) write linefeed
  24. if (lineFeedEnable) {
  25. writeTo("\r");
  26. // writeTo(10);
  27. }
  28.  
  29. // 3 - Write prompt
  30. // writeTo(0x3E);
  31. writeTo('>');
  32.  
  33. Serial1.flush(); // ###
  34. };
  35.  
  36.  
  37. void OBDSerialComm::writeEndOK() {
  38. writeTo("OK");
  39. writeEnd();
  40. }
  41.  
  42. void OBDSerialComm::writeEndERROR() {
  43. writeTo("ERROR");
  44. writeEnd();
  45. }
  46.  
  47. void OBDSerialComm::writeEndNoData() {
  48. writeTo("NO DATA");
  49. writeEnd();
  50. }
  51.  
  52. void OBDSerialComm::writeEndUnknown() {
  53. writeTo("?");
  54. writeEnd();
  55. }
  56.  
  57. void OBDSerialComm::setToDefaults() {
  58. setEcho(true);
  59. setStatus(READY);
  60. setWhiteSpaces(true);
  61. setHeaders(false);
  62. setLineFeeds(true);
  63. setMemory(false);
  64. }
  65.  
  66. void OBDSerialComm::writeTo(char const *response) {
  67. Serial1.write(response); // ###
  68. }
  69.  
  70.  
  71. void OBDSerialComm::writeTo(uint8_t cChar) {
  72. Serial1.write(cChar); // ###
  73. }
  74.  
  75. void OBDSerialComm::writeEndPidTo(char const *response) {
  76. if (whiteSpacesEnabled) {
  77. uint8_t len = strlen(response);
  78. char spacedResponse[len + len / 2 + 1];
  79. addSpacesToResponse(response, spacedResponse);
  80. writeTo(spacedResponse);
  81. } else {
  82. writeTo(response);
  83. }
  84. writeEnd();
  85. }
  86.  
  87. String OBDSerialComm::readData() {
  88. Serial1.flush(); // temp remove this // ###
  89. String rxData = Serial1.readStringUntil(SERIAL_END_CHAR); // ###
  90. if (isEchoEnable()) {
  91. writeTo(rxData.c_str());
  92. }
  93. return rxData;
  94. }
  95.  
  96. void OBDSerialComm::setBaudRate(uint32_t rate) {
  97. this->boudRate = rate;
  98. }
  99.  
  100. long OBDSerialComm::getBaudRate() {
  101. return boudRate;
  102. }
  103.  
  104. bool OBDSerialComm::isEchoEnable() {
  105. return echoEnable;
  106. }
  107.  
  108. void OBDSerialComm::setEcho(bool echo) {
  109. this->echoEnable = echo;
  110. }
  111.  
  112. void OBDSerialComm::setStatus(STATUS status) {
  113. this->status = status;
  114. }
  115.  
  116. void OBDSerialComm::setLineFeeds(bool status) {
  117. this->lineFeedEnable = status;
  118. }
  119.  
  120. void OBDSerialComm::setMemory(bool status) {
  121. this->memoryEnabled = status;
  122. }
  123.  
  124. void OBDSerialComm::setWhiteSpaces(bool status) {
  125. this->whiteSpacesEnabled = status;
  126. }
  127.  
  128. void OBDSerialComm::setHeaders(bool status) {
  129. this->headersEnabled = status;
  130. }
  131.  
  132. void OBDSerialComm::addSpacesToResponse(const char *response, char spacedRes[]) {
  133. uint8_t len = strlen(response);
  134. int j = 0;
  135. for (int i = 0; i < len;) {
  136. *(spacedRes + j++) = *(response + i++);
  137. *(spacedRes + j++) = *(response + i++);
  138. if (i < len) {
  139. *(spacedRes + j++) = 0x20;
  140. }
  141. }
  142. *(spacedRes + j) = '\0';
  143. }
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement