机器无法搜索6gwifi(英飞凌的WIFI芯片有限制,STA和AP需保持同频段才能正常使用,连接6Gwifi才能开启6G热点)

--- a/service/java/com/android/server/wifi/SoftApManager.java
+++ b/service/java/com/android/server/wifi/SoftApManager.java
@@ -918,6 +918,7 @@ public class SoftApManager implements ActiveModeManager {

         startResult = ApConfigUtil.updateApChannelConfig(
                 mWifiNative, mCoexManager, mResourceCache, mCountryCode,
+                mActiveModeWarden.getClientModeManagers(),
                 localConfigBuilder, mCurrentSoftApConfiguration, mCurrentSoftApCapability);
         if (startResult != START_RESULT_SUCCESS) {
             Log.e(getTag(), "Failed to update AP band and channel");
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 88c32793b2..9b8138f42b 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -18,6 +18,7 @@ package com.android.server.wifi;

 import static android.app.AppOpsManager.MODE_ALLOWED;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.net.TetheringManager.TETHERING_WIFI;
 import static android.net.wifi.ScanResult.WIFI_BAND_24_GHZ;
 import static android.net.wifi.ScanResult.WIFI_BAND_5_GHZ;
 import static android.net.wifi.ScanResult.WIFI_BAND_6_GHZ;
@@ -92,14 +93,17 @@ import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
 import android.hardware.wifi.WifiStatusCode;
 import android.location.LocationManager;
+import android.net.ConnectivityManager;
 import android.net.DhcpInfo;
 import android.net.DhcpOption;
 import android.net.DhcpResultsParcelable;
 import android.net.InetAddresses;
 import android.net.MacAddress;
 import android.net.Network;
+import android.net.TetheringManager;
 import android.net.NetworkCapabilities;
 import android.net.NetworkStack;
+import java.util.concurrent.Executors;
 import android.net.TetheringManager;
 import android.net.Uri;
 import android.net.ip.IpClientUtil;
@@ -290,6 +294,7 @@ import java.io.DataOutputStream;
  */
 public class WifiServiceImpl extends IWifiManager.Stub {
     private static final String TAG = "WifiService";
+    private static final String TAG_AP = "WifiServiceAP";
     private static final boolean VDBG = false;

     /** Max wait time for posting blocking runnables */
@@ -391,6 +396,8 @@ public class WifiServiceImpl extends IWifiManager.Stub {

     private final DefaultClientModeManager mDefaultClientModeManager;

+    private TetheringManager mTetheringManager = null;
+
     private final WepNetworkUsageController mWepNetworkUsageController;

     private final FeatureFlags mFeatureFlags;
@@ -809,6 +816,7 @@ public class WifiServiceImpl extends IWifiManager.Stub {
         mFeatureFlags = mDeviceConfigFacade.getFeatureFlags();
         mApplicationQosPolicyRequestHandler = mWifiInjector.getApplicationQosPolicyRequestHandler();
         mWifiPulledAtomLogger = mWifiInjector.getWifiPulledAtomLogger();
+        mTetheringManager = mContext.getSystemService(TetheringManager.class);
         mAfcManager = mWifiInjector.getAfcManager();
         mTwtManager = mWifiInjector.getTwtManager();
         mWepNetworkUsageController = mWifiInjector.getWepNetworkUsageController();
@@ -1047,6 +1055,7 @@ public class WifiServiceImpl extends IWifiManager.Stub {
             registerForCarrierConfigChange();
             mWifiInjector.getAdaptiveConnectivityEnabledSettingObserver().initialize();
             mIsWifiServiceStarted = true;
+            mActiveModeWarden.addWifiNetworkStateChangedListener(new WifiNetworkStateChangedListener());
         }, TAG + "#checkAndStartWifi");
     }

@@ -9275,6 +9284,121 @@ public class WifiServiceImpl extends IWifiManager.Stub {
         }, TAG + "#getSupportedSimultaneousBandCombinations");
     }

+    public class WifiNetworkStateChangedListener extends IWifiNetworkStateChangedListener.Stub {
+
+        public static final int MAKE_Hotspot_With_Network_DELAYED_MILLIS = 2 * 1000;
+
+        @Override
+        public void onWifiNetworkStateChanged(int clientRole, int status) {
+            switch (status) {
+                case WifiManager.WifiNetworkStateChangedListener.WIFI_NETWORK_STATUS_DISCONNECTED:
+                    mWifiThreadRunner.removeCallbacks(makeHotspotWithConnectedNetworkRunnable);
+                    break;
+                case WifiManager.WifiNetworkStateChangedListener.WIFI_NETWORK_STATUS_CONNECTED:
+                    mWifiThreadRunner.removeCallbacks(makeHotspotWithConnectedNetworkRunnable);
+                    mWifiThreadRunner.postDelayed(makeHotspotWithConnectedNetworkRunnable,
+                            MAKE_Hotspot_With_Network_DELAYED_MILLIS,"WifiServiceImpl");
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        private Runnable makeHotspotWithConnectedNetworkRunnable = () -> {
+            updateApConfiguration();
+            restartTetheringIfNeeded();
+        };
+
+        //update new ap config
+        private void updateApConfiguration() {
+            SoftApConfiguration newSoftApConfig = makeNewSoftApConfiguration(
+                    mWifiApConfigStore.getApConfiguration(), mActiveModeWarden.getConnectionInfo());
+            Log.w(TAG_AP, "Update Hotspot due network connected : " + newSoftApConfig);
+            mWifiApConfigStore.setApConfiguration(newSoftApConfig);
+            mActiveModeWarden.updateSoftApConfiguration(newSoftApConfig);
+        }
+
+        private SoftApConfiguration makeNewSoftApConfiguration(SoftApConfiguration oldSoftApConfig,
+                                                               WifiInfo connectionInfo) {
+            if (connectionInfo.getFrequency() == 0) {
+                return new SoftApConfiguration.Builder(oldSoftApConfig)
+                        .setBand(SoftApConfiguration.BAND_2GHZ)
+                        .build();
+            }else {
+                return new SoftApConfiguration.Builder(oldSoftApConfig)
+                        .setBand(ApConfigUtil.convertFrequencyToBand(connectionInfo.getFrequency()))
+                        .build();
+            }
+        }
+
+        //restart soft ap
+        private void restartTetheringIfNeeded() {
+            int apStatue = getWifiApEnabledState();
+            if (apStatue == WIFI_AP_STATE_ENABLED || apStatue == WIFI_AP_STATE_ENABLING) {
+                Log.w(TAG_AP, "Restarting Tethering");
+                apNeedRestart = true;
+                if (!mTetheredSoftApTracker.registerSoftApCallback(new SoftApCallback(),null)) {
+                    Log.e(TAG_AP, "registerSoftApCallback: Failed to add callback");
+                }
+                Log.w(TAG_AP, "Stopping Tethering");
+                mTetheringManager.stopTethering(TETHERING_WIFI);
+            }
+        }
+
+    }
+
+    private boolean apNeedRestart;
+
+    public class SoftApCallback extends ISoftApCallback.Stub {
+
+        private static final int RESTART_INTERVAL_MS = 200;
+
+        @Override
+        public void onStateChanged(SoftApState state) {
+            if (state.getState() == WIFI_AP_STATE_DISABLED) {
+                Log.w(TAG_AP, "AP DISABLED");
+                if (!apNeedRestart) {
+                    return;
+                }
+                mWifiThreadRunner.postDelayed(() -> {
+                    Log.w(TAG_AP, "Starting Tethering");
+                    mTetheringManager.startTethering(TETHERING_WIFI,
+                            Executors.newSingleThreadExecutor(), new StartTetheringCallback());
+                }, RESTART_INTERVAL_MS,"WifiServiceImpl");
+                apNeedRestart = false;
+            } else if (state.getState() == WIFI_AP_STATE_ENABLED) {
+                Log.w(TAG_AP, "AP ENABLED");
+            }
+        }
+
+        @Override
+        public void onConnectedClientsOrInfoChanged(Map<String, SoftApInfo> infos,
+                                                    Map<String, List<WifiClient>> clients, boolean isBridged,
+                                                    boolean isRegistration){
+        }
+
+        @Override
+        public void onCapabilityChanged(SoftApCapability capability){
+        }
+
+        @Override
+        public void onBlockedClientConnecting(WifiClient client, int blockedReason){
+        }
+        @Override
+        public void onClientsDisconnected(SoftApInfo info,List<WifiClient> clients){
+        }
+    }
+
+    private class StartTetheringCallback implements TetheringManager.StartTetheringCallback {
+        @Override
+        public void onTetheringStarted() {
+        }
+
+        @Override
+        public void onTetheringFailed(int error) {
+        }
+    }
+
     /**
      * Set the mock wifi service for testing
      */
diff --git a/service/java/com/android/server/wifi/util/ApConfigUtil.java b/service/java/com/android/server/wifi/util/ApConfigUtil.java
index c60a9f4f35..d5bde9a92b 100644
--- a/service/java/com/android/server/wifi/util/ApConfigUtil.java
+++ b/service/java/com/android/server/wifi/util/ApConfigUtil.java
@@ -82,6 +82,8 @@ import java.util.Set;
 import java.util.StringJoiner;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+import android.net.wifi.WifiInfo;
+import com.android.server.wifi.ClientModeManager;

 /**
  * Provide utility functions for updating soft AP related configuration.
@@ -1000,6 +1002,7 @@ public class ApConfigUtil {
             @NonNull CoexManager coexManager,
             WifiResourceCache resources,
             String countryCode,
+            List<ClientModeManager> clientModeManagers,
             SoftApConfiguration.Builder configBuilder,
             SoftApConfiguration config,
             SoftApCapability capability) {
@@ -1044,6 +1047,20 @@ public class ApConfigUtil {
             }
         }

+        //Make AP band same as Connect band, default BAND_5GHZ
+//        configBuilder.setBand(SoftApConfiguration.BAND_5GHZ);
+        for (ClientModeManager cmm
+                : clientModeManagers) {
+            WifiInfo wifiConnectedInfo = cmm.getConnectionInfo();
+            int frequency = wifiConnectedInfo.getFrequency();
+            if (frequency > 0) {
+                Log.d(TAG, "Connected Frequency " + frequency
+                        + ", make AP band same as Connected band.");
+                configBuilder.setBand(convertFrequencyToBand(frequency));
+                break;
+            }
+        }
+
         return SoftApManager.START_RESULT_SUCCESS;
     }

内容概要:本文详细复现并实现了“电动汽车聚合可行域的内-外结合近似方法”的Matlab代码,旨在通过对大量电动汽车充放电能力的建模,构建其聚合可行域的内近似与外近似集合,从而科学刻画电动汽车集群作为柔性资源参与电网调度的整体潜力。研究基于多面体理论,系统阐述了电动汽车集群聚合建模的技术流程,并将其集成至包含分布式电源、储能系统及常规负荷的微电网经济调度模型中,验证该方法在提升系统运行经济性、灵活性与可再生能源消纳能力方面的有效性。文中不仅提供了完整的数学模型推导与优化框架,还深入分析了模型特性及其在虚拟电厂、车网互动(V2G)等新兴电力系统场景中的应用前景。; 适合人群:具备电力系统分析基础Matlab编程能力的研究生、科研人员,以及从事新能源并网、智能电网、求响应能源互联网相关领域的工程师与技术人员。; 使用场景及目标:①掌握基于多面体理论的电动汽车集群聚合建模方法,理解其作为“虚拟电池”参与系统调度的内在机理;②学习如何将海量异质个体的时空灵活性聚合为可操作的可行域,并应用于微电网或主动配电网的优化调度问题;③为开展车网互动(V2G)、分布式资源聚合、鲁棒调度、虚拟电厂等前沿课题的研究提供坚实的模型基础与可复用的代码参考。; 阅读建议:建议读者结合文中提供的Matlab代码,逐模块运行与调试,重点关注电动汽车个体可行域的构建、多面体聚合的内近似算法实现以及微电网调度模型中约束条件的耦合方式,鼓励通过修改参数、增删设备类型或扩展为多时段模型等方式进行二次开发,以深化对聚合机理与优化逻辑的理解。
内容概要:本文提出了一种基于QEG-RKRBMO算法的复杂三维战场环境下无人机路径规划方法,旨在解决高维、强约束空间中的航迹优化问题。通过构建融合地形起伏、静态障碍物、动态威胁区域及无人机自身动力学特性的综合数学模型,设计了兼顾路径长度、飞行安全性、能耗与机动平滑性的多目标综合评价函数,并引入多种群灰狼优化算法(CS-GWO)进行算法改进,有效提升了种群多样性与全局寻优能力,避免早熟收敛。文中系统阐述了三维决策空间建模、航迹编码机制、多层次约束条件体系以及基于修复策略的不可行解处理方法,时给出了关键工程模块的实现细节,包括初始化策略、邻域搜索机制与收敛判据,并配套提供了完整的Matlab代码实现框架,充分验证了该方法在复杂三维场景下生成安全、高效、可行航迹的有效性与鲁棒性。; 适合人群:具备一定算法基础Matlab编程能力,从事无人机路径规划、智能优化算法研究或军事仿真领域的科研人员及研究生。; 使用场景及目标:①应用于复杂三维战场环境中多无人机协避障与路径规划;②为高维约束优化问题提供基于群体智能算法的求解思路与代码参考;③支持对灰狼优化算法及其他元启发式算法的改进与性能验证。; 阅读建议:建议结合文中提供的Matlab代码逐模块运行与调试,重点关注算法改进策略与约束处理机制的实现细节,时可扩展应用于其他路径规划或优化调度场景中进行对比实验。
内容概要:本文系统介绍了成像光敏描记图(Imaging Photoplethysmography, iPPG)技术的原理与Matlab实现方法,旨在从人脸视频中非接触式提取生理信号如脉搏率。通过分析皮肤区域像素的微小亮度变化,结合感兴趣区域(ROI)选取、光照补偿、运动伪影抑制、信号滤波及频域分析(如傅里叶变换与峰值检测)等关键步骤,实现对心跳频率的高精度估计。文中详细阐述了iPPG的整体处理流程,并提供了完整的Matlab代码框架,涵盖信号预处理、时频域特征提取与结果可视化,适用于生物医学信号处理与远程健康监测领域的研究与应用。; 适合人群:具备数字图像处理、信号处理基础知识,熟练使用Matlab编程,从事生物医学工程、远程医疗、情感计算、人机交互或智能健康设备研发的科研人员、工程师及研究生。; 使用场景及目标:①构建非接触式生理参数监测系统,用于远程健康监护或可穿戴设备开发;②开展情绪识别、疲劳检测、运动生理监测等智能感知系统的算法研究与原型验证;③深入理解iPPG技术的核心处理机制及其在实际应用场景中的挑战与优化策略; 阅读建议:建议读者结合所提供的Matlab代码逐模块调试,重点掌握ROI提取、信号去噪与时频分析的实现细节,时可通过不光照、运动强度的视频数据测试算法鲁棒性,进一步探究环境干扰对信号质量的影响及相应的改进方法。
内容概要:本文系统阐述了基于矩方法的工程不确定度快速评估策略,重点突出其在迭代设计优化中的计算效率与稳定性优势,并配套提供了完整的Matlab代码实现。该方法通过提取输入变量的高阶矩信息,结合最大熵原理进行概率分布重建,从而实现对输出响应不确定性的高效传播分析,有效克服了传统蒙特卡洛方法计算成本高昂的弊端。研究深入对比了最大熵方法与Pearson分布系统在处理单峰及多峰分布尾部估计时的性能差异,验证了前者在扩展不确定度评估中的更高精度与更强鲁棒性,尤其适用于航空航天、高端装备等对可靠性要求严苛的复杂工程系统。; 适合人群:具备概率统计、随机过程及数值计算基础,从事工程设计、可靠性分析、不确定性量化或优化研究的科研人员、工程师及高年级研究生。; 使用场景及目标:①解决复杂工程系统中因材料、制造、载荷等多源不确定性引发的性能波动评估难题;②在迭代式设计优化流程中嵌入高效的不确定度传播模块,提升优化过程的稳定性与收敛性;③替代计算耗时的抽样方法(如蒙特卡洛),实现快速风险评估与可靠性分析;④应用于高维、非线性系统的尾部风险预测与安全边界划定。; 阅读建议:建议读者结合提供的Matlab代码,重点研读高阶矩计算、矩约束构建、熵最大化优化求解及概率密度函数重建等关键模块的实现细节,通过复现文中的对比实验,深入理解不方法在尾部估计上的差异,并尝试将其应用于自身的工程案例中以掌握其适用边界与调参技巧。
内容概要:本文是一份针对Python在Flask + Oracle医保/HIS接口开发中实战应用的学习笔记,重点梳理了f-string字符串格式化、Oracle数据库绑定变量使用规范、Python int类型与内存管理,以及核心数据类型在业务中的注意事项。文中强调f-string仅用于日志文本拼接,严禁用于SQL拼接以防注入攻击,推荐使用绑定变量配合字典传参方式安全操作数据库。时对比了PB9与Python的整型差异,指出PB9的Integer类型易溢出问题,并详解Python int的内存特性及大批量数据查询时的内存风险。此外,系统介绍了对接Oracle时的关键数据类型处理,如Decimal用于金额计算、datetime格式化返回、None与空字符串的区别等,涵盖常见坑点与最佳实践。; 适合人群:从事Python后端开发,尤其是涉及Flask框架与Oracle数据库对接的1-3年经验研发人员,或与PB9系统交互的开发者;也适用于医疗信息化领域接口开发工程师。; 使用场景及目标:①掌握安全的SQL构造方法,防止SQL注入;②正确处理接口参数类型转换与异常捕获;③精准使用Decimal、datetime等类型保障数据准确性;④优化大批量数据查询的内存使用;⑤实现与PB9系统的数据兼容与稳定对接。; 阅读建议:此资源聚焦真实业务场景,建议结合项目实践边学边练,重点关注代码示例中的错误写法与修正方案,强化对类型处理、安全性与性能优化的理解。
内容概要:本文系统研究了基于m-ISODATA、k-meansHAC三种无监督聚类算法的风场景生成与削减方法,旨在应对电力系统中风电出力的强不确定性。通过Matlab代码实现,对原始风速数据进行聚类分析,提取具有代表性的典型风场景,并有效削减冗余场景,从而降低系统建模的维度与计算复杂度,提升电力系统规划、调度及优化运行的效率与鲁棒性。文中详述了各聚类算法的核心原理、适用特点及其在风场景处理中的具体实施流程,提供了完整的代码资源与可视化结果,便于读者复现与拓展。; 适合人群:具备一定电力系统基础知识Matlab编程能力的高校学生、科研人员及工程技术人员,尤其适用于从事新能源并网、随机优化、微网调度等领域的研究人员,以及参与全国大学生数学建模竞赛等相关赛事的参赛者。; 使用场景及目标:①应用于电力系统中风电出力的不确定性建模与典型场景提取;②服务于随机规划、鲁棒优化、机会约束规划等复杂模型的前期数据处理;③为微网能量管理、电力市场出清、电源规划等问题提供高质量的输入场景集;④为数学建模竞赛中涉及新能源建模的赛题提供技术方案与代码支持。; 阅读建议:建议读者结合所提供的Matlab代码逐段调试运行,深入理解不聚类算法在风场景生成中的实现机制与参数设置技巧,掌握场景削减的完整流程。时可进一步学习概率距离法、蒙特卡洛法、K-means++等其他场景生成与削减方法,以丰富对不确定性建模的技术手段,提升综合应用能力。
内容概要:本文研究基于多面体最大内近似方法的电动汽车集群聚合模型,并将其应用于微电网经济调度中。通过构建电动汽车充放电可行域的内近似多面体,将其等效为具有功率与容量约束的“虚拟电池”单元,从而实现对大规模分散式电动汽车灵活性资源的精确聚合。该方法有效解决了高维、非线性、时变约束下的集群建模难题,提升了模型可解性与时效性。在此基础上,结合光伏发电、储能系统、常规负荷及主网购电等多元组件,构建了以最小化系统综合运行成本为目标的微电网优化调度模型,兼顾新能源消纳、电网交互成本与运行安全性。研究采用Matlab平台进行建模与求解,通过仿真验证了所提方法在复杂运行场景下对电动汽车集群灵活调节能力的高效聚合性能及其在促进微电网经济性与稳定性方面的显著优势。; 适合人群:具备电力系统优化、可再生能源调度、智能交通与车网互动(V2G)等领域背景,熟悉凸几何、优化理论及Matlab编程的研究生、科研人员与工程技术人员。; 使用场景及目标:①应对大规模电动汽车无序充放电对电网造成的冲击,提升调度中心对分散灵活性资源的管控能力;②实现电动汽车集群从“不可控负荷”向“可聚合虚拟储能”的角色转变,提升其参与系统级优化的价值;③在保证用户出行求的前提下,降低微电网综合用能成本,提高分布式能源利用率与系统运行韧性。; 阅读建议:读者应深入理解多面体可行域的数学构造原理,掌握基于线性不等式组描述电动汽车灵活性的建模技巧,并结合Matlab代码实践从个体约束到集群聚合、再到系统调度的全流程仿真,以全面掌握理论推导、模型构建与数值求解的协方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值