diff --git a/wifi/1.0/IWifiStaIfaceEventCallback.hal b/wifi/1.0/IWifiStaIfaceEventCallback.hal
new file mode 100644
index 0000000..1ee2d4e
--- /dev/null
+++ b/wifi/1.0/IWifiStaIfaceEventCallback.hal
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.wifi@1.0;
+
+interface IWifiStaIfaceEventCallback {
+  /**
+   * Callback indicating that the requested packet filter was successfully
+   * installed.
+   */
+  oneway onInstallPacketFilterSuccess();
+
+  /**
+   * Callback indicating that installing a packet filter failed.
+   */
+  oneway onInstallPacketFilterFailure(FailureReason reason);
+
+  /**
+   * Callback indicating that a requested background scan was started.
+   */
+  oneway onBackgroundScanStarted();
+
+  /**
+   * Callback indicating that a requested background scan failed to start.
+   */
+  oneway onBackgroundScanStartFailure(FailureReason reason);
+
+  /**
+   * Callback indicating that a scan was stopped
+   */
+  oneway onBackgroundScanStopped();
+
+ /**
+  * Information elements contained within the |ScanResult| structure.
+  * These elements correspond to the IEEE_802.11 standard.
+  */
+  struct InformationElement {
+    uint8_t id;
+    vec<uint8_t> data;
+  };
+
+  /**
+   * BSSID type. 6 octets representing the physical address of an AP.
+   */
+  typedef uint8_t[6] Bssid;
+
+  /**
+   * Structure describing all the information about a single access point seen
+   * during the scan.
+   */
+  struct ScanResult {
+    int64_t timeStampInUs;
+    vec<uint8_t> ssid;
+    Bssid bssid;
+    uint32_t frequencyInMhz;
+    int8_t rssi;
+    uint16_t beaconPeriodInMs;
+    uint16_t capability;
+    vec<InformationElement> informationElements;
+  };
+
+  /**
+   * Mask of flags set in the |ScanData| instance.
+   */
+  enum ScanDataFlagMask {
+    /**
+     * Indicates that a scan was interrupted/did not occur so results may be
+     * incomplete.
+     */
+    WIFI_SCAN_FLAG_INTERRUPTED = 1 << 0,
+  };
+
+  /**
+   * Structure describing all the information about all the access points seen during
+   * the scan.
+   */
+  struct ScanData {
+    /**
+     * Bitset containing |ScanDataFlagMask| values.
+     */
+    uint32_t flags;
+    /**
+     * Bitset where each bit indicates if the bucket with that index was
+     * scanned.
+     */
+    uint32_t bucketsScanned;
+    /**
+     * List of scan results.
+     */
+    vec<ScanResult> results;
+  };
+
+  /**
+   * Called for each received beacon/probe response for a scan with the
+   * |REPORT_EVENTS_FULL_RESULTS| flag set in
+   * |BackgroundScanBucketParameters.eventReportScheme|.
+   *
+   * @param cmdId command Id corresponding to the request.
+   * @parm result Full scan result for an AP.
+   */
+  oneway onBackgroundFullScanResult(CommandId cmdId, ScanResult result);
+
+  /**
+   * Called when the |BackgroundScanBucketParameters.eventReportScheme| flags
+   * for at least one bucket that was just scanned was
+   * |REPORT_EVENTS_EACH_SCAN| or one of the configured thresholds was
+   * breached.
+   *
+   * @param cmdId command Id corresponding to the request.
+   * @parm scanDatas List of scan result for all AP's seen since last callback.
+   */
+  oneway onBackgroundScanResults(CommandId cmdId, vec<ScanData> scanDatas);
+};
