bb_adc.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:19k
源码类别:

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   bb_adc.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Baseband ADC source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. #include <vcl.h>
  66. #include <IniFiles.hpp>
  67. #pragma hdrstop
  68. #ifndef _FORM_MAIN_H_
  69. #include "form_main.h"
  70. #endif
  71. #ifndef  _BB_ADC_H_
  72. #include "bb_adc.h"
  73. #endif
  74. #ifndef  _MAN_ACTIVE_H_
  75. #include "man_active.h"
  76. #endif
  77. #ifndef  _MAN_FDM_H_
  78. #include "man_fdm.h"
  79. #endif
  80. // misc
  81. #ifndef  _MISC_BB_H_
  82. #include "misc_bb.h"
  83. #endif
  84. #ifndef  _FT_UTILS_H_
  85. #include "ft_utils.h"
  86. #endif
  87. // NVRAM
  88. #ifndef  _NVRAM_VER_H_
  89. #include "nvram_ver.h"
  90. #endif
  91. //===========================================================================
  92. static CBBADC*  bb_adc_ptr;
  93. static bool g_bIsRunning = false;
  94. //===========================================================================
  95. static void REQ_MeasureADC(void)
  96. {
  97.     bb_adc_ptr->REQ_MeasureADC();
  98. }
  99. //---------------------------------------------------------------------------
  100. static void __stdcall CNF_MeasureADC(const ADCMeaData_Cnf *cnf, const short token, void *usrData)
  101. {
  102.     bb_adc_ptr->CNF_MeasureADC(cnf, token, usrData);
  103. }
  104. //---------------------------------------------------------------------------
  105. static void CNF_ReadFromNVRAM(void)
  106. {
  107.     bb_adc_ptr->CNF_ReadFromNVRAM();
  108. }
  109. //---------------------------------------------------------------------------
  110. static void CNF_WriteToNVRAM(void)
  111. {
  112.     bb_adc_ptr->CNF_WriteToNVRAM();
  113. }
  114. //===========================================================================
  115. CBBADC::CBBADC(void)
  116. {
  117.     g_bIsRunning = false;
  118.     ConfirmCallback = 0;
  119.     m_uiAdcBufSize = 0;
  120.     m_pcAdcBuf = 0;
  121.     for (int i=0; i<TOTAL_6218_ADC_NUM; i++)
  122.     {
  123.         m_sAdcData.i_ADCSlope[i]  = 1;
  124.         m_sAdcData.i_ADCOffset[i] = 0;
  125.     }
  126.     m_iCurChannel = 0;
  127.     m_iCurIndex = 0;
  128.     m_iADC_Input[0] = 0;
  129.     m_iADC_Input[1] = 0;
  130.     m_fADC_Output[0] = 0;
  131.     m_fADC_Output[1] = 0;
  132.     m_psBBReq_ADC = NULL;
  133. }
  134. //---------------------------------------------------------------------------
  135. CBBADC::~CBBADC()
  136. {
  137.     g_bIsRunning = false;
  138.     ConfirmCallback = 0;
  139.     if (m_pcAdcBuf)
  140.     {
  141.         delete [] m_pcAdcBuf;
  142.         m_pcAdcBuf = NULL;
  143.     }
  144.     if (m_psBBReq_ADC)
  145.     {
  146.         delete m_psBBReq_ADC;
  147.         m_psBBReq_ADC = NULL;
  148.     }
  149. }
  150. //---------------------------------------------------------------------------
  151. void CBBADC::REQ_Stop(void)
  152. {
  153.     if (!g_bIsRunning)
  154.     {
  155.         return;
  156.     }
  157.     META_Cancel_r(m_META_HANDLE_Obj.Get_MainHandle(), m_sBBID_ADC);
  158.     Confirm(METAAPP_STOP);
  159. }
  160. //---------------------------------------------------------------------------
  161. void CBBADC::Confirm(E_METAAPP_RESULT_T confirm_state)
  162. {
  163.     if (!g_bIsRunning)
  164.     {
  165.         return;
  166.     }
  167.     g_bIsRunning = false;
  168.     if (NULL == ConfirmCallback)
  169.     {
  170.         return;
  171.     }
  172.     m_eConfirmState = confirm_state;
  173.     ActiveMan->SetActiveFunction(ConfirmCallback);
  174. }
  175. //===========================================================================
  176. void CBBADC::REQ_Start(int adc_channel, int input, int index, int measure_count)
  177. {
  178.     bb_adc_ptr = this;
  179.     g_bIsRunning  = true;
  180.     m_iCurChannel = adc_channel;
  181.     m_iCurIndex = index;
  182.     m_iMeasureCount = measure_count;
  183.     m_iADC_Input[m_iCurIndex] = input;
  184.     ActiveMan->SetActiveFunction(::REQ_MeasureADC);
  185. }
  186. //---------------------------------------------------------------------------
  187. void CBBADC::REQ_MeasureADC(void)
  188. {
  189.     if (!g_bIsRunning)
  190.     {
  191.         return;
  192.     }
  193.     if (NULL == m_psBBReq_ADC)
  194.     {
  195.         m_psBBReq_ADC = new ADCMeaData_Req;
  196.     }
  197.     m_psBBReq_ADC->channel  = m_iCurChannel;
  198.     m_psBBReq_ADC->Meacount = m_iMeasureCount;
  199.     META_RESULT MetaResult = META_BB_ADCGetMeaSumData_r(m_META_HANDLE_Obj.Get_MainHandle(), m_psBBReq_ADC, ::CNF_MeasureADC, &m_sBBID_ADC, NULL);
  200.     if (MetaResult != META_SUCCESS)
  201.     {
  202.         Confirm(METAAPP_FAIL);
  203.         return;
  204.     }
  205. }
  206. //-------------------------------------
  207. void __stdcall CBBADC::CNF_MeasureADC(const ADCMeaData_Cnf *cnf , const short token, void *usrData)
  208. {
  209.     if (!g_bIsRunning)
  210.     {
  211.         return;
  212.     }
  213.     m_psBBCnf_ADC = cnf;
  214.     if (cnf->status != BB_STATUS_SUCCESS)
  215.     {
  216.         Confirm(METAAPP_FAIL);
  217.         return;
  218.     }
  219.     m_fADC_Output[m_iCurIndex] = cnf->value/((float)m_psBBReq_ADC->Meacount*1.0);
  220.     Confirm(METAAPP_SUCCESS);
  221. }
  222. //===========================================================================
  223. ////////////////////////////////  NVRAM    //////////////////////////////////
  224. //===========================================================================
  225. bool CBBADC::Decompose_AdcCalTable(void)
  226. {
  227.    int  total_adc_num;
  228.    char  adc_slope_str[]  = "ADCSlope[0]";
  229.    char  adc_offset_str[] = "ADCOffset[0]";
  230.    META_RESULT MetaResult;
  231.    BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  232.    if (bb_chip == MT6205 || bb_chip == MT6205B)
  233.    {
  234.         total_adc_num = TOTAL_6205B_ADC_NUM;
  235.    }
  236.    else
  237.    {
  238.         total_adc_num = TOTAL_6218_ADC_NUM;
  239.    }
  240.    for (int i=0; i<total_adc_num; i++)
  241.    {
  242.         // slope
  243.         adc_slope_str[9]= '0'+i;
  244.         MetaResult = META_NVRAM_GetRecFieldValue("NVRAM_EF_ADC_LID",
  245.                                                  adc_slope_str,
  246.                                                  m_pcAdcBuf,
  247.                                                  m_uiAdcBufSize,
  248.                                                  &m_sAdcData.i_ADCSlope[i],
  249.                                                  sizeof(m_sAdcData.i_ADCSlope[i])
  250.                                                  );
  251.         if (MetaResult != META_SUCCESS)
  252.         {
  253.             return false;
  254.         }
  255.         adc_offset_str[10]= '0'+i;
  256.         // offset
  257.         MetaResult = META_NVRAM_GetRecFieldValue("NVRAM_EF_ADC_LID",
  258.                                                  adc_offset_str,
  259.                                                  m_pcAdcBuf,
  260.                                                  m_uiAdcBufSize,
  261.                                                  &m_sAdcData.i_ADCOffset[i],
  262.                                                  sizeof(m_sAdcData.i_ADCOffset[i])
  263.                                                  );
  264.         if (MetaResult != META_SUCCESS)
  265.         {
  266.             return false;
  267.         }
  268.     }
  269.     return true;
  270. }
  271. //---------------------------------------------------------------------------
  272. bool CBBADC::Compose_AdcCalTable(void)
  273. {
  274.     char  adc_slope_str[]  = "ADCSlope[0]";
  275.     char  adc_offset_str[] = "ADCOffset[0]";
  276.     int   total_adc_num;
  277.     META_RESULT MetaResult;
  278.     BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  279.     if ((bb_chip == MT6205) || (bb_chip == MT6205B))
  280.     {
  281.          total_adc_num = TOTAL_6205B_ADC_NUM;
  282.     }
  283.     else
  284.     {
  285.          total_adc_num = TOTAL_6218_ADC_NUM;
  286.     }
  287.     for (int i=0; i<total_adc_num; i++)
  288.     {
  289.         // slope
  290.         adc_slope_str[9]= '0'+i;
  291.         MetaResult = META_NVRAM_SetRecFieldValue( "NVRAM_EF_ADC_LID",
  292.                                                adc_slope_str,
  293.                                                m_pcAdcBuf,
  294.                                                m_uiAdcBufSize,
  295.        &m_sAdcData.i_ADCSlope[i],
  296.                                                 sizeof(m_sAdcData.i_ADCSlope[i]) );
  297.         if (MetaResult != META_SUCCESS)
  298.         {
  299.             return false;
  300.         }
  301.         // offset
  302.         adc_offset_str[10] = '0'+i;
  303.         MetaResult = META_NVRAM_SetRecFieldValue("NVRAM_EF_ADC_LID",
  304.                                                  adc_offset_str,
  305.                                                  m_pcAdcBuf,
  306.                                                  m_uiAdcBufSize,
  307.                                                  &m_sAdcData.i_ADCOffset[i],
  308.                                                  sizeof(m_sAdcData.i_ADCOffset[i])
  309.                                                  );
  310.         if (MetaResult != META_SUCCESS)
  311.         {
  312.             return false;
  313.         }
  314.     }
  315.     return true;
  316. }
  317. //===========================================================================
  318. void CBBADC::REQ_Read_From_NVRAM_Start(void)
  319. {
  320.     bb_adc_ptr = this;
  321.     g_bIsRunning = true;
  322.     m_bDownloadTrigger = false;
  323.     REQ_Read_From_NVRAM();
  324. }
  325. //---------------------------------------------------------------------------
  326. void CBBADC::REQ_Read_From_NVRAM(void)
  327. {
  328.     if (!g_bIsRunning)
  329.     {
  330.         return;
  331.     }
  332.     META_RESULT MetaResult;
  333.     if (NULL == m_pcAdcBuf)
  334.     {
  335.         MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_ADC_LID",
  336.                                           (int *) &m_uiAdcBufSize);
  337.         if (MetaResult != META_SUCCESS)
  338.         {
  339.             Confirm(METAAPP_FAIL);
  340.             return;
  341.         }
  342.         m_pcAdcBuf = new char[m_uiAdcBufSize];
  343.     }
  344.     NVRAMMan->ConfirmCallback = ::CNF_ReadFromNVRAM;
  345.     NVRAMMan->REQ_ReadNVRAM_Start("NVRAM_EF_ADC_LID",
  346.                                   1,
  347.                                   m_uiAdcBufSize,
  348.                                   m_pcAdcBuf);
  349. }
  350. //-------------------------------------
  351. void CBBADC::CNF_ReadFromNVRAM(void)
  352. {
  353.     if (!g_bIsRunning)
  354.     {
  355.         return;
  356.     }
  357.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  358.     if (METAAPP_SUCCESS == state)
  359.     {
  360.         if (m_bDownloadTrigger)
  361.         {
  362.             REQ_Write_To_NVRAM();
  363.         }
  364.         else
  365.         {
  366.             if (!Decompose_AdcCalTable())
  367.             {
  368.                 Confirm(METAAPP_FAIL);
  369.                 return;
  370.             }
  371.             Confirm(METAAPP_SUCCESS);
  372.         }
  373.     }
  374.     else
  375.     {
  376.         Confirm(state);
  377.     }
  378. }
  379. //===========================================================================
  380. void CBBADC::REQ_Write_To_NVRAM_Start(void)
  381. {
  382.     bb_adc_ptr = this;
  383.     g_bIsRunning = true;
  384.     m_bDownloadTrigger = true;
  385.     REQ_Write_To_NVRAM();
  386. }
  387. //---------------------------------------------------------------------------
  388. void CBBADC::REQ_Write_To_NVRAM(void)
  389. {
  390.     if (!g_bIsRunning)
  391.     {
  392.         return;
  393.     }
  394.     META_RESULT MetaResult;
  395.     unsigned short lid_ver;
  396.     MetaResult = META_NVRAM_GetLIDVersion("NVRAM_EF_ADC_LID", &lid_ver);
  397.     if (lid_ver > NVRAM_EF_ADC_LID_VERNO)
  398.     {
  399.         Confirm(METAAPP_NVRAM_LID_VER_NOT_SUPPORT);
  400.         return;
  401.     }
  402.     if (NULL == m_pcAdcBuf)
  403.     {
  404.         MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_ADC_LID", (int *) &m_uiAdcBufSize);
  405.         if (MetaResult!=META_SUCCESS)
  406.         {
  407.             Confirm(METAAPP_FAIL);
  408.             return;
  409.         }
  410.         m_pcAdcBuf = new char[m_uiAdcBufSize];
  411.     }
  412.     if (!Compose_AdcCalTable())
  413.     {
  414.         Confirm(METAAPP_FAIL);
  415.         return;
  416.     }
  417.     NVRAMMan->ConfirmCallback = ::CNF_WriteToNVRAM;
  418.     NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_ADC_LID",
  419.                            1,
  420.                                    m_uiAdcBufSize,
  421.                                    m_pcAdcBuf);
  422. }
  423. //-------------------------------------
  424. void CBBADC::CNF_WriteToNVRAM(void)
  425. {
  426.     if (!g_bIsRunning)
  427.     {
  428.         return;
  429.     }
  430.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  431.     Confirm(state);
  432. }
  433. //===========================================================================
  434. bool CBBADC::AdcSectionExist(char *filename)
  435. {
  436.     TIniFile   *ini_file;
  437.     ini_file = new TIniFile( filename);
  438.     if (ini_file == NULL)
  439.     {
  440.         return false;
  441.     }
  442.     if (ini_file->SectionExists("ADC control"))
  443.     {
  444.         return true;
  445.     }
  446.     return false;
  447. }
  448. //-----------------------------------------------------------------------------
  449. bool CBBADC::REQ_Read_From_File(char *filename)
  450. {
  451.     TIniFile   *ini_file;
  452.     AnsiString  data;
  453.     char        str[2048];
  454.     int         idata[10];
  455.     int         i;
  456.     int         total_adc_num;
  457.     ini_file = new TIniFile( filename );
  458.     if (ini_file == NULL)
  459.     {
  460.         return false;
  461.     }
  462.     BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  463.     if ((bb_chip == MT6205) || (bb_chip == MT6205B))
  464.     {
  465.         total_adc_num = TOTAL_6205B_ADC_NUM;
  466.         data = ini_file->ReadString("ADC control",
  467.                                      "offset",
  468.                                      "0,0,0,0,0" );
  469.     }
  470.     else
  471.     {
  472.         total_adc_num = TOTAL_6218_ADC_NUM;
  473.         data = ini_file->ReadString("ADC control",
  474.                                      "offset",
  475.                                      "0,0,0,0,0,0,0" );
  476.     }
  477.     strcpy(str, data.c_str());
  478.     String_To_Array_int(str, idata, total_adc_num);
  479.     for (i=0; i<total_adc_num; i++)
  480.     {
  481.         m_sAdcData.i_ADCOffset[i] = idata[i];
  482.     }
  483.     if ((bb_chip == MT6205) || (bb_chip == MT6205B))
  484.     {
  485.         data = ini_file->ReadString("ADC control",
  486.                                     "slope",
  487.                                     "1,1,1,1,1");
  488.     }
  489.     else
  490.     {
  491.         data = ini_file->ReadString("ADC control",
  492.                                      "slope",
  493.                                      "1,1,1,1,1,1,1");
  494.     }
  495.     strcpy(str, data.c_str());
  496.     String_To_Array_int(str, idata, total_adc_num);
  497.     for (i=0; i<total_adc_num; i++)
  498.     {
  499.         m_sAdcData.i_ADCSlope[i] = idata[i];
  500.     }
  501.     delete ini_file;
  502.     return true;
  503. }
  504. //===========================================================================
  505. bool CBBADC::REQ_Write_To_File(char *filename)
  506. {
  507.     TIniFile   *ini_file;
  508.     AnsiString  data;
  509.     char        str[2048];
  510.     int         idata[10];
  511.     int         total_adc_num;
  512.     ini_file = new TIniFile(filename);
  513.     if (ini_file == NULL)
  514.     {
  515.        return  false;
  516.     }
  517.     BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  518.     if ((bb_chip == MT6205) || (bb_chip == MT6205B))
  519.     {
  520.         total_adc_num = TOTAL_6205B_ADC_NUM;
  521.     }
  522.     else
  523.     {
  524.         total_adc_num = TOTAL_6218_ADC_NUM;
  525.     }
  526.     for (int i=0; i<total_adc_num; i++)
  527.     {
  528.         idata[i] = m_sAdcData.i_ADCOffset[i];
  529.     }
  530.     Array_To_String_int(str, idata, total_adc_num, ',');
  531.     ini_file->WriteString("ADC control",
  532.                            "offset",
  533.                            str);
  534.     for (int i=0; i<total_adc_num; i++)
  535.     {
  536.         idata[i] = m_sAdcData.i_ADCSlope[i];
  537.     }
  538.     Array_To_String_int(str, idata, total_adc_num, ',');
  539.     ini_file->WriteString("ADC control",
  540.                           "slope",
  541.                           str);
  542.     delete ini_file;
  543.     return true;
  544. }
  545. //===========================================================================
  546. void CBBADC::Evaluate(void)
  547. {
  548.    int  y0 = m_iADC_Input[0];
  549.    int  y1 = m_iADC_Input[1];
  550.    float  x0 = m_fADC_Output[0];
  551.    float  x1 = m_fADC_Output[1];
  552.    float fdata;
  553.    if (x0-x1 != 0)
  554.    {
  555.       fdata = 1.0*(y1-y0)/(x1-x0);
  556.       fdata += (fdata>=0) ? 0.5 : -0.5 ;
  557.       m_iADC_Slope = (int)fdata;
  558.       fdata = y0 - 1.0*(y1-y0)/(x1-x0)*x0;
  559.       fdata += (fdata>=0) ? 0.5 : -0.5 ;
  560.       m_iADC_Offset = (int)fdata;
  561.    }
  562. }
  563. //===========================================================================
  564. ////////////////////////////  Global information  ///////////////////////////
  565. //===========================================================================
  566. E_METAAPP_RESULT_T CBBADC::Get_ConfirmState(void)
  567. {
  568.     return m_eConfirmState;
  569. }
  570. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  571. float CBBADC::Get_ADC_Output(int idx)
  572. {
  573.     return m_fADC_Output[idx];
  574. }
  575. //---------------------------------------------------------------------------
  576. void CBBADC::Set_ADC_Output(int idx, float adc_output)
  577. {
  578.     m_fADC_Output[idx] = adc_output;
  579. }
  580. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  581. bmt_adcdata CBBADC::Get_AdcData(void)
  582. {
  583.     return m_sAdcData;
  584. }
  585. //---------------------------------------------------------------------------
  586. void CBBADC::Set_AdcData(bmt_adcdata &adc_data)
  587. {
  588.     m_sAdcData = adc_data;
  589. }