Work on ESP32 compatibility
This commit is contained in:
		
							parent
							
								
									2e8525c601
								
							
						
					
					
						commit
						a0af475c31
					
				
							
								
								
									
										4
									
								
								Config.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Config.h
									
									
									
									
									
								
							@ -79,6 +79,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		#define EEPROM_SIZE 1024
 | 
							#define EEPROM_SIZE 1024
 | 
				
			||||||
		#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
 | 
							#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#define GPS_BAUD_RATE 9600
 | 
				
			||||||
 | 
							#define PIN_GPS_TX 12
 | 
				
			||||||
 | 
							#define PIN_GPS_RX 34
 | 
				
			||||||
	#endif
 | 
						#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#define eeprom_addr(a) (a+EEPROM_OFFSET)
 | 
						#define eeprom_addr(a) (a+EEPROM_OFFSET)
 | 
				
			||||||
 | 
				
			|||||||
@ -34,7 +34,7 @@ void setup() {
 | 
				
			|||||||
    delay(500);
 | 
					    delay(500);
 | 
				
			||||||
    EEPROM.begin(EEPROM_SIZE);
 | 
					    EEPROM.begin(EEPROM_SIZE);
 | 
				
			||||||
    // TODO: Check this
 | 
					    // TODO: Check this
 | 
				
			||||||
    //Serial.setRxBufferSize(CONFIG_UART_BUFFER_SIZE);
 | 
					    Serial.setRxBufferSize(CONFIG_UART_BUFFER_SIZE);
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Seed the PRNG
 | 
					  // Seed the PRNG
 | 
				
			||||||
@ -71,13 +71,15 @@ void setup() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  #if MCU_VARIANT == MCU_ESP32
 | 
					  #if MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
    // ESP32-specific initialisation
 | 
					    // ESP32-specific initialisation
 | 
				
			||||||
    // The WDT is disabled for now. This
 | 
					    Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, PIN_GPS_RX, PIN_GPS_TX);
 | 
				
			||||||
    // should be re-enabled as soon as any
 | 
					    
 | 
				
			||||||
    // Core0-related features are used
 | 
					    // rtc_wdt_protect_off();
 | 
				
			||||||
    rtc_wdt_protect_off();
 | 
					 | 
				
			||||||
    rtc_wdt_disable();
 | 
					 | 
				
			||||||
    // rtc_wdt_set_stage(RTC_WDT_STAGE0, RTC_WDT_STAGE_ACTION_RESET_SYSTEM);
 | 
					    // rtc_wdt_set_stage(RTC_WDT_STAGE0, RTC_WDT_STAGE_ACTION_RESET_SYSTEM);
 | 
				
			||||||
    // rtc_wdt_set_time(RTC_WDT_STAGE0, 25);
 | 
					    // rtc_wdt_set_time(RTC_WDT_STAGE0, 25);
 | 
				
			||||||
 | 
					    // rtc_wdt_protect_on();
 | 
				
			||||||
 | 
					    // rtc_wdt_enable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    kiss_indicate_reset();
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Validate board health, EEPROM and config
 | 
					  // Validate board health, EEPROM and config
 | 
				
			||||||
