问题现象:

     1.大屏作为sink端,小米作为source端,成功投屏到大屏上

     2.然后荣耀手机也作为source端,可以搜索大屏设备但投屏到大屏上失败。

日志分析:大屏端日志

 

 

代码流程分析:

// 注意这里面的size!
void P2pStateMachine::DhcpResultNotify::OnDhcpServerSuccess(const char *ifname,
    DhcpStationInfo *stationInfos, size_t size)
{
    WIFI_LOGI("Dhcp notify ServerSuccess. ifname:%{private}s", ifname);
    std::vector<GcInfo> gcInfos;
    for (size_t i = 0; i < size; i++) {
        GcInfo gcInfo;
        gcInfo.mac = stationInfos[i].macAddr;
        gcInfo.ip = stationInfos[i].ipAddr;
        gcInfo.host = stationInfos[i].deviceName;
        gcInfos.emplace_back(gcInfo);
    }
    pP2pStateMachine->AddClientInfo(gcInfos);
}
    
ErrCode P2pStateMachine::AddClientInfo(std::vector<GcInfo> &gcInfos)
{
    std::lock_guard<std::mutex> lock(m_gcJoinmutex);
    WifiP2pGroupInfo groupInfo = groupManager.GetCurrentGroup();
    if (!groupInfo.IsGroupOwner()) {
        WIFI_LOGE("this device is not Group owner");
        return ErrCode::WIFI_OPT_FAILED;
    }
    WifiP2pDevice device;
    GcInfo gcInfo;
    if (!IsMatchClientDevice(gcInfos, device, gcInfo)) {
        WIFI_LOGE("current connected device not found the Gc"); // 日志中没有这句打印!
        return ErrCode::WIFI_OPT_FAILED;
    }

    GcInfo joinGc;
    joinGc.ip = gcInfo.ip;
    joinGc.host = device.GetDeviceName();
    joinGc.mac = device.GetDeviceAddress();
    BroadcastP2pGcJoinGroup(joinGc);

    return ErrCode::WIFI_OPT_FAILED;
}    
    
 

原因及解决方案:


    

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