initial commit
This commit is contained in:
172
project/ble_peripheral/ble_app_vivaMayo/full_agc.h
Normal file
172
project/ble_peripheral/ble_app_vivaMayo/full_agc.h
Normal file
@@ -0,0 +1,172 @@
|
||||
/*******************************************************************************
|
||||
* @file full_agc.h
|
||||
* @brief Automatic Gain Control (AGC) header for NIRS measurement system
|
||||
* @author Charles KWON <charleskwon@medithings.co.kr>
|
||||
* @version V2.0.0
|
||||
* @date 2025-12-31
|
||||
*
|
||||
* Copyright (c) 2025 Medithings Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This header defines the interface for the AGC module which automatically
|
||||
* calibrates photodetector gain for each LED-PD pair in the NIRS system.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _FULL_AGC_H__
|
||||
#define _FULL_AGC_H__
|
||||
|
||||
/*============================================================================*/
|
||||
/* Includes - Charles KWON */
|
||||
/*============================================================================*/
|
||||
#include "sdk_common.h"
|
||||
|
||||
/*============================================================================*/
|
||||
/* Configuration Constants - Charles KWON */
|
||||
/*============================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of photodetectors in the system
|
||||
* - Charles KWON
|
||||
*
|
||||
* Used to determine iteration count for AGC scanning
|
||||
*/
|
||||
#define PD_NO 1
|
||||
|
||||
/*============================================================================*/
|
||||
/* AGC Control Functions - Charles KWON */
|
||||
/*============================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Initialize and start AGC sequence for current phase
|
||||
* - Charles KWON
|
||||
*
|
||||
* Configures LED/PD lists based on which phase is active (A or B).
|
||||
* Must be called after setting full_agc_a_start or full_agc_b_start.
|
||||
*/
|
||||
void full_agc_start(void);
|
||||
|
||||
/**
|
||||
* @brief Terminate AGC sequence and perform cleanup
|
||||
* - Charles KWON
|
||||
*
|
||||
* Stops all AGC timers, uninitializes SAADC, restores HW I2C mode,
|
||||
* turns off all LEDs/PDs, and clears the processing flag.
|
||||
*/
|
||||
void full_agc_end(void);
|
||||
|
||||
/*============================================================================*/
|
||||
/* SAADC Functions - Charles KWON */
|
||||
/*============================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Initialize SAADC for AGC voltage measurement
|
||||
* - Charles KWON
|
||||
*
|
||||
* Configures single-ended ADC on AIN6 (FSA5157P6X analog switch output)
|
||||
* with double-buffering for continuous sampling during AGC.
|
||||
*/
|
||||
void full_agc_adc_init(void);
|
||||
|
||||
/**
|
||||
* @brief Uninitialize SAADC after AGC completion
|
||||
* - Charles KWON
|
||||
*
|
||||
* Releases SAADC resources for use by other modules.
|
||||
*/
|
||||
void full_agc_uninit(void);
|
||||
|
||||
/*============================================================================*/
|
||||
/* AGC Loop Timer Functions - Charles KWON */
|
||||
/*============================================================================*/
|
||||
|
||||
/**
|
||||
* @brief AGC measurement loop timer callback
|
||||
* - Charles KWON
|
||||
*
|
||||
* Periodically called to drive the AGC state machine.
|
||||
* Each call advances the measurement sequence by one step.
|
||||
*
|
||||
* @param[in] p_context Unused timer context parameter
|
||||
*/
|
||||
void full_agc_loop(void * p_context);
|
||||
|
||||
/**
|
||||
* @brief Start AGC measurement loop timer
|
||||
* - Charles KWON
|
||||
*
|
||||
* Begins periodic timer that drives the AGC state machine.
|
||||
*/
|
||||
void full_agc_timer_start(void);
|
||||
|
||||
/**
|
||||
* @brief Stop AGC measurement loop timer
|
||||
* - Charles KWON
|
||||
*/
|
||||
void full_agc_timer_stop(void);
|
||||
|
||||
/**
|
||||
* @brief Initialize AGC loop timer
|
||||
* - Charles KWON
|
||||
*
|
||||
* Creates the repeating timer used for AGC measurement sequencing.
|
||||
* Must be called during system initialization before starting AGC.
|
||||
*/
|
||||
void full_agc_timer_init(void);
|
||||
|
||||
/*============================================================================*/
|
||||
/* AGC Entry Point - Charles KWON */
|
||||
/*============================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Start full AGC measurement sequence
|
||||
* - Charles KWON
|
||||
*
|
||||
* Main entry point for AGC calibration. This function:
|
||||
* 1. Initializes AGC state variables
|
||||
* 2. Stops battery monitoring timer
|
||||
* 3. Configures Part A LED/PD lists
|
||||
* 4. Initializes SAADC
|
||||
* 5. Starts AGC loop timer
|
||||
*
|
||||
* AGC automatically transitions from Part A to Part B and
|
||||
* stores results in EEPROM upon completion.
|
||||
*/
|
||||
void full_agc_mesurement_start(void);
|
||||
|
||||
/*============================================================================*/
|
||||
/* AGC Data Transmission Functions - Charles KWON */
|
||||
/*============================================================================*/
|
||||
|
||||
/**
|
||||
* @brief AGC data transmission timer callback
|
||||
* - Charles KWON
|
||||
*
|
||||
* Handles sequenced transmission of AGC calibration results over BLE.
|
||||
* Data is sent in chunks to comply with BLE packet size limits.
|
||||
*
|
||||
* @param[in] p_context Unused timer context parameter
|
||||
*/
|
||||
void full_agc_send_loop(void * p_context);
|
||||
|
||||
/**
|
||||
* @brief Start AGC data transmission timer
|
||||
* - Charles KWON
|
||||
*/
|
||||
void full_agc_send_timer_start(void);
|
||||
|
||||
/**
|
||||
* @brief Stop AGC data transmission timer
|
||||
* - Charles KWON
|
||||
*/
|
||||
void full_agc_send_timer_stop(void);
|
||||
|
||||
/**
|
||||
* @brief Initialize AGC send timer
|
||||
* - Charles KWON
|
||||
*
|
||||
* Creates the single-shot timer used for sequenced BLE transmission.
|
||||
* Must be called during system initialization.
|
||||
*/
|
||||
void full_agc_send_timer_init(void);
|
||||
|
||||
#endif /* _FULL_AGC_H__ */
|
||||
Reference in New Issue
Block a user