wifi_error wifi_disable_full_scan_results(wifi_request_id id, wifi_interface_handle iface)
{
    ALOGD("[WIFI HAL]Disabling full scan results");
    wifi_handle handle = getWifiHandle(iface);

    if(id == -1) {
        wifi_scan_result_handler handler;
        wifi_handle handle = getWifiHandle(iface);
        int params_dummy;

        memset(&handler, 0, sizeof(handler));
        FullScanResultsCommand *cmd = new FullScanResultsCommand(iface, 0, &params_dummy, handler);
        cmd->cancel();
        cmd->releaseRef();
        return WIFI_SUCCESS;
    }

    WifiCommand *cmd = wifi_unregister_cmd(handle, id);
    if (cmd) {
        cmd->cancel();
        cmd->releaseRef();
        return WIFI_SUCCESS;
    }

    return WIFI_ERROR_INVALID_ARGS;
}
wifi_error wifi_stop_gscan(wifi_request_id id, wifi_interface_handle iface)
{
    char prop_buf[PROPERTY_VALUE_MAX];
    property_get("wlan.mtk.gscan", prop_buf, "0");

    if(!strcmp(prop_buf, "1")) {
        ALOGD("[WIFI HAL]Stopping GScan");
        wifi_handle handle = getWifiHandle(iface);

        if(id == -1) {
            wifi_scan_result_handler handler;
            wifi_scan_cmd_params dummy_params;
            memset(&handler, 0, sizeof(handler));

            ScanCommand *cmd = new ScanCommand(iface, id, &dummy_params, handler);
            cmd->cancel();
            cmd->releaseRef();
            return WIFI_SUCCESS;
        }

        WifiCommand *cmd = wifi_unregister_cmd(handle, id);
        if (cmd) {
            cmd->cancel();
            cmd->releaseRef();
            return WIFI_SUCCESS;
        }
    }

    return WIFI_ERROR_INVALID_ARGS;
}
    virtual int cancel() {
        ALOGV("Clear alerthandler");

        /* unregister alert handler */
        unregisterVendorHandler(GOOGLE_OUI, GOOGLE_DEBUG_MEM_DUMP_EVENT);
        wifi_unregister_cmd(wifiHandle(), id());
        ALOGD("Success to clear alerthandler");
        return WIFI_SUCCESS;
    }
wifi_error wifi_reset_significant_change_handler(wifi_request_id id, wifi_interface_handle iface)
{
    char prop_buf[PROPERTY_VALUE_MAX];
    property_get("wlan.mtk.gscan", prop_buf, "0");

    if(!strcmp(prop_buf, "1")) {
        wifi_handle handle = getWifiHandle(iface);

        WifiCommand *cmd = wifi_unregister_cmd(handle, id);
        if (cmd) {
            cmd->cancel();
            cmd->releaseRef();
            return WIFI_SUCCESS;
        }
    }

    return WIFI_ERROR_INVALID_ARGS;
}
wifi_error wifi_set_alert_handler(wifi_request_id id, wifi_interface_handle iface,
        wifi_alert_handler handler)
{
    wifi_handle handle = getWifiHandle(iface);
    ALOGV("Alerthandler start, handle = %p", handle);

    SetAlertHandler *cmd = new SetAlertHandler(iface, id, handler);
    NULL_CHECK_RETURN(cmd, "memory allocation failure", WIFI_ERROR_OUT_OF_MEMORY);
    wifi_error result = wifi_register_cmd(handle, id, cmd);
    if (result != WIFI_SUCCESS) {
        cmd->releaseRef();
        return result;
    }
    result = (wifi_error)cmd->start();
    if (result != WIFI_SUCCESS) {
        wifi_unregister_cmd(handle, id);
        cmd->releaseRef();
        return result;
    }
    return result;
}