Proyecto ABInBev para la tarjeta Guaria 1/2.

Committer:
fmanzano_dtk
Date:
Thu Jul 07 16:17:25 2022 +0000
Revision:
19:5580a9a54ad5
Parent:
1:9e821e640117
Sincronizacion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 1:9e821e640117 1 /**
fmanzano_dtk 1:9e821e640117 2 * @file avl_fmu130.cpp
fmanzano_dtk 1:9e821e640117 3 * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
fmanzano_dtk 1:9e821e640117 4 * @brief
fmanzano_dtk 1:9e821e640117 5 * @version 0.1
fmanzano_dtk 1:9e821e640117 6 * @date 2020-09-28
fmanzano_dtk 1:9e821e640117 7 *
fmanzano_dtk 1:9e821e640117 8 * @copyright Copyright (c) 2020
fmanzano_dtk 1:9e821e640117 9 *
fmanzano_dtk 1:9e821e640117 10 */
fmanzano_dtk 1:9e821e640117 11
fmanzano_dtk 1:9e821e640117 12 #include "mbed.h"
fmanzano_dtk 1:9e821e640117 13 #include "avl_fmu130.hpp"
fmanzano_dtk 1:9e821e640117 14
fmanzano_dtk 1:9e821e640117 15 // Teltonika AVL ID Events
fmanzano_dtk 1:9e821e640117 16 const char FM1U30_SEPARATOR[] = ",";
fmanzano_dtk 1:9e821e640117 17 const char FM1U30_AVLID_IDLING[] = "251";
fmanzano_dtk 1:9e821e640117 18 const char FM1U30_AVLID_WARNING_SPEED[] = "24";
fmanzano_dtk 1:9e821e640117 19 const char FM1U30_AVLID_OVERSPEED[] = "255";
fmanzano_dtk 1:9e821e640117 20 const char FM1U30_AVLID_CRASH[] = "317";
fmanzano_dtk 1:9e821e640117 21 const char FM1U30_AVLID_JAMMING[] = "249";
fmanzano_dtk 1:9e821e640117 22 const char FM1U30_AVLID_TOWING[] = "246";
fmanzano_dtk 1:9e821e640117 23 const char FM1U30_AVLID_GREEN_DRIVING[] = "253";
fmanzano_dtk 1:9e821e640117 24 const char FM1U30_AVLID_ACCELERATION[] = "1";
fmanzano_dtk 1:9e821e640117 25 const char FM1U30_AVLID_BREAKING[] = "2";
fmanzano_dtk 1:9e821e640117 26 const char FM1U30_AVLID_CORNERING[] = "3";
fmanzano_dtk 1:9e821e640117 27 const char FM1U30_AVLID_EVENT_START[] = "1";
fmanzano_dtk 1:9e821e640117 28 const char FM1U30_AVLID_EVENT_STOP[] = "0";
fmanzano_dtk 1:9e821e640117 29 const char FMU130_START[] = "A";
fmanzano_dtk 1:9e821e640117 30 const int IMEI_LENGHT = 15;
fmanzano_dtk 1:9e821e640117 31
fmanzano_dtk 1:9e821e640117 32 /**
fmanzano_dtk 1:9e821e640117 33 * @brief
fmanzano_dtk 1:9e821e640117 34 *
fmanzano_dtk 1:9e821e640117 35 * @param payload
fmanzano_dtk 1:9e821e640117 36 * @return true
fmanzano_dtk 1:9e821e640117 37 * @return false
fmanzano_dtk 1:9e821e640117 38 */
fmanzano_dtk 1:9e821e640117 39 bool verify_fmu130_payload(char payload[1024]) {
fmanzano_dtk 1:9e821e640117 40 bool a_encontrada = false; // Tipo Bool
fmanzano_dtk 1:9e821e640117 41 bool coma_encontrada = false; // Tipo Bool
fmanzano_dtk 1:9e821e640117 42 char *ret;
fmanzano_dtk 1:9e821e640117 43
fmanzano_dtk 1:9e821e640117 44 // Verificar si se encuentra el inicio del comando A
fmanzano_dtk 1:9e821e640117 45 ret = strchr(payload, FMU130_START[0]);
fmanzano_dtk 1:9e821e640117 46 if (ret!=NULL) {
fmanzano_dtk 1:9e821e640117 47 a_encontrada = true;
fmanzano_dtk 1:9e821e640117 48 }
fmanzano_dtk 1:9e821e640117 49
fmanzano_dtk 1:9e821e640117 50 // Verificar si se encuentra el separador ","
fmanzano_dtk 1:9e821e640117 51 ret = strchr(payload, FM1U30_SEPARATOR[0]);
fmanzano_dtk 1:9e821e640117 52 if (ret!=NULL) {
fmanzano_dtk 1:9e821e640117 53 coma_encontrada = true;
fmanzano_dtk 1:9e821e640117 54 }
fmanzano_dtk 1:9e821e640117 55
fmanzano_dtk 1:9e821e640117 56 // a_encontrada el tamaño de la trama
fmanzano_dtk 1:9e821e640117 57 if (a_encontrada && coma_encontrada) { // Trama para procesar
fmanzano_dtk 1:9e821e640117 58 return(true);
fmanzano_dtk 1:9e821e640117 59 } else { // Trama para ignorar
fmanzano_dtk 1:9e821e640117 60 return(false);
fmanzano_dtk 1:9e821e640117 61 }
fmanzano_dtk 1:9e821e640117 62 }
fmanzano_dtk 1:9e821e640117 63
fmanzano_dtk 1:9e821e640117 64 /**
fmanzano_dtk 1:9e821e640117 65 * @brief
fmanzano_dtk 1:9e821e640117 66 *
fmanzano_dtk 1:9e821e640117 67 * @param payload
fmanzano_dtk 1:9e821e640117 68 * @param header
fmanzano_dtk 1:9e821e640117 69 * @param imei
fmanzano_dtk 1:9e821e640117 70 * @param cmd_fmu
fmanzano_dtk 1:9e821e640117 71 * @param param_fmu
fmanzano_dtk 1:9e821e640117 72 * @return true
fmanzano_dtk 1:9e821e640117 73 * @return false
fmanzano_dtk 1:9e821e640117 74 */
fmanzano_dtk 1:9e821e640117 75 bool parse_fmu130_payload(char payload[1024], char header[2], char imei[16], int *cmd_fmu, int *param_fmu) {
fmanzano_dtk 1:9e821e640117 76 int i = 0;
fmanzano_dtk 1:9e821e640117 77 char avl_id[4];
fmanzano_dtk 1:9e821e640117 78 char status[2];
fmanzano_dtk 1:9e821e640117 79 char *p;
fmanzano_dtk 1:9e821e640117 80
fmanzano_dtk 1:9e821e640117 81
fmanzano_dtk 1:9e821e640117 82 p = strtok(payload, FM1U30_SEPARATOR);
fmanzano_dtk 1:9e821e640117 83 strcpy(header,p);
fmanzano_dtk 1:9e821e640117 84
fmanzano_dtk 1:9e821e640117 85 while (p != NULL) {
fmanzano_dtk 1:9e821e640117 86 i++;
fmanzano_dtk 1:9e821e640117 87 p = strtok(NULL, FM1U30_SEPARATOR);
fmanzano_dtk 1:9e821e640117 88 switch(i) {
fmanzano_dtk 1:9e821e640117 89 case 1:
fmanzano_dtk 1:9e821e640117 90 strcpy(imei,p);
fmanzano_dtk 1:9e821e640117 91 break;
fmanzano_dtk 1:9e821e640117 92
fmanzano_dtk 1:9e821e640117 93 case 2:
fmanzano_dtk 1:9e821e640117 94 strcpy(avl_id,p); // ["01","3D",'\0']
fmanzano_dtk 1:9e821e640117 95 *cmd_fmu = atoi(avl_id); // "3" "1" "7" ==> 317
fmanzano_dtk 1:9e821e640117 96 if (*cmd_fmu == 0) {
fmanzano_dtk 1:9e821e640117 97 if (strlen(avl_id) >= 2) {
fmanzano_dtk 1:9e821e640117 98 *cmd_fmu = 256 + (int) avl_id[1];
fmanzano_dtk 1:9e821e640117 99 } else {
fmanzano_dtk 1:9e821e640117 100 *cmd_fmu = (int) avl_id[0];
fmanzano_dtk 1:9e821e640117 101 }
fmanzano_dtk 1:9e821e640117 102 }
fmanzano_dtk 1:9e821e640117 103 break;
fmanzano_dtk 1:9e821e640117 104
fmanzano_dtk 1:9e821e640117 105 case 3:
fmanzano_dtk 1:9e821e640117 106 strcpy(status,p);
fmanzano_dtk 1:9e821e640117 107 *param_fmu = atoi(status);
fmanzano_dtk 1:9e821e640117 108 if (*param_fmu == 0) {
fmanzano_dtk 1:9e821e640117 109 *param_fmu = (int) status[0];
fmanzano_dtk 1:9e821e640117 110 }
fmanzano_dtk 1:9e821e640117 111 break;
fmanzano_dtk 1:9e821e640117 112 }
fmanzano_dtk 1:9e821e640117 113 }
fmanzano_dtk 1:9e821e640117 114 return(true);
fmanzano_dtk 1:9e821e640117 115 }