mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-23 13:40:55 +01:00
Use macros for adding models.
This commit is contained in:
parent
d47281f40f
commit
1dedff342b
7 changed files with 81 additions and 29 deletions
|
@ -41,6 +41,7 @@ idf_component_register(
|
||||||
"src/NimBLEEddystoneURL.cpp"
|
"src/NimBLEEddystoneURL.cpp"
|
||||||
"src/NimBLEExtAdvertising.cpp"
|
"src/NimBLEExtAdvertising.cpp"
|
||||||
"src/NimBLEHIDDevice.cpp"
|
"src/NimBLEHIDDevice.cpp"
|
||||||
|
"src/NimBLEMeshCreateModel.c"
|
||||||
"src/NimBLEMeshElement.cpp"
|
"src/NimBLEMeshElement.cpp"
|
||||||
"src/NimBLEMeshModel.cpp"
|
"src/NimBLEMeshModel.cpp"
|
||||||
"src/NimBLEMeshNode.cpp"
|
"src/NimBLEMeshNode.cpp"
|
||||||
|
|
30
src/NimBLEMeshCreateModel.c
Normal file
30
src/NimBLEMeshCreateModel.c
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* NimBLEMeshCreateModel.cpp
|
||||||
|
*
|
||||||
|
* Created: on April 27 2022
|
||||||
|
* Author H2zero
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "NimBLEMeshCreateModel.h"
|
||||||
|
|
||||||
|
static struct bt_mesh_model_cb mod_cb = {
|
||||||
|
//.init = modelInitCallback
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bt_mesh_model createConfigSrvModel(struct bt_mesh_cfg_srv* cfg) {
|
||||||
|
struct bt_mesh_model cmod = BT_MESH_MODEL_CFG_SRV(cfg);
|
||||||
|
return cmod;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct bt_mesh_model createHealthModel(struct bt_mesh_health_srv* hsrv,
|
||||||
|
struct bt_mesh_model_pub* hpub) {
|
||||||
|
struct bt_mesh_model hmod = BT_MESH_MODEL_HEALTH_SRV(hsrv, hpub);
|
||||||
|
return hmod;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct bt_mesh_model createGenModel(int16_t _id, struct bt_mesh_model_op* op,
|
||||||
|
struct bt_mesh_model_pub* pub, void* udata) {
|
||||||
|
struct bt_mesh_model mod = BT_MESH_MODEL_CB(_id, op, pub, udata, &mod_cb);
|
||||||
|
return mod;
|
||||||
|
}
|
35
src/NimBLEMeshCreateModel.h
Normal file
35
src/NimBLEMeshCreateModel.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* NimBLEMeshCreateModel.h
|
||||||
|
*
|
||||||
|
* Created: on April 27 2022
|
||||||
|
* Author H2zero
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __NIMBLE_MESH_CREATE_MODEL_H
|
||||||
|
#define __NIMBLE_MESH_CREATE_MODEL_H
|
||||||
|
|
||||||
|
#include "nimconfig.h"
|
||||||
|
#if defined(CONFIG_NIMBLE_CPP_IDF)
|
||||||
|
# include "mesh/mesh.h"
|
||||||
|
# include "mesh/cfg_srv.h"
|
||||||
|
#else
|
||||||
|
# include "nimble/nimble/host/mesh/include/mesh/mesh.h"
|
||||||
|
# include "nimble/nimble/host/mesh/include/mesh/cfg_srv.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
//int modelInitCallback(struct bt_mesh_model *model);
|
||||||
|
struct bt_mesh_model createConfigSrvModel(struct bt_mesh_cfg_srv* cfg);
|
||||||
|
struct bt_mesh_model createHealthModel(struct bt_mesh_health_srv* hsrv,
|
||||||
|
struct bt_mesh_model_pub* hpub);
|
||||||
|
struct bt_mesh_model createGenModel(int16_t _id, struct bt_mesh_model_op* op,
|
||||||
|
struct bt_mesh_model_pub* pub, void* udata);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
|
@ -8,18 +8,19 @@
|
||||||
|
|
||||||
#include "NimBLEMeshElement.h"
|
#include "NimBLEMeshElement.h"
|
||||||
#include "NimBLELog.h"
|
#include "NimBLELog.h"
|
||||||
|
#include "NimBLEMeshCreateModel.h"
|
||||||
|
|
||||||
static const char* LOG_TAG = "NimBLEMeshElement";
|
static const char* LOG_TAG = "NimBLEMeshElement";
|
||||||
|
|
||||||
NimBLEMeshElement::NimBLEMeshElement() {
|
NimBLEMeshElement::NimBLEMeshElement() {
|
||||||
m_pElem_t = nullptr;
|
m_pElem = nullptr;
|
||||||
m_pHealthModel = nullptr;
|
m_pHealthModel = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NimBLEMeshElement::~NimBLEMeshElement() {
|
NimBLEMeshElement::~NimBLEMeshElement() {
|
||||||
if(m_pElem_t != nullptr) {
|
if(m_pElem != nullptr) {
|
||||||
delete m_pElem_t;
|
delete m_pElem;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pHealthModel != nullptr) {
|
if(m_pHealthModel != nullptr) {
|
||||||
|
@ -64,7 +65,7 @@ NimBLEMeshModel* NimBLEMeshElement::createModel(uint16_t type, NimBLEMeshModelCa
|
||||||
case BT_MESH_MODEL_ID_HEALTH_SRV:
|
case BT_MESH_MODEL_ID_HEALTH_SRV:
|
||||||
m_pHealthModel = new NimBLEHealthSrvModel(pCallbacks);
|
m_pHealthModel = new NimBLEHealthSrvModel(pCallbacks);
|
||||||
pModel = m_pHealthModel;
|
pModel = m_pHealthModel;
|
||||||
m_modelsVec.push_back(bt_mesh_model{{type},0,0,0,&pModel->m_opPub,{0},{0},bt_mesh_health_srv_op,&bt_mesh_health_cli_cb,&m_pHealthModel->m_healthSrv});
|
m_modelsVec.push_back(createHealthModel(&m_pHealthModel->m_healthSrv, &pModel->m_opPub));
|
||||||
return pModel;
|
return pModel;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -72,7 +73,7 @@ NimBLEMeshModel* NimBLEMeshElement::createModel(uint16_t type, NimBLEMeshModelCa
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_modelsVec.push_back(bt_mesh_model{{type},0,0,0, &pModel->m_opPub,{0},{0},pModel->m_opList,nullptr,pModel});
|
m_modelsVec.push_back(createGenModel(type, pModel->m_opList, &pModel->m_opPub, pModel));
|
||||||
return pModel;
|
return pModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,8 +82,8 @@ NimBLEMeshModel* NimBLEMeshElement::createModel(uint16_t type, NimBLEMeshModelCa
|
||||||
* @brief Adds a model created outside of element context to the elements model vector.
|
* @brief Adds a model created outside of element context to the elements model vector.
|
||||||
* @param [in] model A pointer to the model instance to add.
|
* @param [in] model A pointer to the model instance to add.
|
||||||
*/
|
*/
|
||||||
void NimBLEMeshElement::addModel(bt_mesh_model *model) {
|
void NimBLEMeshElement::addModel(const bt_mesh_model & model) {
|
||||||
m_modelsVec.push_back(*model);
|
m_modelsVec.push_back(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -134,8 +135,8 @@ NimBLEMeshModel* NimBLEMeshElement::getModelByIdx(uint8_t eidx, uint8_t midx, ui
|
||||||
* @details Must not be called until all models have been added.
|
* @details Must not be called until all models have been added.
|
||||||
*/
|
*/
|
||||||
bt_mesh_elem* NimBLEMeshElement::start() {
|
bt_mesh_elem* NimBLEMeshElement::start() {
|
||||||
m_pElem_t = new bt_mesh_elem{0, 0, uint8_t(m_modelsVec.size()), 0, &m_modelsVec[0], NULL};
|
m_pElem = new bt_mesh_elem{0, 0, uint8_t(m_modelsVec.size()), 0, &m_modelsVec[0], NULL};
|
||||||
return m_pElem_t;
|
return m_pElem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -33,10 +33,10 @@ private:
|
||||||
|
|
||||||
NimBLEMeshElement();
|
NimBLEMeshElement();
|
||||||
~NimBLEMeshElement();
|
~NimBLEMeshElement();
|
||||||
void addModel(bt_mesh_model* model);
|
void addModel(const bt_mesh_model & model);
|
||||||
bt_mesh_elem* start();
|
bt_mesh_elem* start();
|
||||||
|
|
||||||
bt_mesh_elem *m_pElem_t;
|
bt_mesh_elem *m_pElem;
|
||||||
NimBLEHealthSrvModel* m_pHealthModel;
|
NimBLEHealthSrvModel* m_pHealthModel;
|
||||||
std::vector<bt_mesh_model> m_modelsVec;
|
std::vector<bt_mesh_model> m_modelsVec;
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "NimBLEMeshNode.h"
|
#include "NimBLEMeshNode.h"
|
||||||
#include "NimBLELog.h"
|
#include "NimBLELog.h"
|
||||||
#include "NimBLEDevice.h"
|
#include "NimBLEDevice.h"
|
||||||
|
#include "NimBLEMeshCreateModel.h"
|
||||||
|
|
||||||
#if defined(CONFIG_NIMBLE_CPP_IDF)
|
#if defined(CONFIG_NIMBLE_CPP_IDF)
|
||||||
# include "services/gap/ble_svc_gap.h"
|
# include "services/gap/ble_svc_gap.h"
|
||||||
|
@ -66,8 +67,6 @@ NimBLEMeshNode::NimBLEMeshNode(const NimBLEUUID &uuid, uint8_t type) {
|
||||||
m_prov.complete = NimBLEMeshNode::provComplete;
|
m_prov.complete = NimBLEMeshNode::provComplete;
|
||||||
m_prov.reset = NimBLEMeshNode::provReset;
|
m_prov.reset = NimBLEMeshNode::provReset;
|
||||||
|
|
||||||
m_configSrvModel = nullptr;
|
|
||||||
|
|
||||||
// Create the primary element
|
// Create the primary element
|
||||||
m_elemVec.push_back(new NimBLEMeshElement());
|
m_elemVec.push_back(new NimBLEMeshElement());
|
||||||
}
|
}
|
||||||
|
@ -77,10 +76,6 @@ NimBLEMeshNode::NimBLEMeshNode(const NimBLEUUID &uuid, uint8_t type) {
|
||||||
* @brief Destructor, cleanup any resources created.
|
* @brief Destructor, cleanup any resources created.
|
||||||
*/
|
*/
|
||||||
NimBLEMeshNode::~NimBLEMeshNode() {
|
NimBLEMeshNode::~NimBLEMeshNode() {
|
||||||
if(m_configSrvModel != nullptr) {
|
|
||||||
delete m_configSrvModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(m_comp.elem != nullptr) {
|
if(m_comp.elem != nullptr) {
|
||||||
free (m_comp.elem);
|
free (m_comp.elem);
|
||||||
}
|
}
|
||||||
|
@ -168,16 +163,7 @@ bool NimBLEMeshNode::start() {
|
||||||
|
|
||||||
// Config server and primary health models are required in the primary element
|
// Config server and primary health models are required in the primary element
|
||||||
// create them here and add them as the first models.
|
// create them here and add them as the first models.
|
||||||
m_configSrvModel = new bt_mesh_model{{BT_MESH_MODEL_ID_CFG_SRV},0,0,0,nullptr,{0},{0},bt_mesh_cfg_srv_op,&bt_mesh_cfg_srv_cb,&m_serverConfig};
|
m_elemVec[0]->addModel(createConfigSrvModel(&m_serverConfig));
|
||||||
for(int i = 0; i < CONFIG_BT_MESH_MODEL_KEY_COUNT; i++) {
|
|
||||||
m_configSrvModel->keys[i] = BT_MESH_KEY_UNUSED;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 0; i < CONFIG_BT_MESH_MODEL_GROUP_COUNT; i++) {
|
|
||||||
m_configSrvModel->groups[i] = BT_MESH_ADDR_UNASSIGNED;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_elemVec[0]->addModel(m_configSrvModel);
|
|
||||||
|
|
||||||
if(m_elemVec[0]->getModel(BT_MESH_MODEL_ID_HEALTH_SRV) == nullptr) {
|
if(m_elemVec[0]->getModel(BT_MESH_MODEL_ID_HEALTH_SRV) == nullptr) {
|
||||||
m_elemVec[0]->createModel(BT_MESH_MODEL_ID_HEALTH_SRV);
|
m_elemVec[0]->createModel(BT_MESH_MODEL_ID_HEALTH_SRV);
|
||||||
|
|
|
@ -66,7 +66,6 @@ private:
|
||||||
bt_mesh_comp m_comp;
|
bt_mesh_comp m_comp;
|
||||||
uint16_t m_primAddr;
|
uint16_t m_primAddr;
|
||||||
uint16_t m_primNetIdx;
|
uint16_t m_primNetIdx;
|
||||||
bt_mesh_model* m_configSrvModel;
|
|
||||||
NimBLEUUID m_uuid;
|
NimBLEUUID m_uuid;
|
||||||
|
|
||||||
std::vector<NimBLEMeshElement*> m_elemVec;
|
std::vector<NimBLEMeshElement*> m_elemVec;
|
||||||
|
|
Loading…
Reference in a new issue