Felícito Manzano
/
DTK_Guaria2_ABInBev
Proyecto ABInBev para la tarjeta Guaria 1/2.
Teltonika/teltonika_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 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 | } |