Skip to content

os/board/rtl8730e: Revise BLE while loop condition #6770

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -170,17 +170,17 @@ trble_result_e rtw_ble_client_start_scan(void)
void *scan_filter_tmr_handle = NULL;
void scan_stop_cb(void *arg)
{
dbg("scan duration exhausted \n");
if (RTK_BT_OK != rtk_bt_le_gap_stop_scan())
{
debug_print("stop scan failed! \n");
return;
}
rtk_bt_le_gap_dev_state_t new_state;
do {
osif_delay(100);
rtk_bt_le_gap_get_dev_state(&new_state);
} while(new_state.gap_scan_state != GAP_SCAN_STATE_IDLE);
rtk_bt_le_gap_dev_state_t new_state;
dbg("scan duration exhausted \n");

rtk_bt_le_gap_get_dev_state(&new_state);
if (GAP_SCAN_STATE_SCANNING == new_state.gap_scan_state) {
if (RTK_BT_OK != rtk_bt_le_gap_stop_scan()) {
dbg("Stop scan failed! \n");
}
} else {
dbg("Scan is in invalid state! \n");
}
}

trble_result_e rtw_ble_client_start_scan_with_filter(trble_scan_filter* scan_parm, bool whitelist_enable)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,17 +171,17 @@ trble_result_e rtw_ble_client_start_scan(void)
void *scan_filter_tmr_handle = NULL;
void scan_stop_cb(void *arg)
{
//dbg("scan duration exhausted \n");
if (RTK_BT_OK != rtk_bt_le_gap_stop_scan())
{
dbg("stop scan failed! \n");
return;
}
rtk_bt_le_gap_dev_state_t new_state;
do {
osif_delay(100);
rtk_bt_le_gap_get_dev_state(&new_state);
} while(new_state.gap_scan_state != GAP_SCAN_STATE_IDLE);
rtk_bt_le_gap_dev_state_t new_state;
//dbg("scan duration exhausted \n");

rtk_bt_le_gap_get_dev_state(&new_state);
if (GAP_SCAN_STATE_SCANNING == new_state.gap_scan_state) {
if (RTK_BT_OK != rtk_bt_le_gap_stop_scan()) {
dbg("Stop scan failed! \n");
}
} else {
dbg("Scan is in invalid state! \n");
}
}

trble_result_e rtw_ble_client_set_scan(uint16_t scan_interval, uint16_t scan_window, trble_scan_type scan_type)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -448,20 +448,20 @@ trble_result_e rtw_ble_server_set_device_name(uint8_t* name)

trble_result_e rtw_ble_server_adv_into_idle(void)
{
rtk_bt_le_gap_dev_state_t new_state;
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
}
uint8_t wcount = 0;
rtk_bt_le_gap_dev_state_t new_state;
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state)) {
dbg("Get dev state fail \n");
return TRBLE_FAIL;
}

switch (new_state.gap_adv_state)
{
case GAP_ADV_STATE_ADVERTISING:
{
debug_print("ADV STATE : ADVERTISING \n");
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv())
{
debug_print("stop adv fail \n");
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv()) {
dbg("stop adv fail \n");
return TRBLE_FAIL;
}
}
Expand All @@ -474,15 +474,19 @@ trble_result_e rtw_ble_server_adv_into_idle(void)
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
}
wcount++;
if (wcount > 30) { /* Wait up to 3 seconds */
dbg("Wait timeout\n");
return TRBLE_FAIL;
}
} while(new_state.gap_adv_state == GAP_ADV_STATE_START);

if(new_state.gap_adv_state == GAP_ADV_STATE_ADVERTISING)
{
debug_print("ADV STATE : ADVERTISING \n");
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv())
{
debug_print("stop adv fail \n");
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv()) {
dbg("Stop adv fail \n");
return TRBLE_FAIL;
}
}
Expand All @@ -497,14 +501,18 @@ trble_result_e rtw_ble_server_adv_into_idle(void)
{
debug_print("get dev state fail \n");
}
wcount++;
if (wcount > 30) { /* Wait up to 3 seconds */
dbg("Wait timeout\n");
return TRBLE_FAIL;
}
} while(new_state.gap_adv_state == GAP_ADV_STATE_STOP);

