MCPcopy Create free account
hub / github.com/PowerBroker2/ELMduino / formatQueryArray

Method formatQueryArray

src/ELMduino.cpp:210–319  ·  view source on GitHub ↗

void ELM327::formatQueryArray(uint8_t service, uint16_t pid, uint8_t num_responses) Description: ------------ * Creates a query stack to be sent to ELM327 Inputs: ------- * uint16_t service - Service number of the queried PID * uint32_t pid - PID number of the queried PID * uint8_t num_responses - see function header for "queryPID()" Return: ------- * void */

Source from the content-addressed store, hash-verified

208 * void
209*/
210void ELM327::formatQueryArray(const uint8_t& service,
211 const uint16_t& pid,
212 const uint8_t& num_responses)
213{
214 if (debugMode)
215 {
216 Serial.print(F("Service: "));
217 Serial.println(service);
218 Serial.print(F("PID: "));
219 Serial.println(pid);
220 }
221
222 isMode0x22Query = (service == 0x22 && pid <= 0xFF); // mode 0x22 responses always zero-pad the pid to 4 chars, even for a 2-char pid
223
224 query[0] = ((service >> 4) & 0xF) + '0';
225 query[1] = (service & 0xF) + '0';
226
227 // determine PID length (standard queries have 16-bit PIDs,
228 // but some custom queries have PIDs with 32-bit values)
229 if (pid & 0xFF00)
230 {
231 if (debugMode)
232 Serial.println(F("Long query detected"));
233
234 longQuery = true;
235
236 query[2] = ((pid >> 12) & 0xF) + '0';
237 query[3] = ((pid >> 8) & 0xF) + '0';
238 query[4] = ((pid >> 4) & 0xF) + '0';
239 query[5] = (pid & 0xF) + '0';
240
241 if (specifyNumResponses)
242 {
243 if (num_responses > 0xF)
244 {
245 query[6] = ((num_responses >> 4) & 0xF) + '0';
246 query[7] = (num_responses & 0xF) + '0';
247 query[8] = '\0';
248
249 upper(query, 8);
250 }
251 else
252 {
253 query[6] = (num_responses & 0xF) + '0';
254 query[7] = '\0';
255 query[8] = '\0';
256
257 upper(query, 7);
258 }
259 }
260 else
261 {
262 query[6] = '\0';
263 query[7] = '\0';
264 query[8] = '\0';
265
266 upper(query, 6);
267 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected