Proyecto ABInBev para la tarjeta Guaria 1/2.

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers avl_fmu130.cpp Source File

avl_fmu130.cpp

Go to the documentation of this file.
00001 /**
00002  * @file avl_fmu130.cpp
00003  * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
00004  * @brief 
00005  * @version 0.1
00006  * @date 2020-09-28
00007  * 
00008  * @copyright Copyright (c) 2020
00009  * 
00010  */
00011 
00012 #include "mbed.h"
00013 #include "avl_fmu130.hpp "
00014 
00015 // Teltonika AVL ID Events
00016     const char FM1U30_SEPARATOR[]               = ",";
00017     const char FM1U30_AVLID_IDLING[]           = "251";
00018     const char FM1U30_AVLID_WARNING_SPEED[]    = "24";
00019     const char FM1U30_AVLID_OVERSPEED[]        = "255";
00020     const char FM1U30_AVLID_CRASH[]            = "317";
00021     const char FM1U30_AVLID_JAMMING[]          = "249";
00022     const char FM1U30_AVLID_TOWING[]           = "246";
00023     const char FM1U30_AVLID_GREEN_DRIVING[]    = "253";
00024     const char FM1U30_AVLID_ACCELERATION[]     = "1";
00025     const char FM1U30_AVLID_BREAKING[]         = "2";
00026     const char FM1U30_AVLID_CORNERING[]        = "3";
00027     const char FM1U30_AVLID_EVENT_START[]      = "1";
00028     const char FM1U30_AVLID_EVENT_STOP[]       = "0";
00029     const char FMU130_START[]           = "A";
00030     const int  IMEI_LENGHT               = 15;
00031 
00032 /**
00033  * @brief 
00034  * 
00035  * @param payload 
00036  * @return true 
00037  * @return false 
00038  */
00039 bool verify_fmu130_payload (char payload[1024]) {
00040     bool a_encontrada = false;  // Tipo Bool
00041     bool coma_encontrada = false;     // Tipo Bool
00042     char *ret;
00043 
00044     // Verificar si se encuentra el inicio del comando A
00045     ret = strchr(payload, FMU130_START[0]);
00046     if (ret!=NULL) {
00047         a_encontrada = true;
00048     }
00049 
00050     // Verificar si se encuentra el separador "," 
00051     ret = strchr(payload, FM1U30_SEPARATOR[0]);
00052     if (ret!=NULL) {
00053         coma_encontrada = true;
00054     }
00055 
00056     // a_encontrada el tamaño de la trama
00057     if (a_encontrada && coma_encontrada) { // Trama para procesar
00058         return(true);
00059     } else  { // Trama para ignorar
00060         return(false);  
00061     }
00062 }
00063 
00064 /**
00065  * @brief 
00066  * 
00067  * @param payload 
00068  * @param header 
00069  * @param imei 
00070  * @param cmd_fmu 
00071  * @param param_fmu 
00072  * @return true 
00073  * @return false 
00074  */
00075 bool parse_fmu130_payload (char payload[1024], char header[2], char imei[16], int *cmd_fmu, int *param_fmu) {
00076     int i = 0;
00077     char avl_id[4];
00078     char status[2];
00079     char *p;
00080 
00081 
00082     p = strtok(payload, FM1U30_SEPARATOR);
00083     strcpy(header,p);
00084 
00085     while (p != NULL) {
00086         i++;
00087         p = strtok(NULL, FM1U30_SEPARATOR);
00088         switch(i) {
00089             case 1:
00090                 strcpy(imei,p);
00091                 break;
00092             
00093             case 2:
00094                 strcpy(avl_id,p); // ["01","3D",'\0']
00095                 *cmd_fmu = atoi(avl_id); // "3" "1" "7" ==> 317
00096                 if (*cmd_fmu == 0) {
00097                     if (strlen(avl_id) >= 2) {
00098                         *cmd_fmu = 256 + (int) avl_id[1]; 
00099                     } else {
00100                         *cmd_fmu = (int) avl_id[0]; 
00101                     }
00102                 }
00103                 break;
00104 
00105             case 3:
00106                 strcpy(status,p);
00107                 *param_fmu = atoi(status);
00108                 if (*param_fmu == 0) {
00109                     *param_fmu = (int) status[0];
00110                 }
00111                 break;
00112         }
00113     }
00114     return(true);
00115 }