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.

[参考译文] CC2745R10-Q1:切换定义和切换失败

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1587593/cc2745r10-q1-handover-definition-and-handover-failure

器件型号: CC2745R10-Q1

我需要将启动交车的数据转发给 CAN、但我不知道交车的数据格式。 您能否解释一下启动交车的数据格式? screenshot-20251114-094340.png

此外、在使用您的示例时、我遇到了交车故障问题。 解决方法如下:

我使用 simplelink_lowpower_f3_SDK_9_11_01_19 car_node 示例测试切换功能。 我的测试步骤如下:
  1.使用两块 TI LaunchPad 刷写 car_node 固件。
  2.使用 ble_toolbox.exe 测试移交功能。
  3.交车功能第一次执行时工作正常,但尝试再次执行时失败。
出现故障的原因如下图所示。 误差为 0x3e。
 
screenshot-20251114-095508.png

 

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

    您好:  

    您是否想了解更多有关连接交付 CN 参数或通过 CAN 发送的 CH 数据的数据格式的信息? 对于 CN 参数、 连接交付文档中对参数进行了说明。 要简单说明线程、pHandoverData 是一个指针、需要从服务节点加载移交数据。 如果您需要更多有关此方面的信息、请告诉我、我可以提供帮助。  

    当您再次执行连接切换时、流程是否遵循此处所述:  

    1.与汽车节点 1 建立连接

    2.交车连接到汽车节点 2:成功

    3.交车连接至汽车节点 1:故障  

    我相信我知道这个问题的解决办法。 您能否提供每个设备的配对模式配置以及相关的移交角色 (SN 与 CN)?  

    告诉我,我可以进一步帮助。  

    谢谢、
    Isaac

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

    您好、Isaac Larson、

    我想使用移交功能将连接从 carnode1 切换到 carnode2。 为了将连接切换到 carnode2、我需要通过 CAN 将哪些移交参数从 carnode1 发送到 carnode2? 是 phandoverData 的内容吗? 它的格式是什么?

    carnode1 的配对模式是“初始化配对请求“;carnode2 的配对模式是“等待配对请求“。  

    您可以用您的例子尝试此操作;问题相对容易重现。

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

    您好:  

    存储在*pHandoverData 中保存的地址处的数据是需要通过 CAN 发送的数据。 格式是一种结构、其中包括链接层使用的许多内部连接参数。  

    连接切换完成后、您需要更改配对模式。 服务节点 (SN) 始终需要为“发起配对请求“、候选节点 (CN) 始终需要为“等待配对请求“。 您使用的设置适用于第一次连接移交、但如果您要从汽车节点 2 移交到汽车节点 1、则需要切换配对模式、因为汽车节点 2 现在是 SN、汽车节点 1 现在是 CN。 我在下面提供了两个代码块;它们将根据设备在交付后将承担的角色来更改配对模式。  

    对于传入服务节点 (app_pairing.c):  

        case BLEAPPUTIL_PAIRING_STATE_ENCRYPTED:
        {
          GAPBondMgr_GetParameter(GAPBOND_PAIRING_MODE, &GBM_getParam_SetInit);
          if(0x01 == GBM_getParam_SetInit)
          {
              uint8_t pairMode = GAPBOND_PAIRING_MODE_INITIATE; 
              status = GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);
              if(status != SUCCESS)
              {
                  GBM_Param_Check = GBM_Param_Check|(1<<0); 
              }
          }
          break;
        }

    对于传入的候选节点 (app_extctrl_shuting.c):  

          case HANDOVER_APP_CLOSE_SERVING_NODE:
          {
            Handover_closeSnParams_t closeSn;
            AppExtCtrlHandoverCloseSnCmd_t *pMsgData = (AppExtCtrlHandoverCloseSnCmd_t *)appMsg->pData;
    
            closeSn.connHandle = pMsgData->connHandle;
            closeSn.handoverStatus = pMsgData->status;
    
            status = Handover_closeServingNode(closeSn);
    
            GAPBondMgr_GetParameter(GAPBOND_PAIRING_MODE, &GBM_getParam_Wait); 
            if(0x02 == GBM_getParam_Wait)
            {
                uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;
                status = GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);
                if(status != SUCCESS)
                {
                    GBM_setPairing_Wait = GBM_setPairing_Wait|(1<<0); 
                }
            }
    
            break;
          }
    

    我知道 extctrl 很可能不会在应用中使用。 当服务节点关闭时、您可以调用传入候选节点的代码块。  

    谢谢、

    Isaac