Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Lowpower/STM32_WPAN/App/lowpower_app.c')
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Lowpower/STM32_WPAN/App/lowpower_app.c167
1 files changed, 167 insertions, 0 deletions
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Lowpower/STM32_WPAN/App/lowpower_app.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Lowpower/STM32_WPAN/App/lowpower_app.c
new file mode 100644
index 000000000..4063e0755
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Lowpower/STM32_WPAN/App/lowpower_app.c
@@ -0,0 +1,167 @@
+/**
+ ******************************************************************************
+ * File Name : lowpower_app.c
+ * Description : BLE LLD simple demo to control LEDs remotely
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stdbool.h"
+#include "app_common.h"
+#include "stm32_seq.h"
+#include "stm32_lpm.h"
+#include "stm_logging.h"
+#include "dbg_trace.h"
+#include "ble_hal.h"
+#include "ipBLE_lld_public.h"
+#include "app_ble_lld.h"
+#include "lowpower_app.h"
+
+/* Private includes -----------------------------------------------------------*/
+
+/* Private typedef -----------------------------------------------------------*/
+// Allows to pack and unpack user data in payload (must not exceed 255 bytes)
+typedef PACKED_STRUCT
+{
+ uint8_t led;
+} userPayload;
+
+/* Private defines -----------------------------------------------------------*/
+#define CHANNEL 8 // radio channel
+#define POWER TX_POW_PLUS_6_DB // Transmit power
+#define NET_ID 0x5A964129 // network ID, both devices must use the same
+#define WAKEUP_US 10000 // delay before starting radio operation
+#define RX_TIMEOUT_US (1*1000*1000) // max delay radio will listen for a packet
+#define LED_ON_TIMER (2*1000*1000/CFG_TS_TICK_VAL) /**< 2000ms */ // delay of Toggle
+
+/* Private macros ------------------------------------------------------------*/
+
+/* Private function prototypes -----------------------------------------------*/
+static void radioInit(void);
+static void sendStart(void);
+static void sendLed1(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size);
+static void sendLed2(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size);
+static void sendLed3(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size);
+
+/* Private variables -----------------------------------------------*/
+static ActionPacket apSend[ACTION_PACKET_NB];
+
+uint8_t SwitchOffGPIO_timer_Id;
+
+/* Functions Definition ------------------------------------------------------*/
+
+void LOWPOWER_APP_Init(void)
+{
+ CheckWirelessFirmwareInfo();
+
+ /* Disable low power */
+ UTIL_LPM_SetOffMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_DISABLE);
+ UTIL_LPM_SetStopMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_DISABLE );
+
+ /* Register tasks for event processing */
+ UTIL_SEQ_RegTask(1<<CFG_TASK_TIMER, UTIL_SEQ_RFU, sendStart);
+
+ APP_BLE_LLD_Init();
+ HW_TS_Create(CFG_TIM_PROC_ID_ISR, &SwitchOffGPIO_timer_Id, hw_ts_SingleShot, Appli_TS_Callback);
+
+ radioInit();
+ HW_TS_Start(SwitchOffGPIO_timer_Id, (uint32_t)LED_ON_TIMER);
+ UTIL_LPM_SetStopMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_DISABLE ); // TO ENABLE
+
+}
+
+static void radioInit(void)
+{
+ HAL_BLE_LLD_Init(CFG_HS_STARTUP_TIME, true);
+ HAL_BLE_LLD_Configure(POWER, CHANNEL, true, CFG_BACK2BACK_TIME, NET_ID);
+
+ ActionPacket *ap1;
+ userPayload payload1;
+ payload1.led = LED1;
+ uint32_t wakeup_time1 = WAKEUP_US;
+ // Packet to send
+ ap1 = &apSend[APACKET_1];
+ ap1->actionPacketNb = APACKET_1;
+ ap1->StateMachineNo = STATE_MACHINE_0;
+ ap1->ActionTag = TXRX | TIMER_WAKEUP;
+ ap1->WakeupTime = wakeup_time1;
+ ap1->data = &payload1;
+ ap1->dataSize = sizeof(payload1);
+ ap1->nextTrue = APACKET_2;
+ ap1->nextFalse = APACKET_STOP;
+ ap1->callback = sendLed1;
+ BLE_LLD_SetReservedArea(ap1);
+
+ ActionPacket *ap2;
+ userPayload payload2;
+ payload2.led = LED2;
+ uint32_t wakeup_time2 = 2*WAKEUP_US;
+ // Packet to send
+ ap2 = &apSend[APACKET_2];
+ ap2->actionPacketNb = APACKET_2;
+ ap2->StateMachineNo = STATE_MACHINE_0;
+ ap2->ActionTag = TXRX | TIMER_WAKEUP;
+ ap2->WakeupTime = wakeup_time2;
+ ap2->data = &payload2;
+ ap2->dataSize = sizeof(payload2);
+ ap2->nextTrue = APACKET_3;
+ ap2->nextFalse = APACKET_STOP;
+ ap2->callback = sendLed2;
+ BLE_LLD_SetReservedArea(ap2);
+
+ ActionPacket *ap3;
+ userPayload payload3;
+ payload3.led = LED3;
+ uint32_t wakeup_time3 = 4*WAKEUP_US;
+ // Packet to send
+ ap3 = &apSend[APACKET_3];
+ ap3->actionPacketNb = APACKET_3;
+ ap3->StateMachineNo = STATE_MACHINE_0;
+ ap3->ActionTag = TXRX | TIMER_WAKEUP;
+ ap3->WakeupTime = wakeup_time3;
+ ap3->data = &payload3;
+ ap3->dataSize = sizeof(payload3);
+ ap3->nextTrue = APACKET_STOP;
+ ap3->nextFalse = APACKET_STOP;
+ ap3->callback = sendLed3;
+ BLE_LLD_SetReservedArea(ap3);
+}
+
+
+static void sendStart(void)
+{
+ BLE_LLD_MakeActionPacketPending(&apSend[APACKET_1]);
+}
+
+static void sendLed1(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size)
+{
+}
+
+static void sendLed2(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size)
+{
+}
+
+static void sendLed3(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size)
+{
+ UTIL_LPM_SetStopMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_ENABLE ); // TO ENABLE
+ HW_TS_Start(SwitchOffGPIO_timer_Id, (uint32_t)LED_ON_TIMER);
+}
+
+
+void Appli_TS_Callback(void)
+{
+ UTIL_SEQ_SetTask(1U << CFG_TASK_TIMER, CFG_SCH_PRIO_0);
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/