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

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.  *   man_metadll.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   BROM negotiate 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 <SyncObjs.hpp>
  67. #pragma hdrstop
  68. #include "form_main.h"
  69. #include "man_active_boot.h"
  70. #include "man_metadll.h"
  71. #include "misc.h"
  72. #ifndef  _USB_COM_COMMON_H_
  73. #include "usb_com_common.h"
  74. #endif
  75. //---------------------------------------------------------------------------
  76. //-- for Meta Factory ----//
  77.    HANDLE       hCOM;
  78. //------------------------//
  79. //---------------------------------------------------------------------------
  80. CMetaDllMan *MetaDllMan = 0;
  81. extern TfrmMainSel *frmMainSel;
  82. //---------------------------------------------------------------------------
  83. static CMetaDllMan*  metadllman_ptr;
  84. //---------------------------------------------------------------------------
  85. //char META_DLL_Version[10];
  86. //bool Bootok = false;
  87. bool ConnectTargetok = false;
  88. bool isBootTarget = false;
  89. bool isConnectTarget = false;
  90. bool isMETAInit = false;
  91. bool isMETACOMMSTART = false;
  92. bool isEndExcuted = 0x00;
  93. bool IsRunning = false;
  94. //bool isUartOpen = false;
  95. HANDLE p_METADLL_Connect_Event;
  96. bool isFirstOpenComErr = true;
  97. static CMETAHANDLE g_META_HANDLE_Obj;
  98. // connect in META mode
  99. extern META_ConnectInMETA_Req g_ConnectInMETA_Req;
  100. extern META_ConnectInMETA_Report g_ConnectInMETA_Report;
  101. //===========================================================================
  102. void Boot_Target_Thread()
  103. {
  104. #if 0
  105.     Bootok = false;
  106.    // Bootok = Boot_Target( MetaDllMan->hCom, &(frmMainSel->BootStop) );
  107.    Boot_Target( MetaDllMan->hCom, &(frmMainSel->BootStop) );
  108.    if(Bootok == false)
  109.     {
  110.      //Bootok;
  111.     }
  112. #endif    
  113. }
  114. //---------------------------------------------------------------------------
  115. void  METADLL_Connect(META_Connect_Req* META_connect_req, int* BootStop, META_Connect_Report* META_connect_report)
  116. {
  117.     META_RESULT  META_Result;
  118.     char str[512];
  119.     if (USB_COM == META_connect_req->com_port)
  120.     {
  121.         unsigned short us_com_port;
  122.         META_ConnectByUSB_Report report;
  123.         META_Result = META_GetDynamicUSBComPort_r(g_META_HANDLE_Obj.Get_MainHandle(), META_connect_req->ms_connect_timeout, &us_com_port, BootStop);
  124.         if ((META_Result != META_SUCCESS) && (META_Result != META_STOP_ENUM_USB_PROCEDURE))
  125.         {
  126.             frmMainSel->DisableGlbTimer();
  127.             AnsiString as_msg;
  128.             as_msg = "Get dynamic USB COM fail, please press [Reconnect] button to connect with target";
  129.             Application->MessageBox(as_msg.c_str(), "Fail", MB_OK);
  130.         }
  131.         if (META_SUCCESS == META_Result)
  132.         {
  133.             META_ConnectByUSB_Req req;
  134.             req.com_port = us_com_port;
  135.     req.ms_connect_timeout = META_connect_req->ms_connect_timeout;
  136.             req.boot_meta_arg = META_connect_req->boot_meta_arg;
  137.             req.boot_meta_arg.m_usb_enable = _TRUE;
  138.             META_Result = META_ConnectWithTargetByUSB_r(g_META_HANDLE_Obj.Get_MainHandle(), &req, BootStop, &report);
  139.             if ((report.boot_meta_ret != S_DONE) &&
  140.                 (report.boot_meta_ret != S_STOP) &&
  141.                 (report.boot_meta_ret != S_BROM_FAIL_TO_GET_BBCHIP_HW_VER)
  142.                )
  143.             {
  144.                 frmMainSel->DisableGlbTimer();
  145.                 sprintf(str, "%s(%d)", StatusToString(report.boot_meta_ret), report.boot_meta_ret);
  146.                 AnsiString as_msg(str);
  147.                 as_msg +=  ", please press [Reconnect] button to connect with target";
  148.                 Application->MessageBox(as_msg.c_str(), "Fail", MB_OK);
  149.             }
  150.             else if ((META_Result != META_SUCCESS)                 &&
  151.                      (META_Result != META_STOP_ENUM_USB_PROCEDURE) &&
  152.                      (META_Result != META_MAUI_DB_INCONSISTENT)
  153.                     )
  154.             {
  155.                 frmMainSel->DisableGlbTimer();
  156.                 const char* pc_err = META_GetErrorString(META_Result);
  157.                 AnsiString as_msg(pc_err);
  158.                 as_msg +=  ", please press [Reconnect] button to connect with target";
  159.                 Application->MessageBox(as_msg.c_str(), "Fail", MB_OK);
  160.             }
  161.             else
  162.             {
  163.                 META_connect_report->boot_result = report.boot_result;
  164.             }
  165.         }
  166.     }
  167.     else // UART COM
  168.     {
  169.         META_connect_req->boot_meta_arg.m_usb_enable = _FALSE;
  170.         META_Result = META_ConnectWithTarget_r(g_META_HANDLE_Obj.Get_MainHandle(), META_connect_req, BootStop, META_connect_report);
  171.         if ((META_connect_report->boot_meta_ret != S_DONE) &&
  172.             (META_connect_report->boot_meta_ret != S_STOP) &&
  173.             (META_connect_report->boot_meta_ret != S_BROM_FAIL_TO_GET_BBCHIP_HW_VER)
  174.            )
  175.         {
  176.             frmMainSel->DisableGlbTimer();
  177.             sprintf(str, "%s(%d)", StatusToString(META_connect_report->boot_meta_ret), META_connect_report->boot_meta_ret );
  178.             AnsiString as_msg(str);
  179.             as_msg +=  ", please press [Reconnect] button to connect with target";
  180.             Application->MessageBox(as_msg.c_str(), "Fail", MB_OK);
  181.         }
  182.         else if ((META_Result != META_SUCCESS)               &&
  183.                  (META_Result != META_STOP_BOOTUP_PROCEDURE) &&
  184.                  (META_Result != META_MAUI_DB_INCONSISTENT)
  185.                 )
  186.         {
  187.             frmMainSel->DisableGlbTimer();
  188.             const char* pc_err = META_GetErrorString(META_Result);
  189.             AnsiString as_msg(pc_err);
  190.             as_msg +=  ", please press [Reconnect] button to connect with target";
  191.             Application->MessageBox(as_msg.c_str(), "Fail", MB_OK);
  192.         }
  193.     }
  194.     if ((META_SUCCESS == META_Result) || (META_MAUI_DB_INCONSISTENT == META_Result))
  195.     {
  196.         ConnectTargetok = true;
  197.     }
  198.     isConnectTarget = false;
  199. }
  200. //---------------------------------------------------------------------------
  201. void METADLL_Connect_Thread()
  202. {
  203.     METADLL_Connect(&(frmMainSel->META_connect_req), &(frmMainSel->BootStop), &(frmMainSel->META_connect_report));
  204.     SetEvent(p_METADLL_Connect_Event);
  205. }
  206. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  207. void METADLL_ConnectInMetaMode(META_ConnectInMETA_Req* p_req, int* p_BootStop, META_ConnectInMETA_Report  *p_report)
  208. {
  209.     META_RESULT  META_Result;
  210.     //char str[512];
  211.     META_Result = META_ConnectInMetaMode_r(g_META_HANDLE_Obj.Get_MainHandle(), p_req, p_BootStop, p_report);
  212.     if ((META_Result != META_SUCCESS)               &&
  213.         (META_Result != META_STOP_BOOTUP_PROCEDURE) &&
  214.         (META_Result != META_MAUI_DB_INCONSISTENT)
  215.        )
  216.     {
  217.         frmMainSel->DisableGlbTimer();
  218.         const char* pc_err = META_GetErrorString(META_Result);
  219.         AnsiString as_msg(pc_err);
  220.         as_msg +=  ", please press [Reconnect] button to connect with target";
  221.         Application->MessageBox(as_msg.c_str(), "Fail", MB_OK);
  222.     }
  223.     if ((META_SUCCESS == META_Result) ||
  224.         (META_MAUI_DB_INCONSISTENT == META_Result))
  225.     {
  226.         ConnectTargetok = true;
  227.     }
  228.     isConnectTarget = false;
  229. }
  230. //---------------------------------------------------------------------------
  231. void METADLL_ConnectInMetaMode_Thread()
  232. {
  233.     METADLL_ConnectInMetaMode(&g_ConnectInMETA_Req, &(frmMainSel->BootStop), &g_ConnectInMETA_Report);
  234.     SetEvent(p_METADLL_Connect_Event);
  235. }
  236. //----------------------------------------------------------------------------
  237. void  CMetaDllMan::METADLL_DisconnectWithTarget( void )
  238. {
  239.     if( ConnectTargetok )
  240.     {
  241.         META_DisconnectWithTarget_r( m_META_HANDLE_Obj.Get_MainHandle() );
  242.         ConnectTargetok = false;
  243.     }
  244. }
  245. //==============================================================================
  246. void  UartDisconnect( void )
  247. {
  248.     frmMainSel->UartDisconnect();
  249. }
  250. //----------------------------------------------------------------------------
  251. static void __stdcall ErrorHandler(const META_CNF_ERR_CODE err)
  252. {
  253.     metadllman_ptr->ErrorHandler(err);
  254. }
  255. //----------------------------------------------------------------------------
  256. void __stdcall SystemHandler(const char *sys_trace)
  257. {
  258.     metadllman_ptr->SystemHandler(sys_trace);
  259. }
  260. //==============================================================================
  261. bool CMetaDllMan::StartConnectTarget(bool b_connect_in_meta_mode)
  262. {
  263.     if (!ConnectTargetok)
  264.     {
  265.         if (!isConnectTarget)
  266.         {
  267.             p_METADLL_Connect_Event = CreateEvent(NULL, TRUE, FALSE, NULL);
  268.             ResetEvent(p_METADLL_Connect_Event);
  269.             isConnectTarget = true;
  270.             if (b_connect_in_meta_mode)
  271.             {
  272.                 ActiveMan_Boot->SetActiveFunction_Boot(METADLL_ConnectInMetaMode_Thread);
  273.             }
  274.             else
  275.             {
  276.                 ActiveMan_Boot->SetActiveFunction_Boot(METADLL_Connect_Thread);
  277.             }
  278.         }
  279.         return false;
  280.     }
  281.     return true;
  282. }
  283. //---------------------------------------------------------------------------
  284. void __stdcall CMetaDllMan::ErrorHandler(const META_CNF_ERR_CODE err)
  285. {
  286. }
  287. //----------------------------------------------------------------------------
  288. void __stdcall CMetaDllMan::SystemHandler(const char *sys_trace)
  289. {
  290.     Application->MessageBox( sys_trace, "System trace", MB_OK );
  291. }
  292. //===========================================================================
  293. CMetaDllMan::CMetaDllMan( void )
  294. {
  295.    IsRunning = false;
  296.    hCom = NULL;
  297.    //ComPort  = 1;
  298.   // ComPort  = META_COM1;
  299.    ComPort  = 1;
  300.    metadllman_ptr = this;
  301.   // const char **version;
  302.   // const char **release_type;
  303.   // const char **build_date;
  304.   /// const char **load_ptah;
  305.   // META_GetDLLInfo( version, release_type, build_date, load_ptah);
  306.    unsigned int  major_ver;
  307.    unsigned int  minor_ver;
  308.    unsigned int  build_num;
  309.    unsigned int  patch_num;
  310.    META_GetDLLVer( &major_ver, &minor_ver, &build_num, &patch_num);
  311.   // META_GetVersion( &Version );
  312.   // unsigned int x, y, z, z2;
  313.   // x = ( (Version) & 0xFF000000 ) >> 24;
  314.   // y = ( (Version) & 0x00FF0000 ) >> 16;
  315.   // z = ( (Version) & 0x0000FFFF );
  316.   //  sprintf(::META_DLL_Version, "%d.%d.%d", x, y, z);
  317.     m_asMETADLLVer = IntToStr(major_ver) + "." +
  318.                      IntToStr(minor_ver) + "." +
  319.                      IntToStr(build_num) + "." +
  320.                      IntToStr(patch_num);
  321.    // m_asMETADLLBuildDate = (AnsiString) *build_date;
  322. }
  323. //---------------------------------------------------------------------------
  324. CMetaDllMan::~CMetaDllMan( )
  325. {
  326.    if(IsRunning)
  327.    {
  328.       End();
  329.       IsRunning = false;
  330.    }
  331. }
  332. //---------------------------------------------------------------------------
  333. bool CMetaDllMan::MetaInit( void )
  334. {
  335.     m_META_HANDLE_Obj.REQ_AllocateMainHandle_Start();     
  336.     //MetaResult = META_Init_r( m_META_HANDLE_Obj.Get_MainHandle(), ::ErrorHandler );
  337.     //if( MetaResult != META_SUCCESS ) return false;
  338.     //isMETAInit = true;
  339.     //return true;
  340.     return true;
  341. }
  342. //---------------------------------------------------------------------------
  343. bool CMetaDllMan::End(void)
  344. {
  345.     META_RESULT meta_result;
  346.     if (isMETACOMMSTART)
  347.     {
  348.         meta_result = META_COMM_Stop_r(m_META_HANDLE_Obj.Get_MainHandle());
  349.         if (meta_result != META_SUCCESS)
  350.         {
  351.             // Application->MessageBox( "META COMM stop error", "Error", MB_OK );
  352.             return(false);
  353.         }
  354.         isMETACOMMSTART = false;
  355.     }
  356.     META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_MainHandle());
  357.     if (ConnectTargetok)
  358.     {
  359.         META_DisconnectWithTarget_r(m_META_HANDLE_Obj.Get_MainHandle());
  360.         ConnectTargetok = false;
  361.     }
  362.     if (isMETAInit)
  363.     {
  364.         //int meta_handle = m_META_HANDLE_Obj.Get_MainHandle();
  365.         //META_Deinit_r(&meta_handle);
  366.         m_META_HANDLE_Obj.REQ_ReleaseMainHandle_Start();
  367.         m_META_HANDLE_Obj.REQ_ReleaseSecondHandle_Start();
  368.         isMETAInit = false;
  369.     }
  370. #if 0
  371.     if (isUartOpen)
  372.     {
  373.        ::UART_Close(hCom);
  374.     }
  375. #endif
  376.     IsRunning = false;
  377.     return(true);
  378. }
  379. //==============================================================================
  380. bool  CMetaDllMan::isMetaVerRequiredByTargetOk( unsigned int meta_ver_required_by_target )
  381. {
  382.     //META_GetVersion( &Version );
  383.     //if( Version < meta_ver_required_by_target )
  384.     //{
  385.     //    return  false;
  386.    //}
  387.     return  true;
  388. }
  389. //---------------------------------------------------------------------------
  390. void  CMetaDllMan::getMetaVerRequiredByTarget( unsigned int meta_ver_required_by_target, char* p_cmeta_ver_required_by_target )
  391. {
  392.    unsigned int x, y,z;
  393.    x = ( (meta_ver_required_by_target) & 0xFF000000 ) >> 24;
  394.    y = ( (meta_ver_required_by_target) & 0x00FF0000 ) >> 16;
  395.    z = ( (meta_ver_required_by_target) & 0x0000FFFF );
  396.    sprintf(p_cmeta_ver_required_by_target, "%d.%d.%d", x, y, z);
  397. }
  398. //===========================================================================
  399. ////////////////////////////////  information  //////////////////////////////
  400. //===========================================================================
  401. AnsiString CMetaDllMan::Get_METADLLVersion( void )
  402. {
  403.     return m_asMETADLLVer;
  404. }
  405. //---------------------------------------------------------------------------
  406. AnsiString CMetaDllMan::Get_METADLLBuildDate( void )
  407. {   return m_asMETADLLBuildDate;
  408. }