@@ -1409,4 +1409,194 @@ void npl_freertos_funcs_deinit(void)
1409
1409
npl_funcs = NULL ;
1410
1410
}
1411
1411
1412
+ #else
1413
+
1414
+ #include <assert.h>
1415
+ #include <stddef.h>
1416
+ #include <string.h>
1417
+ #include <stdlib.h>
1418
+
1419
+ #include "nimble/esp_port/port/include/bt_osi_mem.h"
1420
+ #include "nimble/porting/nimble/include/os/os_mempool.h"
1421
+ #include "freertos/FreeRTOS.h"
1422
+ #include "nimble/porting/nimble/include/os/queue.h"
1423
+ #include "freertos/semphr.h"
1424
+ #include "freertos/task.h"
1425
+ #include "freertos/timers.h"
1426
+ #include "freertos/portable.h"
1427
+ #include "nimble/porting/npl/freertos/include/nimble/npl_freertos.h"
1428
+
1429
+ extern struct os_mempool ble_freertos_ev_pool ;
1430
+ static os_membuf_t * ble_freertos_ev_buf = NULL ;
1431
+
1432
+ extern struct os_mempool ble_freertos_evq_pool ;
1433
+ static os_membuf_t * ble_freertos_evq_buf = NULL ;
1434
+
1435
+ extern struct os_mempool ble_freertos_co_pool ;
1436
+ static os_membuf_t * ble_freertos_co_buf = NULL ;
1437
+
1438
+ extern struct os_mempool ble_freertos_sem_pool ;
1439
+ static os_membuf_t * ble_freertos_sem_buf = NULL ;
1440
+
1441
+ extern struct os_mempool ble_freertos_mutex_pool ;
1442
+ static os_membuf_t * ble_freertos_mutex_buf = NULL ;
1443
+
1444
+ static uint16_t ble_freertos_total_event_cnt = 0 ;
1445
+
1446
+ int na_npl_freertos_mempool_init (void )
1447
+ {
1448
+ int rc = -1 ;
1449
+ // These values taken from esp-idf: bt/nimble/porting/npl/freertos/src/npl_os_freertos.c
1450
+ uint16_t ble_total_evt_count = 19 ;
1451
+ uint16_t ble_total_co_count = 8 ;
1452
+ uint16_t ble_total_evtq_count = 3 ;
1453
+ uint16_t ble_total_sem_count = 10 ;
1454
+ uint16_t ble_total_mutex_count = 4 ;
1455
+ ble_freertos_total_event_cnt = ble_total_evt_count ;
1456
+
1457
+ if (ble_total_evt_count ) {
1458
+ ble_freertos_ev_buf = bt_osi_mem_malloc_internal (OS_MEMPOOL_SIZE (ble_total_evt_count ,
1459
+ sizeof (struct ble_npl_event_freertos )) *
1460
+ sizeof (os_membuf_t ));
1461
+ if (!ble_freertos_ev_buf ) {
1462
+ goto _error ;
1463
+ }
1464
+ rc = os_mempool_init (& ble_freertos_ev_pool , ble_total_evt_count ,
1465
+ sizeof (struct ble_npl_event_freertos ), ble_freertos_ev_buf ,
1466
+ "ble_freertos_ev_pool" );
1467
+ if (rc ) {
1468
+ goto _error ;
1469
+ }
1470
+ }
1471
+
1472
+ if (ble_total_evtq_count ) {
1473
+ ble_freertos_evq_buf = bt_osi_mem_malloc_internal (OS_MEMPOOL_SIZE (ble_total_evtq_count ,
1474
+ sizeof (struct ble_npl_eventq_freertos )) *
1475
+ sizeof (os_membuf_t ));
1476
+ if (!ble_freertos_evq_buf ) {
1477
+ goto _error ;
1478
+ }
1479
+ rc = os_mempool_init (& ble_freertos_evq_pool , ble_total_evtq_count ,
1480
+ sizeof (struct ble_npl_eventq_freertos ), ble_freertos_evq_buf ,
1481
+ "ble_freertos_evq_pool" );
1482
+ if (rc ) {
1483
+ goto _error ;
1484
+ }
1485
+ }
1486
+
1487
+ if (ble_total_co_count ) {
1488
+ ble_freertos_co_buf = bt_osi_mem_malloc_internal (OS_MEMPOOL_SIZE (ble_total_co_count ,
1489
+ sizeof (struct ble_npl_callout_freertos )) *
1490
+ sizeof (os_membuf_t ));
1491
+ if (!ble_freertos_co_buf ) {
1492
+ goto _error ;
1493
+ }
1494
+ rc = os_mempool_init (& ble_freertos_co_pool , ble_total_co_count ,
1495
+ sizeof (struct ble_npl_callout_freertos ), ble_freertos_co_buf ,
1496
+ "ble_freertos_co_pool" );
1497
+ if (rc ) {
1498
+ goto _error ;
1499
+ }
1500
+ }
1501
+
1502
+ if (ble_total_sem_count ) {
1503
+ ble_freertos_sem_buf = bt_osi_mem_malloc_internal (OS_MEMPOOL_SIZE (ble_total_sem_count ,
1504
+ sizeof (struct ble_npl_sem_freertos )) *
1505
+ sizeof (os_membuf_t ));
1506
+ if (!ble_freertos_sem_buf ) {
1507
+ goto _error ;
1508
+ }
1509
+ rc = os_mempool_init (& ble_freertos_sem_pool , ble_total_sem_count ,
1510
+ sizeof (struct ble_npl_sem_freertos ), ble_freertos_sem_buf ,
1511
+ "ble_freertos_sem_pool" );
1512
+ if (rc ) {
1513
+ goto _error ;
1514
+ }
1515
+ }
1516
+
1517
+ if (ble_total_mutex_count ) {
1518
+ ble_freertos_mutex_buf = bt_osi_mem_malloc_internal (OS_MEMPOOL_SIZE (ble_total_mutex_count ,
1519
+ sizeof (struct ble_npl_mutex_freertos )) *
1520
+ sizeof (os_membuf_t ));
1521
+ if (!ble_freertos_mutex_buf ) {
1522
+ goto _error ;
1523
+ }
1524
+ rc = os_mempool_init (& ble_freertos_mutex_pool , ble_total_mutex_count ,
1525
+ sizeof (struct ble_npl_mutex_freertos ), ble_freertos_mutex_buf ,
1526
+ "ble_freertos_mutex_pool" );
1527
+ if (rc ) {
1528
+ goto _error ;
1529
+ }
1530
+ }
1531
+
1532
+ return 0 ;
1533
+ _error :
1534
+ if (ble_freertos_ev_buf ) {
1535
+ bt_osi_mem_free (ble_freertos_ev_buf );
1536
+ ble_freertos_ev_buf = NULL ;
1537
+ }
1538
+
1539
+ if (ble_freertos_evq_buf ) {
1540
+ bt_osi_mem_free (ble_freertos_evq_buf );
1541
+ ble_freertos_evq_buf = NULL ;
1542
+ }
1543
+
1544
+ if (ble_freertos_co_buf ) {
1545
+ bt_osi_mem_free (ble_freertos_co_buf );
1546
+ ble_freertos_co_buf = NULL ;
1547
+ }
1548
+
1549
+ if (ble_freertos_sem_buf ) {
1550
+ bt_osi_mem_free (ble_freertos_sem_buf );
1551
+ ble_freertos_sem_buf = NULL ;
1552
+ }
1553
+
1554
+ if (ble_freertos_mutex_buf ) {
1555
+ bt_osi_mem_free (ble_freertos_mutex_buf );
1556
+ ble_freertos_mutex_buf = NULL ;
1557
+ }
1558
+ return -1 ;
1559
+ }
1560
+
1561
+ void na_npl_freertos_mempool_deinit (void )
1562
+ {
1563
+ if (ble_freertos_ev_buf ) {
1564
+ bt_osi_mem_free (ble_freertos_ev_buf );
1565
+ ble_freertos_ev_buf = NULL ;
1566
+ }
1567
+ if (ble_freertos_evq_buf ) {
1568
+ bt_osi_mem_free (ble_freertos_evq_buf );
1569
+ ble_freertos_evq_buf = NULL ;
1570
+ }
1571
+ if (ble_freertos_co_buf ) {
1572
+ bt_osi_mem_free (ble_freertos_co_buf );
1573
+ ble_freertos_co_buf = NULL ;
1574
+ }
1575
+ if (ble_freertos_sem_buf ) {
1576
+ bt_osi_mem_free (ble_freertos_sem_buf );
1577
+ ble_freertos_sem_buf = NULL ;
1578
+ }
1579
+ if (ble_freertos_mutex_buf ) {
1580
+ bt_osi_mem_free (ble_freertos_mutex_buf );
1581
+ ble_freertos_mutex_buf = NULL ;
1582
+ }
1583
+ }
1584
+
1585
+ void
1586
+ na_npl_freertos_eventq_init (struct ble_npl_eventq * evq )
1587
+ {
1588
+ struct ble_npl_eventq_freertos * eventq = NULL ;
1589
+ if (!os_memblock_from (& ble_freertos_evq_pool ,evq -> eventq )) {
1590
+ evq -> eventq = os_memblock_get (& ble_freertos_evq_pool );
1591
+ eventq = (struct ble_npl_eventq_freertos * )evq -> eventq ;
1592
+ BLE_LL_ASSERT (eventq );
1593
+ memset (eventq , 0 , sizeof (* eventq ));
1594
+ eventq -> q = xQueueCreate (ble_freertos_total_event_cnt , sizeof (struct ble_npl_eventq * ));
1595
+ BLE_LL_ASSERT (eventq -> q );
1596
+ } else {
1597
+ eventq = (struct ble_npl_eventq_freertos * )evq -> eventq ;
1598
+ xQueueReset (eventq -> q );
1599
+ }
1600
+ }
1601
+
1412
1602
#endif
0 commit comments