|
@@ -32,6 +32,7 @@ GiantStandardRemoteFrameID_Struct_t stGiantStandardRemoteFrameID_rx;
|
|
|
GiantControlParams_Struct_t stGiantControlParams;
|
|
|
CANFrame_Info_Struct_t stCANFrame_InfoRx = {MAXFRAME_SIZE, 0, 0, 0};
|
|
|
CAN_ReceiveFrame_Struct_t stCAN_ReceiveFrame_Buf_Rx[MAXFRAME_SIZE];
|
|
|
+UBYTE HW_psn[3];
|
|
|
/***************************************************************
|
|
|
Function:
|
|
|
Description:
|
|
@@ -56,6 +57,26 @@ void giant_Init(void)
|
|
|
UWORD app_data[2] = {0xAAAA, 0x5555};//标记为有app
|
|
|
FLASH_voWriteMoreData(APPLICATIONSTATUS_ADDRESS, app_data, 2);
|
|
|
}
|
|
|
+
|
|
|
+ ULONG tmpdata;
|
|
|
+ if(MC_VerInfo.ProductLabel[7] > '9')
|
|
|
+ {
|
|
|
+ tmpdata = (MC_VerInfo.ProductLabel[7]-0x58+10)*1000000 + (MC_VerInfo.ProductLabel[8]-0x30)*100000
|
|
|
+ +(MC_VerInfo.ProductLabel[9]-0x30)*10000+(MC_VerInfo.ProductLabel[12]-0x30)*1000+(MC_VerInfo.ProductLabel[13]-0x30)*100
|
|
|
+ +(MC_VerInfo.ProductLabel[14]-0x30)*10+(MC_VerInfo.ProductLabel[15]-0x30);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ tmpdata = (MC_VerInfo.ProductLabel[7]-0x30)*1000000 + (MC_VerInfo.ProductLabel[8]-0x30)*100000
|
|
|
+ +(MC_VerInfo.ProductLabel[9]-0x30)*10000+(MC_VerInfo.ProductLabel[12]-0x30)*1000+(MC_VerInfo.ProductLabel[13]-0x30)*100
|
|
|
+ +(MC_VerInfo.ProductLabel[14]-0x30)*10+(MC_VerInfo.ProductLabel[15]-0x30);
|
|
|
+ }
|
|
|
+ HW_psn[0] = (UBYTE)((tmpdata & 0xFF0000)>>16);
|
|
|
+ HW_psn[1] = (UBYTE)((tmpdata & 0xFF00)>>8);
|
|
|
+ HW_psn[2] = (UBYTE)(tmpdata & 0xFF);
|
|
|
+
|
|
|
+ power_stPowStateOut.powerstate = POWER_ON;
|
|
|
+ power_stPowStateOut.blPowerStartupFlg = TRUE;
|
|
|
}
|
|
|
|
|
|
void giant_10msTask(void)
|
|
@@ -304,19 +325,8 @@ void giant_CANRxData_Process(void)
|
|
|
{
|
|
|
if(CAN_ReceiveFrame_tmp->rx_dlen == 7)//cmd2
|
|
|
{
|
|
|
- if((CAN_ReceiveFrame_tmp->rx_data[0] & 0x30) == 0x00)
|
|
|
- {
|
|
|
- MC_ControlCode.LightSwitch = MC_LightSwitch_OFF;//light off
|
|
|
- }
|
|
|
- else if((CAN_ReceiveFrame_tmp->rx_data[0] & 0x30) == 0x10)
|
|
|
- {
|
|
|
- MC_ControlCode.LightSwitch = MC_LightSwitch_ON;//light on
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //rsv
|
|
|
- }
|
|
|
- MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;
|
|
|
+ stGiantControlParams.RearLight = ((CAN_ReceiveFrame_tmp->rx_data[0] & 0x20) >> 5);//0-off,1-on
|
|
|
+ stGiantControlParams.FrontLight = ((CAN_ReceiveFrame_tmp->rx_data[0] & 0x10) >> 4);//0-off,1-on
|
|
|
|
|
|
stGiantControlParams.WheelCircumference = (CAN_ReceiveFrame_tmp->rx_data[2] + (CAN_ReceiveFrame_tmp->rx_data[3]<<8));//Tire circumference,900-2500mm
|
|
|
|
|
@@ -369,6 +379,7 @@ void giant_CANRxData_Process(void)
|
|
|
if(CAN_ReceiveFrame_tmp->rx_dlen == 8)//Capacity
|
|
|
{
|
|
|
BMS_RunInfo.SOC = CAN_ReceiveFrame_tmp->rx_data[0];
|
|
|
+ BMS_RunInfo.RC = (CAN_ReceiveFrame_tmp->rx_data[1] + (CAN_ReceiveFrame_tmp->rx_data[2]<<8));
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -383,12 +394,9 @@ void giant_CANRxData_Process(void)
|
|
|
{
|
|
|
case 0x4:
|
|
|
{
|
|
|
- if(CAN_ReceiveFrame_tmp->rx_dlen == 8)//Customized Version
|
|
|
- {
|
|
|
- memcpy(MC_RsASSCII.CustomASCII1, CAN_ReceiveFrame_tmp->rx_data, 8);
|
|
|
- //执行存储操作
|
|
|
- memcpy(flash_stPara.ubRsASSCII.CustomASCII1, MC_RsASSCII.CustomASCII1, sizeof(MC_RsASSCII.CustomASCII1));
|
|
|
- }
|
|
|
+ memcpy(MC_RsASSCII.CustomASCII1, CAN_ReceiveFrame_tmp->rx_data, CAN_ReceiveFrame_tmp->rx_dlen);
|
|
|
+ memcpy(flash_stPara.ubRsASSCII.CustomASCII1, MC_RsASSCII.CustomASCII1, sizeof(MC_RsASSCII.CustomASCII1));
|
|
|
+ giant_SendDriveChainPassiveData(NODE_DRIVECHAIN, 0xF);
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
@@ -416,12 +424,12 @@ void giant_CANRxData_Process(void)
|
|
|
{
|
|
|
case MG_HEARTBEAT:
|
|
|
{
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0xF);
|
|
|
+ giant_SendDriveChainPassiveData(NODE_DRIVECHAIN, 0xF);
|
|
|
break;
|
|
|
}
|
|
|
case MG_CONFIRMATION:
|
|
|
{
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0xF);
|
|
|
+ giant_SendDriveChainPassiveData(NODE_DRIVECHAIN, 0xF);
|
|
|
break;
|
|
|
}
|
|
|
case MG_ACTIVEDATA1:
|
|
@@ -445,33 +453,35 @@ void giant_CANRxData_Process(void)
|
|
|
}
|
|
|
case MG_PASSIVEDATA1:
|
|
|
{
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0x0);
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0x1);
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0x2);
|
|
|
+ giant_SendDriveChainPassiveData(NODE_DRIVECHAIN, 0x0);
|
|
|
+ giant_SendDriveChainPassiveData(NODE_DRIVECHAIN, 0x1);
|
|
|
+ giant_SendDriveChainPassiveData(NODE_DRIVECHAIN, 0x2);
|
|
|
break;
|
|
|
}
|
|
|
case MG_PASSIVEDATA2:
|
|
|
{
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0x3);
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0x4);
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0x5);
|
|
|
break;
|
|
|
}
|
|
|
case MG_PASSIVEDATA3:
|
|
|
{
|
|
|
-
|
|
|
break;
|
|
|
}
|
|
|
case MG_PASSIVEDATA4:
|
|
|
{
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0xB);
|
|
|
- giant_SendDriveChainPassiveData(stGiantStandardRemoteFrameID_rx.MotionGroup,0xC);
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ else if(stGiantStandardRemoteFrameID_rx.ResponseNodeGroup == NODE_GIANTAPP)
|
|
|
+ {
|
|
|
+ if(stGiantStandardRemoteFrameID_rx.MotionGroup == MG_PASSIVEDATA4)
|
|
|
+ {
|
|
|
+ giant_SendDriveChainPassiveData(NODE_GIANTAPP, 0xC);
|
|
|
+ giant_SendDriveChainPassiveData(NODE_GIANTAPP, 0xD);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
giant_DataProcess();
|
|
@@ -485,55 +495,47 @@ void giant_CANRxData_Process(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void giant_SendDriveChainPassiveData(UBYTE remoteMG, UBYTE DataAddr)
|
|
|
+void giant_SendDriveChainPassiveData(UBYTE nodegroup, UBYTE dataaddr)
|
|
|
{
|
|
|
UBYTE len = 8;
|
|
|
UBYTE data[8] = {0,};
|
|
|
UWORD ID = 0;
|
|
|
|
|
|
ID = ((FG_RESPONSEDATA<<9)
|
|
|
- |(NODE_DRIVECHAIN<<5)
|
|
|
+ |(nodegroup<<5)
|
|
|
|(DB_PASSIVEDATA<<4)
|
|
|
- |DataAddr);
|
|
|
+ |dataaddr);
|
|
|
|
|
|
- switch(DataAddr)
|
|
|
+ switch(dataaddr)
|
|
|
{
|
|
|
case 0x0:
|
|
|
{
|
|
|
- memcpy(data, (UBYTE *)"MOAACITY", 8);//Mode name
|
|
|
+ memcpy(data, (UBYTE *)"MOAA", 4);//FW
|
|
|
+
|
|
|
+ data[4] = ((MC_VerInfo.FW_Version[9]-0x30)<<4) + (MC_VerInfo.FW_Version[10]-0x30);//year
|
|
|
+ data[5] = ((MC_VerInfo.FW_Version[11]-0x30)*10) + (MC_VerInfo.FW_Version[12]-0x30);//month
|
|
|
+ data[6] = ((MC_VerInfo.FW_Version[13]-0x30)<<4) + (MC_VerInfo.FW_Version[14]-0x30);//day
|
|
|
+ data[7] = 0x30;
|
|
|
break;
|
|
|
}
|
|
|
case 0x1:
|
|
|
{
|
|
|
- memcpy(data, MC_VerInfo.FW_Version, 8);//FW1
|
|
|
+ memcpy(data, (UBYTE *)"XMOA", 4);//HW
|
|
|
+ data[4] = 0x30;
|
|
|
+ memcpy(&data[5], HW_psn, 3);
|
|
|
break;
|
|
|
}
|
|
|
case 0x2:
|
|
|
- {
|
|
|
- memcpy(data, &MC_VerInfo.FW_Version[8], 8);//FW2
|
|
|
- break;
|
|
|
- }
|
|
|
- case 0x3:
|
|
|
- {
|
|
|
- memcpy(data, MC_VerInfo.HW_Version, 8);//HW1
|
|
|
- break;
|
|
|
- }
|
|
|
- case 0x4:
|
|
|
- {
|
|
|
- memcpy(data, &MC_VerInfo.HW_Version[8], 8);//HW2
|
|
|
- break;
|
|
|
- }
|
|
|
- case 0x5:
|
|
|
{
|
|
|
memcpy(data, MC_RsASSCII.CustomASCII1, 8);//Customized Version
|
|
|
break;
|
|
|
}
|
|
|
- case 0xB:
|
|
|
+ case 0xC:
|
|
|
{
|
|
|
memcpy(data, MC_VerInfo.ProductLabel, 8);//SN1
|
|
|
break;
|
|
|
}
|
|
|
- case 0xC:
|
|
|
+ case 0xD:
|
|
|
{
|
|
|
memcpy(data, &MC_VerInfo.ProductLabel[8], 8);//SN2
|
|
|
break;
|
|
@@ -586,12 +588,10 @@ void giant_SendDriveChainActiveData(UBYTE functiongroup, UBYTE dataaddr)
|
|
|
{
|
|
|
data[0] |= 0x01;//Communication sleep
|
|
|
}
|
|
|
- if(MC_RunInfo.LightSwitch == MC_LightSwitch_ON)
|
|
|
- {
|
|
|
- data[2] |= (0x01<<6);
|
|
|
- }
|
|
|
- data[2] |= (stGiantControlParams.StartMode<<4);
|
|
|
- data[2] |= (MC_RunInfo.CadenceDir<<2);
|
|
|
+ data[2] = ((stGiantControlParams.RearLight<<7)
|
|
|
+ | (stGiantControlParams.FrontLight<<6)
|
|
|
+ | (stGiantControlParams.StartMode<<4)
|
|
|
+ | (MC_RunInfo.CadenceDir<<2));
|
|
|
data[3] = (UBYTE)(stGiantControlParams.SpeedLimitation & 0xFF);// speed limitation,0.01km/h
|
|
|
data[4] = (UBYTE)((stGiantControlParams.SpeedLimitation & 0xFF00) >> 8);
|
|
|
break;
|
|
@@ -659,8 +659,8 @@ void giant_SendDriveChainActiveData(UBYTE functiongroup, UBYTE dataaddr)
|
|
|
data[3] = (UBYTE)(((BMS_VoltEstimat.uwIbusLpf/10) & 0xFF00) >> 8);
|
|
|
data[4] = (UBYTE)(MC_RunInfo.MotorSpeed & 0xFF);// motor rotor speed,RPM
|
|
|
data[5] = (UBYTE)((MC_RunInfo.MotorSpeed & 0xFF00) >> 8);
|
|
|
-// data[6] = (UBYTE)(MC_RunInfo.RemainDistance & 0xFF);// remaining range of drive chain system,km
|
|
|
-// data[7] = (UBYTE)((MC_RunInfo.RemainDistance & 0xFF00) >> 8);
|
|
|
+ data[6] = (UBYTE)(MC_RunInfo.RemainDistance & 0xFF);// remaining range of drive chain system,km
|
|
|
+ data[7] = (UBYTE)((MC_RunInfo.RemainDistance & 0xFF00) >> 8);
|
|
|
break;
|
|
|
}
|
|
|
case 0x7:
|