You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

580 lines
15 KiB

  1. /**
  2. *
  3. * \file
  4. *
  5. * \brief WINC3400 Peripherals Application Interface.
  6. *
  7. * Copyright (c) 2017-2018 Microchip Technology Inc. and its subsidiaries.
  8. *
  9. * \asf_license_start
  10. *
  11. * \page License
  12. *
  13. * Subject to your compliance with these terms, you may use Microchip
  14. * software and any derivatives exclusively with Microchip products.
  15. * It is your responsibility to comply with third party license terms applicable
  16. * to your use of third party software (including open source software) that
  17. * may accompany Microchip software.
  18. *
  19. * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
  20. * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
  21. * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
  22. * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
  23. * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
  24. * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
  25. * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
  26. * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
  27. * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
  28. * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
  29. * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
  30. *
  31. * \asf_license_stop
  32. *
  33. */
  34. #ifdef _M2M_ATE_FW_
  35. #ifndef _M2M_ATE_MODE_H_
  36. #define _M2M_ATE_MODE_H_
  37. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  38. INCLUDES
  39. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  40. #include "common/include/nm_common.h"
  41. #include "driver/include/m2m_types.h"
  42. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  43. MACROS
  44. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  45. #define M2M_ATE_MAX_NUM_OF_RATES (20)
  46. /*!< Maximum number of all rates (b,g and n)
  47. */
  48. #define M2M_ATE_MAX_FRAME_LENGTH (1024)
  49. /*!< Maximum number of length for each frame
  50. */
  51. #define M2M_ATE_MIN_FRAME_LENGTH (1)
  52. /*!< Minimum number of length for each frame
  53. */
  54. #define M2M_ATE_SUCCESS (M2M_SUCCESS)
  55. /*!< No Error and operation has been completed successfully.
  56. */
  57. #define M2M_ATE_ERR_VALIDATE (M2M_ERR_FAIL)
  58. /*!< Error in parameters passed to functions.
  59. */
  60. #define M2M_ATE_ERR_TX_ALREADY_RUNNING (-1)
  61. /*!< This means that TX case is already running and RX or even TX can't start without stopping it first.
  62. */
  63. #define M2M_ATE_ERR_RX_ALREADY_RUNNING (-2)
  64. /*!< This means that RX case is already running and TX or even RX can't start without stopping it first.
  65. */
  66. #define M2M_ATE_ERR_UNHANDLED_CASE (-3)
  67. /*!< Invalid case.
  68. */
  69. #define M2M_ATE_RX_DISABLE_DA 0x0
  70. #define M2M_ATE_RX_ENABLE_DA 0x1
  71. #define M2M_ATE_RX_DISABLE_SA 0x0
  72. #define M2M_ATE_RX_ENABLE_SA 0x1
  73. #define M2M_ATE_DISABLE_SELF_MACADDR 0x0
  74. #define M2M_ATE_SET_SELF_MACADDR 0x1
  75. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  76. DATA TYPES
  77. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  78. /*!
  79. *@enum tenuM2mAteFwState
  80. *@brief Enumeration used for change ATE firmware state
  81. */
  82. typedef enum {
  83. M2M_ATE_FW_STATE_STOP = 0x00,
  84. /*!< State to stop ATE firmware
  85. */
  86. M2M_ATE_FW_STATE_RUN = 0x01,
  87. /*!< State to run ATE firmware
  88. */
  89. }tenuM2mAteFwState;
  90. /*!
  91. *@enum tenuM2mAteTxRates
  92. *@brief Used to get value of rate referenced by this index
  93. */
  94. typedef enum {
  95. M2M_ATE_TX_RATE_1_Mbps_INDEX = 0x00,
  96. M2M_ATE_TX_RATE_2_Mbps_INDEX = 0x01,
  97. M2M_ATE_TX_RATE_55_Mbps_INDEX = 0x02,
  98. M2M_ATE_TX_RATE_11_Mbps_INDEX = 0x03,
  99. /*!< B-Rates
  100. */
  101. M2M_ATE_TX_RATE_6_Mbps_INDEX = 0x04,
  102. M2M_ATE_TX_RATE_9_Mbps_INDEX = 0x05,
  103. M2M_ATE_TX_RATE_12_Mbps_INDEX = 0x06,
  104. M2M_ATE_TX_RATE_18_Mbps_INDEX = 0x07,
  105. M2M_ATE_TX_RATE_24_Mbps_INDEX = 0x08,
  106. M2M_ATE_TX_RATE_36_Mbps_INDEX = 0x09,
  107. M2M_ATE_TX_RATE_48_Mbps_INDEX = 0x0A,
  108. M2M_ATE_TX_RATE_54_Mbps_INDEX = 0x0B,
  109. /*!< G-Rates
  110. */
  111. M2M_ATE_TX_RATE_MCS_0_INDEX = 0x0C,
  112. M2M_ATE_TX_RATE_MCS_1_INDEX = 0x0D,
  113. M2M_ATE_TX_RATE_MCS_2_INDEX = 0x0E,
  114. M2M_ATE_TX_RATE_MCS_3_INDEX = 0x0F,
  115. M2M_ATE_TX_RATE_MCS_4_INDEX = 0x10,
  116. M2M_ATE_TX_RATE_MCS_5_INDEX = 0x11,
  117. M2M_ATE_TX_RATE_MCS_6_INDEX = 0x12,
  118. M2M_ATE_TX_RATE_MCS_7_INDEX = 0x13,
  119. /*!< N-Rates
  120. */
  121. }tenuM2mAteTxIndexOfRates;
  122. /*!
  123. *@enum tenuM2mAteTxDutyCycle
  124. *@brief Values of duty cycle
  125. */
  126. typedef enum {
  127. M2M_ATE_TX_DUTY_1 = 0x01,
  128. M2M_ATE_TX_DUTY_2 = 0x02,
  129. M2M_ATE_TX_DUTY_3 = 0x03,
  130. M2M_ATE_TX_DUTY_4 = 0x04,
  131. M2M_ATE_TX_DUTY_5 = 0x05,
  132. M2M_ATE_TX_DUTY_6 = 0x06,
  133. M2M_ATE_TX_DUTY_7 = 0x07,
  134. M2M_ATE_TX_DUTY_8 = 0x08,
  135. M2M_ATE_TX_DUTY_9 = 0x09,
  136. M2M_ATE_TX_DUTY_10 = 0xA0,
  137. }tenuM2mAteTxDutyCycle;
  138. #define M2M_ATE_TX_DUTY_MAX_VALUE M2M_ATE_TX_DUTY_1
  139. /*!< The maximum value of duty cycle
  140. */
  141. #define M2M_ATE_TX_DUTY_MIN_VALUE M2M_ATE_TX_DUTY_10
  142. /*!< The minimum value of duty cycle
  143. */
  144. /*!
  145. *@enum tenuM2mAteTxDpdControl
  146. *@brief Allowed values for DPD control
  147. */
  148. typedef enum {
  149. M2M_ATE_TX_DPD_DYNAMIC = 0x00,
  150. M2M_ATE_TX_DPD_BYPASS = 0x01,
  151. M2M_ATE_TX_DPD_ENABLED = 0x02,
  152. }tenuM2mAteTxDpdControl;
  153. /*!
  154. *@enum tenuM2mAteTxGainSetting
  155. *@brief Options for TX gain selection mode
  156. */
  157. typedef enum {
  158. M2M_ATE_TX_GAIN_DYNAMIC = 0x00,
  159. M2M_ATE_TX_GAIN_BYPASS = 0x01,
  160. M2M_ATE_TX_GAIN_FCC = 0x02,
  161. M2M_ATE_TX_GAIN_TELEC = 0x03,
  162. }tenuM2mAteTxGainSetting;
  163. /*!
  164. *@enum tenuM2mAtePMUSetting
  165. *@brief Used to Enable PMU or disable it
  166. */
  167. typedef enum {
  168. M2M_ATE_PMU_DISBLE = 0x00,
  169. M2M_ATE_PMU_ENABLE = 0x01,
  170. }tenuM2mAtePMUSetting;
  171. /*!
  172. *@enum tenuM2mAteTxSource
  173. *@brief Used to define if enable PHY continues mode or MAC
  174. */
  175. typedef enum {
  176. M2M_ATE_TX_SRC_MAC = 0x00,
  177. M2M_ATE_TX_SRC_PHY = 0x01,
  178. }tenuM2mAteTxSource;
  179. /*!
  180. *@enum tenuM2mAteTxMode
  181. *@brief Used to define type of TX mode either normal or CW(Continuous Wave) TX sequence
  182. */
  183. typedef enum {
  184. M2M_ATE_TX_MODE_NORM = 0x00,
  185. M2M_ATE_TX_MODE_CW = 0x01,
  186. }tenuM2mAteTxMode;
  187. /*!
  188. *@enum tenuM2mAteChannels
  189. *@brief Available channels for TX and RX
  190. */
  191. typedef enum {
  192. M2M_ATE_CHANNEL_1 = 0x01,
  193. M2M_ATE_CHANNEL_2 = 0x02,
  194. M2M_ATE_CHANNEL_3 = 0x03,
  195. M2M_ATE_CHANNEL_4 = 0x04,
  196. M2M_ATE_CHANNEL_5 = 0x05,
  197. M2M_ATE_CHANNEL_6 = 0x06,
  198. M2M_ATE_CHANNEL_7 = 0x07,
  199. M2M_ATE_CHANNEL_8 = 0x08,
  200. M2M_ATE_CHANNEL_9 = 0x09,
  201. M2M_ATE_CHANNEL_10 = 0x0A,
  202. M2M_ATE_CHANNEL_11 = 0x0B,
  203. M2M_ATE_CHANNEL_12 = 0x0C,
  204. M2M_ATE_CHANNEL_13 = 0x0D,
  205. M2M_ATE_CHANNEL_14 = 0x0E,
  206. }tenuM2mAteChannels;
  207. /*!
  208. *@struct tstrM2mAteRxStatus
  209. *@brief Used to save statistics of RX case
  210. */
  211. typedef struct {
  212. uint32 num_rx_pkts;
  213. /*!< Number of total RX packet
  214. */
  215. uint32 num_err_pkts;
  216. /*!< Number of RX failed packets
  217. */
  218. uint32 num_good_pkts;
  219. /*!< Number of RX packets actually received
  220. */
  221. } tstrM2mAteRxStatus;
  222. /*!
  223. *@struct tstrM2mAteTx
  224. *@brief Used as data source in case of enabling TX test case
  225. */
  226. typedef struct {
  227. uint32 num_frames;
  228. /*!< Number of frames to be sent where maximum number allowed is 4294967295 ul, and ZERO means infinite number of frames
  229. */
  230. uint32 data_rate;
  231. /*!< Rate to sent packets over to select rate use value of \ref tenuM2mAteTxIndexOfRates and pass it to \ref m2m_ate_get_tx_rate
  232. */
  233. uint8 channel_num;
  234. /*!< Channel number \ref tenuM2mAteChannels
  235. */
  236. uint8 duty_cycle;
  237. /*!< Duty cycle value between from 1 to 10, where maximum = 1, minimum = 10 \ref tenuM2mAteTxDutyCycle
  238. */
  239. uint16 frame_len;
  240. /*!< Use \ref M2M_ATE_MAX_FRAME_LENGTH (1024) as the maximum value while \ref M2M_ATE_MIN_FRAME_LENGTH (1) is the minimum value
  241. */
  242. uint8 tx_gain_sel;
  243. /*!< TX gain mode selection value \ref tenuM2mAteTxGainSetting
  244. */
  245. uint8 dpd_ctrl;
  246. /*!< DPD mode value\ref tenuM2mAteTxDpdControl
  247. */
  248. uint8 use_pmu;
  249. /*!< This is 0 if PMU is not used otherwise it must be be 1 \ref tenuM2mAtePMUSetting
  250. */
  251. uint8 phy_burst_tx;
  252. /*!< Source of Burst TX either PHY or MAC\ref tenuM2mAteTxSource
  253. */
  254. uint8 cw_tx;
  255. /*!< Mode of Burst TX either normal TX sequence or CW(Continuous Wave) TX sequence \ref tenuM2mAteTxMode
  256. */
  257. uint32 xo_offset_x1000;
  258. /*!< Signed XO offset value in PPM (Part Per Million) multiplied by 1000.
  259. */
  260. uint8 use_efuse_xo_offset;
  261. /*!< Set to 0 to use the XO offset provided in xo_offset_x1000. Set to 1 to use XO offset programmed on WINC efuse.
  262. */
  263. uint8 peer_mac_addr[6];
  264. /*!< Set peer address to send directed frames to a certain address.
  265. */
  266. } tstrM2mAteTx;
  267. /*!
  268. *@struct tstrM2mAteRx
  269. *@brief Used as data source in case of enabling RX test case
  270. */
  271. typedef struct {
  272. uint8 channel_num;
  273. /*!< Channel number \ref tenuM2mAteChannels
  274. */
  275. uint8 use_pmu;
  276. /*!< This is 0 if PMU is not used otherwise it must be be 1 \ref tenuM2mAtePMUSetting
  277. */
  278. uint32 xo_offset_x1000;
  279. /*!< Signed XO offset value in PPM (Part Per Million) multiplied by 1000.
  280. */
  281. uint8 use_efuse_xo_offset;
  282. /*!< Set to 0 to use the XO offset provided in xo_offset_x1000. Set to 1 to use XO offset programmed on WINC efuse.
  283. */
  284. uint8 self_mac_addr[6];
  285. /*!< Set to the self mac address required to be overriden.
  286. */
  287. uint8 sa_mac_addr[6];
  288. /*!< Set to the source mac address expected to filter frames from.
  289. */
  290. uint8 mac_filter_en_da;
  291. /*!< Flag set to enable or disable reception with destination address as a filter.
  292. */
  293. uint8 mac_filter_en_sa;
  294. /*!< Flag set to enable or disable reception with source address as a filter.
  295. */
  296. uint8 override_self_mac_addr;
  297. /*!< Flag set to enable or disable self mac address feature.
  298. */
  299. } tstrM2mAteRx;
  300. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  301. FUNCTION PROTOTYPES
  302. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  303. #ifdef __cplusplus
  304. extern "C" {
  305. #endif
  306. /*!
  307. @fn \
  308. sint8 m2m_ate_init(void);
  309. @brief
  310. This function used to download ATE firmware from flash and start it
  311. @return
  312. The function SHALL return 0 for success and a negative value otherwise.
  313. */
  314. sint8 m2m_ate_init(uint32 req_serial_number);
  315. /*!
  316. @fn \
  317. sint8 m2m_ate_deinit(void);
  318. @brief
  319. De-Initialization of ATE firmware mode
  320. @return
  321. The function SHALL return 0 for success and a negative value otherwise.
  322. */
  323. sint8 m2m_ate_deinit(void);
  324. /*!
  325. @fn \
  326. sint8 m2m_ate_set_fw_state(uint8);
  327. @brief
  328. This function used to change ATE firmware status from running to stopped or vice versa.
  329. @param [in] u8State
  330. Required state of ATE firmware, one of \ref tenuM2mAteFwState enumeration values.
  331. @return
  332. The function SHALL return 0 for success and a negative value otherwise.
  333. \sa
  334. m2m_ate_init
  335. */
  336. sint8 m2m_ate_set_fw_state(uint8);
  337. /*!
  338. @fn \
  339. sint8 m2m_ate_get_fw_state(uint8);
  340. @brief
  341. This function used to return status of ATE firmware.
  342. @return
  343. The function SHALL return status of ATE firmware, one of \ref tenuM2mAteFwState enumeration values.
  344. \sa
  345. m2m_ate_init, m2m_ate_set_fw_state
  346. */
  347. sint8 m2m_ate_get_fw_state(void);
  348. /*!
  349. @fn \
  350. uint32 m2m_ate_get_tx_rate(uint8);
  351. @brief
  352. This function used to return value of TX rate required by application developer.
  353. @param [in] u8Index
  354. Index of required rate , one of \ref tenuM2mAteTxIndexOfRates enumeration values.
  355. @return
  356. The function SHALL return 0 for in case of failure otherwise selected rate value.
  357. \sa
  358. tenuM2mAteTxIndexOfRates
  359. */
  360. uint32 m2m_ate_get_tx_rate(uint8);
  361. /*!
  362. @fn \
  363. sint8 m2m_ate_get_tx_status(void);
  364. @brief
  365. This function used to return status of TX test case either running or stopped.
  366. @return
  367. The function SHALL return status of ATE firmware, 1 if TX is running otherwise 0.
  368. \sa
  369. m2m_ate_start_tx, m2m_ate_stop_tx
  370. */
  371. sint8 m2m_ate_get_tx_status(void);
  372. /*!
  373. @fn \
  374. sint8 m2m_ate_start_tx(tstrM2mAteTx *)
  375. @brief
  376. This function used to start TX test case.
  377. @param [in] strM2mAteTx
  378. Type of \ref tstrM2mAteTx, with the values required to enable TX test case. You must use \ref m2m_ate_init first.
  379. @return
  380. The function SHALL return 0 for success and a negative value otherwise.
  381. \sa
  382. m2m_ate_init, m2m_ate_stop_tx, m2m_ate_get_tx_status
  383. */
  384. sint8 m2m_ate_start_tx(tstrM2mAteTx *);
  385. /*!
  386. @fn \
  387. sint8 m2m_ate_stop_tx(void)
  388. @brief
  389. This function used to stop TX test case.
  390. @return
  391. The function SHALL return 0 for success and a negative value otherwise.
  392. \sa
  393. m2m_ate_init, m2m_ate_start_tx, m2m_ate_get_tx_status
  394. */
  395. sint8 m2m_ate_stop_tx(void);
  396. /*!
  397. @fn \
  398. sint8 m2m_ate_get_rx_status(uint8);
  399. @brief
  400. This function used to return status of RX test case either running or stopped.
  401. @return
  402. The function SHALL return status of ATE firmware, 1 if RX is running otherwise 0.
  403. \sa
  404. m2m_ate_start_rx, m2m_ate_stop_rx
  405. */
  406. sint8 m2m_ate_get_rx_status(void);
  407. /*!
  408. @fn \
  409. sint8 m2m_ate_start_rx(tstrM2mAteRx *)
  410. @brief
  411. This function used to start RX test case.
  412. @param [in] strM2mAteRx
  413. Type of \ref tstrM2mAteRx, with the values required to enable RX test case. You must use \ref m2m_ate_init first.
  414. @return
  415. The function SHALL return 0 for success and a negative value otherwise.
  416. \sa
  417. m2m_ate_init, m2m_ate_stop_rx, m2m_ate_get_rx_status
  418. */
  419. sint8 m2m_ate_start_rx(tstrM2mAteRx *);
  420. /*!
  421. @fn \
  422. sint8 m2m_ate_stop_rx(void)
  423. @brief
  424. This function used to stop RX test case.
  425. @return
  426. The function SHALL return 0 for success and a negative value otherwise.
  427. \sa
  428. m2m_ate_init, m2m_ate_start_rx, m2m_ate_get_rx_status
  429. */
  430. sint8 m2m_ate_stop_rx(void);
  431. /*!
  432. @fn \
  433. sint8 m2m_ate_read_rx_status(tstrM2mAteRxStatus *)
  434. @brief
  435. This function used to read RX statistics from ATE firmware.
  436. @param [out] strM2mAteRxStatus
  437. Type of \ref tstrM2mAteRxStatus used to save statistics of RX test case. You must use \ref m2m_ate_start_rx first.
  438. @return
  439. The function SHALL return 0 for success and a negative value otherwise.
  440. \sa
  441. m2m_ate_init, m2m_ate_start_rx
  442. */
  443. sint8 m2m_ate_read_rx_status(tstrM2mAteRxStatus *);
  444. /*!
  445. @fn \
  446. sint8 m2m_ate_set_dig_gain(double dGaindB)
  447. @brief
  448. This function is used to set the digital gain
  449. @param [in] double dGaindB
  450. The digital gain value required to be set.
  451. @return
  452. The function SHALL return 0 for success and a negative value otherwise.
  453. */
  454. sint8 m2m_ate_set_dig_gain(double dGaindB);
  455. /*!
  456. @fn \
  457. sint8 m2m_ate_get_dig_gain(double * pdGaindB)
  458. @brief
  459. This function is used to get the digital gain
  460. @param [out] double * pdGaindB
  461. The retrieved digital gain value obtained from HW registers.
  462. @return
  463. The function SHALL return 0 for success and a negative value otherwise.
  464. */
  465. sint8 m2m_ate_get_dig_gain(double * pdGaindB);
  466. /*!
  467. @fn \
  468. sint8 m2m_ate_get_pa_gain(uint32 *paGain)
  469. @brief
  470. This function is used to get the pa gain
  471. @param [out] uint32 *paGain
  472. The retrieved pa gain value obtained from HW registers.
  473. @return
  474. The function SHALL return 0 for success and a negative value otherwise.
  475. */
  476. sint8 m2m_ate_get_pa_gain(uint32 * paGain);
  477. /*!
  478. @fn \
  479. sint8 m2m_ate_get_ppa_gain(uint32 * ppaGain)
  480. @brief
  481. This function is used to get the ppa gain
  482. @param [out] uint32 * ppaGain
  483. The retrieved ppa gain value obtained from HW registers.
  484. @return
  485. The function SHALL return 0 for success and a negative value otherwise.
  486. */
  487. sint8 m2m_ate_get_ppa_gain(uint32 * ppaGain);
  488. /*!
  489. @fn \
  490. sint8 m2m_ate_get_tot_gain(double * pTotGaindB)
  491. @brief
  492. This function is used to get the total gain
  493. @param [out] double * pTotGaindB
  494. The retrieved total gain value obtained from calculations made based on the digital gain, pa and ppa gain values.
  495. @return
  496. The function SHALL return 0 for success and a negative value otherwise.
  497. */
  498. sint8 m2m_ate_get_tot_gain(double * pTotGaindB);
  499. #ifdef __cplusplus
  500. }
  501. #endif
  502. #endif /* _M2M_CONFIG_MODE_H_ */
  503. #endif //_M2M_ATE_FW_