121 lines
No EOL
2.8 KiB
C
Executable file
121 lines
No EOL
2.8 KiB
C
Executable file
#ifndef ONEWIRE_H
|
|
#define ONEWIRE_H
|
|
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/semphr.h"
|
|
#include "driver/gpio.h"
|
|
#include "esp_types.h"
|
|
#include "esp_err.h"
|
|
|
|
#define _ONEWIRE_WRITE1_LOW 6
|
|
#define _ONEWIRE_WRITE1_WAIT 64
|
|
#define _ONEWIRE_WRITE0_LOW 60
|
|
#define _ONEWIRE_WRITE0_WAIT 10
|
|
#define _ONEWIRE_READ_WAIT 9
|
|
#define _ONEWIRE_READ_RECOVERY 55
|
|
#define _ONEWIRE_RESET_WAIT 480
|
|
#define _ONEWIRE_PRESENCE_WAIT 70
|
|
#define _ONEWIRE_RESET_RECOVERY 410
|
|
|
|
#define _BLOCK_TIME pdMS_TO_TICKS(1000)
|
|
#define _SEMFAIL_MSG "Failed to obtain semaphore. (%s)"
|
|
|
|
static const char *TAG_ONEWIRE = "ONEWIRE";
|
|
|
|
typedef enum {
|
|
_ROM_READ = 0x33,
|
|
_ROM_SEARCH = 0xF0,
|
|
_ROM_MATCH = 0x55,
|
|
_ROM_SKIP = 0xCC
|
|
} onewire_rom_commands_t;
|
|
|
|
typedef struct {
|
|
gpio_num_t pin;
|
|
SemaphoreHandle_t mutex;
|
|
} onewire_bus_handle_t;
|
|
|
|
/**
|
|
* @brief Configure gpio pins for onewire communication
|
|
*
|
|
* Set `custom_config` to NULL for default config.
|
|
*
|
|
* @param pin Bus pin
|
|
* @param custom_config Custom gpio config
|
|
*
|
|
* @retval 1: Success
|
|
* @retval 0: Incorrect pin or gpio configuration failed (Logs tells which happened)
|
|
*/
|
|
uint8_t onewire_configure_gpio(gpio_num_t pin, gpio_config_t *custom_config);
|
|
|
|
/**
|
|
* @brief Initalize onewire bus
|
|
*
|
|
* Set `custom_config` to NULL for default config.
|
|
* @warning MUST be called before any other library function!
|
|
*
|
|
* @param bus Bus handle
|
|
* @param pin Bus pin
|
|
* @param custom_config Custom gpio config
|
|
*
|
|
* @retval 1: Success
|
|
* @retval 0: `bus` is NULL or gpio configuration failed (Logs tells which happened)
|
|
*/
|
|
uint8_t onewire_init(onewire_bus_handle_t *bus, gpio_num_t bus_pin, gpio_config_t *custom_config);
|
|
|
|
/**
|
|
* @brief Send reset pulse
|
|
*
|
|
* @param bus Bus handle
|
|
*
|
|
* @retval 1: Success (device sent presence pulse)
|
|
* @retval -1: Failed to obtain semaphore for gpio handling
|
|
* @retval 0: Device failed to return presence pulse
|
|
*/
|
|
uint8_t onewire_reset(onewire_bus_handle_t *bus);
|
|
|
|
/**
|
|
* @brief Write bit
|
|
*
|
|
* @param bus Bus handle
|
|
* @param bit Bit to send
|
|
*/
|
|
void onewire_write_bit(onewire_bus_handle_t *bus, uint8_t bit);
|
|
|
|
/**
|
|
* @brief Write byte
|
|
*
|
|
* @param bus Bus handle
|
|
* @param bit Byte to send
|
|
*/
|
|
void onewire_write_byte(onewire_bus_handle_t *bus, uint8_t byte);
|
|
|
|
/**
|
|
* @brief Read bit
|
|
*
|
|
* @param bus Bus handle
|
|
*
|
|
* @retval 1: Device returned 1
|
|
* @retval 0: Device returned 0
|
|
* @retval -1: Failed to obtain semaphore for gpio handling
|
|
*/
|
|
uint8_t onewire_read_bit(onewire_bus_handle_t *bus);
|
|
|
|
/**
|
|
* @brief Read bit
|
|
*
|
|
* @param bus Bus handle
|
|
*
|
|
* @return Byte returned by device
|
|
*/
|
|
uint8_t onewire_read_byte(onewire_bus_handle_t *bus);
|
|
|
|
/**
|
|
* @brief Send command to device
|
|
*
|
|
* @param bus Bus handle
|
|
* @param command Onewire rom command
|
|
*
|
|
*/
|
|
void onewire_send_command(onewire_bus_handle_t *bus, onewire_rom_commands_t command);
|
|
|
|
#endif |