⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.cpp

📁 MTK 手机软件开发 META 源代码,开发环境: C++ Builder
💻 CPP
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
 *
 * Filename:
 * ---------
 *   uart.cpp
 *
 * Project:
 * --------
 *   Maui META APP
 *
 * Description:
 * ------------
 *   UART handling source
 *
 * Author:
 * -------
 *  Andy Ueng (mtk00490)
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * $Revision$
 * $Modtime$
 * $Log$
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#include <stdio.h>
#include <IniFiles.hpp>

#pragma hdrstop

#ifndef  _MAN_ACTIVE_H_
#include "man_active.h"
#endif

#ifndef  _MAN_ERROR_H_
#include "man_error.h"
#endif

#include "uart.h"

//===========================================================================

static CUART*  uart_ptr;

//===========================================================================

//---------------------------------------------------------------------------
static void  REQ_TimeOut( void )
{   uart_ptr->REQ_TimeOut();
}

//---------------------------------------------------------------------------
static void  REQ_Finish( void )
{   uart_ptr->REQ_Finish();
}

//===========================================================================
CUART::CUART( void )
{
    IsRunning = false;
    ConfirmCallback = 0;
   // RFReq_ID = NULL;
}

//---------------------------------------------------------------------------
CUART::~CUART()
{
    IsRunning = false;
    ConfirmCallback = 0;
}

//---------------------------------------------------------------------------
void  CUART::REQ_Finish( void )
{
    if(!IsRunning)  return;

    Confirm( STATE_UART_OK );
    IsRunning = false;
}

//---------------------------------------------------------------------------
void  CUART::REQ_Stop( void )
{
    if(!IsRunning)  return;

    Confirm( STATE_UART_STOP );
    IsRunning = false;
}

//---------------------------------------------------------------------------
void  CUART::REQ_TimeOut( void )
{
    if(!IsRunning)  return;

    Confirm( STATE_UART_TIMEOUT );
    IsRunning = false;
}

//---------------------------------------------------------------------------
void  CUART::Confirm( int confirm_state )
{
    if(!IsRunning)  return;

    if(ConfirmCallback==0)  return;
    ConfirmState = confirm_state;
    ActiveMan->SetActiveFunction( ConfirmCallback );
}

//===========================================================================
bool  CUART::UART_Open( HANDLE  &hCOM, sUART uart )
{
    char  str[20];

    sprintf( str, "\\\\.\\COM%d", uart.com_port );
    hCOM = ::CreateFile( str,
                               GENERIC_READ|GENERIC_WRITE,
                               0,
                               NULL,
                               OPEN_EXISTING,
                               0,
                               NULL
                             );

    if( hCOM==INVALID_HANDLE_VALUE || hCOM == 0)
    {
        //MSG_CHECK_ERROR( MSG_ERR_OPEN_COM_FAIL );
        hCOM = NULL;
        return false;
    }

    DCB dcb;
    if(! ::GetCommState( hCOM, &dcb ) )
    {
        hCOM = NULL;
        return false;
    }
    original_dcb = dcb;
    dcb.fBinary           = true;
    dcb.fParity           = true;
    dcb.fOutxCtsFlow      = false;
    dcb.fOutxDsrFlow      = false;
    dcb.fDtrControl       = DTR_CONTROL_DISABLE;
    dcb.fDsrSensitivity   = false;
    dcb.fTXContinueOnXoff = false;
    dcb.fOutX             = false;
    dcb.fInX              = false;
    dcb.fErrorChar        = false;
    dcb.fNull             = false;
    dcb.fRtsControl       = RTS_CONTROL_DISABLE;
    dcb.wReserved         = 0;

    dcb.fAbortOnError     = false;
    dcb.BaudRate        = uart.baud_rate;
    dcb.ByteSize        = uart.byte_size;
    dcb.Parity          = uart.parity;
    dcb.StopBits        = uart.stop_bits;
    if(! ::SetCommState( hCOM, &dcb ) )
    {
        hCOM = NULL;
        return false;
    }
    return  true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool  CUART::UART_GetCommTimeouts( HANDLE hCOM, COMMTIMEOUTS &timeout)
{
     if( ! ::GetCommTimeouts( hCOM, &timeout ) )   return false;

     return true;
}

//------------------------------------------------------------------------
bool  CUART::UART_SetCommTimeouts( HANDLE hCOM, COMMTIMEOUTS timeout)
{
     if( ! ::SetCommTimeouts( hCOM, &timeout ) )   return false;

     return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool  CUART::UART_GetCommMask( HANDLE hCOM, DWORD &dwEvtMask )
{
    if( ! ::GetCommMask( hCOM, &dwEvtMask) )   return false;

    return true;
}

//--------------------------------------------------------------------------
bool  CUART::UART_SetCommMask( HANDLE hCOM, DWORD dwEvtMask )
{
    if( ! ::SetCommMask(hCOM, dwEvtMask) )   return false;

    return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool  CUART::UART_EscapeCommFunction( HANDLE hCOM, DWORD dwFunc )
{
    if( ! ::EscapeCommFunction(hCOM, dwFunc) )   return false;

    return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool  CUART::UART_SendData( HANDLE hCOM, char* p_data )
{
    if( hCOM == INVALID_HANDLE_VALUE || hCOM == NULL)   return false;

    int len = 0;
    unsigned long rlen;
    for(int i=0; i<MAX_COM_BUF_LEN; i++)
    {
        if( *(p_data+i) == '\0' )
        {
            len = i;
            break;
        }
    }

    if( ! ::WriteFile( hCOM, p_data, len, &rlen, NULL ) ) return false;

    return true;
}

//------------------------------------------------------------------------
bool  CUART::UART_ReceiveData( HANDLE hCOM, char* p_data, DWORD  &dw_byte_read )
{
    char buf[MAX_COM_BUF_LEN];
    DWORD  dw_err;
    COMSTAT com_stat;

    if( hCOM == INVALID_HANDLE_VALUE || hCOM == NULL)     return false;

    if( ! ::ClearCommError( hCOM, &dw_err, &com_stat ) )  return false;

    if( com_stat.cbInQue > sizeof(buf) )
    {
        PurgeComm( hCOM, PURGE_RXCLEAR );
        return false;
    }

    if( ! ::ReadFile( hCOM, p_data, com_stat.cbInQue, &dw_byte_read, NULL ) )  return false;

    return true;
}

//------------------------------------------------------------------------
bool  CUART::UART_Close( HANDLE hCOM )
{
    if( hCOM == INVALID_HANDLE_VALUE || hCOM == 0)   return false;
    if(! ::SetCommState(hCOM, &original_dcb) )       return false;
    if(! ::CloseHandle( hCOM ) )                     return false;
    return true;
}

//===========================================================================
////////////////////////////    Global information   ////////////////////////
//===========================================================================
int  CUART::Get_ConfirmState( void )
{
    return ConfirmState;
}

//---------------------------------------------------------------------------
DCB CUART::Get_OriginalDCB( void )
{
     return  original_dcb;

}

//---------------------------------------------------------------------------
bool CUART::Set_OriginalDCB( DCB &dcb )
{
    original_dcb = dcb;
    return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -