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

75 lines
2.3 KiB
C

/*
* Lepton VoSPI Module
*
* Contains the functions to get frames from a Lepton 3.5 via its SPI port.
* Optionally supports collecting telemetry when enabled as a footer (does not
* support telemetry enabled as a header).
*
* Copyright 2020-2022 Dan Julio
*
* This file is part of tCam.
*
* tCam is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* tCam is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with tCam. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "lepton_system.h"
//
// VoSPI Constants
//
// LEP_FRAME_USEC is the per-frame period from the Lepton (interrupt rate)
#define LEP_FRAME_USEC 9450
// LEP_MAX_FRAME_XFER_WAIT_USEC specifies the maximum time we should wait in
// vospi_transfer_segment() to read a valid frame. It should be LEP_FRAME_USEC -
// (maximum ISR latency + transfer_packet() code path overhead)
// than LEP_FRAME_USEC - maximum ISR latency)
#define LEP_MAX_FRAME_XFER_WAIT_USEC 9250
#define LEP_WIDTH 160
#define LEP_HEIGHT 120
#define LEP_NUM_PIXELS (LEP_WIDTH * LEP_HEIGHT)
#define LEP_PKT_LENGTH 164
// Telemetry related
#define LEP_TEL_PACKETS 3
#define LEP_TEL_PKT_LEN (LEP_PKT_LENGTH - 4)
#define LEP_TEL_WORDS (LEP_TEL_PACKETS * LEP_TEL_PKT_LEN / 2)
// Dynamic values depending if telemetry is included or not
#define LEP_TEL_PKTS_PER_SEG 61
#define LEP_NOTEL_PKTS_PER_SEG 60
#define LEP_TEL_WORDS_PER_SEG (LEP_TEL_PKTS_PER_SEG * LEP_WIDTH / 2)
#define LEP_NOTEL_WORDS_PER_SEG (LEP_NOTEL_PKTS_PER_SEG * LEP_WIDTH / 2)
/* Lepton frame error return */
enum LeptonReadError {
NONE, DISCARD, SEGMENT_ERROR, ROW_ERROR, SEGMENT_INVALID
};
//
// VoSPI API
//
int vospi_init();
bool vospi_transfer_segment(uint64_t vsyncDetectedUsec);
void vospi_get_frame(lep_buffer_t* sys_bufP);
void vospi_include_telem(bool en);