if(new_state.gap_adv_state == GAP_ADV_STATE_ADVERTISING)
{
debug_print("ADV STATE : ADVERTISING \n");
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv())
{
debug_print("stop adv fail \n");
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv()) {
dbg("Stop adv fail \n");
return TRBLE_FAIL;
}
}
Expand All @@ -514,12 +522,17 @@ trble_result_e rtw_ble_server_adv_into_idle(void)
break;
}

wcount = 0;
do {
debug_print("Waiting for adv idle \n");
osif_delay(100);
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
}
wcount++;
if (wcount > 30) { /* Wait up to 3 seconds */
dbg("Wait timeout\n");
return TRBLE_FAIL;
}
} while(new_state.gap_adv_state != GAP_ADV_STATE_IDLE);
Expand All @@ -536,8 +549,9 @@ trble_result_e rtw_ble_server_set_adv_data(uint8_t* data, uint16_t length)
if(length > 31)
return TRBLE_INVALID_ARGS;

rtw_ble_server_adv_into_idle();

if (TRBLE_SUCCESS != rtw_ble_server_adv_into_idle())
return TRBLE_FAIL;

if(RTK_BT_OK == rtk_bt_le_gap_set_adv_data(data, length))
{
debug_print("Set adv data success \n");
Expand All @@ -558,8 +572,9 @@ trble_result_e rtw_ble_server_set_adv_name(uint8_t* data, uint16_t length)
if(length > 31)
return TRBLE_INVALID_ARGS;

rtw_ble_server_adv_into_idle();

if (TRBLE_SUCCESS != rtw_ble_server_adv_into_idle())
return TRBLE_FAIL;

if(RTK_BT_OK == rtk_bt_le_gap_set_scan_rsp_data(data, length))
{
debug_print("Set adv name success \n");
Expand Down Expand Up @@ -655,12 +670,14 @@ trble_result_e rtw_ble_server_disconnect(trble_conn_handle con_handle)

trble_result_e rtw_ble_server_start_adv(void)
{
#if !defined (RTK_BLE_5_0_AE_ADV_SUPPORT) && RTK_BLE_5_0_AE_ADV_SUPPORT
uint8_t wcount = 0;
#endif
rtk_bt_le_get_active_conn_t active_conn;
if (RTK_BT_OK != rtk_bt_le_gap_get_active_conn(&active_conn))
{
debug_print("get active conn fail \n");
if (RTK_BT_OK != rtk_bt_le_gap_get_active_conn(&active_conn)) {
dbg("Get active conn fail \n");
return TRBLE_FAIL;
}
}

if(active_conn.conn_num)
{
Expand All @@ -669,35 +686,23 @@ trble_result_e rtw_ble_server_start_adv(void)
{
if (RTK_BT_OK != rtk_bt_le_gap_get_conn_info(active_conn.conn_handle[i], &conn_info))
{
debug_print("get conn info fail \n");
dbg("Get conn info fail \n");
return TRBLE_FAIL;
}
}
}

#if !defined (RTK_BLE_5_0_AE_ADV_SUPPORT) && RTK_BLE_5_0_AE_ADV_SUPPORT
rtk_bt_le_gap_dev_state_t new_state;
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
}
rtk_bt_le_gap_dev_state_t new_state;
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state)) {
dbg("Get dev state fail \n");
return TRBLE_FAIL;
}

if(new_state.gap_adv_state != GAP_ADV_STATE_IDLE)
{
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv())
{
debug_print("stop adv fail \n");
return TRBLE_FAIL;
}
do {
debug_print("Waiting for adv stop \n");
osif_delay(100);
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
}
} while(new_state.gap_adv_state != GAP_ADV_STATE_IDLE);
}
if(new_state.gap_adv_state != GAP_ADV_STATE_IDLE) {
dbg("Adv is in invalid state! \n");
return TRBLE_FAIL;
}
#endif

rtk_bt_le_adv_param_t adv_param;
Expand All @@ -716,54 +721,34 @@ trble_result_e rtw_ble_server_start_adv(void)
memset(peer_addr.addr_val, 0, RTK_BD_ADDR_LEN);
}
adv_param.peer_addr = peer_addr;

if(RTK_BT_OK != rtk_bt_le_gap_start_adv(&adv_param))
{
debug_print("start adv fail \n");
return TRBLE_FAIL;
}

#if !defined (RTK_BLE_5_0_AE_ADV_SUPPORT) && RTK_BLE_5_0_AE_ADV_SUPPORT
do
{
debug_print("Waiting for adv start \n");
osif_delay(100);
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
}
} while(new_state.gap_adv_state != GAP_ADV_STATE_ADVERTISING);
#endif

return TRBLE_SUCCESS;
if(RTK_BT_OK != rtk_bt_le_gap_start_adv(&adv_param)) {
dbg("Start adv fail \n");
return TRBLE_FAIL;
}
return TRBLE_SUCCESS;
}

trble_result_e rtw_ble_server_stop_adv(void)
{
rtk_bt_le_gap_dev_state_t new_state;
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
rtk_bt_le_gap_dev_state_t new_state;
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state)) {
dbg("Get dev state fail \n");
return TRBLE_FAIL;
}

if(new_state.gap_adv_state == GAP_ADV_STATE_IDLE)
return TRBLE_SUCCESS;
else {
if(RTK_BT_OK != rtk_bt_le_gap_stop_adv())
{
debug_print("stop adv fail \n");
return TRBLE_FAIL;
}
do {
debug_print("Waiting for adv stop \n");
osif_delay(100);
if(RTK_BT_OK != rtk_bt_le_gap_get_dev_state(&new_state))
{
debug_print("get dev state fail \n");
}
} while(new_state.gap_adv_state != GAP_ADV_STATE_IDLE);
}
return TRBLE_SUCCESS;
if(new_state.gap_adv_state == GAP_ADV_STATE_IDLE)
return TRBLE_SUCCESS;
if (new_state.gap_adv_state != GAP_ADV_STATE_ADVERTISING) {
dbg("Adv is in invalid state! \n");
return TRBLE_FAIL;
}

if(RTK_BT_OK != rtk_bt_le_gap_stop_adv()) {
dbg("Stop adv fail \n");
return TRBLE_FAIL;
}
return TRBLE_SUCCESS;
}

#if defined (RTK_BLE_5_0_AE_ADV_SUPPORT) && RTK_BLE_5_0_AE_ADV_SUPPORT
Expand Down Expand Up @@ -986,7 +971,8 @@ trble_result_e rtw_ble_server_delete_bonded_device_all(void)

int rtw_ble_server_set_adv_interval(unsigned int interval)
{
rtw_ble_server_adv_into_idle();
if (TRBLE_SUCCESS != rtw_ble_server_adv_into_idle())
return TRBLE_FAIL;

rtw_ble_server_adv_interval = interval;
return TRBLE_SUCCESS;
Expand All @@ -1002,7 +988,8 @@ trble_result_e rtw_ble_server_set_adv_type(trble_adv_type_e type, trble_addr *ad
memset(adv_direct_addr, 0, TRBLE_BD_ADDR_MAX_LEN);
rtw_ble_server_adv_type = type;

rtw_ble_server_adv_into_idle();
if (TRBLE_SUCCESS != rtw_ble_server_adv_into_idle())
return TRBLE_FAIL;

if(rtw_ble_server_adv_type == TRBLE_ADV_TYPE_DIRECT)
{
Expand Down