このチュートリアルでは、受信時にダイナミック ブロードキャストを実装する方法を説明します。
このチュートリアルは、9.0 SDK の Uart サンプルに基づいています。
動的ブロードキャストを実現する方法は、ブロードキャスト -> ブロードキャストの停止 -> パラメータの変更 -> ブロードキャストの再開です
そこで、タイマーを使用してブロードキャストを定期的にオフにし、ブロードキャスト データを変更してからオンにします放送も
SDK9.0のブロードキャストはモードがいくつかあって少し面倒なので、比較的大きな変更を加えました。
まず、main.c のAdvertising_init 関数を変更する必要があります。
主な修正では赤い部分も追加しました。フラグを GENERAL に変更します。その後、ブロードキャスト タイムアウトが 0 に設定され、ワイヤレス ブロードキャストが実装されます。
放送モードに応じた放送データの設定機能とスキャン応答データの設定を削除しました。
voidAdvertising_init(void)
{
uint32_t err_code;
ble_advdata_t advdata;
ble_advdata_t scanrsp;
memset(&advdata,0, vdata));
advddata.name_type = BLE_ADVDATA_FULL_NAME ;
advdata.include_Appearance = false;
advdata.flags =BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
staticuint8_t mydata;ここで ic データが使用されます
//ここで行われる動的ブロードキャストは、これを毎に呼び出すことですtime Function
//数値、ブロードキャストデータのメーカー定義フィールドが 1 ずつ追加されます
manuf_data.company_identifier= 0xffaa;
manuf_data.data.p_data= &mydata;
mydata++; // 各呼び出し後に 1 を追加します advddata.p_manuf_specific_data= &manuf_data; APP_ERROR_CHECK;コード); }
次に、ブロードキャスト機能を開始します。 Main 関数は ble_advertising_start を使用します。
void myadv_start(void){
ble_gap_adv_params_tadv_params; // ここでのブロードキャスト間隔は 1 秒に設定されます
adv_params.timeout = 0; //上記フラグで無線ブロードキャストを実装するにはここに0を設定します
その後、タイマーを作ります。タイマーの機能は、2 秒サイクルでブロードキャスト パラメータを閉じて変更し、ブロードキャストを開始することです
int main(void)
{
bool Erase_bonds;
uint8_t start_string[] = START_STRING;
app_timer_id_tmy_timer;
buttons_leds_init(&erase_bonds);
ble_stack_init();
gap_params_init();
services_init();
advertising_init();
conn_params_init();
app_timer_start(my_timer,APP_TIMER_TICKS(2000, APP_TIMER_PRESCALER), NULL);
myadv_start(); // ここで使用される自己定義の起動ブロードキャスト関数
{
power_manage();
}
}
次に、独自のタイマーオーバーフロー処理関数を実装します
void my_timer_handler(void *p_contex){
int i =50;
sd_ble_gap_adv_stop();ブロードキャストをオフにする
Advertising_init(); //メーカーのカスタムフィールドのデータを変更する
while(i--);
myadv_start(); //ブロードキャストをオンにする
これで完了ですここで、動的ブロードキャストとは、ブロードキャスト データ内のメーカー定義のフィールドを動的に変更することです。
advertising_init 関数が呼び出されるたびに、メーカーのカスタム フィールドの値が増加します。 Advertising_init 関数には、
ただし、独自のタイマーを作成したので、uart の例に変更を加える必要があります。ただし、uart の例で定義されている使用可能なタイマーの最大数は、すでに使用されている数です。独自のタイマーを追加するとエラーが発生します。
www.bkjia.com