Przeglądaj źródła

FL-353 Cc1101 rx (#255)

* enable transparent mode
* rssi ok, transmit ok, fifo ok
* I see the signal
* successful async rx (registers from smartrf)
* refactor rfstudio register config
* rewrite config, found some issues
* handle G0 interrupts
* g0 irq enable after cc1101 init
* update cube
coreglitch 5 lat temu
rodzic
commit
f58b322bb5

+ 8 - 7
applications/applications.mk

@@ -49,13 +49,6 @@ CFLAGS		+= -DAPP_POWER
 C_SOURCES	+= $(wildcard $(APP_DIR)/power/*.c)
 endif
 
-APP_CLI ?= 0
-ifeq ($(APP_CLI), 1)
-APP_GUI		= 1
-CFLAGS		+= -DAPP_CLI
-C_SOURCES	+= $(wildcard $(APP_DIR)/cli/*.c)
-endif
-
 APP_MENU ?= 0
 ifeq ($(APP_MENU), 1)
 CFLAGS += -DAPP_MENU
@@ -176,6 +169,7 @@ C_SOURCES	+= $(wildcard $(APP_DIR)/cc1101-workaround/*.c)
 CPP_SOURCES	+= $(wildcard $(APP_DIR)/cc1101-workaround/*.cpp)
 APP_INPUT = 1
 APP_GUI = 1
+APP_CLI = 1
 endif
 
 APP_LF_RFID ?= 0
@@ -312,3 +306,10 @@ ifeq ($(APP_INPUT), 1)
 CFLAGS		+= -DAPP_INPUT
 C_SOURCES	+= $(APP_DIR)/input/input.c
 endif
+
+APP_CLI ?= 0
+ifeq ($(APP_CLI), 1)
+APP_GUI		= 1
+CFLAGS		+= -DAPP_CLI
+C_SOURCES	+= $(wildcard $(APP_DIR)/cli/*.c)
+endif

+ 211 - 25
applications/cc1101-workaround/cc1101-workaround.cpp

@@ -2,9 +2,10 @@
 
 #include "cc1101-workaround/cc1101.h"
 
+extern "C" void cli_print(const char* str);
+
 #define RSSI_DELAY 5000 //rssi delay in micro second
 #define CHAN_SPA 0.05 // channel spacing
-#define F_OSC 26e6
 
 int16_t rssi_to_dbm(uint8_t rssi_dec, uint8_t rssiOffset) {
     int16_t rssi;
@@ -33,9 +34,9 @@ typedef struct {
 
 void setup_freq(CC1101* cc1101, const FreqConfig* config) {
     // cc1101->SpiWriteReg(CC1101_MCSM0, 0x08); // disalbe FS_AUTOCAL
-    cc1101->SpiWriteReg(CC1101_AGCCTRL2, 0x43 | 0x0C); // MAX_DVGA_GAIN to 11 for fast rssi
-    cc1101->SpiWriteReg(CC1101_AGCCTRL0, 0xB0); // max AGC WAIT_TIME; 0 filter_length
-    cc1101->SetMod(GFSK); // set to GFSK for fast rssi measurement | +8 is dcfilter off
+    // cc1101->SpiWriteReg(CC1101_AGCCTRL2, 0x43 | 0x0C); // MAX_DVGA_GAIN to 11 for fast rssi
+    // cc1101->SpiWriteReg(CC1101_AGCCTRL0, 0xB0); // max AGC WAIT_TIME; 0 filter_length
+    // cc1101->SetMod(GFSK); // set to GFSK for fast rssi measurement | +8 is dcfilter off
 
     uint32_t freq_reg = config->band->base_freq * 1e6 / (F_OSC / 65536);
     cc1101->SetFreq((freq_reg >> 16) & 0xFF, (freq_reg >> 8) & 0xFF, (freq_reg)&0xFF);
@@ -52,31 +53,71 @@ void setup_freq(CC1101* cc1101, const FreqConfig* config) {
     */
 }
 
+static GpioPin debug_0 = {GPIOB, GPIO_PIN_2};
+
 int16_t rx_rssi(CC1101* cc1101, const FreqConfig* config) {
-    cc1101->SetReceive();
+    // cc1101->SpiStrobe(CC1101_SFRX);
+    // cc1101->SetReceive();
+
+    // uint8_t begin_size = cc1101->SpiReadStatus(CC1101_RXBYTES);
+    // uint8_t rx_status = cc1101->SpiReadStatus(CC1101_MARCSTATE);
+
+    // delay_us(RSSI_DELAY);
+    // osDelay(15);
 
-    delay_us(RSSI_DELAY);
+    // uint8_t end_size = cc1101->SpiReadStatus(CC1101_RXBYTES);
 
     // 1.4.8) read PKTSTATUS register while the radio is in RX state
-    /*uint8_t _pkt_status = */ cc1101->SpiReadStatus(CC1101_PKTSTATUS);
+    /*uint8_t _pkt_status = */ // cc1101->SpiReadStatus(CC1101_PKTSTATUS);
 
     // 1.4.9) enter IDLE state by issuing a SIDLE command
-    cc1101->SpiStrobe(CC1101_SIDLE);
+    // cc1101->SpiStrobe(CC1101_SIDLE);
 
     // //read rssi value and converto to dBm form
     uint8_t rssi_dec = (uint8_t)cc1101->SpiReadStatus(CC1101_RSSI);
     int16_t rssi_dBm = rssi_to_dbm(rssi_dec, config->band->rssi_offset);
 
-    return rssi_dBm;
-}
+    /*
+    char buf[256];
+    sprintf(buf, "status: %d -> %d, rssi: %d\n", rx_status, cc1101->SpiReadStatus(CC1101_MARCSTATE), rssi_dBm);
+    cli_print(buf);
+    sprintf(buf, "begin: %d, end: %d\n", begin_size, end_size);
+    cli_print(buf);
+    */
+
+    // uint8_t rx_data[64];
+    // uint8_t fifo_length = end_size - begin_size;
 
-void tx(CC1101* cc1101, const FreqConfig* config) {
     /*
-    cc1101->SpiWriteReg(CC1101_MCSM0, 0x18); //enable FS_AUTOCAL
-    cc1101->SpiWriteReg(CC1101_AGCCTRL2, 0x43); //back to recommended config
-    cc1101->SpiWriteReg(CC1101_AGCCTRL0, 0x91); //back to recommended config
+    if(fifo_length < 64) {
+        // cc1101->SpiReadBurstReg(CC1101_RXFIFO, rx_data, fifo_length);
+
+        *
+        printf("FIFO:");
+        for(uint8_t i = 0; i < fifo_length; i++) {
+            for(uint8_t bit = 0; bit < 8; bit++) {
+                printf("%s", (rx_data[i] & (1 << bit)) > 0 ? "1" : "0");
+            }
+            printf(" ");
+        }
+        printf("\n");
+        *
+
+        for(uint8_t i = 0; i < fifo_length; i++) {
+            for(uint8_t bit = 0; bit < 8; bit++) {
+                gpio_write((GpioPin*)&debug_0, (rx_data[i] & (1 << bit)) > 0);
+                delay_us(5);
+            }
+        }
+    } else {
+        cli_print("fifo size over\n");
+    }
     */
 
+    return rssi_dBm;
+}
+
+void tx(CC1101* cc1101, const FreqConfig* config) {
     uint32_t freq_reg = config->band->base_freq * 1e6 / (F_OSC / 65536);
     cc1101->SetFreq((freq_reg >> 16) & 0xFF, (freq_reg >> 8) & 0xFF, (freq_reg)&0xFF);
     cc1101->SetChannel(config->channel);
@@ -88,6 +129,136 @@ void idle(CC1101* cc1101) {
     cc1101->SpiStrobe(CC1101_SIDLE);
 }
 
+void flp_config(CC1101* cc1101) {
+    // cc1101->SpiWriteReg(CC1101_FSCTRL1, 0x06); //IF frequency
+    // cc1101->SpiWriteReg(CC1101_FSCTRL0, 0x00); //frequency offset before synthesizer
+
+    // cc1101->SpiWriteReg(CC1101_MDMCFG4, 0xCC); // RX filter bandwidth 100k(0xcc)
+    // cc1101->SpiWriteReg(CC1101_MDMCFG3, 0x43); //datarate config 512kBaud  for the purpose of fast rssi measurement
+    // cc1101->SpiWriteReg(CC1101_MDMCFG1, 0x21); //FEC preamble etc. last 2 bits for channel spacing
+    // cc1101->SpiWriteReg(CC1101_MDMCFG0, 0xF8); //100khz channel spacing
+    // CC1101_CHANNR moved to SetChannel func
+
+    cc1101->SpiWriteReg(
+        CC1101_MCSM0, 0x18); // calibrate when going from IDLE to RX or TX ; 149 - 155 μs timeout
+    // MCSM0.FS_AUTOCAL[1:0] = 1
+    // cc1101->SpiSetRegValue(CC1101_MCSM0, 1, 5, 4); // this not work
+
+    // cc1101->SpiWriteReg(CC1101_FOCCFG, 0x16); //frequency compensation
+    cc1101->SpiWriteReg(CC1101_AGCCTRL2, 0x43);
+    cc1101->SpiWriteReg(CC1101_AGCCTRL1, 0x49);
+    cc1101->SpiWriteReg(CC1101_AGCCTRL0, 0x91);
+
+    //freq synthesizer calibration
+    cc1101->SpiWriteReg(CC1101_FSCAL3, 0xEA);
+    cc1101->SpiWriteReg(CC1101_FSCAL2, 0x2A);
+    cc1101->SpiWriteReg(CC1101_FSCAL1, 0x00);
+    cc1101->SpiWriteReg(CC1101_FSCAL0, 0x1F);
+    // cc1101->SpiWriteReg(CC1101_TEST2, 0x81);
+    // cc1101->SpiWriteReg(CC1101_TEST1, 0x35);
+    // cc1101->SpiWriteReg(CC1101_TEST0, 0x0B); //should be 0x0B for lower than 430.6MHz and 0x09 for higher
+
+    // cc1101->SpiWriteReg(CC1101_IOCFG2, 0x0D); //data output pin for asynchronous mode
+    // cc1101->SpiWriteReg(CC1101_IOCFG0, 0x2E); //High impedance (3-state), GDO0 configed as data input for asynchronous mode
+    // cc1101->SpiWriteReg(CC1101_PKTCTRL0, 0x33); //whitening off; asynchronous serial mode; CRC diable;reserved
+    // cc1101->SpiWriteReg(CC1101_FIFOTHR, 0x47); //Adc_retention enabled for RX filter bandwidth less than 325KHz; defalut fifo threthold.
+
+    // === Transparent mode ===
+
+    // async data out
+    cc1101->SpiSetRegValue(CC1101_IOCFG0, 13, 5, 0);
+
+    // FIFOTHR.ADC_RETENTION = 1
+    cc1101->SpiSetRegValue(CC1101_FIFOTHR, 1, 6, 6);
+
+    // PKTCTRL1.APPEND_STATUS = 0
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL1, 0, 2, 2);
+
+    // PKTCTRL0.WHITE_DATA = 0
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 0, 6, 6);
+
+    // PKTCTRL0.LENGTH_CONFIG = 2 // Infinite packet length mode
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 2, 1, 0);
+
+    // PKTCTRL0.CRC_EN = 0
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 0, 2, 2);
+
+    // PKTCTRL0.PKT_FORMAT = 3
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 3, 5, 4);
+
+    // bandwidth 50-100 kHz
+    if(!cc1101->setRxBandwidth(75.0)) {
+        printf("wrong rx bw\n");
+    }
+
+    // datarate ~30 kbps
+    if(!cc1101->setBitRate(100.)) {
+        printf("wrong bitrate\n");
+    }
+
+    cc1101->SetReceive();
+
+    // mod
+    // MDMCFG2.MOD_FORMAT = 3 (3: OOK, 0: 2-FSK)
+    cc1101->SpiSetRegValue(CC1101_MDMCFG2, 3, 6, 4);
+    // MDMCFG2.SYNC_MODE = 0
+    cc1101->SpiSetRegValue(CC1101_MDMCFG2, 0, 2, 0);
+}
+
+void async_config(CC1101* cc1101) {
+    cc1101->SpiSetRegValue(CC1101_IOCFG0, 13, 5, 0); // GDO0 Output Pin Configuration
+
+    // FIFOTHR.ADC_RETENTION = 1
+    cc1101->SpiSetRegValue(CC1101_FIFOTHR, 1, 6, 6);
+
+    // PKTCTRL1.APPEND_STATUS = 0
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL1, 0, 2, 2);
+
+    cc1101->SpiWriteReg(CC1101_PKTCTRL0, 0x32); // Packet Automation Control
+    /*
+    FIXME: this sequence not work
+    // PKTCTRL0.PKT_FORMAT = 3
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 3, 5, 4);
+    // PKTCTRL0.LENGTH_CONFIG = 2 // Infinite packet length mode
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 2, 1, 0);
+    // PKTCTRL0.CRC_EN = 0
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 0, 2, 2);
+    // PKTCTRL0.WHITE_DATA = 0
+    cc1101->SpiSetRegValue(CC1101_PKTCTRL0, 0, 6, 6);
+    */
+
+    cc1101->SpiWriteReg(CC1101_MDMCFG4, 0xD6); //Modem Configuration
+    cc1101->SpiWriteReg(CC1101_MDMCFG3, 0xE4); //Modem Configuration
+    /*
+    FIXME: not work
+    // bandwidth 50-100 kHz
+    if(!cc1101->setRxBandwidth(75.0)) {
+        printf("wrong rx bw\n");
+    }
+
+    // datarate ~30 kbps
+    if(!cc1101->setBitRate(100.)) {
+        printf("wrong bitrate\n");
+    }
+    */
+
+    cc1101->SpiWriteReg(CC1101_MDMCFG2, 0x30); //Modem Configuration
+    /*
+    FIXME: not work
+    // MDMCFG2.MOD_FORMAT = 3 (3: OOK, 0: 2-FSK)
+    cc1101->SpiSetRegValue(CC1101_MDMCFG2, 3, 6, 4);
+    // MDMCFG2.SYNC_MODE = 0
+    cc1101->SpiSetRegValue(CC1101_MDMCFG2, 0, 2, 0);
+    */
+
+    cc1101->SpiWriteReg(CC1101_MCSM0, 0x18); //Main Radio Control State Machine Configuration
+
+    cc1101->SpiWriteReg(CC1101_FSCAL3, 0xE9); //Frequency Synthesizer Calibration
+    cc1101->SpiWriteReg(CC1101_FSCAL2, 0x2A); //Frequency Synthesizer Calibration
+    cc1101->SpiWriteReg(CC1101_FSCAL1, 0x00); //Frequency Synthesizer Calibration
+    cc1101->SpiWriteReg(CC1101_FSCAL0, 0x1F); //Frequency Synthesizer Calibration
+}
+
 // f = (f_osc/65536) * (FREQ + CHAN * (256 + CH_SP_M) * 2^(CH_SP_E - 2))
 // FREQ = f / (f_osc/65536)
 // CHAN = 0
