| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #include "soft_port_uart4.h"
- #include "control_attitude.h"
- #include "control_rate.h"
- #include "data_save.h"
- #include "drv_usart.h"
- #include "my_math.h"
- #include "params.h"
- #include "payload.h"
- #include "soft_gs.h"
- #include "soft_imu.h"
- #include "soft_time.h"
- #include "soft_usharpradar.h"
- #include "string.h"
- #include "ver_config.h"
- struct _uart_device *payload_uart = NULL;
- // 选择串口 4 设备
- Port4PayloadType port4_payload_type = PORT4_PAYLOAD_NONE;
- // 串口 4 接收到的数据
- struct port4_rx_data port4_data;
- // 串口 4 吊舱
- static struct payload_diaocang _port4_payload_diaocang = {0};
- // 串口 4 遥控遥测
- struct GCS_Link p4_gcs_link =
- {
- .link_protocal_type =
- GCS_LINK_PROTOCAL_TYPE_VKLINK, /* 默认使用 VKLINK 协议 */
- .vklink_protocal_version = 300, /* 默认 vklink v300 版本 */
- .link_status = COMP_NOEXIST, /* 默认状态是未连接地面站 */
- };
- struct payload_diaocang *port4_get_payload(void)
- {
- return &_port4_payload_diaocang;
- }
- // @brief 串口 4 初始化
- void port_uart4_initial(void)
- {
- // port4_payload_type = params_get_value(ParamNum_Port4Multiplexing);
- port4_payload_type = PORT4_YUNYIV8;
- memset(&_port4_payload_diaocang, 0, sizeof(_port4_payload_diaocang));
- _port4_payload_diaocang._link_status = COMP_NOEXIST;
- uint32_t baudrate = 115200;
- switch (port4_payload_type)
- {
- case PORT4_PAYLOAD_DATALINK:
- p4_gcs_link.uart = uart_find("uart4");
- baudrate = 115200;
- break;
- break;
- default:
- baudrate = 115200;
- break;
- }
- // uart4_init(baudrate);
- payload_uart = uart_find("uart4");
- if (payload_uart)
- {
- payload_uart->ops->init(baudrate);
- }
- }
- // @brief 获取串口 4 复用功能
- Port4PayloadType port4_get_af_config(void) { return port4_payload_type; }
- /**
- * @brief 地面站串口中断发送数据
- *
- * @param data
- * @param len
- * @return uint32_t
- */
- uint32_t payload_port_tx_data(const uint8_t *data, uint32_t len)
- {
- uint32_t ret = 0;
- if (payload_uart)
- {
- ret = payload_uart->ops->write(data, len);
- }
- return ret;
- }
- void Port4_Service(void)
- {
- // static uint32_t lastSendMsgTime = 0;
- uint8_t ch = 0;
- switch (port4_payload_type)
- {
- case PORT4_PAYLOAD_NONE:
- while (payload_uart->ops->read(&ch, 1) == 1)
- {
- port4_data.data[port4_data.len] = ch;
- port4_data.len++;
- if (port4_data.len > sizeof(port4_data.data))
- break;
- }
- if (port4_data.len)
- {
- gs_send_payload_msg(&gcs_link, port4_data.data, port4_data.len);
- port4_data.len = 0;
- }
- break;
- case PORT4_PAYLOAD_DATALINK:
- gs_receive_msg_poll(&p4_gcs_link);
- gs_send_msg_poll(&p4_gcs_link);
- break;
- default:
- break;
- }
- }
|