189 lines
4.2 KiB
C
189 lines
4.2 KiB
C
#include "type.h"
|
||
#include "UWater_uart_driver.h"
|
||
#include "UWater_DebugPrint.h"
|
||
#include "UWater_frame_app.h"
|
||
|
||
static u8 wait_for_print_buf[PRINT_BUF_SIZE]; //待打印缓冲区
|
||
static u8 print_nb_data_flag = FALSE;
|
||
static u8 print_program_data_flag = FALSE;
|
||
static PRINT_STRUCT printf_struct;
|
||
static u8 print_data_state=PRINT_DATA_S0;
|
||
static u8 print_temp_data;
|
||
static u16 print_temp_save_len;
|
||
//启动NB数据打印
|
||
void OpenPrintNbDataSwitch(void)
|
||
{
|
||
FrameSetMsgApp(MsgOpenIr);
|
||
print_nb_data_flag = TRUE;
|
||
}
|
||
|
||
//关闭NB数据打印
|
||
void ClosePrintNbDataSwitch(void)
|
||
{
|
||
print_nb_data_flag = FALSE;
|
||
}
|
||
u8 GetPrintNbDataSwitch(void)
|
||
{
|
||
return print_nb_data_flag;
|
||
}
|
||
//启动程序数据打印
|
||
void OpenPrintProgramDataSwitch(void)
|
||
{
|
||
print_program_data_flag = TRUE;
|
||
}
|
||
|
||
//关闭程序数据打印
|
||
void ClosePrintProgramDataSwitch(void)
|
||
{
|
||
print_program_data_flag = FALSE;
|
||
}
|
||
|
||
/***********************启动打印数据********************************
|
||
Function: void PrintNbData (u8 *data_src, u16 len)
|
||
Description: 打印数据
|
||
Input: data_src 数据来源指针 ,len 数据长度
|
||
****************************************************************/
|
||
void PrintNbData(u8 *data_src, u16 len)
|
||
{
|
||
if(print_nb_data_flag)
|
||
{
|
||
while(len--)
|
||
{
|
||
print_temp_save_len = printf_struct.saved_data_len;//把写指针保存起来
|
||
print_temp_save_len++;
|
||
if (print_temp_save_len >= PRINT_BUF_SIZE)
|
||
print_temp_save_len = 0;
|
||
if (print_temp_save_len != printf_struct.printf_data_len)
|
||
{
|
||
wait_for_print_buf[printf_struct.saved_data_len] = *data_src++;//将数据写入内存缓冲区
|
||
printf_struct.saved_data_len = print_temp_save_len;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
int Print_Get_Rx_Num(void)
|
||
{
|
||
if (printf_struct.saved_data_len >= printf_struct.printf_data_len)
|
||
return (printf_struct.saved_data_len - printf_struct.printf_data_len);
|
||
else
|
||
return (printf_struct.saved_data_len + PRINT_BUF_SIZE - printf_struct.printf_data_len);
|
||
}
|
||
unsigned char Print_Get_Rx_Data(void)
|
||
{
|
||
unsigned char data;
|
||
|
||
data = wait_for_print_buf[printf_struct.printf_data_len];
|
||
printf_struct.printf_data_len++;
|
||
if (printf_struct.printf_data_len >= PRINT_BUF_SIZE)
|
||
printf_struct.printf_data_len = 0;
|
||
return data;
|
||
}
|
||
/***********************启动打印数据********************************
|
||
Function: void PrintProgramData (u8 *data_src, u16 len)
|
||
Description: 打印数据
|
||
Input: data_src 数据来源指针 ,len 数据长度
|
||
****************************************************************/
|
||
void PrintProgramData(u8 *data_src, u16 len)
|
||
{
|
||
if(print_program_data_flag)
|
||
{
|
||
u16 i;
|
||
if(len < PRINT_BUF_SIZE)
|
||
{
|
||
for(i = 0; i < len; i++)
|
||
{
|
||
wait_for_print_buf[printf_struct.saved_data_len++] = *(data_src + i);
|
||
printf_struct.saved_data_len = printf_struct.saved_data_len % PRINT_BUF_SIZE;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//打印状态机是否空闲
|
||
u8 PrintDataMachineIfIdle(void)
|
||
{
|
||
if(PRINT_DATA_S0 == print_data_state)
|
||
{
|
||
return TASK_IDLE;
|
||
}
|
||
else
|
||
{
|
||
return TASK_BUSY;
|
||
}
|
||
}
|
||
|
||
/*******************************打印数据状态机******************************
|
||
Function: void PrintDataMachine(void)
|
||
Description: 打印数据状态机
|
||
***************************************************************************/
|
||
void PrintDataMachine(void)
|
||
{
|
||
switch(print_data_state)
|
||
{
|
||
case(PRINT_DATA_S0):
|
||
{
|
||
if(print_nb_data_flag)
|
||
{
|
||
if(Print_Get_Rx_Num()>0)
|
||
{
|
||
print_temp_data = Print_Get_Rx_Data();
|
||
print_data_state = PRINT_DATA_S1;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case(PRINT_DATA_S1):
|
||
{
|
||
if(TASK_IDLE == UartIfIdle(IR_UART_COM))
|
||
{
|
||
UartSend(IR_UART_COM,1,&print_temp_data,&printf_struct.send_msg);
|
||
print_data_state = PRINT_DATA_S2;
|
||
}
|
||
}
|
||
break;
|
||
case(PRINT_DATA_S2):
|
||
{
|
||
if(Print_Get_Rx_Num()>0)
|
||
{
|
||
print_temp_data = Print_Get_Rx_Data();
|
||
print_data_state = PRINT_DATA_S1;
|
||
}
|
||
else
|
||
{
|
||
print_data_state = PRINT_DATA_S0;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case(PRINT_DATA_DEFAULT):
|
||
{
|
||
print_data_state = PRINT_DATA_S0;
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
print_data_state = PRINT_DATA_S0;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|