// 秒寻科技
// 手机路由模块
// zt
// 2023-04-25

#include "../../includes/includes.h"

// 基于Wifi基站路由
// pstWifiBtsList:wifi基站列表
// dwBtsNum:wifi基站数量
// pstInstallBtsList:本地安装基站列表
// pstMainBts:主站
// 返回值：1：找到主站，0未找到主站
uint8 route_wifi_route(ROUTE_WIFI_BTS_T *pstWifiBtsList, uint8 byBtsNum, BTS_INSTALL_BTS_LIST_T *pstInstallBtsList, BTS_INSTALL_BTS_T *pstMainBts)
{
    uint8 byFlag = 0;

    // 按照接收电平倒排序
    route_wifi_bts_sort(pstWifiBtsList, byBtsNum);

    // 从安装基站队列中查改Wifi基站
    byFlag = route_wifi_find_wifi_bts_from_install_bts(pstWifiBtsList, byBtsNum, pstInstallBtsList, pstMainBts);

    return byFlag;
}

// 按照接收电平排序
void route_wifi_bts_sort(ROUTE_WIFI_BTS_T *pstWifiBtsList, uint8 byBtsNum)
{
    ROUTE_WIFI_BTS_T stTmp = {0};

    for (uint8 i = 0; i < byBtsNum; i++)
    {
        for (uint8 j = i + 1; j < byBtsNum; j++)
        {
            if (pstWifiBtsList[j].dwRssi > pstWifiBtsList[i].dwRssi)
            {
                stTmp = pstWifiBtsList[i];
                pstWifiBtsList[i] = pstWifiBtsList[j];
                pstWifiBtsList[j] = stTmp;
            }
        }
    }

    return;
}

// 从本地安装基站中查找Wifi基站
// pstWifiBtsList:wifi基站列表
// byBtsNum:wifi基站数量
// pstInstallBtsList:本地安装基站列表
// pstMainBts:主站
uint8 route_wifi_find_wifi_bts_from_install_bts(ROUTE_WIFI_BTS_T *pstWifiBtsList, uint8 byWifiBtsNum, BTS_INSTALL_BTS_LIST_T *pstInstallBtsList, BTS_INSTALL_BTS_T *pstMainBtsData)
{
    ROUTE_WIFI_BTS_T stWifiBts = {0};

    uint32 dwInstallBtsNum = pstInstallBtsList->dwBtsNum;
    BTS_INSTALL_BTS_T stInstallBts = {0};

    uint8 byValidFlag = 0;

    for (uint8 i = 0; i < byWifiBtsNum; i++)
    {
        stWifiBts = pstWifiBtsList[i];
        for (uint16 j = 0; j < dwInstallBtsNum; j++)
        {
            stInstallBts = pstInstallBtsList->astLocalBtsList[j];

            // 判断是否相符
            byValidFlag = 1;
            for (uint8 k = 0; k < PUB_MAC_ADDRESS_LEN; k++)
            {
                // 不相符
                if (stWifiBts.adwMac[k] != stInstallBts.adwWifiMac[k])
                {
                    byValidFlag = 0;
                    break;
                }
            }

            // 在本地安装基站中找到了该Wifi基站
            if (byValidFlag)
            {
                break;
            }
        }

        // 在本地安装基站中找到了该Wifi基站
        if (byValidFlag)
        {
            break;
        }
    }

    // 找到了主站
    if (byValidFlag)
    {
        *pstMainBtsData = stInstallBts;
        return 1;
    }

    return 0;
}
