Merge branch 'development' into dynaconsole
This commit is contained in:
		
						commit
						254fddd6e9
					
				
					 4 changed files with 100 additions and 57 deletions
				
			
		|  | @ -4,6 +4,7 @@ | ||||||
| // disable memory alignment
 | // disable memory alignment
 | ||||||
| #pragma pack(push, 1) | #pragma pack(push, 1) | ||||||
| typedef struct { | typedef struct { | ||||||
|  |   uint8_t id; | ||||||
|   uint8_t src[3]; |   uint8_t src[3]; | ||||||
|   uint8_t dst[3]; |   uint8_t dst[3]; | ||||||
|   uint8_t type; |   uint8_t type; | ||||||
|  | @ -35,6 +36,7 @@ enum lora_msg_type { | ||||||
|   ROUTING, |   ROUTING, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void send_message(lora32_cfg_t *lora, char *text); | void lorcomm_handle_receive(uint8_t size); | ||||||
|  | void lorcomm_send_message(lora32_cfg_t *lora, char *text); | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ int send(int argc, char **argv) { | ||||||
|     return 1; |     return 1; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   send_message((lora32_cfg_t*)send_args.lora, send_args.msg->sval[0]); |   lorcomm_send_message((lora32_cfg_t*)send_args.lora, send_args.msg->sval[0]); | ||||||
| 
 | 
 | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -3,18 +3,110 @@ | ||||||
| #include "esp_log.h" | #include "esp_log.h" | ||||||
| #include "esp32-lora.h" | #include "esp32-lora.h" | ||||||
| #include "lorcomm.h" | #include "lorcomm.h" | ||||||
|  | #include "main.h" | ||||||
| 
 | 
 | ||||||
| #define TAG "lorcomm" | #define TAG "lorcomm" | ||||||
| 
 | 
 | ||||||
| uint8_t mac[6] = {0}; | #define MSG_ID_TRACK    (16) | ||||||
| 
 | 
 | ||||||
| void send_message(lora32_cfg_t *lora, char *text) { | uint8_t mac[6] = {0}; | ||||||
|  | static uint8_t msg_id = 0; | ||||||
|  | uint8_t msg_track[MSG_ID_TRACK] = { 0 }; | ||||||
|  | 
 | ||||||
|  | void lorcomm_handle_receive(uint8_t size) { | ||||||
|  |   printf("packet size: %d\n", size); | ||||||
|  | 
 | ||||||
|  |   uint8_t *buf = malloc(size); | ||||||
|  |   lora_packet *packet = malloc(sizeof(lora_packet)); | ||||||
|  | 
 | ||||||
|  |   // get data from the lora driver
 | ||||||
|  |   lora32_read_data(&lora, buf); | ||||||
|  | 
 | ||||||
|  |   // copy buffer onto message headers
 | ||||||
|  |   memcpy(packet, buf, LORA_PACKET_HEADER_SIZE); | ||||||
|  |   ESP_LOGI(TAG, "[%02X:%02X:%02X] id: %02d type: %02X", packet->src[0], packet->src[1], packet->src[2], packet->id, packet->type); | ||||||
|  | 
 | ||||||
|  |   for(uint8_t i = 0; i < MSG_ID_TRACK; i++) { | ||||||
|  |     if(msg_track[i] == packet->id) { | ||||||
|  |       ESP_LOGI(TAG, "already seen packet, not relaying"); | ||||||
|  |       goto receive_cleanup; | ||||||
|  |     } else if(msg_track[i] == 0) { | ||||||
|  |       ESP_LOGI(TAG, "adding id to tracking"); | ||||||
|  | 
 | ||||||
|  |       // add id to array
 | ||||||
|  |       msg_track[i] = packet->id; | ||||||
|  |       // set next in queue to zero, rolling over as needed
 | ||||||
|  |       msg_track[(i + 1) % MSG_ID_TRACK] = 0; | ||||||
|  | 
 | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // update local msg id to incoming +1
 | ||||||
|  |   // this will give a rolling local area id
 | ||||||
|  |   if(packet->id < msg_id) { | ||||||
|  |     msg_id = packet->id + 1; | ||||||
|  | 
 | ||||||
|  |     // 0 is an invalid id
 | ||||||
|  |     if(msg_id == 0) msg_id = 1; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if(memcmp(packet->src, &mac[3], 3) == 0) { | ||||||
|  |     ESP_LOGI(TAG, "received own packet, done"); | ||||||
|  |     goto receive_cleanup; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if(packet->type == TEXT) { | ||||||
|  |     lora_msg *msg = malloc(sizeof(lora_msg)); | ||||||
|  |     memcpy(msg, buf + LORA_PACKET_HEADER_SIZE, LORA_MSG_HEADER_SIZE); | ||||||
|  | 
 | ||||||
|  |     // allocate memory for message payload
 | ||||||
|  |     msg->msg = malloc(msg->length); | ||||||
|  | 
 | ||||||
|  |     memcpy(msg->msg, buf + LORA_PACKET_HEADER_SIZE + LORA_MSG_HEADER_SIZE, msg->length); | ||||||
|  | 
 | ||||||
|  |     ESP_LOGI(TAG, "msg (len: %d): %s", msg->length, msg->msg); | ||||||
|  | 
 | ||||||
|  |     free(msg->msg); | ||||||
|  |     msg->msg = NULL; | ||||||
|  |     free(msg); | ||||||
|  |   } else if(packet->type == ROUTING) { | ||||||
|  |     // future stuff
 | ||||||
|  |   } else { | ||||||
|  |     ESP_LOGW(TAG, "Unknown packet type: %02X", packet->type); | ||||||
|  |     ESP_LOGW(TAG, "msg: %s", (char*)packet); | ||||||
|  | 
 | ||||||
|  |     goto receive_cleanup; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   vTaskDelay(3000/portTICK_PERIOD_MS); | ||||||
|  |   ESP_LOGI(TAG, "relaying message"); | ||||||
|  | 
 | ||||||
|  |   lora32_send(&lora, buf, size); | ||||||
|  | 
 | ||||||
|  | receive_cleanup: | ||||||
|  |   free(buf); | ||||||
|  | 
 | ||||||
|  |   lora32_enable_continuous_rx(&lora); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void lorcomm_send_message(lora32_cfg_t *lora, char *text) { | ||||||
|  |   // allocate and zero out packet and msg payload
 | ||||||
|   uint8_t len = strlen(text) + 1; |   uint8_t len = strlen(text) + 1; | ||||||
|   lora_packet packet = { 0 }; |   lora_packet packet = { 0 }; | ||||||
|   lora_msg msg = { 0 }; |   lora_msg msg = { 0 }; | ||||||
| 
 | 
 | ||||||
|  |   // set packet tracking id
 | ||||||
|  |   packet.id = msg_id; | ||||||
|  | 
 | ||||||
|  |   msg_id = msg_id + 1; | ||||||
|  |   if(msg_id == 0) msg_id = 1; | ||||||
|  | 
 | ||||||
|  |   // set src and dest (broadcast) addresses
 | ||||||
|   memcpy(packet.src, &mac[3], 3); |   memcpy(packet.src, &mac[3], 3); | ||||||
|   memset(packet.dst, 0xFF, 3); |   memset(packet.dst, 0xFF, 3); | ||||||
|  | 
 | ||||||
|  |   // indicate message payload
 | ||||||
|   packet.type = TEXT; |   packet.type = TEXT; | ||||||
|   packet.payload = malloc(LORA_PACKET_HEADER_SIZE + len); |   packet.payload = malloc(LORA_PACKET_HEADER_SIZE + len); | ||||||
| 
 | 
 | ||||||
|  | @ -31,6 +123,7 @@ void send_message(lora32_cfg_t *lora, char *text) { | ||||||
|   memcpy((uint8_t*)(send_buf + LORA_PACKET_HEADER_SIZE), (void*)&msg, LORA_MSG_HEADER_SIZE); |   memcpy((uint8_t*)(send_buf + LORA_PACKET_HEADER_SIZE), (void*)&msg, LORA_MSG_HEADER_SIZE); | ||||||
|   memcpy((uint8_t*)(send_buf + LORA_PACKET_HEADER_SIZE + LORA_MSG_HEADER_SIZE), (void*)msg.msg, len); |   memcpy((uint8_t*)(send_buf + LORA_PACKET_HEADER_SIZE + LORA_MSG_HEADER_SIZE), (void*)msg.msg, len); | ||||||
| 
 | 
 | ||||||
|  |   ESP_LOGI(TAG, "id: %02d", packet.id); | ||||||
|   ESP_LOGI(TAG, "src: [%02X:%02X:%02X]", packet.src[0], packet.src[1], packet.src[2]); |   ESP_LOGI(TAG, "src: [%02X:%02X:%02X]", packet.src[0], packet.src[1], packet.src[2]); | ||||||
|   ESP_LOGI(TAG, "dst: [%02X:%02X:%02X]", packet.dst[0], packet.dst[1], packet.dst[2]); |   ESP_LOGI(TAG, "dst: [%02X:%02X:%02X]", packet.dst[0], packet.dst[1], packet.dst[2]); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										54
									
								
								main/main.c
									
										
									
									
									
								
							
							
						
						
									
										54
									
								
								main/main.c
									
										
									
									
									
								
							|  | @ -36,58 +36,6 @@ void handle_lora_caddone(bool detected) { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void handle_lora_receive(uint8_t size) { |  | ||||||
|   printf("packet size: %d\n", size); |  | ||||||
| 
 |  | ||||||
|   uint8_t *buf = malloc(size); |  | ||||||
|   lora_packet *packet = malloc(sizeof(lora_packet)); |  | ||||||
| 
 |  | ||||||
|   // get data from the lora driver
 |  | ||||||
|   lora32_read_data(&lora, buf); |  | ||||||
| 
 |  | ||||||
|   // copy buffer onto message headers
 |  | ||||||
|   memcpy(packet, buf, LORA_PACKET_HEADER_SIZE); |  | ||||||
|   ESP_LOGI(TAG, "[%02X:%02X:%02X] type: %02X", packet->src[0], packet->src[1], packet->src[2], packet->type); |  | ||||||
| 
 |  | ||||||
|   if(memcmp(packet->src, &mac[3], 3) == 0) { |  | ||||||
|     ESP_LOGI(TAG, "received own packet, done"); |  | ||||||
|     goto receive_cleanup; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if(packet->type == TEXT) { |  | ||||||
|     lora_msg *msg = malloc(sizeof(lora_msg)); |  | ||||||
|     memcpy(msg, buf + LORA_PACKET_HEADER_SIZE, LORA_MSG_HEADER_SIZE); |  | ||||||
| 
 |  | ||||||
|     // allocate memory for message payload
 |  | ||||||
|     msg->msg = malloc(msg->length); |  | ||||||
| 
 |  | ||||||
|     memcpy(msg->msg, buf + LORA_PACKET_HEADER_SIZE + LORA_MSG_HEADER_SIZE, msg->length); |  | ||||||
| 
 |  | ||||||
|     ESP_LOGI(TAG, "msg (len: %d): %s", msg->length, msg->msg); |  | ||||||
| 
 |  | ||||||
|     free(msg->msg); |  | ||||||
|     msg->msg = NULL; |  | ||||||
|     free(msg); |  | ||||||
|   } else if(packet->type == ROUTING) { |  | ||||||
|     // future stuff
 |  | ||||||
|   } else { |  | ||||||
|     ESP_LOGW(TAG, "Unknown packet type: %02X", packet->type); |  | ||||||
|     ESP_LOGW(TAG, "msg: %s", (char*)packet); |  | ||||||
| 
 |  | ||||||
|     goto receive_cleanup; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   vTaskDelay(3000/portTICK_PERIOD_MS); |  | ||||||
|   ESP_LOGI(TAG, "relaying message"); |  | ||||||
| 
 |  | ||||||
|   lora32_send(&lora, buf, size); |  | ||||||
| 
 |  | ||||||
| receive_cleanup: |  | ||||||
|   free(buf); |  | ||||||
| 
 |  | ||||||
|   lora32_enable_continuous_rx(&lora); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void app_main(void) { | void app_main(void) { | ||||||
|   esp_err_t err = nvs_flash_init(); |   esp_err_t err = nvs_flash_init(); | ||||||
|   if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) { |   if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) { | ||||||
|  | @ -122,7 +70,7 @@ void app_main(void) { | ||||||
|   lora.reset = CONFIG_LORA32_RESET_PIN; |   lora.reset = CONFIG_LORA32_RESET_PIN; | ||||||
|   lora.useCRC = false; |   lora.useCRC = false; | ||||||
|   lora.fifoIdx = 0; |   lora.fifoIdx = 0; | ||||||
|   lora.receive = &handle_lora_receive; |   lora.receive = &lorcomm_handle_receive; | ||||||
|   lora.tx_done = &handle_lora_txdone; |   lora.tx_done = &handle_lora_txdone; | ||||||
|   //lora.cad_done = &handle_lora_caddone;
 |   //lora.cad_done = &handle_lora_caddone;
 | ||||||
|   //lora.cad_detected = &handle_lora_caddetected;
 |   //lora.cad_detected = &handle_lora_caddetected;
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue