WinCe Wifi配置

jumpingpig   2010-1-23 20:00 楼主
大家好, 关于wifi的配置, 下面黑体部分: g_dwOutput & INTF_BSSID == 0????为什么啊?望高人指教!


部分打印信息:
In flags used       = [0x7fffffff]
dwOutput 打印信息   =  [0x000fffff]


代码如下:
    BOOL GetFirstWirelessCard(  )
{
        g_WirelessCard1[0] = L'\0';
        /*
        if( NULL == pCard ){
                RETAILMSG(_DEBUG_WIFI_, (TEXT(" pCard == NULL, return ! \r\n ")));
                return FALSE;
        }
        */
        INTFS_KEY_TABLE IntfsTable;
    IntfsTable.dwNumIntfs = 0;
    IntfsTable.pIntfs = NULL;

    // 枚举系统中可用的无线网卡
    DWORD dwStatus = WZCEnumInterfaces(NULL, &IntfsTable);
       
        RETAILMSG(_DEBUG_WIFI_, (TEXT(" wifi.cpp, GetFirstWirelessCard(), dwStatus = %d \r\n "), dwStatus));

    if (dwStatus != ERROR_SUCCESS)
    {
        RETAILMSG(_DEBUG_WIFI_, (TEXT("WZCEnumInterfaces() error 0x%08X\n"),dwStatus));
        return FALSE;
    }

    // 判断无线网卡的数量,可以根据无线网卡数量来枚举出所有可用的无线网卡
        RETAILMSG(_DEBUG_WIFI_, (TEXT(" wifi.cpp, GetFirstWirelessCard(), IntfsTable.dwNumIntfs = %d \r\n "), IntfsTable.dwNumIntfs));
    if (!IntfsTable.dwNumIntfs)
    {
        RETAILMSG(_DEBUG_WIFI_, (TEXT("System has no wireless card.\n")));
        return FALSE;
    }
        wcsncpy(g_WirelessCard1, IntfsTable.pIntfs[0].wszGuid, MAX_PATH-1);
   // _tcscpy(pCard, IntfsTable.pIntfs[0].wszGuid);
        wprintf(L"wireless card found: %s\n", g_WirelessCard1);
    LocalFree(IntfsTable.pIntfs);

    return TRUE;
}

void
PrintMacAddress
// some RAW_DATA is a MAC ADDRESS, this function is for printing MAC ADDRESS
(
    IN PRAW_DATA prdMAC
)
{
    if (prdMAC == NULL || prdMAC->dwDataLen == 0)
        _tprintf(L"");
    else if(prdMAC->dwDataLen != 6)
        _tprintf(L"");
    else
    {
        _tprintf(L"%02X:%02X:%02X:%02X:%02X:%02X",
            prdMAC->pData[0],
            prdMAC->pData[1],
            prdMAC->pData[2],
            prdMAC->pData[3],
            prdMAC->pData[4],
            prdMAC->pData[5]);
    }
}   // PrintMacAddress()



BOOL GetWirelessCardInfo( )
{
    //TCHAR *szWiFiCard = NULL;

    // 初始化无线网卡信息
        RETAILMSG(1, (TEXT(" wifi.cpp,  GetWirelessCardInfo() ...... \r\n")));
    WCHAR *szWiFiCard = g_WirelessCard1;
        memset(&g_Intf, 0, sizeof( INTF_ENTRY_EX ));
    g_Intf.wszGuid = szWiFiCard;
        g_dwOutput           = 0;
        _tprintf(L" wifi.cpp,  g_Intf->wszGuid: = %s , g_WirelessCard1 = %s .....\r\n",
                                        g_Intf.wszGuid,
                                        g_WirelessCard1 );
    // 查询无线网卡信息
   
        DWORD dwStatus = WZCQueryInterfaceEx(
                                                        NULL,
                                                        INTF_ALL,
                                                        &g_Intf,
                                                        &g_dwOutput );

    if (dwStatus != ERROR_SUCCESS)
    {
        RETAILMSG(_DEBUG_WIFI_, (TEXT("WZCQueryInterfaceEx, GetWirelessCardInfo(), GetLastError( %d ) \n"), GetLastError()));
        return FALSE;
    }

    _tprintf(L"WZCQueryInterfaceEx() for %s\n",   szWiFiCard);
    _tprintf(L"In flags used       = [0x%08x]\n", INTF_ALL);
    _tprintf(L"Returned out flags  = [0x%08x]\n", g_dwOutput);
       

        _tprintf(L"wzcGuid             = [%s]\n", g_Intf.wszGuid);
    //        Description
    _tprintf(L"wzcDescr            = [%s]\n", g_Intf.wszDescr);



        if ( g_dwOutput & INTF_BSSID)
    {
        _tprintf(L"BSSID = %s \r\n", INTF_BSSID );
        PrintMacAddress(&g_Intf.rdBSSID);

        PRAW_DATA prdMAC = &g_Intf.rdBSSID;
        if (
            prdMAC == NULL ||
            (prdMAC->dwDataLen == 0) ||
            (prdMAC->dwDataLen != 6) ||
            (   !prdMAC->pData[0] &&
                !prdMAC->pData[1] &&
                !prdMAC->pData[2] &&
                !prdMAC->pData[3] &&
                !prdMAC->pData[4] &&
                !prdMAC->pData[5]     )
                                )
                {
            _tprintf(L" (this wifi card is not associated to any) \r\n");
                        return FALSE;
                }
        else
                {
            _tprintf(L" (this wifi card is associated state) \r\n");
                        return FALSE;
                }
    }
    else
        {
        _tprintf(L"BSSID = (not connected) \r\n");
                return FALSE;

        }


    return TRUE;
}
int _tmain()
{
    if ( GetFirstWirelessCard( ) ){
          return 0;
    }
    if ( !GetWirelessCardInfo( )){
        return 0;
    }
}
}

回复评论 (10)

喜欢楼主这种贴代码的精神,但是我没看到出现的问题呀,呵呵…
点赞  2010-1-23 20:58
帮顶下。

MARK,学习下。
点赞  2010-1-23 22:33
关注一下,过段时间我可能也要搞WIFI
点赞  2010-1-24 00:33
正在学习过程中
点赞  2010-1-24 15:41
现在已经可以扫描到很多AP了, 但是在连接的时候:WZCSetInterfaceEx() ,

GetLastError() 返回 13??

奇怪 了, 昨天晚上 这个是成功的, 怎么一下又不行了??? 求助!!! 返回 13 会是什么原因呢?
点赞  2010-1-24 21:43
结果为13表示数据无效
点赞  2010-2-4 11:44
帮顶
点赞  2010-2-5 08:22
来学习的!帮顶!
点赞  2010-2-5 09:05
弄过wifi但没成功
关注。。。
点赞  2010-2-5 09:12
喜欢楼主这种贴代码的精神,但是我没看到出现的问题呀,呵呵…
点赞  2010-2-9 16:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复