/*
 * msp_LeiSai_Motor.c
 *
 *  Created on: Apr 12, 2024
 *      Author: Administrator
 */

#include "MSP/msp_LeiSai_Motor.h"
#include "MSP/msp_Modbus_crc16.h"

UART_HandleTypeDef* Huart_LeiSai;
//
SP_MSP_LeiSai_MotorParameters* M_LeiSai;
void  GF_LeiSai_Unscramble_Callback();
uint8_t LeiSai_stas[4];
uint8_t Num_Motor_LS ;
int  LeiSai_Quit_Falg=1;


uint8_t GF_MSP_LeiSai_Motor_Init(UART_HandleTypeDef* huart,SP_MSP_LeiSai_MotorParameters *_Bat_LeiSai,uint8_t Num_Motor_p)
{
	Huart_LeiSai=huart;
	GF_BSP_Interrupt_Add_CallBack(DF_BSP_InterCall_RS485_3_RxCpltCallback, GF_LeiSai_Unscramble_Callback);//这句话的理解有问题
	Num_Motor_LS = Num_Motor_p;
	M_LeiSai = _Bat_LeiSai;
	return 1;
}

void  GF_LeiSai_Unscramble_Callback()
{
}


//#define DF_MSP_LSMotor_SpeedMode 6200
//#define DF_MSP_LSMotor_SpeedValue 6203
//#define DF_MSP_LSMotor_Poweron 6002



uint8_t LSMotor_Index=0;
int LSMotor_State=0;

int Run_Mode_Count;

int Motor_Run_Mode=6666;

int Motor_Run_Mode_N1=0;
int16_t Target_Value;
int16_t Target_Value_Last=0;

void GF_MSP_LSMotor_Control_Timer()
{

	int Motor_Run_Mode=0;
	if(Run_Mode_Count>=100)
	{
		 Motor_Run_Mode=M_LeiSai[LSMotor_Index].Run_Mode;
	}

	uint8_t Motor_ID=M_LeiSai[LSMotor_Index].MotorID;

	uint8_t Order[8];


	unsigned short CRC_Value;
	switch( LSMotor_State)
	{
	case 0: case 15:
				switch( Motor_Run_Mode)
				{
				case 6203:
				{
						switch( Motor_Run_Mode_N1)
						{
						case 0:
							Order[0]=Motor_ID;
							Order[1]=0X06;
							Order[2]=0X62;
							Order[3]=0X03;
							Target_Value=(int16_t )M_LeiSai[LSMotor_Index].Target_Velcity;
							Order[4]=(uint8_t)(Target_Value>>8);
							Order[5]=(uint8_t)Target_Value;

							CRC_Value=ModBusCRC16(Order,6); // CRC校验

							Order[6]= (uint8_t)CRC_Value;
							Order[7]= (uint8_t)( CRC_Value>>8);
							GF_BSP_UART_Transmit(3, Order, 8);

							Target_Value_Last=M_LeiSai[LSMotor_Index].Target_Velcity_Last;
	//						if((Target_Value)!=(Target_Value_Last)	)
	//						{
	//
	//						}
							Motor_Run_Mode_N1=1;
							break;
						case 1:
							Order[0]=Motor_ID;
							Order[1]=0X06;
							Order[2]=0X60;
							Order[3]=0X02;
							Order[4]=0X00;
							Order[5]=0X10;

							CRC_Value=ModBusCRC16(Order,6); // CRC校验
							Order[6]= (uint8_t)CRC_Value;
							Order[7]= (uint8_t)( CRC_Value>>8);
							GF_BSP_UART_Transmit(3, Order, 8);//这句话的关联有问题

							M_LeiSai[LSMotor_Index].Target_Velcity_Last=M_LeiSai[LSMotor_Index].Target_Velcity;
							Motor_Run_Mode_N1=0;
						break;
						}
				}
				case 6688://预留位置环//电流环//掉使能等模式

					break;
				default:
					if(Run_Mode_Count<100)
					{
						Run_Mode_Count++;
						Order[0]=Motor_ID;
						Order[1]=0X06;
						Order[2]=0X62;
						Order[3]=0X00;
						Order[4]=0X00;
						Order[5]=0X02;
						CRC_Value=ModBusCRC16(Order,6); // CRC校验
						Order[6]= (uint8_t)CRC_Value;
						Order[7]= (uint8_t)( CRC_Value>>8);
						GF_BSP_UART_Transmit(3, Order, 8);//
					}
					break;
					}
			break;

		case 29:
			LSMotor_Index++;
			if(LSMotor_Index >= Num_Motor_LS)
			{
				LSMotor_Index=0;
			}
			LSMotor_State=-1;
			Motor_Run_Mode_N1=0;
			break;

		default:
			break;
	}
	LSMotor_State++;
}





//						if((Target_Value)!=(Target_Value_Last[LSMotor_Index]))
//						{
//							Motor_Run_Mode_N1=1;
//						}
//						else if(Target_Value==0)
//						{
//							Motor_Run_Mode_N1=0;
//						}
//						Target_Value_Last[LSMotor_Index]=Target_Value;



//				case 6015:
//					Order[0]=Motor_ID;
//					Order[1]=0X06;
//					Order[2]=0X60;
//					Order[3]=0X02;
//					Order[4]=0X00;
//					Order[5]=0X10;
//
//					CRC_Value=ModBusCRC16(Order,6); // CRC校验
//					Order[6]= (uint8_t)CRC_Value;
//					Order[7]= (uint8_t)( CRC_Value>>8);
//					GF_BSP_UART_Transmit(3, Order, 8);//这句话的关联有问题
//					Motor_Run_Mode=6015;
//					break;










