沁恒主機(jī)連接安森美從機(jī)自動(dòng)斷開(kāi)發(fā)數(shù)據(jù)收不到(小張同學(xué)再來(lái)看一下)

我現(xiàn)在用沁恒主機(jī)連接安森美從機(jī),連接成功。有兩個(gè)問(wèn)題。

  1. 會(huì)自動(dòng)斷開(kāi)。


    icon_jpg.gif8.jpg

    如上圖。斷開(kāi)原因8

  2. 發(fā)數(shù)據(jù)從機(jī)收不到。



    1.jpg

  3. 代碼:


  4. static void centralRssiCB( uint16 connHandle, int8 rssi )

  5. {

  6. ? //PRINT( "RSSI : -%d dB \n", -rssi );

  7. attWriteReq_t req;

  8. char i;

  9. ADC_ChannelCfg( 2 );?

  10. for(i=0;i<20;i++);

  11. abcBuff = TouchKey_ExcutSingleConver(0x01);? ? ??

  12. if(abcBuff<168)

  13. {

  14. PRINT( "Key AnXia ! \n");


  15. req.cmd = FALSE;

  16. req.sig = FALSE;

  17. req.handle = centralCharHdl;

  18. req.len = 1;

  19. req.pValue = GATT_bm_alloc(centralConnHandle,ATT_WRITE_REQ,req.len,NULL,0);

  20. if ( req.pValue != NULL )

  21. {

  22. req.pValue[0] = 0x31;

  23. if( GATT_WriteCharValue(centralConnHandle,&req,centralTaskId) == SUCCESS )

  24. {? ? ??


  25. PRINT( "Send 31 Ok ! \n");

  26. }

  27. else

  28. {

  29. PRINT( "Send 31 Failed ! \n");

  30. GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);

  31. }

  32. }??

  33. }

  34. ADC_ChannelCfg( 3 );

  35. for(i=0;i<20;i++);

  36. abcBuff = TouchKey_ExcutSingleConver(0x01);? ? ??

  37. if(abcBuff<168)

  38. {

  39. PRINT( "Key AnXia ! \n");


  40. req.cmd = FALSE;

  41. req.sig = FALSE;

  42. req.handle = centralCharHdl;

  43. req.len = 1;

  44. req.pValue = GATT_bm_alloc(centralConnHandle,ATT_WRITE_REQ,req.len,NULL,0);

  45. if ( req.pValue != NULL )

  46. {

  47. req.pValue[0] = 0x33;

  48. if( GATT_WriteCharValue(centralConnHandle,&req,centralTaskId) == SUCCESS )

  49. {? ? ??


  50. PRINT( "Send 33 Ok ! \n");

  51. }

  52. else

  53. {

  54. PRINT( "Send 33 Failed ! \n");

  55. GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);

  56. }

  57. }??

  58. }

  59. }

  60. 我按下板子上的觸摸按鍵就發(fā)數(shù)據(jù)。

  61. 獲取的char2的特征值句柄是14,和用CC2541主機(jī)獲取的一樣,應(yīng)該沒(méi)錯(cuò)。

    用CC2541發(fā)數(shù)據(jù),安森美從機(jī)可以收到,而沁恒主機(jī)發(fā)的收不到。

    我不明白為什么?高手支招。謝謝

1,斷開(kāi) reason=8 ,是超時(shí),

這個(gè)根本原因是協(xié)議棧在連接參數(shù)"timeout" 的時(shí)間內(nèi)沒(méi)有跟對(duì)方進(jìn)行定時(shí)的握手,導(dǎo)致的斷開(kāi).

通常 一方斷電,或者影響到了協(xié)議棧的運(yùn)行的代碼(比如大量的軟延時(shí),while函數(shù)等 )會(huì)導(dǎo)致這個(gè)問(wèn)題.


2,對(duì)于GATT_WriteCharValue 僅當(dāng)characteristic 的屬性支持write,并且之前一個(gè)write的流程完成后才能寫(xiě)成功,

這個(gè)寫(xiě),當(dāng)從機(jī)收到后會(huì)發(fā)回復(fù)的, 主機(jī)收到回復(fù)后會(huì)在centralProcessGATTMsg 的處理函數(shù)里產(chǎn)生pMsg->method == ATT_WRITE_RSP的事件,這時(shí)候一個(gè)寫(xiě)流程才算完成.


3,寫(xiě)操作的時(shí)間,跟回復(fù)的時(shí)間,是跟連接參數(shù)有關(guān)的,如果connect_interval過(guò)長(zhǎng),或者slave_latency 過(guò)大,會(huì)導(dǎo)致這個(gè)流程比較長(zhǎng),

主機(jī)端,你可以在centralEventCB 函數(shù)中,case?GAP_LINK_TERMINATED_EVENT: 來(lái)得到連接參數(shù)更新時(shí)候的值.

????case?GAP_LINK_PARAM_UPDATE_EVENT:
??????{
????????????PRINT(?"Param?Update...\n"?);
????????????PRINT("interval?=%d\r\n",pEvent->linkUpdate.connInterval);
????????????PRINT("connLatency?=%d\r\n",pEvent->linkUpdate.connLatency);
????????????PRINT("connTimeout?=%d\r\n",pEvent->linkUpdate.connTimeout);
????????????PRINT("status?=%d\r\n",pEvent->linkUpdate.status);
??????}
??????break;



2.支持寫(xiě)屬性,char2可讀可寫(xiě)

謝謝!晚上我再試試


icon_jpg.gif2.jpg

else if ( ( pMsg->method == ATT_WRITE_RSP ) ||

? ? ? ?( ( pMsg->method == ATT_ERROR_RSP ) &&

? ? ? ? ?( pMsg->msg.errorRsp.reqOpcode == ATT_WRITE_REQ ) ) )

? {

? ??

? ? if ( pMsg->method == ATT_ERROR_RSP == ATT_ERROR_RSP )

? ? {

? ? ? uint8 status = pMsg->msg.errorRsp.errCode;

? ? ??

? ? ? PRINT( "Write Error: %x\n", status );

? ? }

? ? else

? ? {

? ? ? // After a succesful write, display the value that was written and increment value

? ? ? //PRINT( "Write sent: %x\n", centralCharVal);

PRINT( "Write sent: 0x31\n");

? ? }

? ??

? ? centralProcedureInProgress = FALSE;? ??


? }


收到Write sent: 0x31了,說(shuō)明寫(xiě)流程完成了。

可是:

case GAP_LINK_PARAM_UPDATE_EVENT:

? ? ? {

? ? ? ??

PRINT( "Param Update...\n" );

PRINT("interval =%d\r\n",pEvent->linkUpdate.connInterval);

PRINT("connLatency =%d\r\n",pEvent->linkUpdate.connLatency);

PRINT("connTimeout =%d\r\n",pEvent->linkUpdate.connTimeout);

PRINT("status =%d\r\n",pEvent->linkUpdate.status);

? ? ? }

? ? ? break;


這個(gè)打印信息沒(méi)打印出來(lái)。

不知道為什么。


怎么不回答我的問(wèn)題?


18951746105 你好,這是張工的微信號(hào),可以加張工微信進(jìn)行更有效的溝通。


謝謝


wangyy,你能回答我的·問(wèn)題嗎?


張工是我們專(zhuān)門(mén)負(fù)責(zé)藍(lán)牙的工程師,可以給你提供更專(zhuān)業(yè)的意見(jiàn)。你有什么問(wèn)題可以微信跟他溝通。


好的,謝謝


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频