ll_common.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. /**************************************************************************************************
  2. Phyplus Microelectronics Limited confidential and proprietary.
  3. All rights reserved.
  4. IMPORTANT: All rights of this software belong to Phyplus Microelectronics
  5. Limited ("Phyplus"). Your use of this Software is limited to those
  6. specific rights granted under the terms of the business contract, the
  7. confidential agreement, the non-disclosure agreement and any other forms
  8. of agreements as a customer or a partner of Phyplus. You may not use this
  9. Software unless you agree to abide by the terms of these agreements.
  10. You acknowledge that the Software may not be modified, copied,
  11. distributed or disclosed unless embedded on a Phyplus Bluetooth Low Energy
  12. (BLE) integrated circuit, either as a product or is integrated into your
  13. products. Other than for the aforementioned purposes, you may not use,
  14. reproduce, copy, prepare derivative works of, modify, distribute, perform,
  15. display or sell this Software and/or its documentation for any purposes.
  16. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
  17. PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
  18. INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
  19. NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
  20. PHYPLUS OR ITS SUBSIDIARIES BE LIABLE OR OBLIGATED UNDER CONTRACT,
  21. NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
  22. LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
  23. INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
  24. OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
  25. OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
  26. (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
  27. **************************************************************************************************/
  28. #ifndef _LL_H_
  29. #define _LL_H_
  30. #include "types.h"
  31. #include "ll.h"
  32. #include "ll_def.h"
  33. #include "common.h"
  34. #define LL_DATA_PDU( pktHdr ) ((pktHdr) != LL_DATA_PDU_HDR_LLID_CONTROL_PKT)
  35. #define LL_CTRL_PDU( pktHdr ) ((pktHdr) == LL_DATA_PDU_HDR_LLID_CONTROL_PKT)
  36. #define LL_INVALID_LLID( pktHdr ) ((pktHdr) == LL_DATA_PDU_HDR_LLID_RESERVED)
  37. void LL_IRQHandler(void);
  38. void move_to_slave_function(void);
  39. void LL_slave_conn_event(void);
  40. void LL_master_conn_event(void);
  41. void LL_set_default_conn_params(void);
  42. //void ll_setMem(uint8_t *buf, uint8_t v, int n);
  43. //void ll_cpyMem(uint8_t *dst, uint8_t *src, int n);
  44. void LL_evt_schedule(void);
  45. llStatus_t llSetupAdv( void );
  46. void llConvertLstoToEvent( llConnState_t *connPtr,
  47. connParam_t *connParams );
  48. void llSlaveEvt_TaskEndOk( void );
  49. // for master process
  50. void llMasterEvt_TaskEndOk( void );
  51. // Connection Management
  52. extern llConnState_t *llAllocConnId( void );
  53. extern void llReleaseConnId( llConnState_t *connPtr );
  54. extern void llReleaseAllConnId( void );
  55. extern uint16 llGetMinCI( uint16 connInterval );
  56. extern uint8 llGetNextConn( void );
  57. extern void llConnCleanup( llConnState_t *connPtr );
  58. extern void llConnTerminate( llConnState_t *connPtr, uint8 reason );
  59. extern uint8 llPendingUpdateParam( void );
  60. extern void llInitFeatureSet( void );
  61. extern uint32 llGenerateValidAccessAddr( void );
  62. extern uint32 llGenerateCRC( void );
  63. extern uint8 llEventInRange( uint16 curEvent, uint16 nextEvent, uint16 updateEvent );
  64. extern uint16 llEventDelta( uint16 eventA, uint16 eventB );
  65. extern void llConvertLstoToEvent( llConnState_t *connPtr, connParam_t *connParams );
  66. extern void llConvertCtrlProcTimeoutToEvent( llConnState_t *connPtr );
  67. extern uint8 llAdjustForMissedEvent( llConnState_t *connPtr, uint32 timeToNextEvent );
  68. // Task Setup
  69. extern llStatus_t llSetupAdv( void );
  70. extern void llSetupDirectedAdvEvt( void );
  71. extern void llSetupUndirectedAdvEvt( void );
  72. extern void llSetupNonConnectableAdvEvt( void );
  73. extern void llSetupScannableAdvEvt( void );
  74. extern void llSetupScan( uint8 chan );
  75. extern void llSetupScanInit( void );
  76. extern void llSetupInit( uint8 connId );
  77. extern void llSetupConn( void );
  78. // A2 added
  79. extern uint8 llSetupSecNonConnectableAdvEvt( void );
  80. extern void llSetupSecScan( uint8 chan );
  81. extern uint32 llCalcMaxScanTime(void);
  82. extern uint8 llSecAdvAllow(void);
  83. // Data Management
  84. extern uint8 llEnqueueDataQ( llDataQ_t *pDataQ, txData_t *pTxData );
  85. extern uint8 llEnqueueHeadDataQ( llDataQ_t *pDataQ, txData_t *pTxData );
  86. extern txData_t *llDequeueDataQ( llDataQ_t *pDataQ );
  87. extern uint8 llDataQEmpty( llDataQ_t *pDataQ );
  88. extern uint8 llWriteTxData ( llConnState_t *connPtr, uint8 pktHdr, uint8 pktLen, uint8 *pBuf );
  89. extern uint8 *llMemCopySrc( uint8 *pDst, uint8 *pSrc, uint8 len );
  90. extern uint8 *llMemCopyDst( uint8 *pDst, uint8 *pSrc, uint8 len );
  91. extern void llProcessMasterControlPacket( llConnState_t *connPtr, uint8 *pBuf );
  92. extern void llProcessSlaveControlPacket( llConnState_t *connPtr, uint8 *pBuf );
  93. extern void llProcessTxData( llConnState_t *connPtr, uint8 context );
  94. extern uint8 llProcessRxData( void );
  95. // Control Procedure Setup
  96. extern uint8 llSetupUpdateParamReq( llConnState_t *connPtr ); // M
  97. extern uint8 llSetupUpdateChanReq( llConnState_t *connPtr ); // M
  98. extern uint8 llSetupEncReq( llConnState_t *connPtr ); // M
  99. extern uint8 llSetupEncRsp( llConnState_t *connPtr ); // S
  100. extern uint8 llSetupStartEncReq( llConnState_t *connPtr ); // S
  101. extern uint8 llSetupStartEncRsp( llConnState_t *connPtr ); // M, S
  102. extern uint8 llSetupPauseEncReq( llConnState_t *connPtr ); // M
  103. extern uint8 llSetupPauseEncRsp( llConnState_t *connPtr ); // S
  104. extern uint8 llSetupRejectInd( llConnState_t *connPtr ,uint8 errCode); // S
  105. extern uint8 llSetupFeatureSetReq( llConnState_t *connPtr ); // M, S
  106. extern uint8 llSetupFeatureSetRsp( llConnState_t *connPtr ); // M, S
  107. extern uint8 llSetupVersionIndReq( llConnState_t *connPtr ); // M
  108. extern uint8 llSetupTermInd( llConnState_t *connPtr ); // M, S
  109. extern uint8 llSetupUnknownRsp( llConnState_t *connPtr ); // M, S
  110. extern uint8 llSetupDataLenghtReq( llConnState_t *connPtr );//M,S
  111. extern uint8 llSetupDataLenghtRsp( llConnState_t *connPtr );//M,S
  112. extern uint8 llSetupPhyReq( llConnState_t *connPtr ); //M,S
  113. extern uint8 llSetupPhyRsp( llConnState_t *connPtr ); //M,S
  114. extern uint8 llSetupPhyUpdateInd( llConnState_t *connPtr );//M
  115. extern uint8 llSetupRejectExtInd( llConnState_t *connPtr ,uint8 errCode);
  116. // Control Procedure Management
  117. extern void llEnqueueCtrlPkt( llConnState_t *connPtr, uint8 ctrlType );
  118. extern void llDequeueCtrlPkt( llConnState_t *connPtr );
  119. extern void llReplaceCtrlPkt( llConnState_t *connPtr, uint8 ctrlType );
  120. // Data Channel Management
  121. extern void llProcessChanMap( llConnState_t *connPtr, uint8 *chanMap );
  122. extern uint8 llGetNextDataChan( llConnState_t *connPtr, uint16 numEvents );
  123. extern void llSetNextDataChan( llConnState_t *connPtr );
  124. extern uint8 llAtLeastTwoChans( uint8 *chanMap );
  125. uint8_t llTimeCompare(int base_time, int fine_time);
  126. uint32_t calculateTimeDelta(int base_time, int fine_time);
  127. void llSetNextDataChan( llConnState_t *connPtr );
  128. // White List Related
  129. extern llStatus_t llCheckWhiteListUsage( void );
  130. // function add by HZF
  131. void llResetConnId( void );
  132. void llResetRfCounters(void);
  133. extern void llInitFeatureSet( void );
  134. extern uint16 llCalcScaFactor( uint8 masterSCA );
  135. extern void llCalcTimerDrift( uint32 connInterval,
  136. uint16 slaveLatency,
  137. uint8 sleepClkAccuracy,
  138. uint32 *timerDrift );
  139. // add by HZF
  140. uint8 llGetNextAdvChn(uint8 cur_chn);
  141. // Tx loop buffer process
  142. void update_tx_write_ptr(void);
  143. void update_tx_read_ptr(void);
  144. uint8_t getTxBufferSize(void);
  145. uint8_t getTxBufferFree(void);
  146. uint8_t get_tx_read_ptr(void);
  147. uint8_t get_tx_write_ptr(void);
  148. // Rx loop buffer process
  149. void update_rx_write_ptr(void);
  150. void update_rx_read_ptr(void);
  151. uint8_t getRxBufferSize(void);
  152. uint8_t getRxBufferFree(void);
  153. uint8_t get_rx_read_ptr(void);
  154. uint8_t get_rx_write_ptr(void);
  155. // reset buffer
  156. void reset_conn_buf(void);
  157. void ll_schedule_next_event(int time);
  158. uint16 ll_generateTxBuffer(int txFifo_vacancy, uint16 *pSave_ptr);
  159. void ll_read_rxfifo(void);
  160. void ll_hw_read_tfifo_rtlp(void);
  161. int ll_hw_read_tfifo_packet(uint8 *pkt);
  162. // function in ll_slaveEndCause.c
  163. uint8 llSetupNextSlaveEvent( void );
  164. uint8 llProcessSlaveControlProcedures( llConnState_t *connPtr );
  165. uint8 llCheckForLstoDuringSL( llConnState_t *connPtr );
  166. // function in ll_hwItf.c
  167. void ll_hw_process_RTO(uint32 ack_num);
  168. void ll_debug_output(uint32 state);
  169. void llAdjSlaveLatencyValue( llConnState_t *connPtr );
  170. //function for DLE add by ZQ
  171. void llPduLengthManagmentReset(void);
  172. void llTrxNumAdaptiveConfig(void);
  173. void llPduLengthUpdate(uint16 connHandle);
  174. uint8 LL_PLUS_GetLocalPduDataLength(ll_pdu_length_ctrl_t * pduLen);
  175. //function for PHY UPDATE add by ZQ
  176. void llPhyModeCtrlReset(void);
  177. void llPhyModeCtrlUpdateNotify(llConnState_t *connPtr, uint8 status);
  178. llStatus_t LL_PLUS_GetLocalPhyMode(ll_phy_ctrl_t * phyCtrl);
  179. void llSetNextPhyMode( llConnState_t *connPtr );
  180. extern void llInitFeatureSetDLE(uint8 enable);
  181. extern void llInitFeatureSet2MPHY(uint8 enable);
  182. extern void llInitFeatureSetCodedPHY(uint8 enable);
  183. #endif