224 lines
6.0 KiB
C
224 lines
6.0 KiB
C
#include "vofa_client.h"
|
|
#include "fifo.h"
|
|
#include <stdarg.h>
|
|
|
|
float vofa_data[VOFA_RECEIVE_CH] = {0}; // 记录接收数据
|
|
float vofa_last_data = 0;
|
|
uint8 vofa_last_ch = -1;
|
|
uint8 vofa_receive_new_data[VOFA_RECEIVE_CH] = {0}; // 接收新数据标志位
|
|
uint8 rev_count = 0; // 接收计数
|
|
uint8 rev_buffer[8] = {0}; // 接收缓冲区
|
|
|
|
uint8 failed_flag = 1;
|
|
|
|
|
|
float_data fdata[VOFA_RECEIVE_CH + 1];
|
|
// uint8 endian_flag = 0; // 大小端标志位
|
|
uint8 tail[4] = {0x00, 0x00, 0x80, 0x7f};
|
|
|
|
// static inline void Chage_BS(uint8 *dataa)
|
|
// {
|
|
// if(endian_flag)
|
|
// {
|
|
// return;
|
|
// }
|
|
|
|
// for(int i = 0; i < 2; i++)
|
|
// {
|
|
// uint8 temp = dataa[i];
|
|
// dataa[i] = dataa[3 - i];
|
|
// dataa[3 - i] = temp;
|
|
// }
|
|
// }
|
|
|
|
void VOFA_Data_Init()
|
|
{
|
|
// unsigned int x = 1;
|
|
// uint8 *endian_check = (uint8*)&x;
|
|
// if(endian_check[0] != 1)
|
|
// {
|
|
// endian_flag = 0;
|
|
// }
|
|
// printf("flag:%d\n\r",endian_flag);
|
|
memcpy(fdata[VOFA_SEND_CH].send, tail, sizeof(tail));
|
|
|
|
memset(vofa_data, 0, sizeof(vofa_data)); // 清除接收数据
|
|
memset(vofa_receive_new_data, 0, sizeof(vofa_receive_new_data)); // 清除接收新数据标志位
|
|
}
|
|
|
|
|
|
uint8 VOFA_Connection_Init()
|
|
{
|
|
#if VOFA_CLIENT_COM_INTERFACE == 0
|
|
// 使用串口通信
|
|
uart_init(VOFA_CLIENT_UART_PORT, VOFA_CLIENT_UART_RX, VOFA_CLIENT_UART_TX, VOFA_CLIENT_UART_BAUDRATE, VOFA_CLIENT_UART_TIM); // 串口初始化
|
|
#elif VOFA_CLIENT_COM_INTERFACE == 1
|
|
// 使用USB-CDC通信
|
|
// 初始化放clock_init.c里了
|
|
|
|
|
|
#elif VOFA_CLIENT_COM_INTERFACE == 2
|
|
// 填写自定义接口的初始化代码
|
|
|
|
#endif
|
|
failed_flag = 0;
|
|
return 1;
|
|
}
|
|
|
|
|
|
uint8 VOFA_Client_Init()
|
|
{
|
|
VOFA_Data_Init();
|
|
return VOFA_Connection_Init();
|
|
}
|
|
|
|
void VOFA_Sender(uint8 *p, uint32 len)
|
|
{
|
|
uint8 c_count = 0;
|
|
uint32 t_count = 0;
|
|
uint8 send_buff[60] = {0};
|
|
if(failed_flag) // 如果初始化失败则不发送数据
|
|
{
|
|
return;
|
|
}
|
|
#if VOFA_CLIENT_COM_INTERFACE == 0
|
|
uart_write_buffer(VOFA_CLIENT_UART_PORT,p,len);
|
|
#elif VOFA_CLIENT_COM_INTERFACE == 1
|
|
while(t_count<len)
|
|
{
|
|
send_buff[c_count++] = p[t_count++];
|
|
if(c_count>=60 || t_count>=len)
|
|
{
|
|
USB_SendData(send_buff,c_count);
|
|
c_count = 0;
|
|
memset(send_buff,0,sizeof(send_buff));
|
|
}
|
|
}
|
|
#elif VOFA_CLIENT_COM_INTERFACE == 2
|
|
// 填写自定义接口的发送代码
|
|
|
|
#endif
|
|
}
|
|
|
|
void VOFA_Receiver_Callback()
|
|
{
|
|
uint8 rev_tmp = 0;
|
|
uint8 tmp[4] = {0};
|
|
uint8 i = 0;
|
|
if(failed_flag) // 如果初始化失败则不发送数据
|
|
{
|
|
return;
|
|
}
|
|
|
|
#if VOFA_CLIENT_COM_INTERFACE == 0
|
|
// while(uart_query_byte(VOFA_CLIENT_UART_PORT, &rev_tmp))
|
|
// {
|
|
#elif VOFA_CLIENT_COM_INTERFACE == 1
|
|
for(i=0;i<OutNumber;i++)
|
|
{
|
|
rev_tmp=UsbOutBuffer[i];
|
|
#elif VOFA_CLIENT_COM_INTERFACE == 2
|
|
// 填写自定义接口的接收代码,每次获取一个字节循环进行处理
|
|
#endif
|
|
if(rev_tmp == 0xA6 && rev_buffer[0] != 0xA6) // 判断帧头
|
|
{
|
|
rev_count = 0; // 未收到帧头或者未正确包含帧头则重新接收
|
|
}
|
|
rev_buffer[rev_count++] = rev_tmp; // 保存数据
|
|
if(rev_count >= 7) // 判断是否接收到指定数量的数据
|
|
{
|
|
if(rev_buffer[0] == 0xA6) // 判断帧头是否正确
|
|
{
|
|
if(rev_buffer[1] == rev_buffer[6] && rev_buffer[1] < VOFA_RECEIVE_CH)
|
|
{
|
|
tmp[3] = rev_buffer[2]; // 低字节
|
|
tmp[2] = rev_buffer[3]; // 高字节
|
|
tmp[1] = rev_buffer[4]; // 低字节
|
|
tmp[0] = rev_buffer[5]; // 高字节
|
|
// Chage_BS(tmp);
|
|
vofa_last_ch = rev_buffer[1]; // 保存上次接收通道
|
|
memcpy(&vofa_data[vofa_last_ch], tmp, 4); // 拷贝数据
|
|
vofa_receive_new_data[rev_buffer[1]] = 1; // 接收新数据标志位置位
|
|
vofa_last_data = vofa_data[vofa_last_ch]; // 保存上次接收数据
|
|
}
|
|
}
|
|
rev_count = 0; // 清除缓冲区计数值
|
|
rev_buffer[0] = 0; // 清除缓冲区数据
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void VOFA_Set_JustFloat_Data(int CH, float dataa)
|
|
{
|
|
int j = 0;
|
|
fdata[CH].fdata = dataa;
|
|
for(j = 0; j < 2; j++)
|
|
{
|
|
uint8 temp = fdata[CH].send[j];
|
|
fdata[CH].send[j] = fdata[CH].send[3 - j];
|
|
fdata[CH].send[3 - j] = temp;
|
|
}
|
|
// Chage_BS(fdata[CH].send);
|
|
}
|
|
|
|
void VOFA_Set_JustFloat_Datas_From_Start(int num,...)
|
|
{
|
|
va_list Valist;
|
|
int i = 0,j = 0;
|
|
va_start(Valist, num);
|
|
|
|
for(i = 0; i < num; ++i)
|
|
{
|
|
fdata[i].fdata = va_arg(Valist, float);
|
|
for(j = 0; j < 2; j++)
|
|
{
|
|
uint8 temp = fdata[i].send[j];
|
|
fdata[i].send[j] = fdata[i].send[3 - j];
|
|
fdata[i].send[3 - j] = temp;
|
|
}
|
|
// Chage_BS(fdata[i].send);
|
|
}
|
|
va_end(Valist);
|
|
}
|
|
|
|
void VOFA_Send_JustFloat_Image(uint32 IMG_ID, uint32 IMG_WIDTH, uint32 IMG_HEIGHT,uint32 IMG_DATA_SIZE, ImgFormat IMG_FORMAT,uint8* IMG_DATA)
|
|
{
|
|
uint32 preFrame[7];
|
|
uint8 preFrameData[28] = {0};
|
|
preFrame[0] = IMG_ID;
|
|
preFrame[1] = IMG_DATA_SIZE;
|
|
preFrame[2] = IMG_WIDTH;
|
|
preFrame[3] = IMG_HEIGHT;
|
|
preFrame[4] = (uint32)IMG_FORMAT;
|
|
preFrame[5] = 0x7F800000;
|
|
preFrame[6] = 0x7F800000;
|
|
// = {
|
|
// IMG_ID,
|
|
// IMG_DATA_SIZE,
|
|
// IMG_WIDTH,
|
|
// IMG_HEIGHT,
|
|
// (int)IMG_FORMAT,
|
|
// 0x7F800000,
|
|
// 0x7F800000
|
|
// };
|
|
|
|
memcpy(preFrameData, preFrame, sizeof(uint32)*7); // 拷贝预处理数据
|
|
VOFA_Sender(preFrameData, sizeof(uint32)*7); // 发送预处理数据
|
|
VOFA_Sender(IMG_DATA, IMG_DATA_SIZE); // 发送图像数据
|
|
}
|
|
|
|
void VOFA_Send_Datas(int num)
|
|
{
|
|
uint8 *p = fdata[0].send;
|
|
memcpy(fdata[num].send, tail, sizeof(tail));
|
|
VOFA_Sender(p, 4 * (num + 1));
|
|
}
|
|
|
|
BOOL usb_OUT_callback()
|
|
{
|
|
VOFA_Receiver_Callback();
|
|
|
|
return 1;
|
|
} |