📄 serialswitch.c
字号:
};
/*
* Constant table for Trace using UART Modem.
*/
static const t_tr_functions uart_modem_trace = {
UA_UART_1,
UA_Init,
UA_ReadNChars,
UA_ReadNBytes,
UA_WriteNChars,
UA_EncapsulateNChars,
UA_WriteNBytes,
UA_WriteChar,
UA_WriteString,
UA_EnterSleep,
UA_WakeUp
};
#if (CHIPSET == 12)
/*
* Constant table for Trace using UART Modem2.
*/
static const t_tr_functions uart_modem2_trace = {
UA_UART_2,
UA_Init,
UA_ReadNChars,
UA_ReadNBytes,
UA_WriteNChars,
UA_EncapsulateNChars,
UA_WriteNBytes,
UA_WriteChar,
UA_WriteString,
UA_EnterSleep,
UA_WakeUp
};
#endif
/*
* Constant table for Fax & Data using no device.
*/
static const t_fd_functions dummy_fax_data = {
DUMMY_DEVICE,
dummy_fd_Init,
dummy_fd_Enable,
dummy_fd_SetComPar,
dummy_fd_SetBuffer,
dummy_fd_SetFlowCtrl,
dummy_fd_SetEscape,
dummy_fd_InpAvail,
dummy_fd_OutpAvail,
dummy_fd_EnterSleep,
dummy_fd_WakeUp,
dummy_fd_ReadData,
dummy_fd_WriteData,
dummy_fd_StopRec,
dummy_fd_StartRec,
dummy_fd_GetLineState,
dummy_fd_SetLineState,
dummy_fd_CheckXEmpty
};
/*
* Constant table for Fax & Data using UART Modem.
*/
static const t_fd_functions uart_modem_fax_data = {
UAF_UART_1,
UAF_Init,
UAF_Enable,
UAF_SetComPar,
UAF_SetBuffer,
UAF_SetFlowCtrl,
UAF_SetEscape,
UAF_InpAvail,
UAF_OutpAvail,
UAF_EnterSleep,
UAF_WakeUp,
UAF_ReadData,
UAF_WriteData,
UAF_StopRec,
UAF_StartRec,
UAF_GetLineState,
UAF_SetLineState,
UAF_CheckXEmpty
};
#if (CHIPSET == 12)
/*
* Constant table for Fax & Data using UART Modem2.
*/
static const t_fd_functions uart_modem2_fax_data = {
UAF_UART_2,
UAF_Init,
UAF_Enable,
UAF_SetComPar,
UAF_SetBuffer,
UAF_SetFlowCtrl,
UAF_SetEscape,
UAF_InpAvail,
UAF_OutpAvail,
UAF_EnterSleep,
UAF_WakeUp,
UAF_ReadData,
UAF_WriteData,
UAF_StopRec,
UAF_StartRec,
UAF_GetLineState,
UAF_SetLineState,
UAF_CheckXEmpty
};
#endif
#ifdef BLUETOOTH
/*
* Constant table for BT HCI using no device.
*/
static const t_bt_functions dummy_bt_hci = {
DUMMY_DEVICE,
dummy_bt_Init,
dummy_bt_Start,
dummy_bt_Stop,
dummy_bt_Kill,
dummy_bt_SetBaudrate,
dummy_bt_TransmitPacket
};
/*
* Constant table for BT HCI using UART IrDA.
*/
static const t_bt_functions uart_irda_bt_hci = {
UABT_UART_0,
hciu_init,
hciu_start,
hciu_stop,
hciu_kill,
hciu_set_baudrate,
hciu_transmit_packet
};
/*
* Constant table for BT HCI using UART Modem.
*/
static const t_bt_functions uart_modem_bt_hci = {
UABT_UART_1,
hciu_init,
hciu_start,
hciu_stop,
hciu_kill,
hciu_set_baudrate,
hciu_transmit_packet
};
#if (CHIPSET == 12)
/*
* Constant table for BT HCI using UART Modem2.
*/
static const t_bt_functions uart_modem2_bt_hci = {
UABT_UART_2,
hciu_init,
hciu_start,
hciu_stop,
hciu_kill,
hciu_set_baudrate,
hciu_transmit_packet
};
#endif
#endif
#if (defined BLUETOOTH && (CHIPSET != 12))
/*
* Structure used to store initialization parameters related to the AT-Cmd/F&D flow.
* Numbers of paramaters (in case of multiple calls) have been figured out from
* Condat AT-Command/F&D flow initialization.
*/
typedef struct s_data_flow {
/*
* Parameters related to SER_fd_SetComPar (2 calls)
*/
T_baudrate baudrate[2];
T_bitsPerCharacter bpc[2];
T_stopBits sb[2];
T_parity parity[2];
/*
* Parameters related to SER_fd_SetBuffer
*/
SYS_WORD16 bufSize;
SYS_WORD16 rxThreshold;
SYS_WORD16 txThreshold;
/*
* Parameters related to SER_fd_SetFlowCtrl (2 calls)
*/
T_flowCtrlMode fcMode[2];
SYS_UWORD8 XON[2];
SYS_UWORD8 XOFF[2];
/*
* Parameters related to SER_fd_SetEscape (2 calls)
*/
SYS_UWORD8 escChar[2];
SYS_UWORD16 guardPeriod[2];
/*
* Parameters related to SER_fd_SetLineState (4 calls)
*/
SYS_UWORD32 state[4];
SYS_UWORD32 mask[4];
/*
* Parameters related to SER_fd_ReadData
*/
T_suspendMode suspend_rd;
void (*readOutFunc) (SYS_BOOL cldFromIrq,
T_reInstMode *reInstall,
SYS_UWORD8 nsource,
SYS_UWORD8 *source[],
SYS_UWORD16 size[],
SYS_UWORD32 state);
/*
* Parameters related to SER_fd_WriteData
*/
T_suspendMode suspend_wr;
void (*writeInFunc) (SYS_BOOL cldFromIrq,
T_reInstMode *reInstall,
SYS_UWORD8 ndest,
SYS_UWORD8 *dest[],
SYS_UWORD16 size[]);
} t_data_flow;
#endif /* (defined BLUETOOTH && (CHIPSET != 12)) */
/*
* UART structure used for UARTs.
*/
typedef struct s_uart {
SYS_UWORD32 base_address;
SYS_BOOL device_used;
SYS_BOOL deep_sleep_set_up;
t_flow_type flow_type;
SYS_WORD16 flow_id;
void (*interrupt_handler) (int uart_id,
SYS_UWORD8 interrupt_status);
} t_uart;
static const t_tr_functions *tr_functions[SER_MAX_NUMBER_OF_FLOWS];
static const t_fd_functions *fd_functions;
#ifdef BLUETOOTH
static const t_bt_functions *bt_functions;
#if (CHIPSET != 12)
static SYS_BOOL uart_fd_initialized = 0;
#endif
#endif
static SYS_UWORD8 fd_buffer[FD_MAX_BUFFER_SIZE];
static SYS_BOOL fd_driver_enabled;
#if (defined BLUETOOTH && (CHIPSET != 12))
static t_data_flow data_flow_parameters;
#else
static SYS_WORD16 bufSize;
#endif
#if (defined BLUETOOTH && (CHIPSET != 12))
/*
* Variables used to count calls to SER_fd_XXX functions.
*/
static SYS_UWORD8 fd_UAF_SetBuffer = 0;
static SYS_UWORD8 fd_UAF_SetEscape = 0;
static SYS_UWORD8 fd_UAF_SetComPar = 0;
static SYS_UWORD8 fd_UAF_SetFlowCtrl = 0;
static SYS_UWORD8 fd_UAF_ReadData = 0;
static SYS_UWORD8 fd_UAF_SetLineState = 0;
static SYS_UWORD8 fd_UAF_WriteData = 0;
#endif
/*
* Timer used for duration control when UARTs are waked up by an interrupt or
* each time any new incoming characters are received; This timer prevents the
* system to enter deep sleep mode.
*/
static NU_TIMER uart_sleep_timer;
SYS_BOOL uart_sleep_timer_enabled;
/*
* HISR used to reset and restart the sleep timer from an UART use by a Trace
* flow in case of incoming characters.
*/
#define TIMER_HISR_PRIORITY (2)
#define TIMER_HISR_STACK_SIZE (512) /* Bytes. */
static NU_HISR timer_hisr_ctrl_block;
static char timer_hisr_stack[TIMER_HISR_STACK_SIZE];
/*
* For next arrays, it is supposed that NUMBER_OF_TR_UART, NUMBER_OF_FD_UART
* and NUMBER_OF_BT_UART have the same values.
* An index on an internal uart for trace, fax & data or bluetooth hci reffers
* to the same uart device.
*/
static t_uart int_uart[NUMBER_OF_TR_UART];
#if ((CHIPSET == 2) || (CHIPSET == 3))
static SYS_UWORD32 uart_spurious_interrupts;
#elif ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12))
static SYS_UWORD32 uart_modem_spurious_interrupts;
static SYS_UWORD32 uart_irda_spurious_interrupts;
#endif
#if (CHIPSET == 12)
static SYS_UWORD32 uart_modem2_spurious_interrupts;
#endif
static const SYS_UWORD32 uart_base_address[NUMBER_OF_TR_UART] =
{
MEM_UART_IRDA,
MEM_UART_MODEM
#if (CHIPSET == 12)
, MEM_UART_MODEM2
#endif
};
/*******************************************************************************
*
* dummy_tr_Init
*
* Purpose: No action.
*
* Parameters: See SER_tr_Init.
*
* Return: none
*
******************************************************************************/
static void
dummy_tr_Init (T_tr_UartId device,
T_tr_Baudrate baudrate,
void (callback_function (void)))
{
/*
* No action.
*/
}
/*******************************************************************************
*
* dummy_tr_ReadNChars
*
* Purpose: No action.
*
* Parameters: See SER_tr_ReadNChars.
*
* Return: 0
*
******************************************************************************/
static SYS_UWORD32
dummy_tr_ReadNChars (T_tr_UartId device,
char *buffer,
SYS_UWORD32 chars_to_read)
{
return (0);
}
/*******************************************************************************
*
* dummy_tr_ReadNBytes
*
* Purpose: No action.
*
* Parameters: See SER_tr_ReadNBytes.
*
* Return: 0
*
******************************************************************************/
static SYS_UWORD32
dummy_tr_ReadNBytes (T_tr_UartId device,
char *buffer,
SYS_UWORD32 chars_to_read,
SYS_BOOL *eof_detected)
{
return (0);
}
/*******************************************************************************
*
* dummy_tr_WriteNChars
*
* Purpose: No action.
*
* Parameters: See SER_tr_WriteNChars.
*
* Return: The number of character to write.
*
******************************************************************************/
static SYS_UWORD32
dummy_tr_WriteNChars (T_tr_UartId device,
char *buffer,
SYS_UWORD32 chars_to_write)
{
return (chars_to_write);
}
/*******************************************************************************
*
* dummy_tr_EncapsulateNChars
*
* Purpose: No action.
*
* Parameters: See SER_tr_EncapsulateNChars.
*
* Return: The number of character to write.
*
******************************************************************************/
static SYS_UWORD32
dummy_tr_EncapsulateNChars (T_tr_UartId device,
char *buffer,
SYS_UWORD32 chars_to_write)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -