Debug Serial para programa resetar o buffer quando houver tamanhos errados na mensagem

Dependencies:   pulga-lorawan-drv PingPong-P2P-ClickButtonToWork-SX1272

Committer:
MatteusCarr
Date:
Thu Apr 29 16:54:10 2021 +0000
Revision:
15:b27ab44dc2c8
Parent:
14:88373765b9a9
Debug travamento para resetar e nao travar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pancotinho 7:37dc9ce68914 1 #include "lora.h"
pancotinho 8:856f7a8cc20c 2 #include "serial.h"
pancotinho 7:37dc9ce68914 3
pancotinho 7:37dc9ce68914 4
pancotinho 7:37dc9ce68914 5 DigitalOut led1(P1_13);
pancotinho 7:37dc9ce68914 6 DigitalOut led2(P1_14);
pancotinho 7:37dc9ce68914 7
pancotinho 7:37dc9ce68914 8 uint8_t buffer[255];
pancotinho 7:37dc9ce68914 9 uint8_t message[255];
pancotinho 7:37dc9ce68914 10 uint8_t message_pong[]="Pong";
pancotinho 7:37dc9ce68914 11 uint8_t message_ping[]="Ping";
pancotinho 7:37dc9ce68914 12
pancotinho 7:37dc9ce68914 13 int e;
pancotinho 7:37dc9ce68914 14 int cont =0;
pancotinho 7:37dc9ce68914 15 uint8_t r_size;
pancotinho 7:37dc9ce68914 16 int loraMode=LORAMODE;
pancotinho 7:37dc9ce68914 17
pancotinho 7:37dc9ce68914 18
pancotinho 7:37dc9ce68914 19
pancotinho 7:37dc9ce68914 20 ////////////////////////////////////////
pancotinho 7:37dc9ce68914 21 // SETUP SX1272 initialisation
pancotinho 7:37dc9ce68914 22 ////////////////////////////////////////
pancotinho 7:37dc9ce68914 23 void setup()
pancotinho 7:37dc9ce68914 24 {
pancotinho 7:37dc9ce68914 25
pancotinho 7:37dc9ce68914 26
pancotinho 8:856f7a8cc20c 27 pc.printf("------Coragem LoRa temperature sensor -------------\n");
pancotinho 7:37dc9ce68914 28 //sx1272.ON(); // Power ON the module
pancotinho 7:37dc9ce68914 29
pancotinho 7:37dc9ce68914 30 int error_config_sx1272=0;
pancotinho 7:37dc9ce68914 31
pancotinho 7:37dc9ce68914 32 // Set transmission mode and print the result
pancotinho 7:37dc9ce68914 33 e = sx1272.setMode(loraMode);
pancotinho 8:856f7a8cc20c 34 pc.printf("Mode: %d\n",loraMode);
pancotinho 7:37dc9ce68914 35 if (e) error_config_sx1272=1;
pancotinho 8:856f7a8cc20c 36 pc.printf("Setting Mode: state %d\n",e);
pancotinho 7:37dc9ce68914 37
pancotinho 7:37dc9ce68914 38 // enable carrier sense
pancotinho 7:37dc9ce68914 39 sx1272._enableCarrierSense=true;
pancotinho 7:37dc9ce68914 40
pancotinho 7:37dc9ce68914 41 // for LOW POWER
pancotinho 7:37dc9ce68914 42 sx1272._RSSIonSend=false;
pancotinho 7:37dc9ce68914 43
pancotinho 7:37dc9ce68914 44
pancotinho 7:37dc9ce68914 45 // Select frequency channel
pancotinho 7:37dc9ce68914 46 e = sx1272.setChannel(DEFAULT_CHANNEL);
pancotinho 7:37dc9ce68914 47 if (e) error_config_sx1272=1;
pancotinho 8:856f7a8cc20c 48 pc.printf("Setting Channel: state %d\n",e);
pancotinho 7:37dc9ce68914 49
pancotinho 7:37dc9ce68914 50 // Select amplifier line; PABOOST or RFO
pancotinho 7:37dc9ce68914 51 // #ifdef PABOOST
pancotinho 7:37dc9ce68914 52 // printf("pabboost\n");
pancotinho 7:37dc9ce68914 53 // sx1272._needPABOOST=true;
pancotinho 7:37dc9ce68914 54 // // previous way for setting output power
pancotinho 7:37dc9ce68914 55 // // powerLevel='x';
pancotinho 7:37dc9ce68914 56 // #else
pancotinho 7:37dc9ce68914 57 // // previous way for setting output power
pancotinho 7:37dc9ce68914 58 // // powerLevel='M';
pancotinho 7:37dc9ce68914 59 // #endif
pancotinho 7:37dc9ce68914 60
pancotinho 7:37dc9ce68914 61 // previous way for setting output power
pancotinho 7:37dc9ce68914 62 // e = sx1272.setPower(powerLevel);
pancotinho 7:37dc9ce68914 63
pancotinho 7:37dc9ce68914 64 e = sx1272.setPowerDBM((uint8_t)MAX_DBM);
pancotinho 7:37dc9ce68914 65 if (e) error_config_sx1272=1;
pancotinho 8:856f7a8cc20c 66 pc.printf("Setting Power: state %d\n",e);
pancotinho 7:37dc9ce68914 67
pancotinho 7:37dc9ce68914 68 // Set the node address and print the result
pancotinho 7:37dc9ce68914 69 e = sx1272.setNodeAddress(node_addr);
pancotinho 7:37dc9ce68914 70 if (e) error_config_sx1272=1;
pancotinho 8:856f7a8cc20c 71 pc.printf("Setting node addr: state %d\n",e);
pancotinho 7:37dc9ce68914 72
pancotinho 7:37dc9ce68914 73 // Print a success message
pancotinho 8:856f7a8cc20c 74 if (!error_config_sx1272) pc.printf("SX1272 successfully configured\n");
pancotinho 8:856f7a8cc20c 75 else pc.printf("ERROR CONFIGURATION SX1272\n");
pancotinho 7:37dc9ce68914 76
pancotinho 7:37dc9ce68914 77 wait_ms(400);
pancotinho 7:37dc9ce68914 78 }
pancotinho 7:37dc9ce68914 79 void send_packet (uint8_t *payload, uint8_t length8) // envia pacote
pancotinho 7:37dc9ce68914 80 {
pancotinho 8:856f7a8cc20c 81 pc.printf("Samira - send_packet ( ) - ENTER..\n");
pancotinho 7:37dc9ce68914 82
pancotinho 7:37dc9ce68914 83 //write on FIFO
pancotinho 7:37dc9ce68914 84 sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
pancotinho 7:37dc9ce68914 85 sx1272.writeRegister(REG_OP_MODE, LORA_STANDBY_MODE); // Stdby LoRa mode to write in FIFO
pancotinho 7:37dc9ce68914 86 sx1272.writeRegister(REG_PAYLOAD_LENGTH_LORA, length8);
pancotinho 7:37dc9ce68914 87 sx1272.writeRegister(REG_FIFO_TX_BASE_ADDR,0x00);
pancotinho 7:37dc9ce68914 88 sx1272.writeRegister(REG_FIFO_ADDR_PTR,0x00);
pancotinho 7:37dc9ce68914 89
pancotinho 7:37dc9ce68914 90 for(unsigned int i = 0; i <= length8; i++) {
pancotinho 14:88373765b9a9 91 // pc.printf("Samira - send_packet ( ) - FOR..\n");
pancotinho 7:37dc9ce68914 92 sx1272.writeRegister(REG_FIFO, payload[i]); // Writing the payload in FIFO
pancotinho 7:37dc9ce68914 93 }
pancotinho 7:37dc9ce68914 94
pancotinho 7:37dc9ce68914 95 //________________Send Data__________________
pancotinho 7:37dc9ce68914 96 sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
pancotinho 7:37dc9ce68914 97 sx1272.writeRegister(REG_OP_MODE, LORA_TX_MODE); // LORA mode - Tx
pancotinho 7:37dc9ce68914 98
pancotinho 7:37dc9ce68914 99 unsigned long exitTime = millis()+2000;//2 segundos para sair do for
pancotinho 7:37dc9ce68914 100 unsigned long Time= millis();
pancotinho 7:37dc9ce68914 101 char value = sx1272.readRegister(REG_IRQ_FLAGS);
pancotinho 7:37dc9ce68914 102 /*
pancotinho 7:37dc9ce68914 103 int bitCounter = 0;
pancotinho 7:37dc9ce68914 104 while ((bitRead(value, 3) == 0) && (Time < exitTime)) {
pancotinho 7:37dc9ce68914 105 bitCounter ++;
pancotinho 7:37dc9ce68914 106 printf("bitCounter = %d", bitCounter);
pancotinho 7:37dc9ce68914 107 printf("\n");
pancotinho 7:37dc9ce68914 108 value=sx1272.readRegister(REG_IRQ_FLAGS);
pancotinho 7:37dc9ce68914 109 Time= millis();
pancotinho 7:37dc9ce68914 110 wait_ms(50);
pancotinho 7:37dc9ce68914 111 }
pancotinho 7:37dc9ce68914 112 */
pancotinho 10:f6ff8ec221ec 113 pc.printf("Samira - send_packet ( ) - OUT..\n");
pancotinho 10:f6ff8ec221ec 114
pancotinho 10:f6ff8ec221ec 115
pancotinho 7:37dc9ce68914 116 //wait_ms(50);
pancotinho 7:37dc9ce68914 117
pancotinho 7:37dc9ce68914 118 }
pancotinho 7:37dc9ce68914 119
pancotinho 7:37dc9ce68914 120 void send_data(int mode) //data predefined
pancotinho 7:37dc9ce68914 121 {
pancotinho 7:37dc9ce68914 122 led1=1;
pancotinho 7:37dc9ce68914 123 led2=1;
pancotinho 8:856f7a8cc20c 124 pc.printf("Samira - enter send_data () ..\n");
pancotinho 8:856f7a8cc20c 125 pc.printf("number=%d\n",cont);
pancotinho 7:37dc9ce68914 126 sx1272.writeRegister(REG_OP_MODE,129);//standby
pancotinho 7:37dc9ce68914 127 if (mode == DATA ) {
pancotinho 8:856f7a8cc20c 128 pc.printf("Samira - send_data (DATA) ..\n");
pancotinho 10:f6ff8ec221ec 129 r_size=sprintf((char*)message,"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
pancotinho 7:37dc9ce68914 130 send_packet(message,r_size);
pancotinho 8:856f7a8cc20c 131 pc.printf("packet send :\n%s\nrsize=%d\n",message,r_size);
pancotinho 7:37dc9ce68914 132 // //samira// it is sending sensors data
pancotinho 7:37dc9ce68914 133
pancotinho 7:37dc9ce68914 134
pancotinho 7:37dc9ce68914 135 //============= internet of turtles =============
pancotinho 7:37dc9ce68914 136 // sprintf(float_breathing_time,"%04.2f", last_breathing_time);
pancotinho 7:37dc9ce68914 137 // sprintf(float_diving_time,"%04.2f", last_diving_time);
pancotinho 7:37dc9ce68914 138 // r_size=sprintf((char*)message,"\\!#Dt%04.2f_Bt%04.2f_%s°C_%shPa_%s%%",last_diving_time,last_breathing_time,float_temp,float_press,float_hum);
pancotinho 7:37dc9ce68914 139 // ==============================================
pancotinho 7:37dc9ce68914 140
pancotinho 7:37dc9ce68914 141 //size=sprintf((char*)message,"\\!#%s°C_%shPa_%s%%",float_temp,float_press,float_hum);
pancotinho 7:37dc9ce68914 142
pancotinho 7:37dc9ce68914 143 // send_packet(message,r_size);
pancotinho 7:37dc9ce68914 144 // sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR,/* (uint8_t*)*/message, r_size);
pancotinho 7:37dc9ce68914 145 // printf("packet send :\n%s\nrsize=%d\n",message,r_size);
pancotinho 7:37dc9ce68914 146
pancotinho 7:37dc9ce68914 147
pancotinho 7:37dc9ce68914 148 } else if (mode == PING ) {
pancotinho 7:37dc9ce68914 149
pancotinho 7:37dc9ce68914 150 printf("Samira - send_data (PING) ..\n");
pancotinho 7:37dc9ce68914 151 //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR, message_ping, sizeof(message_ping));
pancotinho 7:37dc9ce68914 152 send_packet(message_ping,sizeof(message_ping));
pancotinho 8:856f7a8cc20c 153 pc.printf("packet sent : %s ",message_ping);
pancotinho 8:856f7a8cc20c 154 pc.printf("packet size : %d \n",sizeof(message_ping));//samira//
pancotinho 8:856f7a8cc20c 155 pc.printf("waiting for POng ... \n");
pancotinho 7:37dc9ce68914 156
pancotinho 7:37dc9ce68914 157
pancotinho 7:37dc9ce68914 158 } else if (mode == PONG ) {
pancotinho 8:856f7a8cc20c 159 pc.printf("sending a PONG ... ");
pancotinho 7:37dc9ce68914 160 //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR, message_pong, sizeof(message_pong));
pancotinho 7:37dc9ce68914 161 send_packet(message_pong,sizeof(message_pong));
pancotinho 8:856f7a8cc20c 162 pc.printf("packet send :\n%s\n",message_pong);
pancotinho 7:37dc9ce68914 163 }
pancotinho 7:37dc9ce68914 164
pancotinho 7:37dc9ce68914 165 led1=0;
pancotinho 7:37dc9ce68914 166 led2=0;
pancotinho 7:37dc9ce68914 167 //wait_ms(300);
pancotinho 7:37dc9ce68914 168
pancotinho 7:37dc9ce68914 169 sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
pancotinho 7:37dc9ce68914 170 sx1272.writeRegister(REG_OP_MODE,133); //leitura continua
pancotinho 7:37dc9ce68914 171 cont++;
pancotinho 7:37dc9ce68914 172 }
pancotinho 7:37dc9ce68914 173 void send_msg(char *msg_lora) //data predefined
pancotinho 7:37dc9ce68914 174 {
pancotinho 7:37dc9ce68914 175 led1=1;
pancotinho 7:37dc9ce68914 176 led2=1;
pancotinho 9:cf555a570349 177
pancotinho 7:37dc9ce68914 178 sx1272.writeRegister(REG_OP_MODE,129);//standby
pancotinho 11:9ee88f11ed06 179 //send_packet((uint8_t*)msg_lora,strlen(msg_lora));
pancotinho 11:9ee88f11ed06 180 //pc.printf("packet send :\n%s\nrsize=%d\n",msg_lora, strlen(msg_lora));
pancotinho 10:f6ff8ec221ec 181 //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR,/* (uint8_t*)*/msg_lora, strlen(msg_lora));
pancotinho 11:9ee88f11ed06 182 r_size=sprintf((char*)message,msg_lora);
pancotinho 11:9ee88f11ed06 183 pc.printf("packet send :\n%s\nrsize=%d\n",message,r_size);
pancotinho 11:9ee88f11ed06 184 send_packet(message,r_size);
pancotinho 11:9ee88f11ed06 185
pancotinho 7:37dc9ce68914 186 led1=0;
pancotinho 7:37dc9ce68914 187 led2=0;
pancotinho 7:37dc9ce68914 188
pancotinho 7:37dc9ce68914 189 sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
pancotinho 7:37dc9ce68914 190 sx1272.writeRegister(REG_OP_MODE,133); //leitura continua
pancotinho 7:37dc9ce68914 191 cont++;
pancotinho 7:37dc9ce68914 192 }
pancotinho 7:37dc9ce68914 193
pancotinho 7:37dc9ce68914 194 void print_packet()
pancotinho 7:37dc9ce68914 195 {
pancotinho 7:37dc9ce68914 196
pancotinho 8:856f7a8cc20c 197 pc.printf("Samira - print_packet () Enter ..\n");
pancotinho 7:37dc9ce68914 198 //led2=1;
pancotinho 7:37dc9ce68914 199 sx1272.writeRegister(REG_OP_MODE,129);//standby
pancotinho 7:37dc9ce68914 200
pancotinho 7:37dc9ce68914 201 uint8_t pac_size;
pancotinho 7:37dc9ce68914 202
pancotinho 7:37dc9ce68914 203 sx1272.writeRegister(REG_FIFO_ADDR_PTR,sx1272.readRegister(REG_FIFO_RX_CURRENT_ADDR));//set fifo pointer to read packet
pancotinho 7:37dc9ce68914 204 pac_size = sx1272.readRegister(REG_RX_NB_BYTES);//read size of packet
pancotinho 8:856f7a8cc20c 205 pc.printf("Samira - print_packet () pac_size = %d ..\n", pac_size);
pancotinho 10:f6ff8ec221ec 206 pc.printf("<n");
pancotinho 7:37dc9ce68914 207 for(int i =0 ; i<pac_size ; i++) { //print packet
pancotinho 7:37dc9ce68914 208 buffer[i]=sx1272.readRegister(REG_FIFO);
pancotinho 7:37dc9ce68914 209 /* if (buffer[i]== '\n') printf(" \\n");
pancotinho 7:37dc9ce68914 210 if (buffer[i]== 0x0B) printf("tab");*/
pancotinho 8:856f7a8cc20c 211 pc.printf("%c",buffer[i]);//print packet
pancotinho 7:37dc9ce68914 212 }
pancotinho 10:f6ff8ec221ec 213 pc.printf(">\n");
pancotinho 7:37dc9ce68914 214
pancotinho 7:37dc9ce68914 215
pancotinho 7:37dc9ce68914 216 for(int i =0 ; i<pac_size ; i++) { //look for Ping in packet
pancotinho 7:37dc9ce68914 217 if ((buffer[i] =='P') && (buffer[i+1] =='i') && (buffer[i+2] =='n') && (buffer[i+3] =='g') ) {
pancotinho 7:37dc9ce68914 218 led1=1;
pancotinho 7:37dc9ce68914 219 led2=1;
pancotinho 7:37dc9ce68914 220 wait(1);
pancotinho 7:37dc9ce68914 221 sx1272.writeRegister(0x12,255);//clear flags
pancotinho 7:37dc9ce68914 222 led1=0;
pancotinho 7:37dc9ce68914 223 led2=0;
pancotinho 8:856f7a8cc20c 224 pc.printf("There is a wait before sending PONG \n");
pancotinho 8:856f7a8cc20c 225 pc.printf("sending PONG");
pancotinho 7:37dc9ce68914 226 send_data(PONG);
pancotinho 7:37dc9ce68914 227 i=pac_size;
pancotinho 7:37dc9ce68914 228 }
pancotinho 7:37dc9ce68914 229 }
pancotinho 7:37dc9ce68914 230
pancotinho 7:37dc9ce68914 231 for(int i =0 ; i<pac_size ; i++) { //look for Pong in packet
pancotinho 7:37dc9ce68914 232 if ((buffer[i] =='P') && (buffer[i+1] =='o') && (buffer[i+2] =='n') && (buffer[i+3] =='g') ) {
pancotinho 7:37dc9ce68914 233 led1=1;
pancotinho 7:37dc9ce68914 234 led2=1;
pancotinho 7:37dc9ce68914 235 sx1272.writeRegister(0x12,255);//clear flags
pancotinho 8:856f7a8cc20c 236 pc.printf("pong received \n");
pancotinho 7:37dc9ce68914 237 wait(1);
pancotinho 7:37dc9ce68914 238 led1=0;
pancotinho 7:37dc9ce68914 239 led2=0;
pancotinho 7:37dc9ce68914 240
pancotinho 7:37dc9ce68914 241 i=pac_size;
pancotinho 7:37dc9ce68914 242 }
pancotinho 7:37dc9ce68914 243 }
pancotinho 7:37dc9ce68914 244
pancotinho 7:37dc9ce68914 245
pancotinho 7:37dc9ce68914 246 for(int i =0 ; i<pac_size ; i++) { //look for Reset in packet
pancotinho 7:37dc9ce68914 247 if ((buffer[i] =='R') && (buffer[i+1] =='e') && (buffer[i+2] =='s') && (buffer[i+3] =='e') && (buffer[i+4] =='t') ) {
pancotinho 7:37dc9ce68914 248 uint32_t *ptr;
pancotinho 7:37dc9ce68914 249 ptr = (uint32_t *)1073743132;// endereço gpregret 0x4000051C
pancotinho 7:37dc9ce68914 250 *ptr = 0xB1;//BOOTLOADER_DFU_START
pancotinho 7:37dc9ce68914 251 NVIC_SystemReset();
pancotinho 7:37dc9ce68914 252 }
pancotinho 7:37dc9ce68914 253 }
pancotinho 7:37dc9ce68914 254
pancotinho 7:37dc9ce68914 255 wait_ms(30);
pancotinho 7:37dc9ce68914 256 sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
pancotinho 7:37dc9ce68914 257 sx1272.writeRegister(REG_OP_MODE,133); //leitura continua
pancotinho 7:37dc9ce68914 258 led2=0;
pancotinho 8:856f7a8cc20c 259 pc.printf("Samira - print_packet () OUT ..\n");
pancotinho 7:37dc9ce68914 260
pancotinho 7:37dc9ce68914 261 }