This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2652P:ApiMac_mlmeScanREQ

Guru**** 1821780 points
Other Parts Discussed in Thread: CC2652P
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1343416/cc2652p-apimac_mlmescanreq

器件型号:CC2652P

我正在尝试重写为另一个处理器写入 CC2652P 的代码。 代码使用802.15.4并执行能量扫描和主动扫描。 在另一个处理器中、请求扫描的过程仅有四个参数:扫描类型、扫描信道、扫描持续时间和信道页。 我不知道如何初始化 ApiMac_mlmeScanREQ_t 结构的其余部分。 我也不知道如何使用.scanChannels 阵列-尽管我知道我要扫描什么通道。 是否有调用 ApiMac_mlmeScanReq 的示例代码? 是否有介绍如何初始化 ApiMac_mlmeScanREQ_t 的文档?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Dwight、

    请参阅  /docs/ti154stack/mac_api/html/api__mac_8h.html、了解有关  ApiMac_mlmeScanReq 的更多信息。  您还可以查看 《TI 15.4  协议栈用户指南》和 SimpleLink Academy Labs、了解有关此协议栈协议的更多详细信息。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我找到了大多数关于设置扫描的问题的答案、但我尚未找到一个问题的答案。 该文档说明有关主动扫描:"如果 maxResults 大于0、则应用程序还必须设置 result.panDescriptor 以指向大小为 maxResults * sizeof (ApiMac_panDesc_t)的缓冲区、以存储扫描结果。" 针对能量扫描有一个类似的声明。 如何设置堆栈用于存储结果的指针?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "要进行能量检测扫描、应用程序必须将 result.energyDetect 设置为指向大小为18字节的缓冲区、以存储扫描结果。 在  调用"扫描确认回调"之前、应用程序不得访问或取消分配此缓冲区。

    您是否已查看 示例中的 ApiMac_scanCnfFp_t pScanCnfCb;扫描确认回调解决方案?  例如、 从 sensor_2_4g 的 jdllc.c 中的 scanCnfCb。   ApiMac_mlmeScanCnf_t 包含必要的数据。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我仍然不明白。 我阅读文档的方式是、 在发出扫描请求时、需要将指针 pPanDescriptor (pEneregyDetect)-如果是能量扫描、则为 pEneregyDetect (pEneregyDetect)-设置为缓冲区。 我看到这些指针在扫描确认回调中可用、但此时它们已被填充。 在发出扫描请求时如何获得对指针的访问? 在 jdlc.c 中有一个活动扫描的请求、但它的 maxResults = 0。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    从 api_mac.c 中的 processScanCnf:

        if(cnf.resultListSize)
        {
            if(cnf.scanType == ApiMac_scantype_energyDetect)
            {
                cnf.result.pEnergyDetect = pCnf->result.pEnergyDetect;
    
            }
            else
            {
                cnf.result.pPanDescriptor =
                  (ApiMac_panDesc_t*)pCnf->result.pPanDescriptor;
            }
        }

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我仍然很困惑。 在我看来、文档 api_mac_8h.html 表示在执行主动扫描时、应用程序需要为扫描结果提供缓冲区、并将 result.panDescriptor 设置为该缓冲区的地址(在扫描之前)。 我看到 result.panDescriptor 在 processScanCnf 和 ScanCnfCb 中可用(扫描后)、但如何在扫描前设置指针?  我是否阅读文档有误?
    Dwight Diener
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    processScanCnf 将 根据传入 ApiMac_mlmeScanCnf_t pCnf 的大小来分配 cnf"结果"内存,从而 考虑到结果列表大小和数据。  这 与文档中的描述相同、  

    static void processScanCnf(macMlmeScanCnf_t *pCnf)
    {
        /* Confirmation structure */
        ApiMac_mlmeScanCnf_t cnf;
    
        /* Initialize the structure */
        memset(&cnf, 0, sizeof(ApiMac_mlmeScanCnf_t));
    
        /* copy the message to the confirmation structure */
        cnf.status = (ApiMac_status_t)pCnf->hdr.status;
    
        cnf.scanType = (ApiMac_scantype_t)pCnf->scanType;
        cnf.channelPage = pCnf->channelPage;
        cnf.phyId = pCnf->phyID;
        memcpy(cnf.unscannedChannels, pCnf->unscannedChannels,
        APIMAC_154G_CHANNEL_BITMAP_SIZ);
        cnf.resultListSize = pCnf->resultListSize;

    您可以确定接下来从扫描确认回调执行什么操作、例如 sensor_2_4g 示例中 jdlc.c 的 scanCnfCb。  我建议您尝试一个示例项目并从那里继续开发。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    所以它看起来像扫描期间用来存储扫描结果的缓冲区被分配到 Mac 层的深处而不是应用的责任。 如果是这种情况、我们可以解决此问题。 这似乎与 API__MAC_8h.html 中描述的内容相矛盾。 我认为应该在 api__mac_8h.html 中阐明。