@ -108,7 +110,27 @@ inline void kiss_write_packet() {
 | 
				
			|||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline void getPacketData(int len) {
 | 
				
			||||||
 | 
					  while (len-- && read_len < MTU) {
 | 
				
			||||||
 | 
					    pbuf[read_len++] = LoRa.read();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
 | 
					  portMUX_TYPE isr_lock = portMUX_INITIALIZER_UNLOCKED;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool handling_packet = false;
 | 
				
			||||||
void ISR_VECT receive_callback(int packet_size) {
 | 
					void ISR_VECT receive_callback(int packet_size) {
 | 
				
			||||||
 | 
					  #if MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
 | 
					    portENTER_CRITICAL_ISR(&isr_lock);
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #if MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
 | 
					  if (!handling_packet) {
 | 
				
			||||||
 | 
					    handling_packet = true;
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!promisc) {
 | 
					    if (!promisc) {
 | 
				
			||||||
      // The standard operating mode allows large
 | 
					      // The standard operating mode allows large
 | 
				
			||||||
      // packets with a payload up to 500 bytes,
 | 
					      // packets with a payload up to 500 bytes,
 | 
				
			||||||
@ -132,6 +154,7 @@ void ISR_VECT receive_callback(int packet_size) {
 | 
				
			|||||||
        #endif
 | 
					        #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        getPacketData(packet_size);
 | 
					        getPacketData(packet_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      } else if (isSplitPacket(header) && seq == sequence) {
 | 
					      } else if (isSplitPacket(header) && seq == sequence) {
 | 
				
			||||||
        // This is the second part of a split
 | 
					        // This is the second part of a split
 | 
				
			||||||
        // packet, so we add it to the buffer
 | 
					        // packet, so we add it to the buffer
 | 
				
			||||||
@ -145,6 +168,7 @@ void ISR_VECT receive_callback(int packet_size) {
 | 
				
			|||||||
        getPacketData(packet_size);
 | 
					        getPacketData(packet_size);
 | 
				
			||||||
        seq = SEQ_UNSET;
 | 
					        seq = SEQ_UNSET;
 | 
				
			||||||
        ready = true;
 | 
					        ready = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      } else if (isSplitPacket(header) && seq != sequence) {
 | 
					      } else if (isSplitPacket(header) && seq != sequence) {
 | 
				
			||||||
        // This split packet does not carry the
 | 
					        // This split packet does not carry the
 | 
				
			||||||
        // same sequence id, so we must assume
 | 
					        // same sequence id, so we must assume
 | 
				
			||||||
@ -159,6 +183,7 @@ void ISR_VECT receive_callback(int packet_size) {
 | 
				
			|||||||
        #endif
 | 
					        #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        getPacketData(packet_size);
 | 
					        getPacketData(packet_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      } else if (!isSplitPacket(header)) {
 | 
					      } else if (!isSplitPacket(header)) {
 | 
				
			||||||
        // This is not a split packet, so we
 | 
					        // This is not a split packet, so we
 | 
				
			||||||
        // just read it and set the ready
 | 
					        // just read it and set the ready
 | 
				
			||||||
@ -211,11 +236,19 @@ void ISR_VECT receive_callback(int packet_size) {
 | 
				
			|||||||
        kiss_write_packet();
 | 
					        kiss_write_packet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      #else
 | 
					      #else
 | 
				
			||||||
      // Promiscous mode is not supported on ESP32 for now
 | 
					 | 
				
			||||||
      getPacketData(packet_size);
 | 
					 | 
				
			||||||
        read_len = 0;
 | 
					        read_len = 0;
 | 
				
			||||||
 | 
					        getPacketData(packet_size);
 | 
				
			||||||
 | 
					        packet_ready = true;
 | 
				
			||||||
 | 
					      #endif
 | 
				
			||||||
 | 
					    #if MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    handling_packet = false;
 | 
				
			||||||
    #endif
 | 
					    #endif
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #if MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
 | 
					    portEXIT_CRITICAL_ISR(&isr_lock);
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -747,7 +780,7 @@ void serial_poll() {
 | 
				
			|||||||
#if MCU_VARIANT != MCU_ESP32
 | 
					#if MCU_VARIANT != MCU_ESP32
 | 
				
			||||||
  #define MAX_CYCLES 20
 | 
					  #define MAX_CYCLES 20
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
  #define MAX_CYCLES 1
 | 
					  #define MAX_CYCLES 10
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
void buffer_serial() {
 | 
					void buffer_serial() {
 | 
				
			||||||
  if (!serial_buffering) {
 | 
					  if (!serial_buffering) {
 | 
				
			||||||
@ -768,6 +801,14 @@ void buffer_serial() {
 | 
				
			|||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #if MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
 | 
					      // Discard GPS data for now
 | 
				
			||||||
 | 
					      c = 0;
 | 
				
			||||||
 | 
					      while (c < MAX_CYCLES && Serial1.available()) {
 | 
				
			||||||
 | 
					        uint8_t void_c = Serial1.read();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    serial_buffering = false;
 | 
					    serial_buffering = false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								Utilities.h
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								Utilities.h
									
									
									
									
									
								
							@ -31,8 +31,8 @@ uint8_t boot_vector = 0x00;
 | 
				
			|||||||
	void led_tx_on()  { digitalWrite(pin_led_tx, HIGH); }
 | 
						void led_tx_on()  { digitalWrite(pin_led_tx, HIGH); }
 | 
				
			||||||
	void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
 | 
						void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
 | 
				
			||||||
#elif MCU_VARIANT == MCU_ESP32
 | 
					#elif MCU_VARIANT == MCU_ESP32
 | 
				
			||||||
	void led_rx_on()  { digitalWrite(pin_led_rx, LOW); }
 | 
						void led_rx_on()  { digitalWrite(pin_led_rx, HIGH); }
 | 
				
			||||||
	void led_rx_off() {	digitalWrite(pin_led_rx, HIGH); }
 | 
						void led_rx_off() {	digitalWrite(pin_led_rx, LOW); }
 | 
				
			||||||
	void led_tx_on()  { digitalWrite(pin_led_tx, LOW); }
 | 
						void led_tx_on()  { digitalWrite(pin_led_tx, LOW); }
 | 
				
			||||||
	void led_tx_off() { digitalWrite(pin_led_tx, HIGH); }
 | 
						void led_tx_off() { digitalWrite(pin_led_tx, HIGH); }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -216,6 +216,13 @@ void escapedSerialWrite(uint8_t byte) {
 | 
				
			|||||||
    Serial.write(byte);
 | 
					    Serial.write(byte);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void kiss_indicate_reset() {
 | 
				
			||||||
 | 
						Serial.write(FEND);
 | 
				
			||||||
 | 
						Serial.write(CMD_RESET);
 | 
				
			||||||
 | 
						Serial.write(CMD_RESET_BYTE);
 | 
				
			||||||
 | 
						Serial.write(FEND);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void kiss_indicate_error(uint8_t error_code) {
 | 
					void kiss_indicate_error(uint8_t error_code) {
 | 
				
			||||||
	Serial.write(FEND);
 | 
						Serial.write(FEND);
 | 
				
			||||||
	Serial.write(CMD_ERROR);
 | 
						Serial.write(CMD_ERROR);
 | 
				
			||||||
@ -389,12 +396,6 @@ inline uint8_t packetSequence(uint8_t header) {
 | 
				
			|||||||
	return header >> 4;
 | 
						return header >> 4;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline void getPacketData(int len) {
 | 
					 | 
				
			||||||
	while (len--) {
 | 
					 | 
				
			||||||
		pbuf[read_len++] = LoRa.read();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void setSpreadingFactor() {
 | 
					void setSpreadingFactor() {
 | 
				
			||||||
	if (radio_online) LoRa.setSpreadingFactor(lora_sf);
 | 
						if (radio_online) LoRa.setSpreadingFactor(lora_sf);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user