Files
EmbeddedCameraIDF/main/lipton/lepton_system.cpp
2025-04-29 21:38:06 +02:00

82 lines
2.0 KiB
C++

#include "esp_system.h"
#include <stdlib.h>
#include "driver/spi_master.h"
#include "driver/spi_slave.h"
#include "lepton_system.h"
#include "lepton_utilities.h"
#include "i2c.h"
#include "vospi.h"
#include <cstring>
#include <Arduino.h>
// lepton image and telem buffer
lep_buffer_t rsp_lep_buffer;
/**
* Initialize the ESP32 GPIO and internal peripherals
*/
bool lepton_io_init()
{
esp_err_t ret;
spi_bus_config_t spi_buscfg;
printf("[LEP SYS] Lepton I/O Initialization\n");
// Attempt to initialize the I2C Master
ret = i2c_master_init(I2C_MASTER_SCL_PIN, I2C_MASTER_SDA_PIN);
if (ret != ESP_OK) {
printf("[LEP SYS] Error: I2C Master initialization failed\n");
return false;
}
// Attempt to initialize the SPI Master used by the lep_task
memset(&spi_buscfg, 0, sizeof(spi_bus_config_t));
spi_buscfg.miso_io_num=LEP_MISO_PIN;
spi_buscfg.mosi_io_num=-1;
spi_buscfg.sclk_io_num=LEP_SCK_PIN;
spi_buscfg.max_transfer_sz=LEP_PKT_LENGTH;
spi_buscfg.quadwp_io_num=-1;
spi_buscfg.quadhd_io_num=-1;
if (spi_bus_initialize(LEP_SPI_HOST, &spi_buscfg, LEP_DMA_NUM) != ESP_OK) {
printf("[LEP SYS] Error: Lepton SPI initialization failed\n");
return false;
}
// initialize GPIO pins
pinMode(LEP_VSYNC_PIN, INPUT);
#ifdef LEP_RESET_PIN
pinMode(LEP_RESET_PIN, OUTPUT);
digitalWrite(LEP_RESET_PIN, LEP_RESET_ON);
delay(10);
digitalWrite(LEP_RESET_PIN, LEP_RESET_OFF);
#endif
return true;
}
/**
* Allocate lepton buffers on heap
*/
bool lepton_buffer_init()
{
printf("[LEP SYS] Buffer Allocation\n");
// Allocate the LEP/RSP task lepton frame and telemetry ping-pong buffers
rsp_lep_buffer.lep_bufferP = (uint8_t*)malloc(LEP_NUM_PIXELS*sizeof(uint8_t));
if (rsp_lep_buffer.lep_bufferP == NULL) {
printf("[LEP SYS] Error: malloc RSP lepton shared image buffer failed\n");
return false;
}
rsp_lep_buffer.lep_telemP = (uint16_t*)malloc(LEP_TEL_WORDS*sizeof(uint16_t));
if (rsp_lep_buffer.lep_telemP == NULL) {
printf("[LEP SYS] Error: malloc RSP lepton shared telemetry buffer failed\n");
return false;
}
return true;
}