diff --git a/wifi/1.0/Android.mk b/wifi/1.0/Android.mk index 26f782ef20..bb8d1448aa 100644 --- a/wifi/1.0/Android.mk +++ b/wifi/1.0/Android.mk @@ -1878,177 +1878,6 @@ $(GEN): $(LOCAL_PATH)/types.hal $(transform-generated-source) LOCAL_GENERATED_SOURCES += $(GEN) -# -# Build types.hal (WifiDebugRingEntryConnectivityEvent) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryConnectivityEvent.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryConnectivityEvent - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryEventTlv) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryEventTlv.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryEventTlv - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryEventTlvType) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryEventTlvType.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryEventTlvType - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryEventType) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryEventType.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryEventType - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryFlags) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryFlags.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryFlags - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryHeader) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryHeader.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryHeader - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryPowerEvent) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryPowerEvent.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryPowerEvent - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryVendorData) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryVendorData.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryVendorData - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryWakelockEvent) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryWakelockEvent.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryWakelockEvent - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - # # Build types.hal (WifiDebugRxPacketFate) # @@ -4420,177 +4249,6 @@ $(GEN): $(LOCAL_PATH)/types.hal $(transform-generated-source) LOCAL_GENERATED_SOURCES += $(GEN) -# -# Build types.hal (WifiDebugRingEntryConnectivityEvent) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryConnectivityEvent.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryConnectivityEvent - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryEventTlv) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryEventTlv.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryEventTlv - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryEventTlvType) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryEventTlvType.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryEventTlvType - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryEventType) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryEventType.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryEventType - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryFlags) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryFlags.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryFlags - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryHeader) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryHeader.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryHeader - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryPowerEvent) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryPowerEvent.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryPowerEvent - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryVendorData) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryVendorData.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryVendorData - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - -# -# Build types.hal (WifiDebugRingEntryWakelockEvent) -# -GEN := $(intermediates)/android/hardware/wifi/V1_0/WifiDebugRingEntryWakelockEvent.java -$(GEN): $(HIDL) -$(GEN): PRIVATE_HIDL := $(HIDL) -$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal -$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates) -$(GEN): PRIVATE_CUSTOM_TOOL = \ - $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \ - -Ljava \ - -randroid.hardware:hardware/interfaces \ - -randroid.hidl:system/libhidl/transport \ - android.hardware.wifi@1.0::types.WifiDebugRingEntryWakelockEvent - -$(GEN): $(LOCAL_PATH)/types.hal - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN) - # # Build types.hal (WifiDebugRxPacketFate) # diff --git a/wifi/1.0/IWifiChip.hal b/wifi/1.0/IWifiChip.hal index e903ced64c..72b2c3224c 100644 --- a/wifi/1.0/IWifiChip.hal +++ b/wifi/1.0/IWifiChip.hal @@ -558,7 +558,7 @@ interface IWifiChip { * ring. The vebose level for each ring buffer can be specified in this API. * - During wifi operations, driver must periodically report per ring data to * framework by invoking the - * |IWifiChipEventCallback.onDebugRingBufferEntriesAvailable| callback. + * |IWifiChipEventCallback.onDebugRingBufferDataAvailable| callback. * - When capturing a bug report, framework must indicate to driver that all * the data has to be uploaded urgently by calling * |forceDumpToDebugRingBuffer|. diff --git a/wifi/1.0/IWifiChipEventCallback.hal b/wifi/1.0/IWifiChipEventCallback.hal index aff1e43516..0d9e329fc6 100644 --- a/wifi/1.0/IWifiChipEventCallback.hal +++ b/wifi/1.0/IWifiChipEventCallback.hal @@ -74,28 +74,11 @@ interface IWifiChipEventCallback { * @return status Status of the corresponding ring buffer. This should * contain the name of the ring buffer on which the data is * available. - * @return entries Vector of debug ring buffer data entries. These - * should be parsed based on the type of entry. + * @return data Raw bytes of data sent by the driver. Must be dumped + * out to a bugreport and post processed. */ - /** Connectivity event data callback */ - oneway onDebugRingBufferConnectivityEventEntriesAvailable( - WifiDebugRingBufferStatus status, - vec entries); - - /** Power event data callback */ - oneway onDebugRingBufferPowerEventEntriesAvailable( - WifiDebugRingBufferStatus status, - vec entries); - - /** Wakelock event data callback */ - oneway onDebugRingBufferWakelockEventEntriesAvailable( - WifiDebugRingBufferStatus status, - vec entries); - - /** Vendor data event data callback */ - oneway onDebugRingBufferVendorDataEntriesAvailable( - WifiDebugRingBufferStatus status, - vec entries); + oneway onDebugRingBufferDataAvailable( + WifiDebugRingBufferStatus status, vec data); /** * Callback indicating that the chip has encountered a fatal error. diff --git a/wifi/1.0/default/hidl_struct_util.h b/wifi/1.0/default/hidl_struct_util.h index e4104e27f3..908666669c 100644 --- a/wifi/1.0/default/hidl_struct_util.h +++ b/wifi/1.0/default/hidl_struct_util.h @@ -39,6 +39,9 @@ namespace hidl_struct_util { // Chip conversion methods. bool convertLegacyFeaturesToHidlChipCapabilities( uint32_t legacy_logger_feature_set, uint32_t* hidl_caps); +bool convertLegacyDebugRingBufferStatusToHidl( + const legacy_hal::wifi_ring_buffer_status& legacy_status, + WifiDebugRingBufferStatus* hidl_status); bool convertLegacyVectorOfDebugRingBufferStatusToHidl( const std::vector& legacy_status_vec, std::vector* hidl_status_vec); diff --git a/wifi/1.0/default/wifi_chip.cpp b/wifi/1.0/default/wifi_chip.cpp index 87b47cbff6..e15178d824 100644 --- a/wifi/1.0/default/wifi_chip.cpp +++ b/wifi/1.0/default/wifi_chip.cpp @@ -57,7 +57,8 @@ WifiChip::WifiChip( legacy_hal_(legacy_hal), mode_controller_(mode_controller), is_valid_(true), - current_mode_id_(kInvalidModeId) {} + current_mode_id_(kInvalidModeId), + debug_ring_buffer_cb_registered_(false) {} void WifiChip::invalidate() { invalidateAndRemoveAllIfaces(); @@ -687,6 +688,10 @@ WifiStatus WifiChip::startLoggingToDebugRingBufferInternal( WifiDebugRingBufferVerboseLevel verbose_level, uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes) { + WifiStatus status = registerDebugRingBufferCallback(); + if (status.code != WifiStatusCode::SUCCESS) { + return status; + } legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->startRingBufferLogging( ring_name, @@ -700,6 +705,10 @@ WifiStatus WifiChip::startLoggingToDebugRingBufferInternal( WifiStatus WifiChip::forceDumpToDebugRingBufferInternal( const hidl_string& ring_name) { + WifiStatus status = registerDebugRingBufferCallback(); + if (status.code != WifiStatusCode::SUCCESS) { + return status; + } legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->getRingBufferData(ring_name); return createWifiStatusFromLegacyError(legacy_status); @@ -774,6 +783,42 @@ WifiStatus WifiChip::handleChipConfiguration(ChipModeId mode_id) { } return createWifiStatus(WifiStatusCode::SUCCESS); } + +WifiStatus WifiChip::registerDebugRingBufferCallback() { + if (debug_ring_buffer_cb_registered_) { + return createWifiStatus(WifiStatusCode::SUCCESS); + } + + android::wp weak_ptr_this(this); + const auto& on_ring_buffer_data_callback = [weak_ptr_this]( + const std::string& /* name */, + const std::vector& data, + const legacy_hal::wifi_ring_buffer_status& status) { + const auto shared_ptr_this = weak_ptr_this.promote(); + if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { + LOG(ERROR) << "Callback invoked on an invalid object"; + return; + } + WifiDebugRingBufferStatus hidl_status; + if (!hidl_struct_util::convertLegacyDebugRingBufferStatusToHidl( + status, &hidl_status)) { + LOG(ERROR) << "Error converting ring buffer status"; + return; + } + for (const auto& callback : shared_ptr_this->getEventCallbacks()) { + callback->onDebugRingBufferDataAvailable(hidl_status, data); + } + }; + legacy_hal::wifi_error legacy_status = + legacy_hal_.lock()->registerRingBufferCallbackHandler( + on_ring_buffer_data_callback); + + if (legacy_status == legacy_hal::WIFI_SUCCESS) { + debug_ring_buffer_cb_registered_ = true; + } + return createWifiStatusFromLegacyError(legacy_status); +} + } // namespace implementation } // namespace V1_0 } // namespace wifi diff --git a/wifi/1.0/default/wifi_chip.h b/wifi/1.0/default/wifi_chip.h index 373712cf88..938b18077b 100644 --- a/wifi/1.0/default/wifi_chip.h +++ b/wifi/1.0/default/wifi_chip.h @@ -174,6 +174,7 @@ class WifiChip : public IWifiChip { WifiStatus enableDebugErrorAlertsInternal(bool enable); WifiStatus handleChipConfiguration(ChipModeId mode_id); + WifiStatus registerDebugRingBufferCallback(); ChipId chip_id_; std::weak_ptr legacy_hal_; @@ -186,6 +187,10 @@ class WifiChip : public IWifiChip { std::vector> rtt_controllers_; bool is_valid_; uint32_t current_mode_id_; + // The legacy ring buffer callback API has only a global callback + // registration mechanism. Use this to check if we have already + // registered a callback. + bool debug_ring_buffer_cb_registered_; DISALLOW_COPY_AND_ASSIGN(WifiChip); }; diff --git a/wifi/1.0/default/wifi_legacy_hal.cpp b/wifi/1.0/default/wifi_legacy_hal.cpp index d65052e639..3b99e607d1 100644 --- a/wifi/1.0/default/wifi_legacy_hal.cpp +++ b/wifi/1.0/default/wifi_legacy_hal.cpp @@ -761,7 +761,7 @@ std::pair> WifiLegacyHal::getRingBuffersStatus() { std::vector ring_buffers_status; ring_buffers_status.resize(kMaxRingBuffers); - uint32_t num_rings = 0; + uint32_t num_rings = kMaxRingBuffers; wifi_error status = global_func_table_.wifi_get_ring_buffers_status( wlan_interface_handle_, &num_rings, ring_buffers_status.data()); CHECK(num_rings <= kMaxRingBuffers); diff --git a/wifi/1.0/types.hal b/wifi/1.0/types.hal index 2da4d844ea..76c89e35a6 100644 --- a/wifi/1.0/types.hal +++ b/wifi/1.0/types.hal @@ -2358,468 +2358,6 @@ struct RttResponder { */ typedef uint32_t WifiRingBufferId; -/** - * Mask of flags present in |WifiDebugRingEntryHeader.flags| field. - */ -enum WifiDebugRingEntryFlags : uint8_t { - /** - * Set for binary entries - */ - HAS_BINARY = 1 << 0, - /** - * Set if 64 bits timestamp is present - */ - HAS_TIMESTAMP = 1 << 1, -}; - -/** - * This structure represent an entry within a debug ring buffer. - * Wifi driver are responsible to manage the debug ring buffer and write the - * debug information into those buffer. - * - * In general, the debug entries can be used to store meaningful 802.11 - * information (SME, MLME, connection and packet statistics) as well as vendor - * proprietary data that is specific to a specific driver or chipset. - * Binary entries can be used so as to store packet data or vendor specific - * information and will be treated as blobs of data by android framework. - * - * A user land process will be started by framework so as to periodically - * retrieve the data logged by drivers into their debug ring buffer, store the - * data into log files and include the logs into android bugreports. - */ -struct WifiDebugRingEntryHeader { - /** - * The size of |payload| excluding the header. - */ - uint16_t sizeInBytes; - /** - * Combination of |WifiDebugRingEntryFlags| values. - */ - uint8_t flags; - /** - * Present if |HAS_TIMESTAMP| bit is set. - */ - TimeStampInUs timestamp; -}; - -/** - * Below event types are used for both the connect and power event - * ring entries. - */ -enum WifiDebugRingEntryEventType : uint16_t { - /** - * Driver receives association command from kernel. - */ - ASSOCIATION_REQUESTED = 0, - AUTH_COMPLETE = 1, - ASSOC_COMPLETE = 2, - /** - * Firmware event indicating auth frames are sent. - */ - FW_AUTH_STARTED = 3, - /** - * Firmware event indicating assoc frames are sent. - */ - FW_ASSOC_STARTED = 4, - /** - * Firmware event indicating reassoc frames are sent. - */ - FW_RE_ASSOC_STARTED = 5, - DRIVER_SCAN_REQUESTED = 6, - DRIVER_SCAN_RESULT_FOUND = 7, - DRIVER_SCAN_COMPLETE = 8, - BACKGROUND_SCAN_STARTED = 9, - BACKGROUND_SCAN_COMPLETE = 10, - DISASSOCIATION_REQUESTED = 11, - RE_ASSOCIATION_REQUESTED = 12, - ROAM_REQUESTED = 13, - /** - * Received beacon from AP (event enabled only in verbose mode). - */ - BEACON_RECEIVED = 14, - /** - * Firmware has triggered a roam scan (not g-scan). - */ - ROAM_SCAN_STARTED = 15, - /** - * Firmware has completed a roam scan (not g-scan). - */ - ROAM_SCAN_COMPLETE = 16, - /** - * Firmware has started searching for roam candidates (with reason =xx). - */ - ROAM_SEARCH_STARTED = 17, - /** - * Firmware has stopped searching for roam candidates (with reason =xx). - */ - ROAM_SEARCH_STOPPED = 18, - /** - * Received channel switch anouncement from AP. - */ - CHANNEL_SWITCH_ANOUNCEMENT = 20, - /** - * Firmware start transmit eapol frame, with EAPOL index 1-4. - */ - FW_EAPOL_FRAME_TRANSMIT_START = 21, - /** - * Firmware gives up eapol frame, with rate, success/failure and number - * retries. - */ - FW_EAPOL_FRAME_TRANSMIT_STOP = 22, - /** - * Kernel queue EAPOL for transmission in driver with EAPOL index 1-4. - */ - DRIVER_EAPOL_FRAME_TRANSMIT_REQUESTED = 23, - /** - * With rate, regardless of the fact that EAPOL frame is accepted or - * rejected by firmware. - */ - FW_EAPOL_FRAME_RECEIVED = 24, - /** - * With rate, and eapol index, driver has received EAPOL frame and will - * queue it up to wpa_supplicant. - */ - DRIVER_EAPOL_FRAME_RECEIVED = 26, - /** - * With success/failure, parameters - */ - BLOCK_ACK_NEGOTIATION_COMPLETE = 27, - BT_COEX_BT_SCO_START = 28, - BT_COEX_BT_SCO_STOP = 29, - /** - * For paging/scan etc., when BT starts transmiting twice per BT slot. - */ - BT_COEX_BT_SCAN_START = 30, - BT_COEX_BT_SCAN_STOP = 31, - BT_COEX_BT_HID_START = 32, - BT_COEX_BT_HID_STOP = 33, - /** - * Firmware sends auth frame in roaming to next candidate. - */ - ROAM_AUTH_STARTED = 34, - /** - * Firmware receive auth confirm from ap - */ - ROAM_AUTH_COMPLETE = 35, - /** - * Firmware sends assoc/reassoc frame in roaming to next candidate. - */ - ROAM_ASSOC_STARTED = 36, - /** - * Firmware receive assoc/reassoc confirm from ap. - */ - ROAM_ASSOC_COMPLETE = 37, - /** - * Firmware sends stop BACKGROUND_SCAN - */ - BACKGROUND_SCAN_STOP = 38, - /** - * Firmware indicates BACKGROUND_SCAN scan cycle started. - */ - BACKGROUND_SCAN_CYCLE_STARTED = 39, - /** - * Firmware indicates BACKGROUND_SCAN scan cycle completed. - */ - BACKGROUND_SCAN_CYCLE_COMPLETED = 40, - /** - * Firmware indicates BACKGROUND_SCAN scan start for a particular bucket. - */ - BACKGROUND_SCAN_BUCKET_STARTED = 41, - /** - * Firmware indicates BACKGROUND_SCAN scan completed for for a particular bucket. - */ - BACKGROUND_SCAN_BUCKET_COMPLETED = 42, - /** - * Event received from firmware about BACKGROUND_SCAN scan results being available. - */ - BACKGROUND_SCAN_RESULTS_AVAILABLE = 43, - /** - * Event received from firmware with BACKGROUND_SCAN capabilities. - */ - BACKGROUND_SCAN_CAPABILITIES = 44, - /** - * Event received from firmware when eligible candidate is found. - */ - ROAM_CANDIDATE_FOUND = 45, - /** - * Event received from firmware when roam scan configuration gets - * enabled or disabled. - */ - ROAM_SCAN_CONFIG = 46, - /** - * Firmware/driver timed out authentication. - */ - AUTH_TIMEOUT = 47, - /** - * Firmware/driver timed out association. - */ - ASSOC_TIMEOUT = 48, - /** - * Firmware/driver encountered allocation failure. - */ - MEM_ALLOC_FAILURE = 49, - /** - * Driver added a PNO network in firmware. - */ - DRIVER_PNO_ADD = 50, - /** - * Driver removed a PNO network in firmware. - */ - DRIVER_PNO_REMOVE = 51, - /** - * Driver received PNO networks found indication from firmware. - */ - DRIVER_PNO_NETWORK_FOUND = 52, - /** - * Driver triggered a scan for PNO networks. - */ - DRIVER_PNO_SCAN_REQUESTED = 53, - /** - * Driver received scan results of PNO networks. - */ - DRIVER_PNO_SCAN_RESULT_FOUND = 54, - /** - * Driver updated scan results from PNO networks to cfg80211. - */ - DRIVER_PNO_SCAN_COMPLETE = 55, -}; - -/** - * Parameters of the various events are a sequence of TLVs - * (type, length, value). The types for different TLV's are defined below. - */ -enum WifiDebugRingEntryEventTlvType : uint16_t { - /** - * Take a byte stream as parameter. - */ - VENDOR_SPECIFIC = 0, - /** - * Takes a MAC address as parameter. - */ - BSSID = 1, - /** - * Takes a MAC address as parameter. - */ - ADDR = 2, - /** - * Takes an SSID as parameter. - */ - SSID = 3, - /** - * Takes an integer as parameter. - */ - STATUS = 4, - /** - * Takes a |WifiChannelInfo| struct as parameter. - */ - CHANNEL_SPEC = 5, - /** - * Takes a MAC address as parameter. - */ - ADDR_1 = 6, - /** - * Takes a MAC address as parameter. - */ - ADDR_2 = 7, - /** - * Takes a MAC address as parameter. - */ - ADDR_3 = 8, - /** - * Takes a MAC address as parameter. - */ - ADDR_4 = 9, - /** - * Takes a TSF value as parameter. - */ - TSF = 10, - /** - * Takes one or more specific 802.11 IEs parameter IEs are in turn - * indicated in TLV format as per 802.11, spec. - */ - IE = 11, - /** - * Takes a string interface name as parameter. - */ - IFACE_NAME = 12, - /** - * Takes a integer reason code as per 802.11 as parameter. - */ - REASON_CODE = 13, - /** - * Takes an integer representing wifi rate in 1 mbps as parameter. - */ - RATE_MBPS = 14, - /** - * Takes an integer as parameter. - */ - REQUEST_ID = 15, - /** - * Takes an integer as parameter. - */ - BUCKET_ID = 16, - /** - * Takes a |BackgroundScanParameters| struct as parameter. - */ - BACKGROUND_SCAN_PARAMS = 17, - /** - * Takes a |BackgroundScanCapabilities| struct as parameter. - */ - BACKGROUND_SCAN_CAPABILITIES = 18, - /** - * Takes an integer as parameter. - */ - SCAN_ID = 19, - /** - * Takes an integer as parameter. - */ - RSSI = 20, - /** - * Takes a |WifiChannelInMhz| as parameter. - */ - CHANNEL = 21, - /** - * Takes an integer as parameter. - */ - LINK_ID = 22, - /** - * Takes an integer as parameter. - */ - LINK_ROLE = 23, - /** - * Takes an integer as parameter. - */ - LINK_STATE = 24, - /** - * Takes an integer as parameter. - */ - LINK_TYPE = 25, - /** - * Takes an integer as parameter. - */ - TSCO = 26, - /** - * Takes an integer as parameter. - */ - RSCO = 27, - /** - * Takes an integer as parameter. - * M1=1, M2=2, M3=3, M=4, - */ - EAPOL_MESSAGE_TYPE = 28, -}; - -/** - * Used to describe a specific TLV in an event entry. - */ -struct WifiDebugRingEntryEventTlv { - WifiDebugRingEntryEventTlvType type; - /** - * All possible types of values that can be held in the TLV. - * Note: This should ideally be a union. But, since this HIDL package - * is going to be used by a java client, we cannot have unions in this - * package. - */ - /* TODO(b/32207606): This can be moved to vendor extension. */ - vec vendorSpecific; - Bssid bssid; - MacAddress addr; - Ssid ssid; - WifiChannelInfo channelSpec; - uint64_t tsf; - vec ie; - string ifaceName; - StaBackgroundScanParameters bgScanParams; - StaBackgroundScanCapabilities bgScanCapabilities; - Rssi rssi; - WifiChannelInMhz channel; - uint32_t integerVal; -}; - -/** - * Used to describe a connect event ring entry. - */ -struct WifiDebugRingEntryConnectivityEvent { - /** - * Ring entry header. - */ - WifiDebugRingEntryHeader header; - /** - * Type of connection event. - */ - WifiDebugRingEntryEventType event; - /** - * Separate parameter structure per event to be provided and optional data. - * The event data is expected to include an official android part, with some - * parameter as transmit rate, num retries, num scan result found, etc. - * event data can include a vendor proprietary part which is understood by - * the vendor only. - */ - vec tlvs; -}; - -/** - * Used to describe a power event ring entry. - */ -struct WifiDebugRingEntryPowerEvent { - /** - * Ring entry header. - */ - WifiDebugRingEntryHeader header; - /** - * Type of power event. - */ - WifiDebugRingEntryEventType event; - /** - * Separate parameter structure per event to be provided and optional data. - * The event data is expected to include an official android part, with some - * parameter as transmit rate, num retries, num scan result found, etc. - * event data can include a vendor proprietary part which is understood by - * the vendor only. - */ - vec tlvs; -}; - -/** - * Used to describe a wakelock event ring entry. - */ -struct WifiDebugRingEntryWakelockEvent { - /** - * Ring entry header. - */ - WifiDebugRingEntryHeader header; - /** - * true = wake lock acquired. - * false = wake lock released. - */ - bool wasAcquired; - /** - * Reason why this wake lock is taken. - * This is a vendor defined reason and can only be understood by the - * vendor. - */ - uint32_t vendorSpecificReason; - /** - * Wake lock name. - */ - string wakelockName; -}; - -/** - * Used to describe a vendor specific data ring entry. - */ -struct WifiDebugRingEntryVendorData { - /** - * Ring entry header. - */ - WifiDebugRingEntryHeader header; - /** - * This is a blob that will only be understood by the - * vendor. - */ - vec vendorData; -}; - /** * Flags describing each debug ring buffer. */