Skip to content

Commit c2ebb79

Browse files
authored
Merge pull request #9814 from LMESTM/dev_NUCLEO_WB55RG
Adding NUCLEO_WB55RG support
2 parents 2aa559c + b0f4815 commit c2ebb79

File tree

218 files changed

+206315
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

218 files changed

+206315
-5
lines changed
Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
/**
2+
******************************************************************************
3+
* File Name : Target/hw_ipcc.c
4+
* Description : Hardware IPCC source file for BLE
5+
* middleWare.
6+
******************************************************************************
7+
* @attention
8+
*
9+
* <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10+
* All rights reserved.</center></h2>
11+
*
12+
* This software component is licensed by ST under BSD 3-Clause license,
13+
* the "License"; You may not use this file except in compliance with the
14+
* License. You may obtain a copy of the License at:
15+
* opensource.org/licenses/BSD-3-Clause
16+
*
17+
******************************************************************************
18+
*/
19+
20+
/* Includes ------------------------------------------------------------------*/
21+
#include "app_common.h"
22+
#include "mbox_def.h"
23+
24+
/* Global variables ---------------------------------------------------------*/
25+
/* Private defines -----------------------------------------------------------*/
26+
#define HW_IPCC_TX_PENDING( channel ) ( !(LL_C1_IPCC_IsActiveFlag_CHx( IPCC, channel )) ) && (((~(IPCC->C1MR)) & (channel << 16U)))
27+
#define HW_IPCC_RX_PENDING( channel ) (LL_C2_IPCC_IsActiveFlag_CHx( IPCC, channel )) && (((~(IPCC->C1MR)) & (channel << 0U)))
28+
29+
/* Private macros ------------------------------------------------------------*/
30+
/* Private typedef -----------------------------------------------------------*/
31+
/* Private variables ---------------------------------------------------------*/
32+
static void (*FreeBufCb)( void );
33+
34+
/* Private function prototypes -----------------------------------------------*/
35+
static void HW_IPCC_BLE_EvtHandler( void );
36+
static void HW_IPCC_BLE_AclDataEvtHandler( void );
37+
static void HW_IPCC_MM_FreeBufHandler( void );
38+
static void HW_IPCC_SYS_CmdEvtHandler( void );
39+
static void HW_IPCC_SYS_EvtHandler( void );
40+
static void HW_IPCC_TRACES_EvtHandler( void );
41+
static void HW_IPCC_OT_CmdEvtHandler( void );
42+
static void HW_IPCC_THREAD_NotEvtHandler( void );
43+
static void HW_IPCC_THREAD_CliNotEvtHandler( void );
44+
45+
/* Public function definition -----------------------------------------------*/
46+
47+
/******************************************************************************
48+
* INTERRUPT HANDLER
49+
******************************************************************************/
50+
void HW_IPCC_Rx_Handler( void )
51+
{
52+
if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
53+
{
54+
HW_IPCC_THREAD_NotEvtHandler();
55+
}
56+
else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
57+
{
58+
HW_IPCC_BLE_EvtHandler();
59+
}
60+
else if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
61+
{
62+
HW_IPCC_SYS_EvtHandler();
63+
}
64+
else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
65+
{
66+
HW_IPCC_TRACES_EvtHandler();
67+
}
68+
else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
69+
{
70+
HW_IPCC_THREAD_CliNotEvtHandler();
71+
}
72+
73+
return;
74+
}
75+
76+
void HW_IPCC_Tx_Handler( void )
77+
{
78+
if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
79+
{
80+
HW_IPCC_OT_CmdEvtHandler();
81+
}
82+
else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
83+
{
84+
HW_IPCC_SYS_CmdEvtHandler();
85+
}
86+
else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
87+
{
88+
HW_IPCC_MM_FreeBufHandler();
89+
}
90+
else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
91+
{
92+
HW_IPCC_BLE_AclDataEvtHandler();
93+
}
94+
return;
95+
}
96+
/******************************************************************************
97+
* GENERAL
98+
******************************************************************************/
99+
void HW_IPCC_Enable( void )
100+
{
101+
LL_PWR_EnableBootC2();
102+
103+
return;
104+
}
105+
106+
void HW_IPCC_Init( void )
107+
{
108+
LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
109+
110+
LL_C1_IPCC_EnableIT_RXO( IPCC );
111+
LL_C1_IPCC_EnableIT_TXF( IPCC );
112+
113+
HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
114+
HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
115+
116+
return;
117+
}
118+
119+
/******************************************************************************
120+
* BLE
121+
******************************************************************************/
122+
void HW_IPCC_BLE_Init( void )
123+
{
124+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
125+
126+
return;
127+
}
128+
129+
void HW_IPCC_BLE_SendCmd( void )
130+
{
131+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
132+
133+
return;
134+
}
135+
136+
static void HW_IPCC_BLE_EvtHandler( void )
137+
{
138+
HW_IPCC_BLE_RxEvtNot();
139+
140+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
141+
142+
return;
143+
}
144+
145+
void HW_IPCC_BLE_SendAclData( void )
146+
{
147+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
148+
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
149+
150+
return;
151+
}
152+
153+
static void HW_IPCC_BLE_AclDataEvtHandler( void )
154+
{
155+
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
156+
157+
HW_IPCC_BLE_AclDataAckNot();
158+
159+
return;
160+
}
161+
162+
__weak void HW_IPCC_BLE_AclDataAckNot( void ){};
163+
__weak void HW_IPCC_BLE_RxEvtNot( void ){};
164+
165+
/******************************************************************************
166+
* SYSTEM
167+
******************************************************************************/
168+
void HW_IPCC_SYS_Init( void )
169+
{
170+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
171+
172+
return;
173+
}
174+
175+
void HW_IPCC_SYS_SendCmd( void )
176+
{
177+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
178+
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
179+
180+
return;
181+
}
182+
183+
static void HW_IPCC_SYS_CmdEvtHandler( void )
184+
{
185+
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
186+
187+
HW_IPCC_SYS_CmdEvtNot();
188+
189+
return;
190+
}
191+
192+
static void HW_IPCC_SYS_EvtHandler( void )
193+
{
194+
HW_IPCC_SYS_EvtNot();
195+
196+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
197+
198+
return;
199+
}
200+
201+
__weak void HW_IPCC_SYS_CmdEvtNot( void ){};
202+
__weak void HW_IPCC_SYS_EvtNot( void ){};
203+
204+
/******************************************************************************
205+
* THREAD
206+
******************************************************************************/
207+
void HW_IPCC_THREAD_Init( void )
208+
{
209+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
210+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
211+
212+
return;
213+
}
214+
215+
void HW_IPCC_OT_SendCmd( void )
216+
{
217+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
218+
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
219+
220+
return;
221+
}
222+
223+
void HW_IPCC_CLI_SendCmd( void )
224+
{
225+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
226+
227+
return;
228+
}
229+
230+
void HW_IPCC_THREAD_SendAck( void )
231+
{
232+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
233+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
234+
235+
return;
236+
}
237+
238+
void HW_IPCC_THREAD_CliSendAck( void )
239+
{
240+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
241+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
242+
243+
return;
244+
}
245+
246+
static void HW_IPCC_OT_CmdEvtHandler( void )
247+
{
248+
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
249+
250+
HW_IPCC_OT_CmdEvtNot();
251+
252+
return;
253+
}
254+
255+
static void HW_IPCC_THREAD_NotEvtHandler( void )
256+
{
257+
LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
258+
259+
HW_IPCC_THREAD_EvtNot();
260+
261+
return;
262+
}
263+
264+
static void HW_IPCC_THREAD_CliNotEvtHandler( void )
265+
{
266+
LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
267+
268+
HW_IPCC_THREAD_CliEvtNot();
269+
270+
return;
271+
}
272+
273+
__weak void HW_IPCC_OT_CmdEvtNot( void ){};
274+
__weak void HW_IPCC_CLI_CmdEvtNot( void ){};
275+
__weak void HW_IPCC_THREAD_EvtNot( void ){};
276+
277+
/******************************************************************************
278+
* MEMORY MANAGER
279+
******************************************************************************/
280+
void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
281+
{
282+
if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
283+
{
284+
FreeBufCb = cb;
285+
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
286+
}
287+
else
288+
{
289+
cb();
290+
291+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
292+
}
293+
294+
return;
295+
}
296+
297+
static void HW_IPCC_MM_FreeBufHandler( void )
298+
{
299+
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
300+
301+
FreeBufCb();
302+
303+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
304+
305+
return;
306+
}
307+
308+
/******************************************************************************
309+
* TRACES
310+
******************************************************************************/
311+
void HW_IPCC_TRACES_Init( void )
312+
{
313+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
314+
315+
return;
316+
}
317+
318+
static void HW_IPCC_TRACES_EvtHandler( void )
319+
{
320+
HW_IPCC_TRACES_EvtNot();
321+
322+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
323+
324+
return;
325+
}
326+
327+
__weak void HW_IPCC_TRACES_EvtNot( void ){};
328+
329+
/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/

0 commit comments

Comments
 (0)