summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2022-03-30 17:32:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-03-30 17:32:59 +0000
commitf630fe65e4a36fec05cd345537e806d08e356994 (patch)
tree6e01101b7198440ef45c054f881fd9d6eec1d9fd /src
parent36ceae097ddc79d208024ee6b574783b2373c147 (diff)
parent9dd4ebb57ea87db09192886576cd50c77a02c45e (diff)
downloaduwb-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-xsrc/gki/ulinux/uwb_gki_ulinux.cc21
-rwxr-xr-xsrc/include/uwb_gki_target.h40
-rwxr-xr-xsrc/uci/include/uci_defs.h13
-rwxr-xr-xsrc/uwa/dm/uwa_dm_act.cc9
-rwxr-xr-xsrc/uwa/include/uwa_api.h8
-rwxr-xr-xsrc/uwb/include/uci_hmsgs.h2
-rwxr-xr-xsrc/uwb/include/uwb_api.h9
-rwxr-xr-xsrc/uwb/uci/uci_hrcv.cc29
-rwxr-xr-xsrc/uwb/uwb/uwb_ucif.cc39
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);
+ }
+ }
}
/*******************************************************************************