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

181 lines
4.7 KiB
C

/*
* Lepton related utilities
*
* Contains utility and access functions for the Lepton.
*
* Copyright 2020 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>
//
// Lepton Utilities Constants
//
//
// Telemetry words
//
// From Row A (words 0-79)
#define LEP_TEL_REV 0
#define LEP_TEL_TC_LOW 1
#define LEP_TEL_TC_HIGH 2
#define LEP_TEL_STATUS_LOW 3
#define LEP_TEL_STATUS_HIGH 4
#define LEP_TEL_SN_0 5
#define LEP_TEL_SN_1 6
#define LEP_TEL_SN_2 7
#define LEP_TEL_SN_3 8
#define LEP_TEL_SN_4 9
#define LEP_TEL_SN_5 10
#define LEP_TEL_SN_6 11
#define LEP_TEL_SN_7 12
#define LEP_TEL_REV_0 13
#define LEP_TEL_REV_1 14
#define LEP_TEL_REV_2 15
#define LEP_TEL_REV_3 16
#define LEP_TEL_FC_LOW 20
#define LEP_TEL_FC_HIGH 21
#define LEP_TEL_FRAME_MEAN 22
#define LEP_TEL_FPA_T_CNT 23
#define LEP_TEL_FPA_T_K100 24
#define LEP_TEL_HSE_T_CNT 25
#define LEP_TEL_HSE_T_K100 26
#define LEP_TEL_LAST_FPA_T 29
#define LEP_TEL_LAST_TC_LOW 30
#define LEP_TEL_LAST_TC_HIGH 31
#define LEP_TEL_LAST_HST_T 32
#define LEP_TEL_AGC_ROI_0 34
#define LEP_TEL_AGC_ROI_1 35
#define LEP_TEL_AGC_ROI_2 36
#define LEP_TEL_AGC_ROI_3 37
#define LEP_TEL_AGC_CL_HIGH 38
#define LEP_TEL_AGC_CL_LOW 39
#define LEP_TEL_VID_FMT_LOW 72
#define LEP_TEL_VID_FMT_HIGH 73
#define LEP_TEL_FFC_FR_LOG2 74
// From Row B (words 80-159)
#define LEP_TEL_EMISSIVITY 99
#define LEP_TEL_BG_T_K100 100
#define LEP_TEL_ATM_TRANS 101
#define LEP_TEL_ATM_T_K100 102
#define LEP_TEL_WND_TRANS 103
#define LEP_TEL_WND_REFL 104
#define LEP_TEL_WND_T_K100 105
#define LEP_TEL_WND_REFL_T_K100 106
// From Row C (words 160-239)
#define LEP_TEL_GAIN_MODE 165
#define LEP_TEL_EFF_GAIN_MODE 166
#define LEP_TEL_GAIN_MODE_DES 167
#define LEP_TEL_GAIN_TH_H2LC 168
#define LEP_TEL_GAIN_TH_L2HC 169
#define LEP_TEL_GAIN_TH_H2LK 170
#define LEP_TEL_GAIN_TH_L2HK 171
#define LEP_TEL_GAIN_POP_H2L 174
#define LEP_TEL_GAIN_POP_L2H 175
#define LEP_TEL_GAIN_MODE_ROI_0 182
#define LEP_TEL_GAIN_MODE_ROI_1 183
#define LEP_TEL_GAIN_MODE_ROI_2 184
#define LEP_TEL_GAIN_MODE_ROI_3 185
#define LEP_TEL_TLIN_ENABLE 208
#define LEP_TEL_TLIN_RES 209
#define LEP_TEL_SPOT_MEAN 210
#define LEP_TEL_SPOT_MAX 211
#define LEP_TEL_SPOT_MIN 212
#define LEP_TEL_SPOT_POP 213
#define LEP_TEL_SPOT_Y1 214
#define LEP_TEL_SPOT_X1 215
#define LEP_TEL_SPOT_Y2 216
#define LEP_TEL_SPOT_X2 217
//
// Telemetry Status DWORD mask
//
#define LEP_STATUS_FFC_DESIRED 0x00000008
#define LEP_STATUS_FFC_STATE 0x00000030
#define LEP_STATUS_AGC_STATE 0x00001000
#define LEP_STATUS_SHTR_LO 0x00008000
#define LEP_STATUS_OT_IMM 0x00100000
//
// Telemetry Status FFC State
//
#define LEP_FFC_STATE_IDLE 0x00000000
#define LEP_FFC_STATE_IMM 0x00000010
#define LEP_FFC_STATE_RUN 0x00000020
#define LEP_FFC_STATE_CMPL 0x00000030
//
// Lepton Types
//
#define LEP_TYPE_3_5 0
#define LEP_TYPE_3_0 1
#define LEP_TYPE_3_1 2
#define LEP_TYPE_UNK 3
//
// Lepton Gain mode
//
#define LEP_GAIN_HIGH 0
#define LEP_GAIN_LOW 1
#define LEP_GAIN_AUTO 2
//
// Lepton Reset mode
//
#define LEP_RESET_ON 0
#define LEP_RESET_OFF 1
//
// Lepton Power mode
//
#define LEP_POWER_ON 1
#define LEP_POWER_OFF 0
//
// Lepton configuration
//
typedef struct {
bool agc_set_enabled; // Set when agc_enabled
int emissivity; // Integer percent 1 - 100
int gain_mode; // LEP_GAIN_HIGH / LEP_GAIN_LOW / LEP_GAIN_AUTO
} lepton_config_t;
extern lepton_config_t LEP_CONFIG;
//
// Lepton Utilities API
//
bool lepton_init();
bool lepton_is_radiometric();
int lepton_get_model();
void lepton_agc(bool en);
void lepton_ffc();
void lepton_gain_mode(uint8_t mode);
void lepton_spotmeter(uint16_t r1, uint16_t c1, uint16_t r2, uint16_t c2);
void lepton_emissivity(uint16_t e);
uint32_t lepton_get_tel_status(uint16_t* tel_buf);
float lepton_kelvin_to_C(uint32_t k, float lep_res);