/* * 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 #include #include #include "bsp_Log.h" #include "msp_Steering_Engine.h" #include "BHBF_ROBOT.h" #include "bsp_cpu_flash.h" #include #include #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 } }