@@ -99,7 +270,7 @@ const Band bands[] = {
     {315., {0x00, 0x00, 0x00}, 0, 255, 74},
     {348., {0x00, 0x00, 0x00}, 0, 255, 74},
     {387., {0x00, 0x00, 0x00}, 0, 255, 74},
-    {433., {0x00, 0x00, 0x00}, 0, 255, 74},
+    {433.92, {0x00, 0x00, 0x00}, 0, 255, 74},
     {464., {0x00, 0x00, 0x00}, 0, 255, 74},
     {779., {0x00, 0x00, 0x00}, 0, 255, 74},
     {868., {0x00, 0x00, 0x00}, 0, 255, 74},
@@ -120,6 +291,10 @@ const FreqConfig FREQ_LIST[] = {
     {&bands[9], 0},
 };
 
+extern "C" void cc1101_isr() {
+    gpio_write((GpioPin*)&debug_0, gpio_read(&cc1101_g0_gpio));
+}
+
 typedef enum {
     EventTypeTick,
     EventTypeKey,
@@ -157,6 +332,8 @@ typedef struct {
 static void render_callback(CanvasApi* canvas, void* ctx) {
     State* state = (State*)acquire_mutex((ValueMutex*)ctx, 25);
 
+    if(!state) return;
+
     canvas->clear(canvas);
     canvas->set_color(canvas, ColorBlack);
     canvas->set_font(canvas, FontPrimary);
@@ -222,7 +399,7 @@ extern "C" void cc1101_workaround(void* p) {
 
     State _state;
     _state.mode = ModeRx;
-    _state.active_freq = 0;
+    _state.active_freq = 4;
     _state.need_cc1101_conf = true;
     _state.last_rssi = 0;
     _state.tx_level = 0;
@@ -246,6 +423,9 @@ extern "C" void cc1101_workaround(void* p) {
     }
     gui->add_widget(gui, widget, GuiLayerFullscreen);
 
+    gpio_init(&debug_0, GpioModeOutputPushPull);
+    gpio_write((GpioPin*)&debug_0, false);
+
     printf("[cc1101] creating device\n");
     GpioPin cs_pin = {CC1101_CS_GPIO_Port, CC1101_CS_Pin};
 
@@ -262,14 +442,16 @@ extern "C" void cc1101_workaround(void* p) {
         furiac_exit(NULL);
     }
 
-    // RX filter bandwidth 58.035714(0xFD) 100k(0xCD) 200k(0x8D)
-    cc1101.SpiWriteReg(CC1101_MDMCFG4, 0xCD);
-    // datarate config 250kBaud  for the purpose of fast rssi measurement
-    cc1101.SpiWriteReg(CC1101_MDMCFG3, 0x3B);
-    // FEC preamble etc. last 2 bits for channel spacing
-    cc1101.SpiWriteReg(CC1101_MDMCFG1, 0x20);
-    // 50khz channel spacing
-    cc1101.SpiWriteReg(CC1101_MDMCFG0, 0xF8);
+    cc1101.SpiStrobe(CC1101_SIDLE);
+
+    // flp_config(&cc1101);
+    async_config(&cc1101);
+    setup_freq(&cc1101, &FREQ_LIST[4]);
+    enable_cc1101_irq();
+
+    printf("init ok\n");
+
+    // === Transparent mode ===
 
     // TODO open record
     GpioPin* led_record = (GpioPin*)&led_gpio[1];
@@ -279,9 +461,13 @@ extern "C" void cc1101_workaround(void* p) {
 
     const int16_t RSSI_THRESHOLD = -89;
 
+    // setup_freq(&cc1101, &FREQ_LIST[1]);
+
+    cc1101.SetReceive();
+
     AppEvent event;
     while(1) {
-        osStatus_t event_status = osMessageQueueGet(event_queue, &event, NULL, 150);
+        osStatus_t event_status = osMessageQueueGet(event_queue, &event, NULL, 20);
         State* state = (State*)acquire_mutex_block(&state_mutex);
 
         if(event_status == osOK) {

+ 107 - 27
applications/cc1101-workaround/cc1101.cpp

@@ -1,6 +1,7 @@
 #include "flipper_v2.h"
 #include "cc1101-workaround/cc1101.h"
 #include "spi.h"
+#include <math.h>
 
 // ******************************************************************************
 #define WRITE_BURST 0x40
@@ -85,6 +86,8 @@ uint8_t CC1101::SpiTransfer(uint8_t value) {
     return rxbuf[0];
 }
 
+uint8_t last_status;
+
 /****************************************************************
 *FUNCTION NAME:SpiWriteReg
 *FUNCTION     :CC1101 write data to register
@@ -95,8 +98,9 @@ void CC1101::SpiWriteReg(uint8_t addr, uint8_t value) {
     gpio_write(ss_pin, false);
     while(gpio_read(this->miso_pin_record))
         ;
-    SpiTransfer(addr);
-    SpiTransfer(value);
+
+    last_status = SpiTransfer(addr);
+    last_status = SpiTransfer(value);
     gpio_write(ss_pin, true);
 }
 
@@ -107,15 +111,12 @@ void CC1101::SpiWriteReg(uint8_t addr, uint8_t value) {
 *OUTPUT       :none
 ****************************************************************/
 void CC1101::SpiWriteBurstReg(uint8_t addr, uint8_t* buffer, uint8_t num) {
-    uint8_t i, temp;
-
-    temp = addr | WRITE_BURST;
     gpio_write(ss_pin, false);
     while(gpio_read(this->miso_pin_record))
         ;
-    SpiTransfer(temp);
-    for(i = 0; i < num; i++) {
-        SpiTransfer(buffer[i]);
+    last_status = SpiTransfer(addr | WRITE_BURST);
+    for(uint8_t i = 0; i < num; i++) {
+        last_status = SpiTransfer(buffer[i]);
     }
     gpio_write(ss_pin, true);
 }
@@ -130,7 +131,7 @@ void CC1101::SpiStrobe(uint8_t strobe) {
     gpio_write(ss_pin, false);
     while(gpio_read(this->miso_pin_record))
         ;
-    SpiTransfer(strobe);
+    last_status = SpiTransfer(strobe);
     gpio_write(ss_pin, true);
 }
 
@@ -141,14 +142,11 @@ void CC1101::SpiStrobe(uint8_t strobe) {
 *OUTPUT       :register value
 ****************************************************************/
 uint8_t CC1101::SpiReadReg(uint8_t addr) {
-    uint8_t temp, value;
-
-    temp = addr | READ_SINGLE;
     gpio_write(ss_pin, false);
     while(gpio_read(this->miso_pin_record))
         ;
-    SpiTransfer(temp);
-    value = SpiTransfer(0);
+    last_status = SpiTransfer(addr | READ_SINGLE);
+    uint8_t value = SpiTransfer(0);
     gpio_write(ss_pin, true);
 
     return value;
@@ -161,14 +159,11 @@ uint8_t CC1101::SpiReadReg(uint8_t addr) {
 *OUTPUT       :none
 ****************************************************************/
 void CC1101::SpiReadBurstReg(uint8_t addr, uint8_t* buffer, uint8_t num) {
-    uint8_t i, temp;
-
-    temp = addr | READ_BURST;
     gpio_write(ss_pin, false);
     while(gpio_read(this->miso_pin_record))
         ;
-    SpiTransfer(temp);
-    for(i = 0; i < num; i++) {
+    last_status = SpiTransfer(addr | READ_BURST);
+    for(uint8_t i = 0; i < num; i++) {
         buffer[i] = SpiTransfer(0);
     }
     gpio_write(ss_pin, true);
@@ -181,14 +176,11 @@ void CC1101::SpiReadBurstReg(uint8_t addr, uint8_t* buffer, uint8_t num) {
 *OUTPUT       :status value
 ****************************************************************/
 uint8_t CC1101::SpiReadStatus(uint8_t addr) {
-    uint8_t value, temp;
-
-    temp = addr | READ_BURST;
     gpio_write(ss_pin, false);
     while(gpio_read(this->miso_pin_record))
         ;
-    SpiTransfer(temp);
-    value = SpiTransfer(0);
+    last_status = SpiTransfer(addr | READ_BURST);
+    uint8_t value = SpiTransfer(0);
     gpio_write(ss_pin, true);
 
     return value;
@@ -208,11 +200,25 @@ void CC1101::Reset(void) {
     gpio_write(ss_pin, false);
     while(gpio_read(this->miso_pin_record))
         ;
-    SpiTransfer(CC1101_SRES);
+    last_status = SpiTransfer(CC1101_SRES);
     while(gpio_read(this->miso_pin_record))
         ;
     gpio_write(ss_pin, true);
 }
+
+bool CC1101::SpiSetRegValue(uint8_t reg, uint8_t value, uint8_t msb, uint8_t lsb) {
+    if((msb > 7) || (lsb > 7) || (lsb > msb)) {
+        return false;
+    }
+
+    uint8_t current_value = SpiReadReg(reg);
+    uint8_t mask = ~((0b11111111 << (msb + 1)) | (0b11111111 >> (8 - lsb)));
+    uint8_t new_value = (current_value & ~mask) | (value & mask);
+    SpiWriteReg(reg, new_value);
+
+    return true;
+}
+
 /****************************************************************
 *FUNCTION NAME:Init
 *FUNCTION     :CC1101 initialization
@@ -230,7 +236,9 @@ uint8_t CC1101::Init(void) {
 #ifdef CC1101_DEBUG
     printf("Reset CC1101...\n");
 #endif
-    Reset(); //CC1101 reset
+    Reset(); // CC1101 reset
+
+    osDelay(150);
 
     uint8_t partnum __attribute__((unused));
     uint8_t version;
@@ -245,7 +253,7 @@ uint8_t CC1101::Init(void) {
 #ifdef CC1101_DEBUG
     printf("Init CC1101...");
 #endif
-    RegConfigSettings(); //CC1101 register config
+    // RegConfigSettings(); //CC1101 register config
 
 #ifdef CC1101_DEBUG
     printf("Done!\n");
@@ -401,3 +409,75 @@ void CC1101::SetTransmit(void) {
         ;
 }
 //cc1101 cc1101;
+
+bool CC1101::setRxBandwidth(float bandwidth) {
+    if(bandwidth < 58.0 || bandwidth > 821.0) return false;
+
+    // set mode to standby
+    SpiStrobe(CC1101_SIDLE);
+
+    // calculate exponent and mantissa values
+    for(int8_t e = 3; e >= 0; e--) {
+        for(int8_t m = 3; m >= 0; m--) {
+            float point = (F_OSC) / (8 * (m + 4) * ((uint32_t)1 << e));
+            if(fabs((bandwidth * 1000.0) - point) <= 1000) {
+                // set Rx channel filter bandwidth
+                SpiSetRegValue(CC1101_MDMCFG4, (e << 6) | (m << 4), 7, 4);
+
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+static void getExpMant(
+    float target,
+    uint16_t mantOffset,
+    uint8_t divExp,
+    uint8_t expMax,
+    uint8_t& exp,
+    uint8_t& mant) {
+    // get table origin point (exp = 0, mant = 0)
+    float origin = (mantOffset * F_OSC) / ((uint32_t)1 << divExp);
+
+    // iterate over possible exponent values
+    for(int8_t e = expMax; e >= 0; e--) {
+        // get table column start value (exp = e, mant = 0);
+        float intervalStart = ((uint32_t)1 << e) * origin;
+
+        // check if target value is in this column
+        if(target >= intervalStart) {
+            // save exponent value
+            exp = e;
+
+            // calculate size of step between table rows
+            float stepSize = intervalStart / (float)mantOffset;
+
+            // get target point position (exp = e, mant = m)
+            mant = ((target - intervalStart) / stepSize);
+
+            // we only need the first match, terminate
+            return;
+        }
+    }
+}
+
+bool CC1101::setBitRate(float bitrate) {
+    if(bitrate < 0.6 || bitrate > 500.0) return false;
+
+    // set mode to standby
+    SpiStrobe(CC1101_SIDLE);
+
+    // calculate exponent and mantissa values
+    uint8_t e = 0;
+    uint8_t m = 0;
+    getExpMant(bitrate * 1000.0, 256, 28, 14, e, m);
+
+    // set bit rate value
+    SpiSetRegValue(CC1101_MDMCFG4, e, 3, 0);
+    SpiSetRegValue(CC1101_MDMCFG3, m, 7, 0);
+
+    return true;
+}

+ 7 - 1
applications/cc1101-workaround/cc1101.h

@@ -2,8 +2,11 @@
 
 #include "flipper_v2.h"
 
+#define F_OSC 26e6
+
 /*******************************debug mode*************************************/
 // #define     CC1101_DEBUG 1
+
 //******************************CC1101 defines ********************************
 //******************************config registers  *****************************
 #define CC1101_IOCFG2 0x00 //GDO2 output pin configration
@@ -148,13 +151,14 @@ private:
     void Reset(void);
     void SpiWriteBurstReg(uint8_t addr, uint8_t* buffer, uint8_t num);
     uint8_t SpiReadReg(uint8_t addr);
-    void SpiReadBurstReg(uint8_t addr, uint8_t* buffer, uint8_t num);
     void RegConfigSettings(void);
 
 public:
     CC1101(GpioPin* ss_pin);
 
     void SpiWriteReg(uint8_t addr, uint8_t value);
+    bool SpiSetRegValue(uint8_t reg, uint8_t value, uint8_t msb, uint8_t lsb);
+    void SpiReadBurstReg(uint8_t addr, uint8_t* buffer, uint8_t num);
     void SpiInit(void);
     void SpiEnd(void);
     void SetMod(uint8_t mode);
@@ -165,4 +169,6 @@ public:
     void SetReceive(void);
     void SetTransmit(void);
     void SetChannel(int channel);
+    bool setRxBandwidth(float bandwidth);
+    bool setBitRate(float bitrate);
 };

+ 11 - 0
applications/input/input.c

@@ -6,6 +6,10 @@
 void nfc_isr(void);
 #endif
 
+#ifdef BUILD_CC1101
+void cc1101_isr();
+#endif
+
 static volatile bool initialized = false;
 static ValueManager input_state_record;
 static PubSub input_events_record;
@@ -115,6 +119,13 @@ void HAL_GPIO_EXTI_Callback(uint16_t pin) {
     }
 #endif
 
+#ifdef BUILD_CC1101
+    if(pin == CC1101_G0_Pin) {
+        cc1101_isr();
+        return;
+    }
+#endif
+
     if(!initialized) return;
 
     signal_event(&event);

+ 5 - 1
firmware/targets/f2/api-hal/api-hal-gpio.c

@@ -19,4 +19,8 @@ void hal_gpio_init(
 
 bool hal_gpio_read_sd_detect(void) {
     return true;
-}
+}
+
+void enable_cc1101_irq() {
+    
+}

+ 3 - 1
firmware/targets/f2/api-hal/api-hal-gpio.h

@@ -64,4 +64,6 @@ static inline bool hal_gpio_read(const GpioPin* gpio) {
     }
 }
 
-bool hal_gpio_read_sd_detect(void);
+bool hal_gpio_read_sd_detect(void);
+
+void enable_cc1101_irq();

+ 1 - 0
firmware/targets/f2/api-hal/api-hal-resources.c

@@ -30,3 +30,4 @@ const GpioPin led_gpio[3] = {
 const GpioPin backlight_gpio = {DISPLAY_BACKLIGHT_GPIO_Port, DISPLAY_BACKLIGHT_Pin};
 const GpioPin vibro_gpio = {VIBRO_GPIO_Port, VIBRO_Pin};
 const GpioPin ibutton_gpio = {iButton_GPIO_Port, iButton_Pin};
+const GpioPin cc1101_g0_gpio = {NULL, 0};

+ 2 - 1
firmware/targets/f2/api-hal/api-hal-resources.h

@@ -11,4 +11,5 @@ extern const bool input_invert[GPIO_INPUT_PINS_COUNT];
 extern const GpioPin led_gpio[3];
 extern const GpioPin backlight_gpio;
 extern const GpioPin vibro_gpio;
-extern const GpioPin ibutton_gpio;
+extern const GpioPin ibutton_gpio;
+extern const GpioPin cc1101_g0_gpio;

+ 0 - 398
firmware/targets/f3/Makefile

@@ -1,398 +0,0 @@
-##########################################################################################################################
-# File automatically-generated by tool: [projectgenerator] version: [3.10.0-B14] date: [Mon Nov 23 12:04:48 VLAT 2020] 
-##########################################################################################################################
-
-# ------------------------------------------------
-# Generic Makefile (based on gcc)
-#
-# ChangeLog :
-#	2017-02-10 - Several enhancements + project update mode
-#   2015-07-22 - first version
-# ------------------------------------------------
-
-######################################
-# target
-######################################
-TARGET = f3
-
-
-######################################
-# building variables
-######################################
-# debug build?
-DEBUG = 1
-# optimization
-OPT = -Og
-
-
-#######################################
-# paths
-#######################################
-# Build path
-BUILD_DIR = build
-
-######################################
-# source
-######################################
-# C sources
-C_SOURCES =  \
-Src/main.c \
-Src/gpio.c \
-Src/app_freertos.c \
-Src/adc.c \
-Src/i2c.c \
-Src/rtc.c \
-Src/spi.c \
-Src/tim.c \
-Src/usart.c \
-Src/usb_device.c \
-Src/usbd_conf.c \
-Src/usbd_desc.c \
-Src/usbd_cdc_if.c \
-Src/stm32wbxx_it.c \
-Src/stm32wbxx_hal_msp.c \
-Src/stm32wbxx_hal_timebase_tim.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usb.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_adc.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c \
-Src/system_stm32wbxx.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/croutine.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/list.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/queue.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/timers.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
-/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usb.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_adc.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/croutine.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/list.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/queue.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/timers.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
-C:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usb.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_adc.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/croutine.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/list.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/queue.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/timers.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c \
-Src/comp.c \
-/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_comp.c \
-Src/rf.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usb.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_adc.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_comp.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_i2c_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/croutine.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/list.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/queue.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/timers.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
-C:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
-
-# ASM sources
-ASM_SOURCES =  \
-startup_stm32wb55xx_cm4.s
-
-
-#######################################
-# binaries
-#######################################
-PREFIX = arm-none-eabi-
-# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
-# either it can be added to the PATH environment variable.
-ifdef GCC_PATH
-CC = $(GCC_PATH)/$(PREFIX)gcc
-AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
-CP = $(GCC_PATH)/$(PREFIX)objcopy
-SZ = $(GCC_PATH)/$(PREFIX)size
-else
-CC = $(PREFIX)gcc
-AS = $(PREFIX)gcc -x assembler-with-cpp
-CP = $(PREFIX)objcopy
-SZ = $(PREFIX)size
-endif
-HEX = $(CP) -O ihex
-BIN = $(CP) -O binary -S
- 
-#######################################
-# CFLAGS
-#######################################
-# cpu
-CPU = -mcpu=cortex-m4
-
-# fpu
-FPU = -mfpu=fpv4-sp-d16
-
-# float-abi
-FLOAT-ABI = -mfloat-abi=hard
-
-# mcu
-MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
-
-# macros for gcc
-# AS defines
-AS_DEFS = 
-
-# C defines
-C_DEFS =  \
--DUSE_HAL_DRIVER \
--DSTM32WB55xx
-
-
-# AS includes
-AS_INCLUDES =  \
--IInc
-
-# C includes
-C_INCLUDES =  \
--IInc \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/Legacy \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/include \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Inc \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/CMSIS/Device/ST/STM32WBxx/Include \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/CMSIS/Include \
--I/Users/aku/Work/flipper/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/CMSIS/Include \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/Legacy \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/include \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Inc \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/CMSIS/Device/ST/STM32WBxx/Include \
--IC:/work/cmake-stm32/projects/flipperzero-firmware-community/lib/STM32CubeWB/Drivers/CMSIS/Include \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Inc \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Inc/Legacy \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/include \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Inc \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/CMSIS/Device/ST/STM32WBxx/Include \
--I/Users/aku/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/CMSIS/Include \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Inc \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/STM32WBxx_HAL_Driver/Inc/Legacy \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/include \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Core/Inc \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/CMSIS/Device/ST/STM32WBxx/Include \
--IC:/Users/whoju/STM32Cube/Repository/STM32Cube_FW_WB_V1.9.0/Drivers/CMSIS/Include
-
-
-# compile gcc flags
-ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
-
-CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
-
-ifeq ($(DEBUG), 1)
-CFLAGS += -g -gdwarf-2
-endif
-
-
-# Generate dependency information
-CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
-
-
-#######################################
-# LDFLAGS
-#######################################
-# link script
-LDSCRIPT = stm32wb55xx_flash_cm4.ld
-
-# libraries
-LIBS = -lc -lm -lnosys 
-LIBDIR = 
-LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
-
-# default action: build all
-all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
-
-
-#######################################
-# build the application
-#######################################
-# list of objects
-OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
-vpath %.c $(sort $(dir $(C_SOURCES)))
-# list of ASM program objects
-OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
-vpath %.s $(sort $(dir $(ASM_SOURCES)))
-
-$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
-	$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
-
-$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
-	$(AS) -c $(CFLAGS) $< -o $@
-
-$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
-	$(CC) $(OBJECTS) $(LDFLAGS) -o $@
-	$(SZ) $@
-
-$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
-	$(HEX) $< $@
-	
-$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
-	$(BIN) $< $@	
-	
-$(BUILD_DIR):
-	mkdir $@		
-
-#######################################
-# clean up
-#######################################
-clean:
-	-rm -fR $(BUILD_DIR)
-  
-#######################################
-# dependencies
-#######################################
--include $(wildcard $(BUILD_DIR)/*.d)
-
-# *** EOF ***

+ 2 - 2
firmware/targets/f3/Src/gpio.c

@@ -110,8 +110,8 @@ void MX_GPIO_Init(void)
 
   /*Configure GPIO pin : PtPin */
   GPIO_InitStruct.Pin = CC1101_G0_Pin;
-  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
   HAL_GPIO_Init(CC1101_G0_GPIO_Port, &GPIO_InitStruct);
 
   /*Configure GPIO pins : PBPin PBPin */

+ 10 - 0
firmware/targets/f3/Src/stm32wbxx_it.c

@@ -311,6 +311,16 @@ void HSEM_IRQHandler(void)
 }
 
 /* USER CODE BEGIN 1 */
+void EXTI4_IRQHandler(void)
+{
+  /* USER CODE BEGIN EXTI4_IRQn 0 */
+
+  /* USER CODE END EXTI4_IRQn 0 */
+  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);
+  /* USER CODE BEGIN EXTI4_IRQn 1 */
+
+  /* USER CODE END EXTI4_IRQn 1 */
+}
 
 /* USER CODE END 1 */
 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 6 - 1
firmware/targets/f3/api-hal/api-hal-gpio.c

@@ -36,4 +36,9 @@ bool hal_gpio_read_sd_detect(void) {
     delay(50);
 
     return result;
-}
+}
+
+void enable_cc1101_irq() {
+    HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0);
+    HAL_NVIC_EnableIRQ(EXTI4_IRQn);
+}

+ 3 - 1
firmware/targets/f3/api-hal/api-hal-gpio.h

@@ -64,4 +64,6 @@ static inline bool hal_gpio_read(const GpioPin* gpio) {
     }
 }
 
-bool hal_gpio_read_sd_detect(void);
+bool hal_gpio_read_sd_detect(void);
+
+void enable_cc1101_irq();

+ 1 - 0
firmware/targets/f3/api-hal/api-hal-resources.c

@@ -28,3 +28,4 @@ const GpioPin backlight_gpio = {DISPLAY_BACKLIGHT_GPIO_Port, DISPLAY_BACKLIGHT_P
 const GpioPin sd_cs_gpio = {SD_CS_GPIO_Port, SD_CS_Pin};
 const GpioPin vibro_gpio = {VIBRO_GPIO_Port, VIBRO_Pin};
 const GpioPin ibutton_gpio = {iBTN_GPIO_Port, iBTN_Pin};
+const GpioPin cc1101_g0_gpio = {CC1101_G0_GPIO_Port, CC1101_G0_Pin};

+ 1 - 0
firmware/targets/f3/api-hal/api-hal-resources.h

@@ -13,3 +13,4 @@ extern const GpioPin backlight_gpio;
 extern const GpioPin sd_cs_gpio;
 extern const GpioPin vibro_gpio;
 extern const GpioPin ibutton_gpio;
+extern const GpioPin cc1101_g0_gpio;

+ 535 - 531
firmware/targets/f3/f3.ioc

@@ -1,565 +1,569 @@
 #MicroXplorer Configuration settings - do not modify
-ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_14
-ADC1.ContinuousConvMode=DISABLE
-ADC1.EnableAnalogWatchDog1=false
-ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag,master,EnableAnalogWatchDog1,ContinuousConvMode
-ADC1.NbrOfConversionFlag=1
-ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
-ADC1.Rank-0\#ChannelRegularConversion=1
-ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
-ADC1.master=1
-COMP1.Hysteresis=COMP_HYSTERESIS_HIGH
-COMP1.IPParameters=TriggerMode,Hysteresis,Mode
-COMP1.Mode=COMP_POWERMODE_MEDIUMSPEED
-COMP1.TriggerMode=COMP_TRIGGERMODE_IT_RISING_FALLING
-FREERTOS.FootprintOK=true
-FREERTOS.HEAP_NUMBER=4
-FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,HEAP_NUMBER,configUSE_TIMERS,configUSE_IDLE_HOOK,FootprintOK,configCHECK_FOR_STACK_OVERFLOW,configRECORD_STACK_HIGH_ADDRESS,configGENERATE_RUN_TIME_STATS,configENABLE_FPU
-FREERTOS.Tasks01=defaultTask,24,1024,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;app_main,8,1024,app,As external,NULL,Dynamic,NULL,NULL
-FREERTOS.configCHECK_FOR_STACK_OVERFLOW=1
-FREERTOS.configENABLE_FPU=1
-FREERTOS.configGENERATE_RUN_TIME_STATS=1
-FREERTOS.configRECORD_STACK_HIGH_ADDRESS=1
-FREERTOS.configTOTAL_HEAP_SIZE=40960
-FREERTOS.configUSE_IDLE_HOOK=1
-FREERTOS.configUSE_TIMERS=1
-File.Version=6
-GPIO.groupedBy=Show All
-I2C1.CustomTiming=Disabled
-I2C1.IPParameters=Timing,CustomTiming
-I2C1.Timing=0x10707DBC
-KeepUserPlacement=false
-Mcu.Family=STM32WB
-Mcu.IP0=ADC1
-Mcu.IP1=COMP1
-Mcu.IP10=SPI2
-Mcu.IP11=SYS
-Mcu.IP12=TIM1
-Mcu.IP13=TIM2
-Mcu.IP14=TIM16
-Mcu.IP15=USART1
-Mcu.IP16=USB
-Mcu.IP17=USB_DEVICE
-Mcu.IP2=FREERTOS
-Mcu.IP3=HSEM
-Mcu.IP4=I2C1
-Mcu.IP5=NVIC
-Mcu.IP6=RCC
-Mcu.IP7=RF
-Mcu.IP8=RTC
-Mcu.IP9=SPI1
-Mcu.IPNb=18
-Mcu.Name=STM32WB55RGVx
-Mcu.Package=VFQFPN68
-Mcu.Pin0=PC13
-Mcu.Pin1=PC14-OSC32_IN
-Mcu.Pin10=PA0
-Mcu.Pin11=PA1
-Mcu.Pin12=PA2
-Mcu.Pin13=PA3
-Mcu.Pin14=PA4
-Mcu.Pin15=PA5
-Mcu.Pin16=PA6
-Mcu.Pin17=PA7
-Mcu.Pin18=PA8
-Mcu.Pin19=PA9
-Mcu.Pin2=PC15-OSC32_OUT
-Mcu.Pin20=PC4
-Mcu.Pin21=PC5
-Mcu.Pin22=PB2
-Mcu.Pin23=PB10
-Mcu.Pin24=PB11
-Mcu.Pin25=RF1
-Mcu.Pin26=OSC_OUT
-Mcu.Pin27=OSC_IN
-Mcu.Pin28=PB0
-Mcu.Pin29=PB1
-Mcu.Pin3=PH3-BOOT0
-Mcu.Pin30=PE4
-Mcu.Pin31=PB12
-Mcu.Pin32=PB13
-Mcu.Pin33=PB14
-Mcu.Pin34=PB15
-Mcu.Pin35=PC6
-Mcu.Pin36=PA10
-Mcu.Pin37=PA11
-Mcu.Pin38=PA12
-Mcu.Pin39=PA13
-Mcu.Pin4=PB8
-Mcu.Pin40=PA14
-Mcu.Pin41=PA15
-Mcu.Pin42=PC10
-Mcu.Pin43=PC11
-Mcu.Pin44=PC12
-Mcu.Pin45=PD0
-Mcu.Pin46=PD1
-Mcu.Pin47=PB3
-Mcu.Pin48=PB4
-Mcu.Pin49=PB5
-Mcu.Pin5=PB9
-Mcu.Pin50=PB6
-Mcu.Pin51=PB7
-Mcu.Pin52=VP_ADC1_TempSens_Input
-Mcu.Pin53=VP_ADC1_Vref_Input
-Mcu.Pin54=VP_COMP1_VS_VREFINT14
-Mcu.Pin55=VP_FREERTOS_VS_CMSIS_V2
-Mcu.Pin56=VP_HSEM_VS_HSEM
-Mcu.Pin57=VP_RTC_VS_RTC_Activate
-Mcu.Pin58=VP_RTC_VS_RTC_Calendar
-Mcu.Pin59=VP_SYS_VS_tim17
-Mcu.Pin6=PC0
-Mcu.Pin60=VP_TIM1_VS_ClockSourceINT
-Mcu.Pin61=VP_TIM2_VS_ClockSourceINT
-Mcu.Pin62=VP_TIM16_VS_ClockSourceINT
-Mcu.Pin63=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
-Mcu.Pin7=PC1
-Mcu.Pin8=PC2
-Mcu.Pin9=PC3
-Mcu.PinsNb=64
-Mcu.ThirdPartyNb=0
-Mcu.UserConstants=
-Mcu.UserName=STM32WB55RGVx
-MxCube.Version=6.0.1
-MxDb.Version=DB.6.0.0
-NVIC.ADC1_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
-NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
-NVIC.COMP_IRQn=true\:5\:0\:true\:false\:true\:false\:false\:true
-NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
-NVIC.EXTI15_10_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
-NVIC.EXTI1_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
-NVIC.EXTI2_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
-NVIC.EXTI9_5_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
-NVIC.ForceEnableDMAVector=true
-NVIC.HSEM_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true
-NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
-NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
-NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
-NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
-NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
-NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
-NVIC.SavedPendsvIrqHandlerGenerated=false
-NVIC.SavedSvcallIrqHandlerGenerated=false
-NVIC.SavedSystickIrqHandlerGenerated=true
-NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
-NVIC.TIM1_TRG_COM_TIM17_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
-NVIC.TIM2_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
-NVIC.TimeBase=TIM1_TRG_COM_TIM17_IRQn
-NVIC.TimeBaseIP=TIM17
-NVIC.USB_LP_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true
-NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
-OSC_IN.GPIOParameters=GPIO_Label
-OSC_IN.GPIO_Label=QUARTZ_32KHZ_IN
-OSC_IN.Locked=true
-OSC_IN.Mode=HSE-External-Oscillator
-OSC_IN.Signal=RCC_OSC_IN
-OSC_OUT.GPIOParameters=GPIO_Label
-OSC_OUT.GPIO_Label=QUARTZ_32KHZ_OUT
-OSC_OUT.Locked=true
-OSC_OUT.Mode=HSE-External-Oscillator
-OSC_OUT.Signal=RCC_OSC_OUT
-PA0.GPIOParameters=GPIO_Label
-PA0.GPIO_Label=IR_RX
-PA0.Signal=S_TIM2_CH1
-PA1.GPIOParameters=GPIO_Speed,PinState,GPIO_Label,GPIO_ModeDefaultOutputPP
-PA1.GPIO_Label=LED_RED
-PA1.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
-PA1.GPIO_Speed=GPIO_SPEED_FREQ_LOW
-PA1.Locked=true
-PA1.PinState=GPIO_PIN_SET
-PA1.Signal=GPIO_Output
-PA10.GPIOParameters=GPIO_Speed,GPIO_Label
-PA10.GPIO_Label=I2C_SDA
-PA10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
-PA10.Locked=true
-PA10.Mode=I2C
-PA10.Signal=I2C1_SDA
-PA11.GPIOParameters=GPIO_Speed
 PA11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
-PA11.Locked=true
-PA11.Mode=Device
-PA11.Signal=USB_DM
-PA12.GPIOParameters=GPIO_Speed
-PA12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
-PA12.Locked=true
-PA12.Mode=Device
-PA12.Signal=USB_DP
-PA13.Locked=true
-PA13.Mode=Serial_Wire
-PA13.Signal=SYS_JTMS-SWDIO
-PA14.Locked=true
-PA14.Mode=Serial_Wire
-PA14.Signal=SYS_JTCK-SWCLK
-PA15.GPIOParameters=GPIO_PuPd,GPIO_Label
-PA15.GPIO_Label=DISPLAY_BACKLIGHT
-PA15.GPIO_PuPd=GPIO_PULLDOWN
-PA15.Locked=true
-PA15.Signal=GPIO_Output
-PA2.GPIOParameters=GPIO_Speed,PinState,GPIO_Label,GPIO_ModeDefaultOutputPP
-PA2.GPIO_Label=LED_GREEN
-PA2.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
-PA2.GPIO_Speed=GPIO_SPEED_FREQ_LOW
-PA2.Locked=true
-PA2.PinState=GPIO_PIN_SET
-PA2.Signal=GPIO_Output
+PB13.GPIOParameters=GPIO_Label
+RCC.USART1Freq_Value=64000000
+RF1.Locked=true
+SPI1.VirtualType=VM_MASTER
+PB10.GPIO_PuPd=GPIO_PULLUP
+RF1.Signal=RF_RF1
+SPI2.VirtualType=VM_MASTER
+VP_ADC1_TempSens_Input.Mode=IN-TempSens
+PC12.Locked=true
+TIM1.IPParameters=Channel-Output Compare1 CH1N,Channel-PWM Generation3 CH3N
+PC12.Signal=GPIO_Output
+PB14.GPIO_Label=iBTN
+PC6.GPIO_Label=DISPLAY_DI
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+RCC.RTCFreq_Value=32768
 PA3.GPIOParameters=GPIO_Speed,PinState,GPIO_Label,GPIO_ModeDefaultOutputPP
-PA3.GPIO_Label=LED_BLUE
-PA3.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
-PA3.GPIO_Speed=GPIO_SPEED_FREQ_LOW
-PA3.Locked=true
-PA3.PinState=GPIO_PIN_SET
-PA3.Signal=GPIO_Output
-PA4.GPIOParameters=GPIO_Label
-PA4.GPIO_Label=PA4
-PA4.Signal=GPIO_Analog
-PA5.GPIOParameters=GPIO_Label
-PA5.GPIO_Label=PA5
-PA5.Signal=GPIO_Analog
-PA6.GPIOParameters=GPIO_Label
 PA6.GPIO_Label=PA6
-PA6.Signal=GPIO_Analog
-PA7.GPIOParameters=GPIO_Label
-PA7.GPIO_Label=PA7
-PA7.Signal=GPIO_Analog
-PA8.GPIOParameters=GPIO_Label
-PA8.GPIO_Label=RFID_PULL
-PA8.Locked=true
-PA8.Signal=GPXTI8
-PA9.GPIOParameters=GPIO_Speed,GPIO_Label
-PA9.GPIO_Label=I2C_SCL
-PA9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
-PA9.Locked=true
-PA9.Mode=I2C
-PA9.Signal=I2C1_SCL
-PB0.GPIOParameters=GPIO_Label
-PB0.GPIO_Label=DISPLAY_RST
-PB0.Locked=true
-PB0.Signal=GPIO_Output
-PB1.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
-PB1.GPIO_Label=BUTTON_DOWN
-PB1.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
-PB1.GPIO_PuPd=GPIO_PULLUP
-PB1.Locked=true
-PB1.Signal=GPXTI1
-PB10.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
-PB10.GPIO_Label=BUTTON_UP
-PB10.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
-PB10.GPIO_PuPd=GPIO_PULLUP
-PB10.Locked=true
-PB10.Signal=GPXTI10
-PB11.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
-PB11.GPIO_Label=BUTTON_LEFT
-PB11.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
-PB11.GPIO_PuPd=GPIO_PULLUP
-PB11.Locked=true
-PB11.Signal=GPXTI11
-PB12.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
-PB12.GPIO_Label=BUTTON_RIGHT
-PB12.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
-PB12.GPIO_PuPd=GPIO_PULLUP
-PB12.Locked=true
-PB12.Signal=GPXTI12
-PB13.GPIOParameters=GPIO_Label
-PB13.GPIO_Label=RFID_OUT
+COMP1.Hysteresis=COMP_HYSTERESIS_HIGH
+PD0.Locked=true
+VP_COMP1_VS_VREFINT14.Signal=COMP1_VS_VREFINT14
+USART1.IPParameters=VirtualMode-Asynchronous
+PA3.GPIO_Speed=GPIO_SPEED_FREQ_LOW
+PB13.Signal=TIM1_CH1N
+PA2.GPIOParameters=GPIO_Speed,PinState,GPIO_Label,GPIO_ModeDefaultOutputPP
+PC15-OSC32_OUT.GPIO_Label=QUARTZ_32MHZ_OUT
+PinOutPanel.RotationAngle=0
+RCC.MCO1PinFreq_Value=64000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+SH.GPXTI13.0=GPIO_EXTI13
+RCC.LPTIM1Freq_Value=64000000
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+FREERTOS.configENABLE_FPU=1
+NVIC.EXTI1_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
+NVIC.ADC1_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
+SH.S_TIM16_CH1.ConfNb=1
+SPI1.Direction=SPI_DIRECTION_2LINES
+TIM2.IPParameters=Channel-Input_Capture1_from_TI1,ICPolarity_CH1,AutoReloadPreload,Prescaler,Channel-Input_Capture2_from_TI1
+RCC.APB2TimFreq_Value=64000000
+PCC.Ble.PowerLevel=Min
+COMP1.Mode=COMP_POWERMODE_MEDIUMSPEED
+PB6.Signal=USART1_TX
+PB6.Mode=Asynchronous
+SPI1.CalculateBaudRate=4.0 MBits/s
+PC3.Signal=GPIO_Analog
+PD0.Signal=GPIO_Output
+VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
+RCC.PREFETCH_ENABLE=1
 PB13.Locked=true
-PB13.Mode=Output Compare1 CH1N
-PB13.Signal=TIM1_CH1N
-PB14.GPIOParameters=GPIO_Label
-PB14.GPIO_Label=iBTN
-PB14.Signal=GPIO_Analog
-PB15.GPIOParameters=GPIO_Label
-PB15.GPIO_Label=SPI_D_MOSI
-PB15.Locked=true
-PB15.Mode=TX_Only_Simplex_Unidirect_Master
-PB15.Signal=SPI2_MOSI
-PB2.GPIOParameters=GPIO_Label
-PB2.GPIO_Label=PB2
+NVIC.EXTI15_10_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
+ProjectManager.ProjectBuild=false
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 PB2.Signal=GPIO_Analog
-PB3.GPIOParameters=GPIO_Label
-PB3.GPIO_Label=SPI_R_SCK
-PB3.Locked=true
 PB3.Mode=Full_Duplex_Master
-PB3.Signal=SPI1_SCK
-PB4.GPIOParameters=GPIO_Label
-PB4.GPIO_Label=SPI_R_MISO
-PB4.Locked=true
-PB4.Mode=Full_Duplex_Master
-PB4.Signal=SPI1_MISO
-PB5.GPIOParameters=GPIO_Label
-PB5.GPIO_Label=SPI_R_MOSI
-PB5.Locked=true
-PB5.Mode=Full_Duplex_Master
-PB5.Signal=SPI1_MOSI
+PH3-BOOT0.Locked=true
+PA8.Locked=true
+PD1.GPIOParameters=GPIO_Label
+RCC.RTCClockSelection=RCC_RTCCLKSOURCE_LSE
+SH.GPXTI12.0=GPIO_EXTI12
+PD1.GPIO_Label=SPI_D_SCK
+PB12.GPIO_Label=BUTTON_RIGHT
+ProjectManager.FirmwarePackage=STM32Cube FW_WB V1.9.0
+VP_ADC1_Vref_Input.Mode=IN-Vrefint
+MxDb.Version=DB.6.0.0
+PB0.GPIOParameters=GPIO_Label
+PA1.GPIOParameters=GPIO_Speed,PinState,GPIO_Label,GPIO_ModeDefaultOutputPP
+ProjectManager.BackupPrevious=false
+VP_SYS_VS_tim17.Signal=SYS_VS_tim17
+PC4.GPIO_Label=CC1101_G0
+FREERTOS.HEAP_NUMBER=4
+PB1.GPIO_Label=BUTTON_DOWN
+NVIC.TIM2_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
+SPI1.DataSize=SPI_DATASIZE_8BIT
+PE4.GPIO_Label=NFC_CS
+SPI2.CalculateBaudRate=4.0 MBits/s
+PA8.Signal=GPXTI8
+RCC.PLLRCLKFreq_Value=64000000
+SH.GPXTI11.ConfNb=1
 PB6.Locked=true
-PB6.Mode=Asynchronous
-PB6.Signal=USART1_TX
-PB7.Locked=true
-PB7.Mode=Asynchronous
-PB7.Signal=USART1_RX
-PB8.GPIOParameters=GPIO_Label
-PB8.GPIO_Label=SPEAKER
-PB8.Locked=true
-PB8.Signal=S_TIM16_CH1
-PB9.GPIOParameters=GPIO_Label
-PB9.GPIO_Label=IR_TX
-PB9.Locked=true
-PB9.Mode=PWM Generation3 CH3N
+NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+ProjectManager.HalAssertFull=false
+ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
+VP_TIM1_VS_ClockSourceINT.Mode=Internal
+TIM16.Pulse=145
+PA0.Signal=S_TIM2_CH1
+PH3-BOOT0.Signal=GPIO_Analog
+NVIC.HSEM_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true
 PB9.Signal=TIM1_CH3N
-PC0.GPIOParameters=GPIO_Label
-PC0.GPIO_Label=PC0
-PC0.Signal=GPIO_Analog
-PC1.GPIOParameters=GPIO_Label
-PC1.GPIO_Label=PC1
-PC1.Signal=GPIO_Analog
-PC10.GPIOParameters=GPIO_Label
-PC10.GPIO_Label=PC10
-PC10.Signal=GPIO_Analog
-PC11.GPIOParameters=PinState,GPIO_Label
-PC11.GPIO_Label=DISPLAY_CS
+Mcu.Package=VFQFPN68
+TIM2.Prescaler=64-1
+PB1.Signal=GPXTI1
+NVIC.TimeBase=TIM1_TRG_COM_TIM17_IRQn
+SPI2.Mode=SPI_MODE_MASTER
+PA2.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
+SH.GPXTI11.0=GPIO_EXTI11
+SH.GPXTI8.0=GPIO_EXTI8
+PA14.Locked=true
+SH.GPXTI8.ConfNb=1
+NVIC.TimeBaseIP=TIM17
+RCC.LSCOPinFreq_Value=32000
+PA10.Signal=I2C1_SDA
+VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
+FREERTOS.FootprintOK=true
+PA5.GPIOParameters=GPIO_Label
+PA1.PinState=GPIO_PIN_SET
+NVIC.USB_LP_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true
+PB14.GPIOParameters=GPIO_Label
+VP_HSEM_VS_HSEM.Mode=HSEM_Activate
+NVIC.EXTI2_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
+RCC.PLLPoutputFreq_Value=64000000
+RCC.APB1TimFreq_Value=64000000
+FREERTOS.configGENERATE_RUN_TIME_STATS=1
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+RCC.LPUART1Freq_Value=64000000
+PB10.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
+PB13.Mode=Output Compare1 CH1N
+TIM16.Prescaler=500 - 1
+PC15-OSC32_OUT.GPIOParameters=GPIO_Label
+I2C1.CustomTiming=Disabled
+PA4.GPIO_Label=PA4
+ProjectManager.CustomerFirmwarePackage=
+PC4.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
+RCC.HSI48_VALUE=48000000
+PC2.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
+PA6.GPIOParameters=GPIO_Label
+SH.GPXTI10.0=GPIO_EXTI10
+PCC.Ble.Mode=NOT_SELECTED
+PC4.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
+RCC.PLLQoutputFreq_Value=64000000
+ProjectManager.ProjectFileName=f3.ioc
+RCC.SMPSFreq_Value=8000000
+PA3.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
+FREERTOS.Tasks01=defaultTask,24,1024,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;app_main,8,1024,app,As external,NULL,Dynamic,NULL,NULL
+ADC1.Rank-0\#ChannelRegularConversion=1
+PA15.GPIOParameters=GPIO_PuPd,GPIO_Label
+Mcu.PinsNb=64
 PC11.Locked=true
-PC11.PinState=GPIO_PIN_SET
-PC11.Signal=GPIO_Output
-PC12.GPIOParameters=GPIO_Speed,PinState,GPIO_Label
-PC12.GPIO_Label=SD_CS
-PC12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
-PC12.Locked=true
-PC12.PinState=GPIO_PIN_SET
-PC12.Signal=GPIO_Output
-PC13.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
-PC13.GPIO_Label=BUTTON_BACK
-PC13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
-PC13.GPIO_PuPd=GPIO_PULLUP
+VP_SYS_VS_tim17.Mode=TIM17
+ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag,master,EnableAnalogWatchDog1,ContinuousConvMode
 PC13.Locked=true
+ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
+RCC.HCLK3Freq_Value=64000000
+PA9.GPIO_Label=I2C_SCL
 PC13.Signal=GPXTI13
-PC14-OSC32_IN.GPIOParameters=GPIO_Label
-PC14-OSC32_IN.GPIO_Label=QUARTZ_32MHZ_IN
-PC14-OSC32_IN.Locked=true
-PC14-OSC32_IN.Mode=LSE-External-Oscillator
-PC14-OSC32_IN.Signal=RCC_OSC32_IN
-PC15-OSC32_OUT.GPIOParameters=GPIO_Label
-PC15-OSC32_OUT.GPIO_Label=QUARTZ_32MHZ_OUT
-PC15-OSC32_OUT.Locked=true
-PC15-OSC32_OUT.Mode=LSE-External-Oscillator
-PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
-PC2.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
-PC2.GPIO_Label=BUTTON_OK
-PC2.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
-PC2.GPIO_PuPd=GPIO_PULLUP
-PC2.Locked=true
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=1
 PC2.Signal=GPXTI2
-PC3.GPIOParameters=GPIO_Label
-PC3.GPIO_Label=PC3
-PC3.Signal=GPIO_Analog
-PC4.GPIOParameters=GPIO_Label
-PC4.GPIO_Label=CC1101_G0
-PC4.Locked=true
-PC4.Signal=GPIO_Input
-PC5.GPIOParameters=GPIO_Label
-PC5.GPIO_Label=RFID_RF_IN
-PC5.Locked=true
-PC5.Signal=SharedAnalog_PC5
-PC6.GPIOParameters=GPIO_Label
-PC6.GPIO_Label=DISPLAY_DI
-PC6.Locked=true
 PC6.Signal=GPIO_Output
-PCC.Ble.ConnectionInterval=1000.0
-PCC.Ble.DataLength=6
-PCC.Ble.Mode=NOT_SELECTED
-PCC.Ble.PowerLevel=Min
-PD0.GPIOParameters=GPIO_Speed,PinState,GPIO_Label
-PD0.GPIO_Label=CC1101_CS
+PB11.GPIO_Label=BUTTON_LEFT
+PD1.Signal=SPI2_SCK
+SH.S_TIM16_CH1.0=TIM16_CH1,PWM Generation1 CH1
+VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
+SPI1.CLKPhase=SPI_PHASE_2EDGE
+OSC_IN.Locked=true
+RCC.HCLK2Freq_Value=32000000
+PC0.Signal=GPIO_Analog
+PC14-OSC32_IN.Signal=RCC_OSC32_IN
+PC11.GPIOParameters=PinState,GPIO_Label
+Mcu.Pin62=VP_TIM16_VS_ClockSourceINT
+Mcu.Pin63=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
+Mcu.Pin60=VP_TIM1_VS_ClockSourceINT
+Mcu.Pin61=VP_TIM2_VS_ClockSourceINT
 PD0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
-PD0.Locked=true
-PD0.PinState=GPIO_PIN_SET
-PD0.Signal=GPIO_Output
-PD1.GPIOParameters=GPIO_Label
-PD1.GPIO_Label=SPI_D_SCK
-PD1.Locked=true
+PC3.GPIOParameters=GPIO_Label
+PB8.GPIO_Label=SPEAKER
+PA11.Locked=true
+PA15.Locked=true
+PA8.GPIO_Label=RFID_PULL
+PC15-OSC32_OUT.Locked=true
+Mcu.Pin59=VP_SYS_VS_tim17
+SH.GPXTI2.ConfNb=1
+Mcu.Pin57=VP_RTC_VS_RTC_Activate
+Mcu.Pin58=VP_RTC_VS_RTC_Calendar
+PC12.PinState=GPIO_PIN_SET
+USB_DEVICE.PRODUCT_STRING_CDC_FS=Flipper Control Virtual ComPort
+Mcu.Pin51=PB7
+Mcu.Pin52=VP_ADC1_TempSens_Input
+Mcu.Pin50=PB6
+Mcu.Pin55=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin56=VP_HSEM_VS_HSEM
+Mcu.Pin53=VP_ADC1_Vref_Input
+Mcu.Pin54=VP_COMP1_VS_VREFINT14
+PC6.Locked=true
+PA9.Signal=I2C1_SCL
+VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
+I2C1.Timing=0x10707DBC
+PB11.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
+PB9.Locked=true
+PB5.Locked=true
+OSC_IN.Signal=RCC_OSC_IN
+Mcu.Pin48=PB4
+Mcu.Pin49=PB5
+RCC.PLLSAI1PoutputFreq_Value=48000000
+Mcu.Pin46=PD1
+Mcu.Pin47=PB3
+PB10.Signal=GPXTI10
+PB14.Signal=GPIO_Analog
+PA5.Signal=GPIO_Analog
+Mcu.Pin40=PA14
+Mcu.Pin41=PA15
+Mcu.Pin44=PC12
+Mcu.Pin45=PD0
+Mcu.Pin42=PC10
+Mcu.Pin43=PC11
+RCC.Cortex2Freq_Value=32000000
+ProjectManager.LastFirmware=true
 PD1.Mode=TX_Only_Simplex_Unidirect_Master
-PD1.Signal=SPI2_SCK
-PE4.GPIOParameters=GPIO_Speed,PinState,GPIO_Label
-PE4.GPIO_Label=NFC_CS
-PE4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
-PE4.Locked=true
-PE4.PinState=GPIO_PIN_SET
-PE4.Signal=GPIO_Output
-PH3-BOOT0.GPIOParameters=GPIO_Label
-PH3-BOOT0.GPIO_Label=BOOT0
-PH3-BOOT0.Locked=true
-PH3-BOOT0.Signal=GPIO_Analog
-PinOutPanel.RotationAngle=0
-ProjectManager.AskForMigrate=true
-ProjectManager.BackupPrevious=false
-ProjectManager.CompilerOptimize=6
-ProjectManager.ComputerToolchain=false
-ProjectManager.CoupleFile=true
-ProjectManager.CustomerFirmwarePackage=
-ProjectManager.DefaultFWLocation=true
-ProjectManager.DeletePrevious=true
-ProjectManager.DeviceId=STM32WB55RGVx
-ProjectManager.FirmwarePackage=STM32Cube FW_WB V1.9.0
+Mcu.Pin37=PA11
+PB4.GPIO_Label=SPI_R_MISO
+PCC.Ble.DataLength=6
+Mcu.Pin38=PA12
+Mcu.Pin35=PC6
+PB15.GPIO_Label=SPI_D_MOSI
+RCC.I2C1Freq_Value=64000000
+Mcu.Pin36=PA10
+SPI1.Mode=SPI_MODE_MASTER
+Mcu.Pin39=PA13
+RCC.LCDFreq_Value=32768
+RCC.RNGFreq_Value=32000
+PC2.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
+VP_ADC1_TempSens_Input.Signal=ADC1_TempSens_Input
+Mcu.Pin30=PE4
+NVIC.COMP_IRQn=true\:5\:0\:true\:false\:true\:false\:false\:true
+PA1.GPIO_Label=LED_RED
+Mcu.Pin33=PB14
+Mcu.Pin34=PB15
+Mcu.Pin31=PB12
+Mcu.Pin32=PB13
+PA9.Locked=true
+VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+PC10.GPIOParameters=GPIO_Label
+PA13.Mode=Serial_Wire
 ProjectManager.FreePins=false
-ProjectManager.HalAssertFull=false
+PB10.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
+RCC.LPTIM2Freq_Value=64000000
+Mcu.Pin26=OSC_OUT
+Mcu.Pin27=OSC_IN
+Mcu.Pin24=PB11
+ProjectManager.UnderRoot=false
+Mcu.Pin25=RF1
+Mcu.Pin28=PB0
+Mcu.Pin29=PB1
+PB4.Locked=true
+PA4.Signal=GPIO_Analog
+Mcu.Pin22=PB2
+PB5.Signal=SPI1_MOSI
+Mcu.Pin23=PB10
+Mcu.Pin20=PC4
+ADC1.master=1
+PA3.Locked=true
+Mcu.Pin21=PC5
+PA5.GPIO_Label=PA5
+PA10.Locked=true
+NVIC.ForceEnableDMAVector=true
+OSC_IN.Mode=HSE-External-Oscillator
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PC12.GPIO_Label=SD_CS
+ProjectManager.CompilerOptimize=6
+PA11.Signal=USB_DM
 ProjectManager.HeapSize=0x200
-ProjectManager.KeepUserCode=true
-ProjectManager.LastFirmware=true
-ProjectManager.LibraryCopy=2
+PA0.GPIOParameters=GPIO_Label
+Mcu.Pin15=PA5
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+Mcu.Pin16=PA6
+Mcu.Pin13=PA3
+Mcu.Pin14=PA4
+Mcu.Pin19=PA9
+ProjectManager.ComputerToolchain=false
+Mcu.Pin17=PA7
+Mcu.Pin18=PA8
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+Mcu.Pin11=PA1
+Mcu.Pin12=PA2
+PD0.GPIOParameters=GPIO_Speed,PinState,GPIO_Label
+Mcu.Pin10=PA0
+SH.GPXTI10.ConfNb=1
+USB_DEVICE.APP_RX_DATA_SIZE=512
+TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
+PC3.GPIO_Label=PC3
+PA3.PinState=GPIO_PIN_SET
+PE4.PinState=GPIO_PIN_SET
+RCC.PWRFreq_Value=64000000
+SPI2.DataSize=SPI_DATASIZE_8BIT
+SH.SharedAnalog_PC5.ConfNb=2
+SH.GPXTI1.ConfNb=1
+PB12.GPIO_PuPd=GPIO_PULLUP
+PD1.Locked=true
+PB0.Signal=GPIO_Output
+PA7.GPIOParameters=GPIO_Label
+PC1.Signal=GPIO_Analog
+PB12.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
+Mcu.Family=STM32WB
+SH.GPXTI1.0=GPIO_EXTI1
 ProjectManager.MainLocation=Src
-ProjectManager.NoMain=false
-ProjectManager.PreviousToolchain=
-ProjectManager.ProjectBuild=false
-ProjectManager.ProjectFileName=f3.ioc
-ProjectManager.ProjectName=f3
-ProjectManager.RegisterCallBack=
-ProjectManager.StackSize=0x400
-ProjectManager.TargetToolchain=Makefile
-ProjectManager.ToolChainLocation=
-ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_ADC1_Init-ADC1-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_RTC_Init-RTC-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_SPI2_Init-SPI2-false-HAL-true,8-MX_USART1_UART_Init-USART1-false-HAL-true,9-MX_USB_Device_Init-USB_DEVICE-false-HAL-false,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_TIM2_Init-TIM2-false-HAL-true,12-MX_TIM16_Init-TIM16-false-HAL-true,13-MX_COMP1_Init-COMP1-false-HAL-true,14-MX_RF_Init-RF-false-HAL-true,0-MX_HSEM_Init-HSEM-false-HAL-true
-RCC.ADCFreq_Value=48000000
-RCC.AHB2CLKDivider=RCC_SYSCLK_DIV2
-RCC.AHBFreq_Value=64000000
-RCC.APB1Freq_Value=64000000
-RCC.APB1TimFreq_Value=64000000
-RCC.APB2Freq_Value=64000000
-RCC.APB2TimFreq_Value=64000000
-RCC.APB3Freq_Value=16000000
-RCC.Cortex2Freq_Value=32000000
+OSC_OUT.GPIO_Label=QUARTZ_32KHZ_OUT
+USB_DEVICE.CLASS_NAME_FS=CDC
+RCC.SAI1Freq_Value=48000000
 RCC.CortexFreq_Value=64000000
-RCC.EnbaleCSS=true
-RCC.FCLK2Freq_Value=32000000
+TIM2.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
+ProjectManager.KeepUserCode=true
+Mcu.UserName=STM32WB55RGVx
+ADC1.ContinuousConvMode=DISABLE
+RCC.RFWKPFreq_Value=976.5625
+PC10.Signal=GPIO_Analog
+RCC.PLLSAI1RoutputFreq_Value=48000000
+PC5.Locked=true
+PA0.GPIO_Label=IR_RX
+PA12.GPIOParameters=GPIO_Speed
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_ADC1_Init-ADC1-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_RTC_Init-RTC-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_SPI2_Init-SPI2-false-HAL-true,8-MX_USART1_UART_Init-USART1-false-HAL-true,9-MX_USB_Device_Init-USB_DEVICE-false-HAL-false,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_TIM2_Init-TIM2-false-HAL-true,12-MX_TIM16_Init-TIM16-false-HAL-true,13-MX_COMP1_Init-COMP1-false-HAL-true,14-MX_RF_Init-RF-false-HAL-true,0-MX_HSEM_Init-HSEM-false-HAL-true
+PC0.GPIOParameters=GPIO_Label
+PA9.GPIOParameters=GPIO_Speed,GPIO_Label
+PA2.GPIO_Speed=GPIO_SPEED_FREQ_LOW
+PH3-BOOT0.GPIO_Label=BOOT0
+PA11.GPIOParameters=GPIO_Speed
+PD0.GPIO_Label=CC1101_CS
+PC0.GPIO_Label=PC0
+PA11.Mode=Device
+PB0.GPIO_Label=DISPLAY_RST
+VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
+PB11.GPIO_PuPd=GPIO_PULLUP
+PC13.GPIO_Label=BUTTON_BACK
+PB13.GPIO_Label=RFID_OUT
+PB11.Signal=GPXTI11
+PB15.Signal=SPI2_MOSI
+OSC_OUT.GPIOParameters=GPIO_Label
+ProjectManager.StackSize=0x400
+PB5.GPIOParameters=GPIO_Label
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+SH.GPXTI2.0=GPIO_EXTI2
+RCC.I2C3Freq_Value=64000000
+Mcu.IP4=I2C1
+Mcu.IP5=NVIC
 RCC.FCLKCortexFreq_Value=64000000
-RCC.FamilyName=M
-RCC.HCLK2Freq_Value=32000000
-RCC.HCLK3Freq_Value=64000000
+USB_DEVICE.MANUFACTURER_STRING=Flipper
+Mcu.IP2=FREERTOS
+I2C1.IPParameters=Timing,CustomTiming
+Mcu.IP3=HSEM
+PA15.GPIO_Label=DISPLAY_BACKLIGHT
+PB4.GPIOParameters=GPIO_Label
+Mcu.IP0=ADC1
+PA12.Locked=true
+Mcu.IP1=COMP1
+PA12.Signal=USB_DP
+PE4.GPIOParameters=GPIO_Speed,PinState,GPIO_Label
+Mcu.UserConstants=
+RCC.VCOSAI1OutputFreq_Value=96000000
+TIM2.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_FALLING
+PC1.GPIOParameters=GPIO_Label
+SH.GPXTI13.ConfNb=1
+Mcu.ThirdPartyNb=0
+PB1.GPIO_PuPd=GPIO_PULLUP
 RCC.HCLKFreq_Value=64000000
-RCC.HCLKRFFreq_Value=16000000
+Mcu.IPNb=18
+ProjectManager.PreviousToolchain=
+PB1.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
+PA8.GPIOParameters=GPIO_Label
+Mcu.Pin6=PC0
+Mcu.Pin7=PC1
+Mcu.Pin8=PC2
+Mcu.Pin9=PC3
+OSC_OUT.Mode=HSE-External-Oscillator
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,HEAP_NUMBER,configUSE_TIMERS,configUSE_IDLE_HOOK,FootprintOK,configCHECK_FOR_STACK_OVERFLOW,configRECORD_STACK_HIGH_ADDRESS,configGENERATE_RUN_TIME_STATS,configENABLE_FPU
+OSC_OUT.Signal=RCC_OSC_OUT
+RCC.AHBFreq_Value=64000000
+SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
+Mcu.Pin0=PC13
+Mcu.Pin1=PC14-OSC32_IN
+GPIO.groupedBy=Show All
+Mcu.Pin2=PC15-OSC32_OUT
+Mcu.Pin3=PH3-BOOT0
+Mcu.Pin4=PB8
+Mcu.Pin5=PB9
+ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_14
 RCC.HSE_VALUE=32000000
-RCC.HSI48_VALUE=48000000
-RCC.HSI_VALUE=16000000
-RCC.I2C1Freq_Value=64000000
-RCC.I2C3Freq_Value=64000000
-RCC.IPParameters=ADCFreq_Value,AHB2CLKDivider,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB3Freq_Value,Cortex2Freq_Value,CortexFreq_Value,EnbaleCSS,FCLK2Freq_Value,FCLKCortexFreq_Value,FamilyName,HCLK2Freq_Value,HCLK3Freq_Value,HCLKFreq_Value,HCLKRFFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C3Freq_Value,LCDFreq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MSIOscState,PLLM,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1N,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PLLSourceVirtual,PREFETCH_ENABLE,PWRFreq_Value,RFWKPFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SMPS1Freq_Value,SMPSCLockSelectionVirtual,SMPSFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,USART1Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value
-RCC.LCDFreq_Value=32768
-RCC.LPTIM1Freq_Value=64000000
-RCC.LPTIM2Freq_Value=64000000
-RCC.LPUART1Freq_Value=64000000
-RCC.LSCOPinFreq_Value=32000
+RCC.FCLK2Freq_Value=32000000
+FREERTOS.configUSE_TIMERS=1
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PH3-BOOT0.GPIOParameters=GPIO_Label
+Mcu.IP10=SPI2
+NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+Mcu.IP12=TIM1
+Mcu.IP11=SYS
+Mcu.IP17=USB_DEVICE
+NVIC.TIM1_TRG_COM_TIM17_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+PA2.PinState=GPIO_PIN_SET
+Mcu.IP14=TIM16
+PB4.Mode=Full_Duplex_Master
+Mcu.IP13=TIM2
+Mcu.IP16=USB
+Mcu.IP15=USART1
+PC14-OSC32_IN.Mode=LSE-External-Oscillator
+RCC.VCOInputFreq_Value=16000000
+PD0.PinState=GPIO_PIN_SET
+PA14.Mode=Serial_Wire
+PE4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
+PC11.GPIO_Label=DISPLAY_CS
+PB5.Mode=Full_Duplex_Master
+File.Version=6
+PA10.GPIO_Label=I2C_SDA
+PC13.GPIO_PuPd=GPIO_PULLUP
+PB3.GPIOParameters=GPIO_Label
+SH.S_TIM2_CH1.ConfNb=2
+PB7.Signal=USART1_RX
+PB8.Locked=true
+PE4.Signal=GPIO_Output
+PB0.Locked=true
+FREERTOS.configTOTAL_HEAP_SIZE=40960
+PC14-OSC32_IN.GPIOParameters=GPIO_Label
+ProjectManager.ProjectName=f3
+RCC.APB3Freq_Value=16000000
+PA6.Signal=GPIO_Analog
+TIM2.Channel-Input_Capture2_from_TI1=TIM_CHANNEL_2
+RCC.EnbaleCSS=true
+ProjectManager.ToolChainLocation=
+PA2.GPIO_Label=LED_GREEN
 RCC.LSI_VALUE=32000
-RCC.MCO1PinFreq_Value=64000000
+PB11.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
+PA15.Signal=GPIO_Output
+VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS
 RCC.MSIOscState=DISABLED
-RCC.PLLM=RCC_PLLM_DIV2
-RCC.PLLPoutputFreq_Value=64000000
-RCC.PLLQoutputFreq_Value=64000000
-RCC.PLLRCLKFreq_Value=64000000
+SPI2.CLKPhase=SPI_PHASE_1EDGE
+PA10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
+PB5.GPIO_Label=SPI_R_MOSI
+PC4.Locked=true
+PC14-OSC32_IN.GPIO_Label=QUARTZ_32MHZ_IN
+SPI2.Direction=SPI_DIRECTION_2LINES
+PC5.Signal=SharedAnalog_PC5
+SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
+OSC_IN.GPIO_Label=QUARTZ_32KHZ_IN
+PC2.GPIO_Label=BUTTON_OK
+PC14-OSC32_IN.Locked=true
+PA12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
+COMP1.TriggerMode=COMP_TRIGGERMODE_IT_RISING_FALLING
+PB15.Locked=true
+PB3.Locked=true
+PB4.Signal=SPI1_MISO
 RCC.PLLSAI1N=6
-RCC.PLLSAI1PoutputFreq_Value=48000000
-RCC.PLLSAI1QoutputFreq_Value=48000000
-RCC.PLLSAI1RoutputFreq_Value=48000000
+PA3.Signal=GPIO_Output
+PA2.Locked=true
+PB3.GPIO_Label=SPI_R_SCK
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
-RCC.PREFETCH_ENABLE=1
-RCC.PWRFreq_Value=64000000
-RCC.RFWKPFreq_Value=976.5625
-RCC.RNGFreq_Value=32000
-RCC.RTCClockSelection=RCC_RTCCLKSOURCE_LSE
-RCC.RTCFreq_Value=32768
-RCC.SAI1Freq_Value=48000000
-RCC.SMPS1Freq_Value=16000000
-RCC.SMPSCLockSelectionVirtual=RCC_SMPSCLKSOURCE_HSE
-RCC.SMPSFreq_Value=8000000
-RCC.SYSCLKFreq_VALUE=64000000
-RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
-RCC.USART1Freq_Value=64000000
-RCC.USBFreq_Value=48000000
-RCC.VCOInputFreq_Value=16000000
-RCC.VCOOutputFreq_Value=128000000
-RCC.VCOSAI1OutputFreq_Value=96000000
-RF1.Locked=true
-RF1.Mode=RF1_Activate
-RF1.Signal=RF_RF1
-SH.GPXTI1.0=GPIO_EXTI1
-SH.GPXTI1.ConfNb=1
-SH.GPXTI10.0=GPIO_EXTI10
-SH.GPXTI10.ConfNb=1
-SH.GPXTI11.0=GPIO_EXTI11
-SH.GPXTI11.ConfNb=1
-SH.GPXTI12.0=GPIO_EXTI12
-SH.GPXTI12.ConfNb=1
-SH.GPXTI13.0=GPIO_EXTI13
-SH.GPXTI13.ConfNb=1
-SH.GPXTI2.0=GPIO_EXTI2
-SH.GPXTI2.ConfNb=1
-SH.GPXTI8.0=GPIO_EXTI8
-SH.GPXTI8.ConfNb=1
-SH.S_TIM16_CH1.0=TIM16_CH1,PWM Generation1 CH1
-SH.S_TIM16_CH1.ConfNb=1
-SH.S_TIM2_CH1.0=TIM2_CH1,Input_Capture1_from_TI1
+PC15-OSC32_OUT.Mode=LSE-External-Oscillator
 SH.S_TIM2_CH1.1=TIM2_CH1,Input_Capture2_from_TI1
-SH.S_TIM2_CH1.ConfNb=2
-SH.SharedAnalog_PC5.0=COMP1_INP,INP
-SH.SharedAnalog_PC5.1=ADC1_IN14,IN14-Single-Ended
-SH.SharedAnalog_PC5.ConfNb=2
-SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
-SPI1.CLKPhase=SPI_PHASE_2EDGE
-SPI1.CalculateBaudRate=4.0 MBits/s
-SPI1.DataSize=SPI_DATASIZE_8BIT
-SPI1.Direction=SPI_DIRECTION_2LINES
+SH.S_TIM2_CH1.0=TIM2_CH1,Input_Capture1_from_TI1
+PB8.GPIOParameters=GPIO_Label
+PB9.GPIO_Label=IR_TX
+PC10.GPIO_Label=PC10
+PA10.Mode=I2C
+ProjectManager.NoMain=false
 SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,DataSize,CLKPhase
-SPI1.Mode=SPI_MODE_MASTER
-SPI1.VirtualType=VM_MASTER
-SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
-SPI2.CLKPhase=SPI_PHASE_1EDGE
-SPI2.CalculateBaudRate=4.0 MBits/s
-SPI2.DataSize=SPI_DATASIZE_8BIT
-SPI2.Direction=SPI_DIRECTION_2LINES
-SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPhase
-SPI2.Mode=SPI_MODE_MASTER
-SPI2.VirtualType=VM_MASTER
-TIM1.Channel-Output\ Compare1\ CH1N=TIM_CHANNEL_1
-TIM1.Channel-PWM\ Generation3\ CH3N=TIM_CHANNEL_3
-TIM1.IPParameters=Channel-Output Compare1 CH1N,Channel-PWM Generation3 CH3N
+USB_DEVICE.VirtualModeFS=Cdc_FS
+PC4.GPIO_PuPd=GPIO_PULLDOWN
+NVIC.SavedSvcallIrqHandlerGenerated=false
+PC11.Signal=GPIO_Output
+PC4.Signal=GPXTI4
+ProjectManager.DefaultFWLocation=true
+VP_HSEM_VS_HSEM.Signal=HSEM_VS_HSEM
+OSC_IN.GPIOParameters=GPIO_Label
+PB12.Locked=true
+ProjectManager.DeletePrevious=true
+PB10.Locked=true
+USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,MANUFACTURER_STRING,PRODUCT_STRING_CDC_FS,APP_RX_DATA_SIZE,APP_TX_DATA_SIZE
 TIM16.Channel=TIM_CHANNEL_1
-TIM16.IPParameters=Channel,Pulse,Prescaler,Period
-TIM16.Period=291
-TIM16.Prescaler=500 - 1
-TIM16.Pulse=145
-TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
-TIM2.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
-TIM2.Channel-Input_Capture2_from_TI1=TIM_CHANNEL_2
-TIM2.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_FALLING
-TIM2.IPParameters=Channel-Input_Capture1_from_TI1,ICPolarity_CH1,AutoReloadPreload,Prescaler,Channel-Input_Capture2_from_TI1
-TIM2.Prescaler=64-1
-USART1.IPParameters=VirtualMode-Asynchronous
+RCC.AHB2CLKDivider=RCC_SYSCLK_DIV2
+RCC.FamilyName=M
+PB9.GPIOParameters=GPIO_Label
+PC12.GPIOParameters=GPIO_Speed,PinState,GPIO_Label
 USART1.VirtualMode-Asynchronous=VM_ASYNC
-USB_DEVICE.APP_RX_DATA_SIZE=512
-USB_DEVICE.APP_TX_DATA_SIZE=512
-USB_DEVICE.CLASS_NAME_FS=CDC
-USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,MANUFACTURER_STRING,PRODUCT_STRING_CDC_FS,APP_RX_DATA_SIZE,APP_TX_DATA_SIZE
-USB_DEVICE.MANUFACTURER_STRING=Flipper
-USB_DEVICE.PRODUCT_STRING_CDC_FS=Flipper Control Virtual ComPort
-USB_DEVICE.VirtualMode=Cdc
-USB_DEVICE.VirtualModeFS=Cdc_FS
-VP_ADC1_TempSens_Input.Mode=IN-TempSens
-VP_ADC1_TempSens_Input.Signal=ADC1_TempSens_Input
-VP_ADC1_Vref_Input.Mode=IN-Vrefint
-VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input
+PA13.Signal=SYS_JTMS-SWDIO
+FREERTOS.configUSE_IDLE_HOOK=1
 VP_COMP1_VS_VREFINT14.Mode=VREFINT_14
-VP_COMP1_VS_VREFINT14.Signal=COMP1_VS_VREFINT14
-VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
-VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
-VP_HSEM_VS_HSEM.Mode=HSEM_Activate
-VP_HSEM_VS_HSEM.Signal=HSEM_VS_HSEM
-VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
-VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
-VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
-VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
-VP_SYS_VS_tim17.Mode=TIM17
-VP_SYS_VS_tim17.Signal=SYS_VS_tim17
-VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
-VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT
-VP_TIM1_VS_ClockSourceINT.Mode=Internal
-VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
-VP_TIM2_VS_ClockSourceINT.Mode=Internal
-VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
+PA9.Mode=I2C
+TIM1.Channel-Output\ Compare1\ CH1N=TIM_CHANNEL_1
+FREERTOS.configRECORD_STACK_HIGH_ADDRESS=1
+ProjectManager.TargetToolchain=Makefile
+PB10.GPIO_Label=BUTTON_UP
 VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS
-VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS
+RCC.HCLKRFFreq_Value=16000000
+PC5.GPIOParameters=GPIO_Label
+PB9.Mode=PWM Generation3 CH3N
+PB2.GPIOParameters=GPIO_Label
+SH.GPXTI12.ConfNb=1
+PE4.Locked=true
+SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPhase
+ADC1.EnableAnalogWatchDog1=false
+PC2.Locked=true
+ProjectManager.RegisterCallBack=
+RCC.USBFreq_Value=48000000
+TIM1.Channel-PWM\ Generation3\ CH3N=TIM_CHANNEL_3
+PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
+PA1.Signal=GPIO_Output
+PB1.Locked=true
+RCC.SMPSCLockSelectionVirtual=RCC_SMPSCLKSOURCE_HSE
 board=custom
+RCC.VCOOutputFreq_Value=128000000
+RCC.SMPS1Freq_Value=16000000
+PB15.Mode=TX_Only_Simplex_Unidirect_Master
+TIM16.Period=291
+NVIC.SavedSystickIrqHandlerGenerated=true
+RCC.APB2Freq_Value=64000000
+PC11.PinState=GPIO_PIN_SET
+COMP1.IPParameters=TriggerMode,Hysteresis,Mode
+MxCube.Version=6.0.1
+VP_TIM2_VS_ClockSourceINT.Mode=Internal
+PC13.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
+PA1.GPIO_Speed=GPIO_SPEED_FREQ_LOW
+SH.SharedAnalog_PC5.0=COMP1_INP,INP
+RCC.PLLSAI1QoutputFreq_Value=48000000
+RCC.ADCFreq_Value=48000000
+PC1.GPIO_Label=PC1
+PA10.GPIOParameters=GPIO_Speed,GPIO_Label
+VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input
+SH.SharedAnalog_PC5.1=ADC1_IN14,IN14-Single-Ended
+OSC_OUT.Locked=true
+PA4.GPIOParameters=GPIO_Label
+PC2.GPIO_PuPd=GPIO_PULLUP
+PB15.GPIOParameters=GPIO_Label
+RCC.IPParameters=ADCFreq_Value,AHB2CLKDivider,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB3Freq_Value,Cortex2Freq_Value,CortexFreq_Value,EnbaleCSS,FCLK2Freq_Value,FCLKCortexFreq_Value,FamilyName,HCLK2Freq_Value,HCLK3Freq_Value,HCLKFreq_Value,HCLKRFFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C3Freq_Value,LCDFreq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MSIOscState,PLLM,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1N,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PLLSourceVirtual,PREFETCH_ENABLE,PWRFreq_Value,RFWKPFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SMPS1Freq_Value,SMPSCLockSelectionVirtual,SMPSFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,USART1Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value
+ProjectManager.AskForMigrate=true
+Mcu.Name=STM32WB55RGVx
+NVIC.SavedPendsvIrqHandlerGenerated=false
+PA2.Signal=GPIO_Output
+Mcu.IP8=RTC
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+Mcu.IP9=SPI1
+Mcu.IP6=RCC
+Mcu.IP7=RF
+ProjectManager.CoupleFile=true
+PB3.Signal=SPI1_SCK
+RCC.SYSCLKFreq_VALUE=64000000
+PA7.GPIO_Label=PA7
+PA1.Locked=true
+SH.GPXTI4.0=GPIO_EXTI4
+PA12.Mode=Device
+PCC.Ble.ConnectionInterval=1000.0
+KeepUserPlacement=false
+PC13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
+PC5.GPIO_Label=RFID_RF_IN
+PA13.Locked=true
+RF1.Mode=RF1_Activate
+PB7.Mode=Asynchronous
+NVIC.EXTI9_5_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true
+USB_DEVICE.APP_TX_DATA_SIZE=512
+PA14.Signal=SYS_JTCK-SWCLK
+PB2.GPIO_Label=PB2
+SH.GPXTI4.ConfNb=1
+PC6.GPIOParameters=GPIO_Label
+PB12.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
+RCC.HSI_VALUE=16000000
+ADC1.NbrOfConversionFlag=1
+RCC.PLLM=RCC_PLLM_DIV2
+PA15.GPIO_PuPd=GPIO_PULLDOWN
+PB7.Locked=true
+PB8.Signal=S_TIM16_CH1
+PA9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
+TIM16.IPParameters=Channel,Pulse,Prescaler,Period
+RCC.APB1Freq_Value=64000000
+PC12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
+USB_DEVICE.VirtualMode=Cdc
+PB11.Locked=true
+ProjectManager.DeviceId=STM32WB55RGVx
+PB12.Signal=GPXTI12
+ProjectManager.LibraryCopy=2
+PA3.GPIO_Label=LED_BLUE
+PB1.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
+PA7.Signal=GPIO_Analog
+PA1.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD

+ 4 - 0
firmware/targets/local/api-hal/api-hal-gpio.c

@@ -49,3 +49,7 @@ bool hal_gpio_read(const GpioPin* gpio) {
     // TODO emulate pin state?
     return false;
 }
+
+void enable_cc1101_irq() {
+    printf("enable cc1101 irq\n");
+}

+ 3 - 1
firmware/targets/local/api-hal/api-hal-gpio.h

@@ -50,4 +50,6 @@ void hal_gpio_init(
 void hal_gpio_write(const GpioPin* gpio, const bool state);
 
 // read value from GPIO, false = LOW, true = HIGH
-bool hal_gpio_read(const GpioPin* gpio);
+bool hal_gpio_read(const GpioPin* gpio);
+
+void enable_cc1101_irq();