#ifndef LM75A_H
#define LM75A_H

#include "esp_err.h"  // Para o uso de tipos de erro do ESP-IDF, caso esteja utilizando.

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Inicializa o sensor LM75A.
 * 
 * Configura o sensor para leitura e define os pinos de comunicação.
 */
esp_err_t lm75a_init(void);

/**
 * @brief Desinicializa o sensor LM75A.
 * 
 * Libera os recursos usados pelo sensor.
 */
esp_err_t lm75a_deinit(void);

/**
 * @brief Lê a temperatura do LM75A.
 * 
 * @param show Se for 1, a temperatura será exibida em algum tipo de log ou interface. 
 *              Se for 0, o valor é apenas retornado sem exibição.
 * @return A temperatura lida em graus Celsius.
 */
float lm75a_read_temperature(int show);

/**
 * @brief Define o valor do limite de temperatura (T_OS) para o sensor LM75A.
 * 
 * @param tos O limite de temperatura de sobrecarga (T_OS) em graus Celsius.
 * @return ESP_OK em caso de sucesso ou código de erro se falhar.
 */
esp_err_t lm75a_set_tos(int tos);

/**
 * @brief Define o valor do limite de temperatura de histerese (T_HYS) para o sensor LM75A.
 * 
 * @param thys O limite de histerese de temperatura (T_HYS) em graus Celsius.
 * @return ESP_OK em caso de sucesso ou código de erro se falhar.
 */
esp_err_t lm75a_set_thys(int thys);

/**
 * @brief Obtém o limite de temperatura de sobrecarga (T_OS) do sensor LM75A.
 * 
 * @return O valor atual de T_OS em graus Celsius.
 */
int lm75a_get_tos(void);

/**
 * @brief Obtém o limite de temperatura de histerese (T_HYS) do sensor LM75A.
 * 
 * @return O valor atual de T_HYS em graus Celsius.
 */
int lm75a_get_thys(void);

/**
 * @brief Habilita ou desabilita a interrupção do LM75A.
 * 
 * @param en 1 para habilitar a interrupção, 0 para desabilitar.
 * @return ESP_OK em caso de sucesso ou código de erro se falhar.
 */
esp_err_t lm75a_set_int(int en);

/**
 * @brief Obtém o estado do pino OS (Overtemperature Shutdown) do LM75A.
 * 
 * @return 1 se o pino OS estiver ativo (indica que a temperatura de sobrecarga foi atingida), 
 *         0 caso contrário.
 */
int lm75a_get_osio(void);

#ifdef __cplusplus
}
#endif

#endif /* LM75A_H */
