2021-10-03 13:36:05 +03:00
|
|
|
/**
|
2022-01-05 19:10:18 +03:00
|
|
|
* @file furi_hal_ibutton.h
|
2021-10-03 13:36:05 +03:00
|
|
|
* iButton HAL API
|
|
|
|
*/
|
|
|
|
|
2021-08-08 21:03:25 +03:00
|
|
|
#pragma once
|
2021-10-03 13:36:05 +03:00
|
|
|
|
2021-08-08 21:03:25 +03:00
|
|
|
#include <stdbool.h>
|
2022-03-25 13:33:01 +03:00
|
|
|
#include <stdint.h>
|
2023-02-11 21:09:39 +03:00
|
|
|
#include <furi_hal_gpio.h>
|
2021-08-08 21:03:25 +03:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2022-03-25 13:33:01 +03:00
|
|
|
typedef void (*FuriHalIbuttonEmulateCallback)(void* context);
|
|
|
|
|
|
|
|
/** Initialize */
|
|
|
|
void furi_hal_ibutton_init();
|
|
|
|
|
|
|
|
void furi_hal_ibutton_emulate_start(
|
|
|
|
uint32_t period,
|
|
|
|
FuriHalIbuttonEmulateCallback callback,
|
|
|
|
void* context);
|
|
|
|
|
2023-02-11 21:09:39 +03:00
|
|
|
void furi_hal_ibutton_emulate_set_next(uint32_t period);
|
|
|
|
|
|
|
|
void furi_hal_ibutton_emulate_stop();
|
|
|
|
|
2022-03-29 16:01:56 +03:00
|
|
|
/**
|
2023-02-11 21:09:39 +03:00
|
|
|
* Sets the pin to normal mode (open collector), and sets it to float
|
2022-03-29 16:01:56 +03:00
|
|
|
*/
|
2023-02-11 21:09:39 +03:00
|
|
|
void furi_hal_ibutton_start_drive();
|
2022-03-29 16:01:56 +03:00
|
|
|
|
|
|
|
/**
|
2023-02-11 21:09:39 +03:00
|
|
|
* Sets the pin to normal mode (open collector), and clears pin EXTI interrupt.
|
|
|
|
* Used in EXTI interrupt context.
|
2022-03-29 16:01:56 +03:00
|
|
|
*/
|
2023-02-11 21:09:39 +03:00
|
|
|
void furi_hal_ibutton_start_drive_in_isr();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the pin to interrupt mode (EXTI interrupt on rise or fall), and sets it to float
|
|
|
|
*/
|
|
|
|
void furi_hal_ibutton_start_interrupt();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the pin to interrupt mode (EXTI interrupt on rise or fall), and clears pin EXTI interrupt.
|
|
|
|
* Used in EXTI interrupt context.
|
|
|
|
*/
|
|
|
|
void furi_hal_ibutton_start_interrupt_in_isr();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the pin to analog mode, and sets it to float
|
|
|
|
*/
|
|
|
|
void furi_hal_ibutton_stop();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Attach interrupt callback to iButton pin
|
|
|
|
* @param cb callback
|
|
|
|
* @param context context
|
|
|
|
*/
|
|
|
|
void furi_hal_ibutton_add_interrupt(GpioExtiCallback cb, void* context);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove interrupt callback from iButton pin
|
|
|
|
*/
|
|
|
|
void furi_hal_ibutton_remove_interrupt();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the pin to low
|
|
|
|
*/
|
|
|
|
void furi_hal_ibutton_pin_low();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the pin to high (float in iButton pin modes)
|
|
|
|
*/
|
|
|
|
void furi_hal_ibutton_pin_high();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get pin level
|
|
|
|
* @return true if level is high
|
|
|
|
* @return false if level is low
|
|
|
|
*/
|
|
|
|
bool furi_hal_ibutton_pin_get_level();
|
2022-03-29 16:01:56 +03:00
|
|
|
|
|
|
|
/**
|
2023-02-08 08:40:44 +03:00
|
|
|
* Set the pin to normal mode (open collector), and sets it to float
|
2022-03-29 16:01:56 +03:00
|
|
|
*/
|
2023-02-08 08:40:44 +03:00
|
|
|
void furi_hal_ibutton_pin_configure();
|
2022-03-29 16:01:56 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the pin to analog mode, and sets it to float
|
|
|
|
*/
|
2023-02-08 08:40:44 +03:00
|
|
|
void furi_hal_ibutton_pin_reset();
|
2021-08-08 21:03:25 +03:00
|
|
|
|
2022-03-29 16:01:56 +03:00
|
|
|
/**
|
2023-02-08 08:40:44 +03:00
|
|
|
* iButton write pin
|
|
|
|
* @param state true / false
|
2022-03-29 16:01:56 +03:00
|
|
|
*/
|
2023-02-08 08:40:44 +03:00
|
|
|
void furi_hal_ibutton_pin_write(const bool state);
|
2021-08-08 21:03:25 +03:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
2022-03-25 13:33:01 +03:00
|
|
|
#endif
|