![](/media/cache/profiles/Felicito_-_New_Avatar.jpg.50x50_q85.jpg)
Proyecto ABInBev para la tarjeta Guaria 1/2.
Teltonika/avl_fmu130.cpp@19:5580a9a54ad5, 2022-07-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |