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 teltonika_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 "BufferedSerial.h"
fmanzano_dtk 1:9e821e640117 13 #include "mbed.h"
fmanzano_dtk 1:9e821e640117 14 #include "teltonika_crc.hpp"
fmanzano_dtk 1:9e821e640117 15
fmanzano_dtk 1:9e821e640117 16 // extern Serial //myPC_debug.
fmanzano_dtk 1:9e821e640117 17
fmanzano_dtk 1:9e821e640117 18 // COMMANDS
fmanzano_dtk 1:9e821e640117 19 /**
fmanzano_dtk 1:9e821e640117 20 * @brief
fmanzano_dtk 1:9e821e640117 21 *
fmanzano_dtk 1:9e821e640117 22 */
fmanzano_dtk 1:9e821e640117 23 const int FMU130_COMMAND = 65;
fmanzano_dtk 1:9e821e640117 24 const int SERVER_COMMAND = 64;
fmanzano_dtk 1:9e821e640117 25 const char FMU130_HEADER[] = {0x42, 0x54, 0x46, 0x4D, '\0'};
fmanzano_dtk 1:9e821e640117 26 const int DESTINATION_SERVER = 0x01;
fmanzano_dtk 1:9e821e640117 27 const int DESTINATION_FMU130 = 0x00;
fmanzano_dtk 1:9e821e640117 28
fmanzano_dtk 1:9e821e640117 29 /**
fmanzano_dtk 1:9e821e640117 30 * @brief
fmanzano_dtk 1:9e821e640117 31 *
fmanzano_dtk 1:9e821e640117 32 * @param puertoCOM
fmanzano_dtk 1:9e821e640117 33 * @param m_buffer
fmanzano_dtk 1:9e821e640117 34 * @return int
fmanzano_dtk 1:9e821e640117 35 */
fmanzano_dtk 1:9e821e640117 36 int read_avl_uart(BufferedSerial *puertoCOM, char m_buffer[1024]) {
fmanzano_dtk 1:9e821e640117 37 int w = 0;
fmanzano_dtk 1:9e821e640117 38 wait_us(10000);
fmanzano_dtk 1:9e821e640117 39 while (puertoCOM -> readable()) {
fmanzano_dtk 1:9e821e640117 40 char incoming_char = puertoCOM -> getc();
fmanzano_dtk 1:9e821e640117 41 m_buffer[w] = incoming_char;
fmanzano_dtk 1:9e821e640117 42 w++;
fmanzano_dtk 1:9e821e640117 43 }
fmanzano_dtk 1:9e821e640117 44 wait_us(600000);
fmanzano_dtk 1:9e821e640117 45 while (puertoCOM -> readable()) {
fmanzano_dtk 1:9e821e640117 46 char incoming_char = puertoCOM -> getc();
fmanzano_dtk 1:9e821e640117 47 m_buffer[w] = incoming_char;
fmanzano_dtk 1:9e821e640117 48 w++;
fmanzano_dtk 1:9e821e640117 49 }
fmanzano_dtk 1:9e821e640117 50 m_buffer[w] = '\0';
fmanzano_dtk 1:9e821e640117 51 return(w);
fmanzano_dtk 1:9e821e640117 52 }
fmanzano_dtk 1:9e821e640117 53
fmanzano_dtk 1:9e821e640117 54 /**
fmanzano_dtk 1:9e821e640117 55 * @brief
fmanzano_dtk 1:9e821e640117 56 *
fmanzano_dtk 1:9e821e640117 57 * @param m_buffer
fmanzano_dtk 1:9e821e640117 58 * @return int
fmanzano_dtk 1:9e821e640117 59 */
fmanzano_dtk 1:9e821e640117 60 int identify_fmu130_payload(char m_buffer[1024]) {
fmanzano_dtk 1:9e821e640117 61 int type_of_payload = -1;
fmanzano_dtk 1:9e821e640117 62 char *pch;
fmanzano_dtk 1:9e821e640117 63
fmanzano_dtk 1:9e821e640117 64 pch = strchr(m_buffer, FMU130_COMMAND);
fmanzano_dtk 1:9e821e640117 65 if (pch!=NULL) {
fmanzano_dtk 1:9e821e640117 66 type_of_payload = 1;
fmanzano_dtk 1:9e821e640117 67 }
fmanzano_dtk 1:9e821e640117 68
fmanzano_dtk 1:9e821e640117 69 pch = strchr(m_buffer, SERVER_COMMAND);
fmanzano_dtk 1:9e821e640117 70 if (pch!=NULL) {
fmanzano_dtk 1:9e821e640117 71 type_of_payload = 2;
fmanzano_dtk 1:9e821e640117 72 }
fmanzano_dtk 1:9e821e640117 73 return(type_of_payload);
fmanzano_dtk 1:9e821e640117 74 }
fmanzano_dtk 1:9e821e640117 75
fmanzano_dtk 1:9e821e640117 76
fmanzano_dtk 1:9e821e640117 77
fmanzano_dtk 1:9e821e640117 78
fmanzano_dtk 1:9e821e640117 79 /**
fmanzano_dtk 1:9e821e640117 80 * @brief
fmanzano_dtk 1:9e821e640117 81 *
fmanzano_dtk 1:9e821e640117 82 * @param m_buffer
fmanzano_dtk 1:9e821e640117 83 * @param puertoCOM
fmanzano_dtk 1:9e821e640117 84 * @return true
fmanzano_dtk 1:9e821e640117 85 * @return false
fmanzano_dtk 1:9e821e640117 86 */
fmanzano_dtk 1:9e821e640117 87
fmanzano_dtk 1:9e821e640117 88 bool tx_fmu130_message(char m_buffer[64], BufferedSerial *puertoCOM) {
fmanzano_dtk 1:9e821e640117 89
fmanzano_dtk 1:9e821e640117 90
fmanzano_dtk 1:9e821e640117 91 /**
fmanzano_dtk 1:9e821e640117 92 * @brief Nota sobre el Formateador %04hhX
fmanzano_dtk 1:9e821e640117 93 * Se utiliza el 0 para indicar que se deben mostrar los ceros a la izquierda
fmanzano_dtk 1:9e821e640117 94 * Se utiliza el 4 para indicar que se deben mostrar cuatro caracteres en total
fmanzano_dtk 1:9e821e640117 95 * Se utilizan las dos letras h para indicar que el argumento es unsigned char
fmanzano_dtk 1:9e821e640117 96 * Se utiliza la X en mayúsculas para indicar que se utilizará mayúsculas para héxadecimal
fmanzano_dtk 1:9e821e640117 97 */
fmanzano_dtk 1:9e821e640117 98
fmanzano_dtk 1:9e821e640117 99 int j = (strlen(m_buffer));
fmanzano_dtk 1:9e821e640117 100 int k = j+3;
fmanzano_dtk 1:9e821e640117 101 char i = 0x00;
fmanzano_dtk 1:9e821e640117 102 char tx_message[128];
fmanzano_dtk 1:9e821e640117 103 char middle_message[128];
fmanzano_dtk 1:9e821e640117 104 int my_buff_length = 0;
fmanzano_dtk 1:9e821e640117 105
fmanzano_dtk 1:9e821e640117 106 // Ensamble de cadena parcial desde Length hasta el Payload
fmanzano_dtk 1:9e821e640117 107 //myPC_debug.printf("\r\nPayload: %s\r\n", m_buffer);
fmanzano_dtk 1:9e821e640117 108 //myPC_debug.printf("Longitud Payload: %d\r\n", j);
fmanzano_dtk 1:9e821e640117 109
fmanzano_dtk 1:9e821e640117 110 sprintf(middle_message, "%c%c%c%s", DESTINATION_SERVER, i , j, m_buffer);
fmanzano_dtk 1:9e821e640117 111
fmanzano_dtk 1:9e821e640117 112 int resultCRC = teltonika_crc16(middle_message,k);
fmanzano_dtk 1:9e821e640117 113 //myPC_debug.printf("CRC = %d - %04x\r\n", resultCRC, resultCRC);
fmanzano_dtk 1:9e821e640117 114
fmanzano_dtk 1:9e821e640117 115 int hi_CRC = ((resultCRC & 0xFF00)>>8);
fmanzano_dtk 1:9e821e640117 116 int lo_CRC = resultCRC & 0x00FF;
fmanzano_dtk 1:9e821e640117 117
fmanzano_dtk 1:9e821e640117 118 // Ensamble de trama final
fmanzano_dtk 1:9e821e640117 119 my_buff_length = sprintf(tx_message, "%s%c%c%c%s%c%c", FMU130_HEADER, DESTINATION_SERVER, i , j, m_buffer, hi_CRC, lo_CRC);
fmanzano_dtk 1:9e821e640117 120 puertoCOM->write(tx_message, my_buff_length);
fmanzano_dtk 1:9e821e640117 121 return(true);
fmanzano_dtk 1:9e821e640117 122 }
fmanzano_dtk 1:9e821e640117 123
fmanzano_dtk 1:9e821e640117 124 bool tx_fmu130_command(const char m_buffer[64], BufferedSerial *puertoCOM) {
fmanzano_dtk 1:9e821e640117 125 int j = (strlen(m_buffer));
fmanzano_dtk 1:9e821e640117 126 int k = j+3;
fmanzano_dtk 1:9e821e640117 127 char i = 0x00;
fmanzano_dtk 1:9e821e640117 128 char tx_message[128];
fmanzano_dtk 1:9e821e640117 129 char middle_message[128];
fmanzano_dtk 1:9e821e640117 130 int my_buff_length = 0;
fmanzano_dtk 1:9e821e640117 131
fmanzano_dtk 1:9e821e640117 132 // Ensamble de cadena parcial desde Length hasta el Payload
fmanzano_dtk 1:9e821e640117 133 //myPC_debug.printf("\r\nPayload: %s\r\n", m_buffer);
fmanzano_dtk 1:9e821e640117 134 //myPC_debug.printf("Longitud Payload: %d\r\n", j);
fmanzano_dtk 1:9e821e640117 135
fmanzano_dtk 1:9e821e640117 136 k = sprintf(middle_message, "%c%c%c%s", DESTINATION_FMU130, i , j, m_buffer);
fmanzano_dtk 1:9e821e640117 137
fmanzano_dtk 1:9e821e640117 138 int resultCRC = teltonika_crc16(middle_message,k);
fmanzano_dtk 1:9e821e640117 139 //myPC_debug.printf("CRC = %d - %04x\r\n", resultCRC, resultCRC);
fmanzano_dtk 1:9e821e640117 140
fmanzano_dtk 1:9e821e640117 141 int hi_CRC = ((resultCRC & 0xFF00)>>8);
fmanzano_dtk 1:9e821e640117 142 int lo_CRC = resultCRC & 0x00FF;
fmanzano_dtk 1:9e821e640117 143
fmanzano_dtk 1:9e821e640117 144 // Ensamble de trama final
fmanzano_dtk 1:9e821e640117 145 my_buff_length = sprintf(tx_message, "%s%c%c%c%s%c%c", FMU130_HEADER, DESTINATION_FMU130, i , j, m_buffer, hi_CRC, lo_CRC);
fmanzano_dtk 1:9e821e640117 146 puertoCOM->write(tx_message, my_buff_length);
fmanzano_dtk 1:9e821e640117 147 return(true);
fmanzano_dtk 1:9e821e640117 148 }
fmanzano_dtk 1:9e821e640117 149
fmanzano_dtk 1:9e821e640117 150 bool tx_fmu130_var_command(char m_buffer[30], BufferedSerial *puertoCOM) {
fmanzano_dtk 1:9e821e640117 151 int j = (strlen(m_buffer));
fmanzano_dtk 1:9e821e640117 152 int k = j+3;
fmanzano_dtk 1:9e821e640117 153 char i = 0x00;
fmanzano_dtk 1:9e821e640117 154 char tx_message[128];
fmanzano_dtk 1:9e821e640117 155 char middle_message[128];
fmanzano_dtk 1:9e821e640117 156 int my_buff_length = 0;
fmanzano_dtk 1:9e821e640117 157
fmanzano_dtk 1:9e821e640117 158 // Ensamble de cadena parcial desde Length hasta el Payload
fmanzano_dtk 1:9e821e640117 159 //myPC_debug.printf("\r\nPayload: %s\r\n", m_buffer);
fmanzano_dtk 1:9e821e640117 160 //myPC_debug.printf("Longitud Payload: %d\r\n", j);
fmanzano_dtk 1:9e821e640117 161
fmanzano_dtk 1:9e821e640117 162 k = sprintf(middle_message, "%c%c%c%s", DESTINATION_FMU130, i , j, m_buffer);
fmanzano_dtk 1:9e821e640117 163
fmanzano_dtk 1:9e821e640117 164 int resultCRC = teltonika_crc16(middle_message,k);
fmanzano_dtk 1:9e821e640117 165 //myPC_debug.printf("CRC = %d - %04x\r\n", resultCRC, resultCRC);
fmanzano_dtk 1:9e821e640117 166
fmanzano_dtk 1:9e821e640117 167 int hi_CRC = ((resultCRC & 0xFF00)>>8);
fmanzano_dtk 1:9e821e640117 168 int lo_CRC = resultCRC & 0x00FF;
fmanzano_dtk 1:9e821e640117 169
fmanzano_dtk 1:9e821e640117 170 // Ensamble de trama final
fmanzano_dtk 1:9e821e640117 171 my_buff_length = sprintf(tx_message, "%s%c%c%c%s%c%c", FMU130_HEADER, DESTINATION_FMU130, i , j, m_buffer, hi_CRC, lo_CRC);
fmanzano_dtk 1:9e821e640117 172 puertoCOM->write(tx_message, my_buff_length);
fmanzano_dtk 1:9e821e640117 173 return(true);
fmanzano_dtk 1:9e821e640117 174 }