📄 irframer_sw.h
字号:
/*****************************************************************************
* 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).
*
*****************************************************************************/
#ifndef _IRFRAMER_SW_H
#define _IRFRAMER_SW_H
#include "lap.h"
#if 1//defined(MT6219)||defined(MT6226M)||defined(MT6218B)||defined(MT6217)||defined(MT6226)||defined(MT6227)
#define IR_ClearFIFO()\
{\
DRV_WriteReg(IR_RX_EN,IR_RX_EN_DISABLE);\
DRV_WriteReg(IR_BUF_CLEAR,IR_BUF_CLEAR_BIT);\
}
#else/*to cover HW Bug*/
/* under construction !*/
#endif
#define IR_SetABORT() DRV_WriteReg(IR_ABORT,IR_ABORT_BIT)
#define IR_TxEnable() \
{\
DRV_WriteReg(IR_RX_EN,IR_RX_EN_DISABLE);\
DRV_WriteReg(IR_TX_EN,IR_TX_EN_NORMAL);\
}
#define IR_RxEnable() \
{\
DRV_WriteReg(IR_TX_EN,IR_TX_EN_DISABLE);\
DRV_WriteReg(IR_RX_EN,IR_RX_EN_DISABLE);\
DRV_WriteReg(IR_RX_EN,IR_RX_EN_NORMAL);\
}
#define IR_SetBOFs(_BOFNUM) \
{\
kal_uint16 _tmp;\
_tmp = (DRV_Reg(IR_BOFS) & ~IR_BOFS_MASK);\
_tmp |= _BOFNUM;\
DRV_WriteReg(IR_BOFS,_BOFNUM);\
}
typedef struct
{
kal_uint16 Read; /* @field Current Read index. */
kal_uint16 Write; /* @field Current Write index. */
kal_uint16 Length; /* @field Length of buffer */
kal_uint32 *ptr; /* @field Start of buffer */
}Ir_RINGBUFFER;
#define IrResetFifo(Buffer) Buffer.Write = Buffer.Read = 0
#define IrBWrite(Buffer) (Buffer->Write)
#define IrBRead(Buffer) (Buffer->Read)
#define IrBLength(Buffer) (Buffer->Length)
#define IrBuffWrite(Buffer) (Buffer->ptr+Buffer->Write)
#define IrBuffRead(Buffer) (Buffer->ptr+Buffer->Read)
#define IrBuf_init(_Buffer,_Buffaddr,_uTotalSize) \
{\
Ir_RINGBUFFER *_Buf=_Buffer;\
_Buf->Read = 0;\
_Buf->Write = 0;\
_Buf->Length = _uTotalSize;\
_Buf->ptr = _Buffaddr;\
}
#define IrBuf_GetRoomLeft(_Buffer,_RoomLeft) \
{\
Ir_RINGBUFFER *_Buf=_Buffer;\
if ( IrBRead(_Buf) <= IrBWrite(_Buf) ) \
_RoomLeft = IrBLength(_Buf) - IrBWrite(_Buf) + IrBRead(_Buf) - 1;\
else\
_RoomLeft = IrBRead(_Buf) - IrBWrite(_Buf) - 1;\
}
#define IrBuf_Push(_Buffer,_pushData) \
{\
Ir_RINGBUFFER *_Buf=_Buffer;\
*IrBuffWrite(_Buf) = (kal_uint32)_pushData;\
IrBWrite(_Buf)++;\
if (IrBWrite(_Buf) >= IrBLength(_Buf))\
IrBWrite(_Buf) -= IrBLength(_Buf);\
}
#define IrBuf_GetBytesAvail(_Buffer,_BytesAvail) \
{\
Ir_RINGBUFFER *_Buf = _Buffer;\
_BytesAvail = 0;\
if (IrBWrite(_Buf) >= IrBRead(_Buf))\
_BytesAvail = IrBWrite(_Buf) - IrBRead(_Buf);\
else\
_BytesAvail = IrBLength(_Buf) - IrBRead(_Buf) + IrBWrite(_Buf); \
}
#define IrBuf_Pop(_Buffer,_popData) \
{\
Ir_RINGBUFFER *_Buf = _Buffer;\
_popData= *IrBuffRead(_Buf);\
IrBRead(_Buf)++;\
if (IrBRead(_Buf) >= IrBLength(_Buf))\
IrBRead(_Buf) -= IrBLength(_Buf);\
}
#define EnableIrTxIntr() \
{\
kal_uint16 _IER;\
kal_uint32 _savedMask;\
_savedMask = SaveAndSetIRQMask();\
_IER = UART_ReadReg(IR_IRQ_ENABLE);\
_IER |= IR_IRQ_ENABLE_TXTRIG;\
UART_WriteReg(IR_IRQ_ENABLE,_IER);\
RestoreIRQMask(_savedMask);\
}
#define DisableIrTxIntr() \
{\
kal_uint16 _IER;\
kal_uint32 _savedMask;\
_savedMask = SaveAndSetIRQMask();\
_IER = UART_ReadReg(IR_IRQ_ENABLE);\
_IER &= ~IR_IRQ_ENABLE_TXTRIG;\
UART_WriteReg(IR_IRQ_ENABLE,_IER);\
RestoreIRQMask(_savedMask);\
}
/*because only support window size = 1*/
#define IrRingBufferLength 2
#define IrRingRXBufferLength 1
#define IRMAXDATASIZE (IRDA_STD_PACKET_SIZE+4)//132
#define IRDA_DECODE_THRESHOLD 7
typedef struct
{
kal_hisrid hisr;
kal_uint32 baud;
/*transmit path*/
kal_uint32 trxptr[IrRingBufferLength];
Ir_RINGBUFFER Tx_Buffer; /* transmit buffer */
/*Receive path*/
kal_uint8 rxdata_buffer[IrRingBufferLength][IRMAXDATASIZE]; /*only support 64 bytes*/
kal_uint16 rxdata_count[IrRingBufferLength];
kal_uint8 rxdata_index;
} IrDataStruct;
extern void IR_Init(kal_uint32 baud);
extern void IR_HISR(void);
extern void IR_LISR(void);
extern void IRFRAMER_Test(void);
extern void IR_ioctl(kal_uint8 param, kal_uint32 value);
extern void IR_Write(FBUF *frame);
extern void IRDA_SetBof(kal_uint8 num_of_bof);
extern void IRDA_Open(void);
extern void IRDA_Close(kal_uint32 baud);
extern void IR_SW_Init(void);
extern void IR_SW_Init(void);
extern void Reset_Baudrate(void);
#endif /*_IRFRAMER_SW_H*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -