diff options
author | Roshan Pius <rpius@google.com> | 2022-03-30 17:32:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-03-30 17:32:59 +0000 |
commit | f630fe65e4a36fec05cd345537e806d08e356994 (patch) | |
tree | 6e01101b7198440ef45c054f881fd9d6eec1d9fd /src | |
parent | 36ceae097ddc79d208024ee6b574783b2373c147 (diff) | |
parent | 9dd4ebb57ea87db09192886576cd50c77a02c45e (diff) | |
download | uwb-f630fe65e4a36fec05cd345537e806d08e356994.tar.gz |
Merge changes from topic "nxp_c_upstream" into tm-dev
* changes:
Buffer not being free when required.
UCI changes to support vendor extension funtionality
Diffstat (limited to 'src')
-rwxr-xr-x | src/gki/ulinux/uwb_gki_ulinux.cc | 21 | ||||
-rwxr-xr-x | src/include/uwb_gki_target.h | 40 | ||||
-rwxr-xr-x | src/uci/include/uci_defs.h | 13 | ||||
-rwxr-xr-x | src/uwa/dm/uwa_dm_act.cc | 9 | ||||
-rwxr-xr-x | src/uwa/include/uwa_api.h | 8 | ||||
-rwxr-xr-x | src/uwb/include/uci_hmsgs.h | 2 | ||||
-rwxr-xr-x | src/uwb/include/uwb_api.h | 9 | ||||
-rwxr-xr-x | src/uwb/uci/uci_hrcv.cc | 29 | ||||
-rwxr-xr-x | src/uwb/uwb/uwb_ucif.cc | 39 |
9 files changed, 118 insertions, 52 deletions
diff --git a/src/gki/ulinux/uwb_gki_ulinux.cc b/src/gki/ulinux/uwb_gki_ulinux.cc index 93a91bb..40af99d 100755 --- a/src/gki/ulinux/uwb_gki_ulinux.cc +++ b/src/gki/ulinux/uwb_gki_ulinux.cc @@ -267,8 +267,13 @@ void phUwb_GKI_shutdown(void) { #if (FALSE == GKI_PTHREAD_JOINABLE) int i = 0; - while ((gki_cb.com.OSWaitEvt[task_id - 1] != 0) && (++i < 10)) - usleep(100 * 1000); + if((task_id - 1) != BTU_TASK) { + while ((gki_cb.com.OSWaitEvt[task_id - 1] != 0) && (++i < 10)) + usleep(50 * 1000); + } else { + usleep(50 * 1000); + UCI_TRACE_D("%s: Wait not needed for UWBA_TASK with task id %d", __func__,(task_id - 1)); + } #else /* wait for proper Arnold Schwarzenegger task state */ result = pthread_join(gki_cb.os.thread_id[task_id - 1], NULL); @@ -280,13 +285,9 @@ void phUwb_GKI_shutdown(void) { phUwb_GKI_exit_task(task_id - 1); } } - - /* Destroy mutex and condition variable objects */ - pthread_mutex_destroy(&gki_cb.os.GKI_mutex); - /* pthread_mutex_destroy(&GKI_sched_mutex); */ - /* pthread_mutex_destroy(&thread_delay_mutex); - pthread_cond_destroy (&thread_delay_cond); */ - +/* pthread_mutex_destroy(&GKI_sched_mutex); */ +/* pthread_mutex_destroy(&thread_delay_mutex); + pthread_cond_destroy (&thread_delay_cond); */ if (gki_cb.os.gki_timer_wake_lock_on) { UCI_TRACE_I("GKI_shutdown : release_wake_lock(brcm_btld)"); release_wake_lock(WAKE_LOCK_ID); @@ -296,6 +297,8 @@ void phUwb_GKI_shutdown(void) { *p_run_cond = GKI_TIMER_TICK_EXIT_COND; if (oldCOnd == GKI_TIMER_TICK_STOP_COND) pthread_cond_signal(&gki_cb.os.gki_timer_cond); + /* Destroy mutex and condition variable objects */ + pthread_mutex_destroy(&gki_cb.os.GKI_mutex); } /******************************************************************************* diff --git a/src/include/uwb_gki_target.h b/src/include/uwb_gki_target.h index 773bd8b..9b1b1c5 100755 --- a/src/include/uwb_gki_target.h +++ b/src/include/uwb_gki_target.h @@ -48,47 +48,9 @@ #define BTU_TASK 4 #endif -/* BTE Application, Sample Apps, or Serial port Demo based on JP3 and JP4 - * setting) */ -#ifndef BTE_APPL_TASK -#define BTE_APPL_TASK 5 -#endif - -#ifndef DEV_MGR_TASK -#define DEV_MGR_TASK 6 -#endif - -#ifndef ISE_SCR_TASK -#define ISE_SCR_TASK 7 -#endif - -#ifndef UCODEC_TASK -#define UCODEC_TASK 8 -#endif - -#ifndef RPCT_TASK -#define RPCT_TASK 9 -#endif - -#ifndef UNV_TASK -#define UNV_TASK 10 -#endif - -#ifndef BTE_IDLE_TASK -#define BTE_IDLE_TASK 11 -#endif - -#ifndef UIPC_TASK -#define UIPC_TASK 12 -#endif - -#ifndef HCISU_AMP_TASK -#define HCISU_AMP_TASK 13 -#endif - /* The number of GKI tasks in the software system. */ #ifndef GKI_MAX_TASKS -#define GKI_MAX_TASKS 14 +#define GKI_MAX_TASKS 5 #endif /****************************************************************************** diff --git a/src/uci/include/uci_defs.h b/src/uci/include/uci_defs.h index e7bf05b..9237a75 100755 --- a/src/uci/include/uci_defs.h +++ b/src/uci/include/uci_defs.h @@ -30,7 +30,8 @@ /* Define the message header size for all UCI Commands and Notifications. */ #define UCI_MSG_HDR_SIZE 0x04 /* per UCI spec */ -#define UCI_MAX_PAYLOAD_SIZE 0xFF /* max control message size */ +#define UCI_MAX_PAYLOAD_SIZE 4096 /* max control message size */ +#define UCI_MAX_PKT_SIZE 259 /* Max payload size + header size */ #define UCI_PSDU_SIZE_4K 4096 /* PSDU Data size */ #define UCI_VENDOR_INFO_MAX_SIZE 0xFF @@ -76,7 +77,13 @@ #define UCI_GID_ANDROID 0x0E /* 1110b Android vendor group */ #define UCI_GID_TEST 0x0D /* 1101b RF Test Gropup */ -/* 0100b - 1100b RFU */ +/* Vendor specific group Identifier */ +#define UCI_GID_VENDOR_SPECIFIC_0x09 0x09 +#define UCI_GID_VENDOR_SPECIFIC_0x0A 0x0A +#define UCI_GID_VENDOR_SPECIFIC_0x0B 0x0B +#define UCI_GID_VENDOR_SPECIFIC_0x0C 0x0C +#define UCI_GID_VENDOR_SPECIFIC_0x0E 0x0E +#define UCI_GID_VENDOR_SPECIFIC_0x0F 0x0F /* OID: Opcode Identifier (byte 1) */ #define UCI_OID_MASK 0x3F @@ -272,6 +279,8 @@ #define UCI_PARAM_LEN_SUB_SESSION_ID 0x04 #define UCI_PARAM_LEN_BLOCK_STRIDE_LENGTH 0x01 +#define MAX_VENDOR_INFO_LENGTH 1000 // vendor specific info of rangedata max length considering 24 measures for TDOA + /************************************************* * Status codes ************************************************/ diff --git a/src/uwa/dm/uwa_dm_act.cc b/src/uwa/dm/uwa_dm_act.cc index 46b7575..57e27ed 100755 --- a/src/uwa/dm/uwa_dm_act.cc +++ b/src/uwa/dm/uwa_dm_act.cc @@ -401,6 +401,12 @@ static void uwa_dm_uwb_response_cback(tUWB_RESPONSE_EVT event, dm_cback_data.status = UWB_STATUS_FAILED; (*uwa_dm_cb.p_dm_cback)(UWA_DM_UWBS_RESP_TIMEOUT_EVT, &dm_cback_data); } break; + case UWB_VENDOR_SPECIFIC_UCI_NTF_EVT: + { + dm_cback_data.sVendor_specific_ntf.len = p_data->sVendor_specific_ntf.len; + memcpy((uint8_t*)dm_cback_data.sVendor_specific_ntf.data, p_data->sVendor_specific_ntf.data, p_data->sVendor_specific_ntf.len); + (*uwa_dm_cb.p_dm_cback)(UWA_VENDOR_SPECIFIC_UCI_NTF_EVT, &dm_cback_data); + } break; default: UCI_TRACE_E("unknown event."); break; @@ -1343,6 +1349,9 @@ std::string uwa_dm_uwb_revt_2_str(tUWB_RESPONSE_EVT event) { case UWB_CONFORMANCE_TEST_DATA: return "UWB_CONFORMANCE_TEST_DATA"; + case UWB_VENDOR_SPECIFIC_UCI_NTF_EVT: + return "UWB_VENDOR_SPECIfIC_UCI_NTF_EVT"; + default: return "unknown revt"; break; diff --git a/src/uwa/include/uwa_api.h b/src/uwa/include/uwa_api.h index 78705e6..5da7cba 100755 --- a/src/uwa/include/uwa_api.h +++ b/src/uwa/include/uwa_api.h @@ -145,6 +145,7 @@ enum { UWA_DM_SEND_BLINK_DATA_NTF_EVT, /* Blink Data Tx ntf event*/ UWA_DM_CONFORMANCE_NTF_EVT, /* Conformance Test Ntf Event */ UWA_DM_SET_COUNTRY_CODE_RSP_EVT, /* Country code update resp event */ + UWA_VENDOR_SPECIFIC_UCI_NTF_EVT, /* Proprietary Ntf Event */ }; /* UWA_DM callback events for UWB RF events */ @@ -337,6 +338,12 @@ typedef struct { uint8_t data[CONFORMANCE_TEST_MAX_UCI_PKT_LENGTH]; } tUWA_CONFORMANCE_TEST_DATA; +/* the data type associated with vendor notification */ +typedef struct { + uint16_t len; + uint8_t data[UCI_VENDOR_INFO_MAX_SIZE]; +}tUWA_VENDOR_SPECIFIC_NTF; + /* Union of all DM callback structures */ typedef union { tUWA_STATUS status; /* UWA_DM_ENABLE_EVT */ @@ -367,6 +374,7 @@ typedef union { sMulticast_list_ntf; /*UWA_DM_SESSION_MC_LIST_UPDATE_NTF_EVT*/ tUWA_SEND_BLINK_DATA_NTF sBlink_data_ntf; /*UWA_DM_SEND_BLINK_DATA_NTF_EVT*/ tUWA_CONFORMANCE_TEST_DATA sConformance_ntf; /* UWA_DM_CONFORMANCE_NTF_EVT */ + tUWA_VENDOR_SPECIFIC_NTF sVendor_specific_ntf; /*Vendor Specific ntf data */ void* p_vs_evt_data; /* Vendor-specific evt data */ } tUWA_DM_CBACK_DATA; diff --git a/src/uwb/include/uci_hmsgs.h b/src/uwb/include/uci_hmsgs.h index a470197..f317100 100755 --- a/src/uwb/include/uci_hmsgs.h +++ b/src/uwb/include/uci_hmsgs.h @@ -83,4 +83,6 @@ extern void uci_proc_test_management_rsp(uint8_t op_code, uint8_t* p_buf, uint16_t len); extern void uci_proc_raw_cmd_rsp(uint8_t* p_buf, uint16_t len); + +extern void uci_proc_vendor_specific_ntf(uint8_t gid, uint8_t* p_buf, uint16_t len); #endif /* UWB_UCI_MSGS_H */ diff --git a/src/uwb/include/uwb_api.h b/src/uwb/include/uwb_api.h index a9676ac..1378cab 100755 --- a/src/uwb/include/uwb_api.h +++ b/src/uwb/include/uwb_api.h @@ -141,7 +141,7 @@ enum { UWB_BLINK_DATA_TX_NTF_REVT, /* 31 Blink Data Tx ntf */ UWB_CONFORMANCE_TEST_DATA, /* 32 Conformance test data ntf */ UWB_SET_COUNTRY_CODE_REVT, /* 33 Set country code resp */ - + UWB_VENDOR_SPECIFIC_UCI_NTF_EVT /* 34 Proprietary ntf */ }; typedef uint16_t tUWB_RESPONSE_EVT; @@ -308,6 +308,12 @@ typedef struct { uint8_t data[CONFORMANCE_TEST_MAX_UCI_PKT_LENGTH]; } tUWB_CONFORMANCE_TEST_DATA; +/* the data type associated with vendor notification */ +typedef struct { + uint16_t len; + uint8_t data[UCI_VENDOR_INFO_MAX_SIZE]; +} tUWB_VENDOR_SPECIFIC_REVT; + /* the data type associated with UWB_RANGING_GET_COUNT_REVT */ typedef struct { uint8_t status; /* response status */ @@ -362,6 +368,7 @@ typedef union { tUWB_SET_COUNTRY_CODE_REVT sSet_country_code_status; tUWB_SEND_BLINK_DATA_NTF_REVT sSend_blink_data_ntf; tUWB_CONFORMANCE_TEST_DATA sConformance_test_data; + tUWB_VENDOR_SPECIFIC_REVT sVendor_specific_ntf; } tUWB_RESPONSE; /* Data types associated with all RF test Events */ diff --git a/src/uwb/uci/uci_hrcv.cc b/src/uwb/uci/uci_hrcv.cc index b32de39..e8ff495 100755 --- a/src/uwb/uci/uci_hrcv.cc +++ b/src/uwb/uci/uci_hrcv.cc @@ -278,6 +278,35 @@ void uci_proc_android_rsp(uint8_t op_code, uint8_t* p_buf, uint16_t len) { /******************************************************************************* ** + ** Function uci_proc_proprietary_ntf + ** + ** Description Process UCI notifications in the proprietary Management group + ** + ** Returns void + ** + *******************************************************************************/ +void uci_proc_vendor_specific_ntf(uint8_t gid, uint8_t* p_buf, uint16_t len) { + tUWB_RESPONSE evt_data; + UNUSED(gid); + if (len > 0) { + + if (uwb_cb.p_resp_cback == NULL) { + UCI_TRACE_E("ext response callback is null"); + } else { + evt_data.sVendor_specific_ntf.len = len; + if (evt_data.sVendor_specific_ntf.len > 0) { + STREAM_TO_ARRAY(evt_data.sVendor_specific_ntf.data, p_buf, + len); + } + (*uwb_cb.p_resp_cback)(UWB_VENDOR_SPECIFIC_UCI_NTF_EVT, &evt_data); + } + } else { + UCI_TRACE_E("%s: len is zero", __func__); + } +} + +/******************************************************************************* + ** ** Function uci_proc_raw_cmd_rsp ** ** Description Process RAW CMD responses diff --git a/src/uwb/uwb/uwb_ucif.cc b/src/uwb/uwb/uwb_ucif.cc index 0de5e21..327aa19 100755 --- a/src/uwb/uwb/uwb_ucif.cc +++ b/src/uwb/uwb/uwb_ucif.cc @@ -44,12 +44,16 @@ #define ONE_WAY_MEASUREMENT_LENGTH 36 #define RANGING_DATA_LENGTH 25 +#define VENDOR_SPEC_INFO_LEN 2 + uint8_t last_cmd_buff[UCI_MAX_PAYLOAD_SIZE]; uint8_t last_data_buff[4096]; static uint8_t device_info_buffer[MAX_NUM_OF_TDOA_MEASURES] [UCI_MAX_PAYLOAD_SIZE]; static uint8_t blink_payload_buffer[MAX_NUM_OF_TDOA_MEASURES] [UCI_MAX_PAYLOAD_SIZE]; +static uint8_t range_data_ntf_buffer[2048]; +static uint8_t range_data_ntf_len =0; struct chained_uci_packet { uint8_t buffer[4192]; @@ -153,6 +157,7 @@ void uwb_ucif_check_cmd_queue(UWB_HDR* p_buf) { if (uwb_cb.uwb_state == UWB_STATE_W4_HAL_CLOSE || uwb_cb.uwb_state == UWB_STATE_NONE) { UCI_TRACE_E("%s: HAL is not initialized", __func__); + phUwb_GKI_freebuf(p_buf); return; } @@ -380,10 +385,24 @@ bool uwb_ucif_process_event(UWB_HDR* p_msg) { uci_proc_session_management_ntf(oid, pp, payload_length); break; case UCI_GID_RANGE_MANAGE: /* 0011b UCI Range management group */ + range_data_ntf_len = p_msg->len; + for (int i=0; i<p_msg->len;i++) { + range_data_ntf_buffer[i] = p[i]; + } uci_proc_rang_management_ntf(oid, pp, payload_length); break; case UCI_GID_TEST: /* 1101b test group */ - uci_proc_test_management_ntf(oid, pp, payload_length); + //uci_proc_test_management_ntf(oid, pp, payload_length); + //send vendor specific ntf as it is handled by vendor extension + uci_proc_vendor_specific_ntf(gid, p, (payload_length + UCI_MSG_HDR_SIZE)); + break; + case UCI_GID_VENDOR_SPECIFIC_0x09: + case UCI_GID_VENDOR_SPECIFIC_0x0A: + case UCI_GID_VENDOR_SPECIFIC_0x0B: + case UCI_GID_VENDOR_SPECIFIC_0x0C: + case UCI_GID_VENDOR_SPECIFIC_0x0E: + case UCI_GID_VENDOR_SPECIFIC_0x0F: + uci_proc_vendor_specific_ntf(gid, p, (payload_length + UCI_MSG_HDR_SIZE)); break; default: UCI_TRACE_E("uwb_ucif_process_event: UWB Unknown gid:%d", gid); @@ -934,6 +953,24 @@ void uwb_ucif_proc_ranging_data(uint8_t* p, uint16_t len) { uwb_response.sRange_data = sRange_data; (*uwb_cb.p_resp_cback)(UWB_RANGE_DATA_REVT, &uwb_response); + + UCI_TRACE_I("%s: ranging_measures_length = %d range_data_ntf_len = %d", __func__,ranging_measures_length,range_data_ntf_len); + if (ranging_measures_length >= VENDOR_SPEC_INFO_LEN) { + uint16_t vendor_specific_length =0; + STREAM_TO_UINT16(vendor_specific_length, p); + if (vendor_specific_length > 0) { + if (vendor_specific_length > MAX_VENDOR_INFO_LENGTH) { + UCI_TRACE_E("%s: Invalid Range_data vendor_specific_length = %x", + __func__, vendor_specific_length); + return; + } + + uint8_t *range_data_with_vendor_info = range_data_ntf_buffer; + uwb_response.sVendor_specific_ntf.len = range_data_ntf_len; + STREAM_TO_ARRAY(uwb_response.sVendor_specific_ntf.data, range_data_with_vendor_info, range_data_ntf_len); + (*uwb_cb.p_resp_cback)(UWB_VENDOR_SPECIFIC_UCI_NTF_EVT, &uwb_response); + } + } } /******************************************************************************* |