#include "vofa_client.h" #include "fifo.h" #include 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=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= 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; }