初始化仓库
This commit is contained in:
231
code/vofa_client.c
Normal file
231
code/vofa_client.c
Normal file
@@ -0,0 +1,231 @@
|
||||
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>: GB18030
|
||||
/*
|
||||
* vofa_client.c
|
||||
*
|
||||
* Created on: 2025<32><35>4<EFBFBD><34>4<EFBFBD><34>
|
||||
* Author: LHYe200
|
||||
*/
|
||||
|
||||
#include "vofa_client.h"
|
||||
|
||||
|
||||
float vofa_data[VOFA_RECEIVE_CH] = {0}; // <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float vofa_last_data = 0;
|
||||
uint8 vofa_last_ch = -1;
|
||||
uint8 vofa_receive_new_data[VOFA_RECEIVE_CH] = {0}; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>־λ
|
||||
uint8 rev_count = 0; // <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>
|
||||
uint8 rev_buffer[8] = {0}; // <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
uint8 failed_flag = 1;
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint8 send[4];
|
||||
float data;
|
||||
}float_data;
|
||||
|
||||
float_data fdata[VOFA_RECEIVE_CH + 1];
|
||||
uint8 endian_flag = 0; // <20><>С<EFBFBD>˱<EFBFBD>־λ
|
||||
uint8 tail[4] = {0x00, 0x00, 0x80, 0x7f};
|
||||
|
||||
static inline void Chage_BS(uint8 *data)
|
||||
{
|
||||
if(endian_flag)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 2; i++)
|
||||
{
|
||||
uint8 temp = data[i];
|
||||
data[i] = data[3 - i];
|
||||
data[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)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
memset(vofa_receive_new_data, 0, sizeof(vofa_receive_new_data)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>־λ
|
||||
}
|
||||
|
||||
|
||||
uint8 VOFA_Connection_Init()
|
||||
{
|
||||
#if VOFA_CLIENT_COM_INTERFACE == 0
|
||||
// ʹ<>ô<EFBFBD><C3B4><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
uart_init(VOFA_CLIENT_UART_PORT, VOFA_CLIENT_UART_BAUDRATE, VOFA_CLIENT_UART_RX, VOFA_CLIENT_UART_TX); // <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
uart_rx_interrupt(VOFA_CLIENT_UART_PORT, 1);
|
||||
#elif VOFA_CLIENT_COM_INTERFACE == 1
|
||||
// ʹ<><CAB9>WIFI SPIͨ<49><CDA8>
|
||||
uint32 failure_count = 0;
|
||||
while(wifi_spi_init(VOFA_CLIENT_WIFI_SSID, VOFA_CLIENT_WIFI_PASSWORD))
|
||||
{
|
||||
#if VOFA_CLIENT_WIFI_ENABLE_PRINTF
|
||||
printf("\r\n connect wifi failed. \r\n");
|
||||
#endif
|
||||
failure_count ++;
|
||||
if(failure_count > VOFA_CLIENT_WIFI_FAILURE_RETRY) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
system_delay_ms(100); // <20><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> <20>ȴ<EFBFBD> 100ms
|
||||
}
|
||||
|
||||
#if VOFA_CLIENT_WIFI_ENABLE_PRINTF
|
||||
printf("\r\n module version:%s",wifi_spi_version); // ģ<><C4A3><EFBFBD>̼<EFBFBD><CCBC>汾
|
||||
printf("\r\n module mac :%s",wifi_spi_mac_addr); // ģ<><C4A3> MAC <20><>Ϣ
|
||||
printf("\r\n module ip :%s",wifi_spi_ip_addr_port); // ģ<><C4A3> IP <20><>ַ
|
||||
#endif
|
||||
failure_count = 0;
|
||||
if(0 == WIFI_SPI_AUTO_CONNECT) // <20><><EFBFBD><EFBFBD>û<EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF> IP
|
||||
{
|
||||
while(wifi_spi_socket_connect( // <20><>ָ<EFBFBD><D6B8>Ŀ<EFBFBD><C4BF> IP <20>Ķ˿ڽ<CBBF><DABD><EFBFBD> TCP <20><><EFBFBD><EFBFBD>
|
||||
"TCP", // ָ<><D6B8>ʹ<EFBFBD><CAB9>TCP<43><50>ʽͨѶ
|
||||
VOFA_CLIENT_WIFI_TARGET_IP, // ָ<><D6B8>Զ<EFBFBD>˵<EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>д<EFBFBD><D0B4>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>IP<49><50>ַ
|
||||
VOFA_CLIENT_WIFI_TARGET_PORT, // ָ<><D6B8>Զ<EFBFBD>˵Ķ˿ںţ<DABA><C5A3><EFBFBD>д<EFBFBD><D0B4>λ<EFBFBD><CEBB><EFBFBD>Ķ˿ںţ<DABA>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>8080
|
||||
VOFA_CLIENT_WIFI_LOCAL_PORT)) // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ˿ں<CBBF>
|
||||
{
|
||||
#if VOFA_CLIENT_WIFI_ENABLE_PRINTF
|
||||
printf("\r\n socket connect failed. \r\n");
|
||||
#endif
|
||||
failure_count ++;
|
||||
if(failure_count > VOFA_CLIENT_WIFI_FAILURE_RETRY) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
system_delay_ms(100); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> <20>ȴ<EFBFBD> 100ms
|
||||
}
|
||||
}
|
||||
|
||||
#elif VOFA_CLIENT_COM_INTERFACE == 2
|
||||
// <20><>д<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ӿڵij<DAB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#endif
|
||||
failed_flag = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
uint8 VOFA_Client_Init()
|
||||
{
|
||||
VOFA_Data_Init();
|
||||
return VOFA_Connection_Init();
|
||||
}
|
||||
|
||||
void VOFA_Sender(uint8 *p, uint32 len)
|
||||
{
|
||||
if(failed_flag) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD><F2B2BBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
return;
|
||||
}
|
||||
#if VOFA_CLIENT_COM_INTERFACE == 0
|
||||
uart_write_buffer(VOFA_CLIENT_UART_PORT,p,len);
|
||||
#elif VOFA_CLIENT_COM_INTERFACE == 1
|
||||
wifi_spi_send_buffer(p,len);
|
||||
#elif VOFA_CLIENT_COM_INTERFACE == 2
|
||||
// <20><>д<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ӿڵķ<DAB5><C4B7>ʹ<EFBFBD><CDB4><EFBFBD>
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void VOFA_Receiver_Callback()
|
||||
{
|
||||
if(failed_flag) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD><F2B2BBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
return;
|
||||
}
|
||||
uint8 rev_tmp = 0;
|
||||
uint8 tmp[4] = {0};
|
||||
#if VOFA_CLIENT_COM_INTERFACE == 0
|
||||
while(uart_query_byte(VOFA_CLIENT_UART_PORT, &rev_tmp))
|
||||
#elif VOFA_CLIENT_COM_INTERFACE == 1
|
||||
while(wifi_spi_read_buffer(&rev_tmp,1))
|
||||
#elif VOFA_CLIENT_COM_INTERFACE == 2
|
||||
// <20><>д<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ӿڵĽ<DAB5><C4BD>մ<EFBFBD><D5B4><EFBFBD>,ÿ<>λ<EFBFBD>ȡһ<C8A1><D2BB><EFBFBD>ֽ<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
|
||||
#endif
|
||||
{
|
||||
if(rev_tmp == 0xA6 && rev_buffer[0] != 0xA6) // <20>ж<EFBFBD>֡ͷ
|
||||
{
|
||||
rev_count = 0; // δ<>յ<EFBFBD>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD>
|
||||
}
|
||||
rev_buffer[rev_count++] = rev_tmp; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(rev_count >= 7) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>յ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(rev_buffer[0] == 0xA6) // <20>ж<EFBFBD>֡ͷ<D6A1>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
if(rev_buffer[1] == rev_buffer[6] && rev_buffer[1] < VOFA_RECEIVE_CH)
|
||||
{
|
||||
tmp[0] = rev_buffer[2]; // <20><><EFBFBD>ֽ<EFBFBD>
|
||||
tmp[1] = rev_buffer[3]; // <20><><EFBFBD>ֽ<EFBFBD>
|
||||
tmp[2] = rev_buffer[4]; // <20><><EFBFBD>ֽ<EFBFBD>
|
||||
tmp[3] = rev_buffer[5]; // <20><><EFBFBD>ֽ<EFBFBD>
|
||||
// Chage_BS(tmp);
|
||||
vofa_last_ch = rev_buffer[1]; // <20><><EFBFBD><EFBFBD><EFBFBD>ϴν<CFB4><CEBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
memcpy(&vofa_data[vofa_last_ch], tmp, 4); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
vofa_receive_new_data[rev_buffer[1]] = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>־λ<D6BE><CEBB>λ
|
||||
vofa_last_data = vofa_data[vofa_last_ch]; // <20><><EFBFBD><EFBFBD><EFBFBD>ϴν<CFB4><CEBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
rev_count = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
rev_buffer[0] = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void VOFA_Set_JustFloat_Data(int CH, float data)
|
||||
{
|
||||
fdata[CH].data = data;
|
||||
// Chage_BS(fdata[CH].send);
|
||||
}
|
||||
|
||||
void VOFA_Set_JustFloat_Datas_From_Start(int num,...)
|
||||
{
|
||||
va_list Valist;
|
||||
int i = 0;
|
||||
va_start(Valist, num);
|
||||
|
||||
for(i = 0; i < num; ++i)
|
||||
{
|
||||
fdata[i].data = va_arg(Valist, float);
|
||||
Chage_BS(fdata[i].send);
|
||||
}
|
||||
va_end(Valist);
|
||||
}
|
||||
|
||||
void VOFA_Send_Datas(int num)
|
||||
{
|
||||
uint8 *p = fdata[0].send;
|
||||
memcpy(fdata[num].send, tail, sizeof(tail));
|
||||
VOFA_Sender(p, 4 * (num + 1));
|
||||
}
|
||||
|
||||
|
||||
void VOFA_Send_JustFloat_Image(int IMG_ID, int IMG_WIDTH, int IMG_HEIGHT,int IMG_DATA_SIZE, ImgFormat IMG_FORMAT,uint8* IMG_DATA)
|
||||
{
|
||||
int preFrame[7] = {
|
||||
IMG_ID,
|
||||
IMG_DATA_SIZE,
|
||||
IMG_WIDTH,
|
||||
IMG_HEIGHT,
|
||||
(int)IMG_FORMAT,
|
||||
0x7F800000,
|
||||
0x7F800000
|
||||
};
|
||||
uint8 preFrameData[28] = {0};
|
||||
memcpy(preFrameData, preFrame, sizeof(int)*7); // <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
VOFA_Sender(preFrameData, sizeof(int)*7); // <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
VOFA_Sender(IMG_DATA, IMG_DATA_SIZE); // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user