Skip to content

Commit

Permalink
examples: add blecent and bleprph similar to mynewt-nimble apps
Browse files Browse the repository at this point in the history
These example apps create a BLE central and peripheral based on
mynewt-nimBLE and work in companion. The apps are mostly based
on their equivalents, which can be found at
https://github.com/apache/mynewt-nimble/tree/master/apps

Fix formatting

Fix Makefiles

Format function parameters

Remove Doxygen comments

Add more function names and bug fix

Signed-off-by: Max Kriegleder <[email protected]>
  • Loading branch information
maxikrie committed Feb 13, 2025
1 parent fb0c1e1 commit c3db95a
Show file tree
Hide file tree
Showing 16 changed files with 3,007 additions and 0 deletions.
31 changes: 31 additions & 0 deletions examples/nimble_blecent/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# ##############################################################################
# apps/examples/nimble_blecent/CMakeLists.txt
#
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with this work for
# additional information regarding copyright ownership. The ASF licenses this
# file to you under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
# ##############################################################################

if(CONFIG_EXAMPLES_NIMBLE_BLECENT)
nuttx_add_application(
NAME
nimble
SRCS
${CMAKE_CURRENT_LIST_DIR}/nimble_blecent_main.c
${CMAKE_CURRENT_LIST_DIR}/misc.c
${CMAKE_CURRENT_LIST_DIR}/peer.c
DEPENDS
nimble)
endif()
30 changes: 30 additions & 0 deletions examples/nimble_blecent/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

config EXAMPLES_NIMBLE_BLECENT
tristate "NimBLE peripheral"
default n
---help---
Enable the nimble peripheral

if EXAMPLES_NIMBLE_BLECENT

config EXAMPLES_NIMBLE_BLECENT_PROGNAME
string "Program name"
default "nimble"
---help---
This is the name of the program that will be used when the NSH ELF
program is installed.

config EXAMPLES_NIMBLE_BLECENT_PRIORITY
int "NimBLE task priority"
default 100

config EXAMPLES_NIMBLE_BLECENT_STACKSIZE
int "NimBLE stack size"
default DEFAULT_TASK_STACKSIZE

endif # EXAMPLES_NIMBLE_BLECENT

23 changes: 23 additions & 0 deletions examples/nimble_blecent/Make.defs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
############################################################################
# apps/examples/nimble_blecent/Make.defs
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################

ifneq ($(CONFIG_EXAMPLES_NIMBLE_BLECENT),)
CONFIGURED_APPS += $(APPDIR)/examples/nimble
endif
38 changes: 38 additions & 0 deletions examples/nimble_blecent/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
############################################################################
# apps/examples/nimble_blecent/Makefile
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################

include $(APPDIR)/Make.defs

# NimBLE built-in application info

PROGNAME = $(CONFIG_EXAMPLES_NIMBLE_BLECENT_PROGNAME)
PRIORITY = $(CONFIG_EXAMPLES_NIMBLE_BLECENT_PRIORITY)
STACKSIZE = $(CONFIG_EXAMPLES_NIMBLE_BLECENT_STACKSIZE)
MODULE = $(CONFIG_EXAMPLES_NIMBLE_BLECENT)

# NimBLE Central Example

CSRCS += misc.c peer.c
MAINSRC = nimble_blecent_main.c

include $(APPDIR)/wireless/bluetooth/nimble/Makefile.nimble

include $(APPDIR)/Application.mk

126 changes: 126 additions & 0 deletions examples/nimble_blecent/blecent.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
/****************************************************************************
* apps/examples/nimble_blecent/blecent.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/

#ifndef H_BLECENT_
#define H_BLECENT_

/****************************************************************************
* Included Files
****************************************************************************/

#include <stdio.h>

#ifdef __cplusplus
extern "C"
{
#endif

struct ble_hs_adv_fields;
struct ble_gap_conn_desc;
struct ble_hs_cfg;
union ble_store_value;
union ble_store_key;

#define BLECENT_SVC_ALERT_UUID 0x1811
#define BLECENT_CHR_SUP_NEW_ALERT_CAT_UUID 0x2A47
#define BLECENT_CHR_NEW_ALERT 0x2A46
#define BLECENT_CHR_SUP_UNR_ALERT_CAT_UUID 0x2A48
#define BLECENT_CHR_UNR_ALERT_STAT_UUID 0x2A45
#define BLECENT_CHR_ALERT_NOT_CTRL_PT 0x2A44

/* Misc. */

void print_bytes(const uint8_t *bytes, int len);
void print_mbuf(const struct os_mbuf *om);
char *addr_str(const void *addr);
void print_uuid(const ble_uuid_t *uuid);
void print_conn_desc(const struct ble_gap_conn_desc *desc);
void print_adv_fields(const struct ble_hs_adv_fields *fields);

/* Peer. */

struct peer_dsc
{
SLIST_ENTRY(peer_dsc) next;
struct ble_gatt_dsc dsc;
};
SLIST_HEAD(peer_dsc_list, peer_dsc);

struct peer_chr
{
SLIST_ENTRY(peer_chr) next;
struct ble_gatt_chr chr;

struct peer_dsc_list dscs;
};
SLIST_HEAD(peer_chr_list, peer_chr);

struct peer_svc
{
SLIST_ENTRY(peer_svc) next;
struct ble_gatt_svc svc;

struct peer_chr_list chrs;
};
SLIST_HEAD(peer_svc_list, peer_svc);

struct peer;
typedef void peer_disc_fn(const struct peer *peer, int status, void *arg);

struct peer
{
SLIST_ENTRY(peer) next;

uint16_t conn_handle;

/* List of discovered GATT services. */

struct peer_svc_list svcs;

/* Keeps track of where we are in the service discovery process. */

uint16_t disc_prev_chr_val;
struct peer_svc *cur_svc;

/* Callback that gets executed when service discovery completes. */

peer_disc_fn *disc_cb;
void *disc_cb_arg;
};

int peer_disc_all(uint16_t conn_handle, peer_disc_fn *disc_cb,
void *disc_cb_arg);
const struct peer_dsc *
peer_dsc_find_uuid(const struct peer *peer, const ble_uuid_t *svc_uuid,
const ble_uuid_t *chr_uuid, const ble_uuid_t *dsc_uuid);
const struct peer_chr *
peer_chr_find_uuid(const struct peer *peer, const ble_uuid_t *svc_uuid,
const ble_uuid_t *chr_uuid);
const struct peer_svc *
peer_svc_find_uuid(const struct peer *peer, const ble_uuid_t *uuid);
int peer_delete(uint16_t conn_handle);
int peer_add(uint16_t conn_handle);
int peer_init(int max_peers, int max_svcs, int max_chrs, int max_dscs);

#ifdef __cplusplus
}
#endif

#endif
Loading

0 comments on commit c3db95a

Please sign in to comment.