公司代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

111 lines
3.0 KiB

/*
* bsp_desulfurizer_handler.c
*
* Created on: Jul 29, 2024
* Author: akeguo
*/
#include "msp_WH_LTE_7S0.h"
#include "msp_Angle_Encoder_YL159.h"
#include "pb_decode.h"
#include "pb_encode.h"
#include "bsp_include.h"
#include "pb.h"
#include "bsp_Desulfurizer.pb.h"
#include "bsp_Cmd.pb.h"
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include "bsp_Log.h"
#include "msp_Steering_Engine.h"
#include "BHBF_ROBOT.h"
#include "bsp_cpu_flash.h"
#include <bsp_qspi_w25q128.h>
#include <bsp_UpperComputer_Handler.h>
#include "bsp_decode_command.h"
void decode_command_from_computer(uint8_t *buffer, uint16_t length);
struct UARTHandler *desulfurizer_message_UART_Handler;
void upper_Computer_UART_Handler_intialize(struct UARTHandler *Handler)
{
//LOG("desulfurizer_message_UART_Handler_intialize");
desulfurizer_message_UART_Handler = Handler;
desulfurizer_message_UART_Handler->UART_Decode =
decode_command_from_computer; //indicate that there is no need to listen
//desulfurizer_message_UART_Handler->DispacherCallPeriod=200;
//desulfurizer_message_UART_Handler->Add_Dispatcher_List(desulfurizer_message_UART_Handler,steering_set_angle);
}
void send_data_to_upper_computer(double Angle, double WireLength,
double Thickness, char IsFittingPoint,char isMqtt,struct UARTHandler *send_UART_Handler)
{
LOG("send collected data to computer");
DesulfurizerMessage _desulfurizer = DesulfurizerMessage_init_default;
pb_ostream_t output_stream =
{ 0 };
_desulfurizer.Angle = Angle;
_desulfurizer.WireLength = WireLength;
_desulfurizer.Thickness = Thickness;
_desulfurizer.IsFittingPoint = IsFittingPoint;
char buf[1024];
output_stream = pb_ostream_from_buffer(buf, sizeof(buf));
pb_encode(&output_stream, DesulfurizerMessage_fields, &_desulfurizer); //encode to buffer
Cmd send_Cmd = Cmd_init_default;
//将数据拷贝到Command中
send_Cmd.CommadNum = 5;
send_Cmd.Buff_Data_Length = output_stream.bytes_written;
//拷贝数据到send_Cmd.Buff_Data中
memcpy(send_Cmd.Buff_Data, buf, send_Cmd.Buff_Data_Length);
pb_ostream_t Cmd_out_stream =
{ 0 };
if(isMqtt==1)
{
Cmd_out_stream = pb_ostream_from_buffer(
&send_UART_Handler->Tx_Buf[2],
sizeof(desulfurizer_message_UART_Handler->Tx_Buf)-2);
pb_encode(&Cmd_out_stream, Cmd_fields, &send_Cmd); //encode to buffer
send_UART_Handler->Tx_Buf[0]='3';
send_UART_Handler->Tx_Buf[1]=',';
send_UART_Handler->TxCount = Cmd_out_stream.bytes_written+2;
send_UART_Handler->UART_Tx(
send_UART_Handler);
}
else
{
Cmd_out_stream = pb_ostream_from_buffer(
send_UART_Handler->Tx_Buf,
sizeof(send_UART_Handler->Tx_Buf));
pb_encode(&Cmd_out_stream, Cmd_fields, &send_Cmd); //encode to buffer
send_UART_Handler->TxCount = Cmd_out_stream.bytes_written;
send_UART_Handler->UART_Tx(
send_UART_Handler);
}
}
void decode_command_from_computer(uint8_t *buffer, uint16_t length)
{
if(*buffer==0x55 && *(buffer+1)==0x55 && length>=3)
{
decode_command_and_feedback(buffer+2, length-2, 0,
desulfurizer_message_UART_Handler);//0代表非mqtt
}
}