Sibles Advertising
Sibles advertising provides simple APIs based on GAP advertising APIs. Users can configure some parameters and then start advertising.
Configure advertising mode to determine advertising behavior.
SIBLES_ADV_CONNECT_MODE: Start connectable advertising to establish links.
SIBLES_ADV_BROADCAST_MODE: Start non-connectable broadcast advertising.
SIBLES_ADV_DIRECTED_CONNECT_MODE: Start directed advertising for dedicated link establishment.
Configure parameters for each mode, such as interval, duration, and whether to repeat.
Set advertising data and scan response data to the provided structure.
Here is an example:
// Declare app advertising context
SIBLES_ADVERTISING_CONTEXT_DECLAR(g_app_advertising_context);
// Listen to advertising status changes and requests.
static uint8_t app_advertising_event(uint8_t event, void *context, void *data)
{
switch (event)
{
case SIBLES_ADV_EVT_ADV_STARTED:
{
// Check current started advertising mode
sibles_adv_evt_startted_t *evt = (sibles_adv_evt_startted_t *)data;
rt_kprintf("ADV start result %d, mode %d\r\n", evt->status, evt->adv_mode);
break;
}
case SIBLES_ADV_EVT_ADV_STOPPED:
{
// Check current stopped advertising mode
sibles_adv_evt_stopped_t *evt = (sibles_adv_evt_stopped_t *)data;
rt_kprintf("ADV stopped reason %d, mode %d\r\n", evt->reason, evt->adv_mode);
break;
}
default:
break;
}
return 0;
}
static void app_advertising_start(void)
{
sibles_advertising_para_t para = {0};
char local_name[] = "TEST_SIFLI";
uint8_t manu_additional_data[] = {0x20, 0xC4, 0x00, 0x91};
uint16_t manu_company_id = 0x01;
uint8_t ret;
para.own_addr_type = GAPM_GEN_RSLV_ADDR;
// Configure advertising mode
para.config.adv_mode = SIBLES_ADV_CONNECT_MODE;
// Configure mode parameters
para.config.mode_config.conn_config.duration = 3000;
para.config.mode_config.conn_config.interval = 0x30;
// Support two advertising interval switching.
para.config.mode_config.conn_config.background_mode_enabled = 0x1;
para.config.mode_config.conn_config.background_duration = 6000;
para.config.mode_config.conn_config.background_interval = 0x200;
// Whether to repeat if duration timeout
para.config.mode_config.conn_config.is_repeated = 1;
// Whether to restart after disconnection.
para.config.is_auto_restart = 1;
// Whether advertising and scan response use same data
para.config.is_rsp_data_duplicate = 1;
// Set local name in advertising data
para.adv_data.completed_name = rt_malloc(rt_strlen(local_name) + sizeof(sibles_adv_type_name_t));
para.adv_data.completed_name->name_len = rt_strlen(local_name);
rt_memcpy(para.adv_data.completed_name->name, local_name, para.adv_data.completed_name->name_len);
// Set manufacturer data in advertising data
para.adv_data.manufacturer_data = rt_malloc(sizeof(sibles_adv_type_manufacturer_data_t) + sizeof(manu_additional_data));
para.adv_data.manufacturer_data->company_id = manu_company_id;
para.adv_data.manufacturer_data->data_len = sizeof(manu_additional_data);
rt_memcpy(para.adv_data.manufacturer_data->additional_data, manu_additional_data, sizeof(manu_additional_data));
para.evt_handler = app_advertising_event;
ret = sibles_advertising_init(g_app_advertising_context, ¶);
if (ret == SIBLES_ADV_NO_ERR)
{
sibles_advertising_start(g_app_advertising_context);
}
}