Debug Serial para programa resetar o buffer quando houver tamanhos errados na mensagem
Dependencies: pulga-lorawan-drv PingPong-P2P-ClickButtonToWork-SX1272
Diff: lora.cpp
- Revision:
- 7:37dc9ce68914
- Child:
- 8:856f7a8cc20c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lora.cpp Fri Mar 19 20:26:32 2021 +0000 @@ -0,0 +1,255 @@ + #include "lora.h" + + +DigitalOut led1(P1_13); +DigitalOut led2(P1_14); + +uint8_t buffer[255]; +uint8_t message[255]; +uint8_t message_pong[]="Pong"; +uint8_t message_ping[]="Ping"; + +int e; +int cont =0; +uint8_t r_size; +int loraMode=LORAMODE; + + + + //////////////////////////////////////// +// SETUP SX1272 initialisation +//////////////////////////////////////// +void setup() +{ + + + printf("------Coragem LoRa temperature sensor -------------\n"); + //sx1272.ON(); // Power ON the module + + int error_config_sx1272=0; + + // Set transmission mode and print the result + e = sx1272.setMode(loraMode); + printf("Mode: %d\n",loraMode); + if (e) error_config_sx1272=1; + printf("Setting Mode: state %d\n",e); + + // enable carrier sense + sx1272._enableCarrierSense=true; + + // for LOW POWER + sx1272._RSSIonSend=false; + + + // Select frequency channel + e = sx1272.setChannel(DEFAULT_CHANNEL); + if (e) error_config_sx1272=1; + printf("Setting Channel: state %d\n",e); + + // Select amplifier line; PABOOST or RFO +// #ifdef PABOOST +// printf("pabboost\n"); +// sx1272._needPABOOST=true; +// // previous way for setting output power +// // powerLevel='x'; +// #else +// // previous way for setting output power +// // powerLevel='M'; +// #endif + + // previous way for setting output power + // e = sx1272.setPower(powerLevel); + + e = sx1272.setPowerDBM((uint8_t)MAX_DBM); + if (e) error_config_sx1272=1; + printf("Setting Power: state %d\n",e); + + // Set the node address and print the result + e = sx1272.setNodeAddress(node_addr); + if (e) error_config_sx1272=1; + printf("Setting node addr: state %d\n",e); + + // Print a success message + if (!error_config_sx1272) printf("SX1272 successfully configured\n"); + else printf("ERROR CONFIGURATION SX1272\n"); + + wait_ms(400); +} +void send_packet (uint8_t *payload, uint8_t length8) // envia pacote +{ + printf("Samira - send_packet ( ) - ENTER..\n"); + + //write on FIFO + sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags + sx1272.writeRegister(REG_OP_MODE, LORA_STANDBY_MODE); // Stdby LoRa mode to write in FIFO + sx1272.writeRegister(REG_PAYLOAD_LENGTH_LORA, length8); + sx1272.writeRegister(REG_FIFO_TX_BASE_ADDR,0x00); + sx1272.writeRegister(REG_FIFO_ADDR_PTR,0x00); + + for(unsigned int i = 0; i <= length8; i++) { + printf("Samira - send_packet ( ) - FOR..\n"); + sx1272.writeRegister(REG_FIFO, payload[i]); // Writing the payload in FIFO + } + + //________________Send Data__________________ + sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags + sx1272.writeRegister(REG_OP_MODE, LORA_TX_MODE); // LORA mode - Tx + + unsigned long exitTime = millis()+2000;//2 segundos para sair do for + unsigned long Time= millis(); + char value = sx1272.readRegister(REG_IRQ_FLAGS); +/* +int bitCounter = 0; + while ((bitRead(value, 3) == 0) && (Time < exitTime)) { + bitCounter ++; + printf("bitCounter = %d", bitCounter); + printf("\n"); + value=sx1272.readRegister(REG_IRQ_FLAGS); + Time= millis(); + wait_ms(50); + } + */ + printf("Samira - send_packet ( ) - OUT..\n"); + //wait_ms(50); + +} + +void send_data(int mode) //data predefined +{ + led1=1; + led2=1; + printf("Samira - enter send_data () ..\n"); + printf("number=%d\n",cont); + sx1272.writeRegister(REG_OP_MODE,129);//standby + if (mode == DATA ) { + printf("Samira - send_data (DATA) ..\n"); + r_size=sprintf((char*)message,"RANDOM MESSAGE"); + send_packet(message,r_size); + printf("packet send :\n%s\nrsize=%d\n",message,r_size); +// //samira// it is sending sensors data + + + //============= internet of turtles ============= +// sprintf(float_breathing_time,"%04.2f", last_breathing_time); +// sprintf(float_diving_time,"%04.2f", last_diving_time); +// 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); + // ============================================== + + //size=sprintf((char*)message,"\\!#%s°C_%shPa_%s%%",float_temp,float_press,float_hum); + + // send_packet(message,r_size); + // sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR,/* (uint8_t*)*/message, r_size); + // printf("packet send :\n%s\nrsize=%d\n",message,r_size); + + + } else if (mode == PING ) { + + printf("Samira - send_data (PING) ..\n"); + //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR, message_ping, sizeof(message_ping)); + send_packet(message_ping,sizeof(message_ping)); + printf("packet sent : %s ",message_ping); + printf("packet size : %d \n",sizeof(message_ping));//samira// + printf("waiting for POng ... \n"); + + + } else if (mode == PONG ) { + printf("sending a PONG ... "); + //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR, message_pong, sizeof(message_pong)); + send_packet(message_pong,sizeof(message_pong)); + printf("packet send :\n%s\n",message_pong); + } + + led1=0; + led2=0; + //wait_ms(300); + + sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags + sx1272.writeRegister(REG_OP_MODE,133); //leitura continua + cont++; +} +void send_msg(char *msg_lora) //data predefined +{ + led1=1; + led2=1; + uint8_t *msg; + msg = (uint8_t*)msg_lora; + sx1272.writeRegister(REG_OP_MODE,129);//standby + //send_packet(msg_lora,sizeof(msg_lora)); + //uint8_t + //printf("packet send :\n%s\nrsize=%d\n",msg, sizeof(msg)); + //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR,/* (uint8_t*)*/msg, sizeof(msg)); + led1=0; + led2=0; + + sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags + sx1272.writeRegister(REG_OP_MODE,133); //leitura continua + cont++; +} + +void print_packet() +{ + + printf("Samira - print_packet () Enter ..\n"); + //led2=1; + sx1272.writeRegister(REG_OP_MODE,129);//standby + + uint8_t pac_size; + + sx1272.writeRegister(REG_FIFO_ADDR_PTR,sx1272.readRegister(REG_FIFO_RX_CURRENT_ADDR));//set fifo pointer to read packet + pac_size = sx1272.readRegister(REG_RX_NB_BYTES);//read size of packet + printf("Samira - print_packet () pac_size = %d ..\n", pac_size); + for(int i =0 ; i<pac_size ; i++) { //print packet + buffer[i]=sx1272.readRegister(REG_FIFO); + /* if (buffer[i]== '\n') printf(" \\n"); + if (buffer[i]== 0x0B) printf("tab");*/ + printf("%c",buffer[i]);//print packet + } + printf("\n"); + + + for(int i =0 ; i<pac_size ; i++) { //look for Ping in packet + if ((buffer[i] =='P') && (buffer[i+1] =='i') && (buffer[i+2] =='n') && (buffer[i+3] =='g') ) { + led1=1; + led2=1; + wait(1); + sx1272.writeRegister(0x12,255);//clear flags + led1=0; + led2=0; + printf("There is a wait before sending PONG \n"); + printf("sending PONG"); + send_data(PONG); + i=pac_size; + } + } + + for(int i =0 ; i<pac_size ; i++) { //look for Pong in packet + if ((buffer[i] =='P') && (buffer[i+1] =='o') && (buffer[i+2] =='n') && (buffer[i+3] =='g') ) { + led1=1; + led2=1; + sx1272.writeRegister(0x12,255);//clear flags + printf("pong received \n"); + wait(1); + led1=0; + led2=0; + + i=pac_size; + } + } + + + for(int i =0 ; i<pac_size ; i++) { //look for Reset in packet + if ((buffer[i] =='R') && (buffer[i+1] =='e') && (buffer[i+2] =='s') && (buffer[i+3] =='e') && (buffer[i+4] =='t') ) { + uint32_t *ptr; + ptr = (uint32_t *)1073743132;// endereço gpregret 0x4000051C + *ptr = 0xB1;//BOOTLOADER_DFU_START + NVIC_SystemReset(); + } + } + + wait_ms(30); + sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags + sx1272.writeRegister(REG_OP_MODE,133); //leitura continua + led2=0; + printf("Samira - print_packet () OUT ..\n"); + +} \ No newline at end of file