R1UWaterRS485/app/UWater_DebugPrint.c

189 lines
4.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}
}
}