2021-09-10 02:19:02 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <furi.h>
|
|
|
|
|
|
|
|
#include <stm32wbxx.h>
|
|
|
|
#include <stm32wbxx_ll_gpio.h>
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Input Related Constants */
|
2022-11-12 08:46:04 +00:00
|
|
|
#define INPUT_DEBOUNCE_TICKS 4
|
2021-09-10 02:19:02 +00:00
|
|
|
|
|
|
|
/* Input Keys */
|
|
|
|
typedef enum {
|
|
|
|
InputKeyUp,
|
|
|
|
InputKeyDown,
|
|
|
|
InputKeyRight,
|
|
|
|
InputKeyLeft,
|
|
|
|
InputKeyOk,
|
|
|
|
InputKeyBack,
|
2022-11-02 14:36:17 +00:00
|
|
|
InputKeyMAX, /**< Special value */
|
2021-09-10 02:19:02 +00:00
|
|
|
} InputKey;
|
|
|
|
|
|
|
|
/* Light */
|
|
|
|
typedef enum {
|
2022-06-09 07:33:46 +00:00
|
|
|
LightRed = (1 << 0),
|
|
|
|
LightGreen = (1 << 1),
|
|
|
|
LightBlue = (1 << 2),
|
|
|
|
LightBacklight = (1 << 3),
|
2021-09-10 02:19:02 +00:00
|
|
|
} Light;
|
|
|
|
|
|
|
|
typedef struct {
|
2022-03-30 15:23:40 +00:00
|
|
|
const GpioPin* gpio;
|
2021-09-10 02:19:02 +00:00
|
|
|
const InputKey key;
|
|
|
|
const bool inverted;
|
|
|
|
const char* name;
|
|
|
|
} InputPin;
|
|
|
|
|
2023-02-07 16:33:05 +00:00
|
|
|
typedef struct {
|
|
|
|
const GpioPin* pin;
|
|
|
|
const char* name;
|
|
|
|
const bool debug;
|
|
|
|
} GpioPinRecord;
|
|
|
|
|
2022-03-30 15:23:40 +00:00
|
|
|
extern const InputPin input_pins[];
|
|
|
|
extern const size_t input_pins_count;
|
|
|
|
|
2023-02-07 16:33:05 +00:00
|
|
|
extern const GpioPinRecord gpio_pins[];
|
|
|
|
extern const size_t gpio_pins_count;
|
|
|
|
|
2023-04-06 09:06:19 +00:00
|
|
|
extern const GpioPin gpio_vibro;
|
|
|
|
extern const GpioPin gpio_ibutton;
|
2021-09-10 02:19:02 +00:00
|
|
|
|
|
|
|
extern const GpioPin gpio_cc1101_g0;
|
|
|
|
extern const GpioPin gpio_rf_sw_0;
|
|
|
|
|
|
|
|
extern const GpioPin gpio_subghz_cs;
|
|
|
|
extern const GpioPin gpio_display_cs;
|
[FL-2399, FL-2261] Tickless sleep shenanigans (#1168)
* Disable USART in sleep
* Restore UART state on suspend/resume
* FuriHal: Enable stop mode and add insomnia to I2C and SPI
* Remove IDLE interrupt
* FuriHal: add FPU isr and disable all FPU interrupt, add core2 stop mode configuration on deep sleep
* FuriHal: tie stop mode debug with debug rtc flag
* FuriHal: adjust flash latency on clock switch, tie mcu debug with RTC debug flag
* FuriHal: move resource init to early stage
* Add EXTI pending check, enable debug traps with compile-time flag
* Wrap sleep debug functions in conditional compilation
* Remove erroneous changed
* Do not use CSS, remove it from everywhere
* Enable/disable USB on VBUS connect (prototype)
* FuriHal: add LPMS and DEEPSLEEP magic, workaround state inconsistency between cores
* FuriHal: honor c1 LMPS
* USB mode switch fix
* Applications: add flags and insomnia bypass system
* Correct spelling
* FuriHal: cleanup insomnia usage, reset sleep flags on wakeup, add shutdown api
* FuriHal: extra check on reinit request
* FuriHal: rename gpio_display_rst pin to gpio_display_rst_n
* FuriHal: add debug HAL
* FuriHal: add some magic to core2 reload procedure, fix issue with crash on ble keyboard exit
* FuriHal: cleanup ble glue, add BLE_GLUE_DEBUG flag
* FuriHal: ble reinit API, move os timer to LPTIM1 for deep sleep capability, shutdown that works
* FuriHal: take insomnia while shutdown
* Remove USB switch on/off on VBUS change
* Better tick skew handling
* Improve tick consistency under load
* Add USB_HP dummy IRQ handler
* Move interrupt check closer to sleep
* Clean up includes
* Re-enable Insomnia globally
* FuriHal: enable CSS
* FuriHal: remove questionable core2 clock shenanigans
* FuriHal: use core1 RCC registers in idle timer config
* FuriHal: return back CSS handlers, add lptim isr dispatching
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
Co-authored-by: nminaylov <nm29719@gmail.com>
2022-04-29 13:29:51 +00:00
|
|
|
extern const GpioPin gpio_display_rst_n;
|
2021-09-10 02:19:02 +00:00
|
|
|
extern const GpioPin gpio_display_di;
|
|
|
|
extern const GpioPin gpio_sdcard_cs;
|
2022-03-30 15:23:40 +00:00
|
|
|
extern const GpioPin gpio_sdcard_cd;
|
2021-09-10 02:19:02 +00:00
|
|
|
extern const GpioPin gpio_nfc_cs;
|
|
|
|
|
2022-04-13 20:50:25 +00:00
|
|
|
extern const GpioPin gpio_button_up;
|
|
|
|
extern const GpioPin gpio_button_down;
|
|
|
|
extern const GpioPin gpio_button_right;
|
|
|
|
extern const GpioPin gpio_button_left;
|
|
|
|
extern const GpioPin gpio_button_ok;
|
|
|
|
extern const GpioPin gpio_button_back;
|
|
|
|
|
2021-09-10 02:19:02 +00:00
|
|
|
extern const GpioPin gpio_spi_d_miso;
|
|
|
|
extern const GpioPin gpio_spi_d_mosi;
|
|
|
|
extern const GpioPin gpio_spi_d_sck;
|
|
|
|
extern const GpioPin gpio_spi_r_miso;
|
|
|
|
extern const GpioPin gpio_spi_r_mosi;
|
|
|
|
extern const GpioPin gpio_spi_r_sck;
|
|
|
|
|
|
|
|
extern const GpioPin gpio_ext_pc0;
|
|
|
|
extern const GpioPin gpio_ext_pc1;
|
|
|
|
extern const GpioPin gpio_ext_pc3;
|
|
|
|
extern const GpioPin gpio_ext_pb2;
|
|
|
|
extern const GpioPin gpio_ext_pb3;
|
|
|
|
extern const GpioPin gpio_ext_pa4;
|
|
|
|
extern const GpioPin gpio_ext_pa6;
|
|
|
|
extern const GpioPin gpio_ext_pa7;
|
|
|
|
|
2022-06-20 14:54:48 +00:00
|
|
|
extern const GpioPin gpio_nfc_irq_rfid_pull;
|
2021-09-10 02:19:02 +00:00
|
|
|
extern const GpioPin gpio_rfid_carrier_out;
|
|
|
|
extern const GpioPin gpio_rfid_data_in;
|
|
|
|
extern const GpioPin gpio_rfid_carrier;
|
|
|
|
|
2022-02-25 15:22:58 +00:00
|
|
|
extern const GpioPin gpio_infrared_rx;
|
|
|
|
extern const GpioPin gpio_infrared_tx;
|
2021-09-10 02:19:02 +00:00
|
|
|
|
|
|
|
extern const GpioPin gpio_usart_tx;
|
|
|
|
extern const GpioPin gpio_usart_rx;
|
2021-11-28 18:28:19 +00:00
|
|
|
extern const GpioPin gpio_i2c_power_sda;
|
|
|
|
extern const GpioPin gpio_i2c_power_scl;
|
|
|
|
|
2022-03-23 17:59:20 +00:00
|
|
|
extern const GpioPin gpio_speaker;
|
|
|
|
|
2023-04-06 09:06:19 +00:00
|
|
|
extern const GpioPin gpio_periph_power;
|
2022-03-30 15:23:40 +00:00
|
|
|
|
2022-04-13 20:50:25 +00:00
|
|
|
extern const GpioPin gpio_usb_dm;
|
|
|
|
extern const GpioPin gpio_usb_dp;
|
|
|
|
|
2022-03-30 15:23:40 +00:00
|
|
|
#define BUTTON_BACK_GPIO_Port GPIOC
|
|
|
|
#define BUTTON_BACK_Pin LL_GPIO_PIN_13
|
|
|
|
#define BUTTON_DOWN_GPIO_Port GPIOC
|
|
|
|
#define BUTTON_DOWN_Pin LL_GPIO_PIN_6
|
|
|
|
#define BUTTON_LEFT_GPIO_Port GPIOB
|
|
|
|
#define BUTTON_LEFT_Pin LL_GPIO_PIN_11
|
|
|
|
#define BUTTON_OK_GPIO_Port GPIOH
|
|
|
|
#define BUTTON_OK_Pin LL_GPIO_PIN_3
|
|
|
|
#define BUTTON_RIGHT_GPIO_Port GPIOB
|
|
|
|
#define BUTTON_RIGHT_Pin LL_GPIO_PIN_12
|
|
|
|
#define BUTTON_UP_GPIO_Port GPIOB
|
|
|
|
#define BUTTON_UP_Pin LL_GPIO_PIN_10
|
|
|
|
|
|
|
|
#define CC1101_CS_GPIO_Port GPIOD
|
|
|
|
#define CC1101_CS_Pin LL_GPIO_PIN_0
|
|
|
|
#define CC1101_G0_GPIO_Port GPIOA
|
|
|
|
#define CC1101_G0_Pin LL_GPIO_PIN_1
|
|
|
|
|
|
|
|
#define DISPLAY_CS_GPIO_Port GPIOC
|
|
|
|
#define DISPLAY_CS_Pin LL_GPIO_PIN_11
|
|
|
|
#define DISPLAY_DI_GPIO_Port GPIOB
|
|
|
|
#define DISPLAY_DI_Pin LL_GPIO_PIN_1
|
|
|
|
#define DISPLAY_RST_GPIO_Port GPIOB
|
|
|
|
#define DISPLAY_RST_Pin LL_GPIO_PIN_0
|
|
|
|
|
|
|
|
#define IR_RX_GPIO_Port GPIOA
|
|
|
|
#define IR_RX_Pin LL_GPIO_PIN_0
|
|
|
|
#define IR_TX_GPIO_Port GPIOB
|
|
|
|
#define IR_TX_Pin LL_GPIO_PIN_9
|
|
|
|
|
|
|
|
#define NFC_CS_GPIO_Port GPIOE
|
|
|
|
#define NFC_CS_Pin LL_GPIO_PIN_4
|
|
|
|
|
|
|
|
#define PA4_GPIO_Port GPIOA
|
|
|
|
#define PA4_Pin LL_GPIO_PIN_4
|
|
|
|
#define PA6_GPIO_Port GPIOA
|
|
|
|
#define PA6_Pin LL_GPIO_PIN_6
|
|
|
|
#define PA7_GPIO_Port GPIOA
|
|
|
|
#define PA7_Pin LL_GPIO_PIN_7
|
|
|
|
#define PB2_GPIO_Port GPIOB
|
|
|
|
#define PB2_Pin LL_GPIO_PIN_2
|
|
|
|
#define PB3_GPIO_Port GPIOB
|
|
|
|
#define PB3_Pin LL_GPIO_PIN_3
|
|
|
|
#define PC0_GPIO_Port GPIOC
|
|
|
|
#define PC0_Pin LL_GPIO_PIN_0
|
|
|
|
#define PC1_GPIO_Port GPIOC
|
|
|
|
#define PC1_Pin LL_GPIO_PIN_1
|
|
|
|
#define PC3_GPIO_Port GPIOC
|
|
|
|
#define PC3_Pin LL_GPIO_PIN_3
|
|
|
|
|
|
|
|
#define QUARTZ_32MHZ_IN_GPIO_Port GPIOC
|
|
|
|
#define QUARTZ_32MHZ_IN_Pin LL_GPIO_PIN_14
|
|
|
|
#define QUARTZ_32MHZ_OUT_GPIO_Port GPIOC
|
|
|
|
#define QUARTZ_32MHZ_OUT_Pin LL_GPIO_PIN_15
|
|
|
|
|
|
|
|
#define RFID_OUT_GPIO_Port GPIOB
|
|
|
|
#define RFID_OUT_Pin LL_GPIO_PIN_13
|
|
|
|
#define RFID_PULL_GPIO_Port GPIOA
|
|
|
|
#define RFID_PULL_Pin LL_GPIO_PIN_2
|
|
|
|
#define RFID_RF_IN_GPIO_Port GPIOC
|
|
|
|
#define RFID_RF_IN_Pin LL_GPIO_PIN_5
|
|
|
|
#define RFID_CARRIER_GPIO_Port GPIOA
|
|
|
|
#define RFID_CARRIER_Pin LL_GPIO_PIN_15
|
|
|
|
|
|
|
|
#define RF_SW_0_GPIO_Port GPIOC
|
|
|
|
#define RF_SW_0_Pin LL_GPIO_PIN_4
|
|
|
|
|
|
|
|
#define SD_CD_GPIO_Port GPIOC
|
|
|
|
#define SD_CD_Pin LL_GPIO_PIN_10
|
|
|
|
#define SD_CS_GPIO_Port GPIOC
|
|
|
|
#define SD_CS_Pin LL_GPIO_PIN_12
|
|
|
|
|
|
|
|
#define SPEAKER_GPIO_Port GPIOB
|
|
|
|
#define SPEAKER_Pin LL_GPIO_PIN_8
|
|
|
|
|
|
|
|
#define VIBRO_GPIO_Port GPIOA
|
|
|
|
#define VIBRO_Pin LL_GPIO_PIN_8
|
|
|
|
|
|
|
|
#define iBTN_GPIO_Port GPIOB
|
|
|
|
#define iBTN_Pin LL_GPIO_PIN_14
|
|
|
|
|
|
|
|
#define USART1_TX_Pin LL_GPIO_PIN_6
|
|
|
|
#define USART1_TX_Port GPIOB
|
|
|
|
#define USART1_RX_Pin LL_GPIO_PIN_7
|
|
|
|
#define USART1_RX_Port GPIOB
|
|
|
|
|
|
|
|
#define SPI_D_MISO_GPIO_Port GPIOC
|
|
|
|
#define SPI_D_MISO_Pin LL_GPIO_PIN_2
|
|
|
|
#define SPI_D_MOSI_GPIO_Port GPIOB
|
|
|
|
#define SPI_D_MOSI_Pin LL_GPIO_PIN_15
|
|
|
|
#define SPI_D_SCK_GPIO_Port GPIOD
|
|
|
|
#define SPI_D_SCK_Pin LL_GPIO_PIN_1
|
|
|
|
|
|
|
|
#define SPI_R_MISO_GPIO_Port GPIOB
|
|
|
|
#define SPI_R_MISO_Pin LL_GPIO_PIN_4
|
|
|
|
#define SPI_R_MOSI_GPIO_Port GPIOB
|
|
|
|
#define SPI_R_MOSI_Pin LL_GPIO_PIN_5
|
|
|
|
#define SPI_R_SCK_GPIO_Port GPIOA
|
|
|
|
#define SPI_R_SCK_Pin LL_GPIO_PIN_5
|
|
|
|
|
|
|
|
#define NFC_IRQ_Pin RFID_PULL_Pin
|
|
|
|
#define NFC_IRQ_GPIO_Port RFID_PULL_GPIO_Port
|
|
|
|
|
2022-04-13 20:50:25 +00:00
|
|
|
void furi_hal_resources_init_early();
|
|
|
|
|
|
|
|
void furi_hal_resources_deinit_early();
|
|
|
|
|
|
|
|
void furi_hal_resources_init();
|
2022-03-29 17:37:23 +00:00
|
|
|
|
2023-02-08 05:40:44 +00:00
|
|
|
/**
|
|
|
|
* Get a corresponding external connector pin number for a gpio
|
|
|
|
* @param gpio GpioPin
|
|
|
|
* @return pin number or -1 if gpio is not on the external connector
|
|
|
|
*/
|
|
|
|
int32_t furi_hal_resources_get_ext_pin_number(const GpioPin* gpio);
|
|
|
|
|
2021-09-10 02:19:02 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|