|
@@ -44,14 +44,55 @@ void giant_Init(void)
|
|
|
stGiantControlParams.RidingModeEn = 0;
|
|
|
stGiantControlParams.AdjustingMode = 0x0B;//check mode
|
|
|
stGiantControlParams.WheelCircumference = 2182;//mm
|
|
|
+ stGiantControlParams.StartMode = 2;
|
|
|
+ stGiantControlParams.SpeedLimitation = 4500;
|
|
|
}
|
|
|
+
|
|
|
void giant_10msTask(void)
|
|
|
{
|
|
|
static UBYTE giant_10mscount = 0;
|
|
|
|
|
|
- if((power_stPowStateOut.powerstate == POWER_OFF) || ((stGiantControlParams.AdjustingMode >= AD_SERVICEMODE) && (stGiantControlParams.AdjustingMode <= AD_CHECKMODE)))
|
|
|
+
|
|
|
+ if(stGiantControlParams.AdjustingMode == AD_CHECKMODE)
|
|
|
{
|
|
|
- return;
|
|
|
+ if((cp_ulSystickCnt - ulOBC_ComTimeOutCount) > 1750)
|
|
|
+ {
|
|
|
+ stGiantControlParams.CommSleep = 2;
|
|
|
+
|
|
|
+ power_stPowStateOut.powerstate = POWER_OFF;
|
|
|
+ power_stPowStateOut.blPowerStartupFlg = FALSE;
|
|
|
+ }
|
|
|
+ else if((cp_ulSystickCnt - ulOBC_ComTimeOutCount) > 1500)
|
|
|
+ {
|
|
|
+ stGiantControlParams.CommSleep = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ stGiantControlParams.CommSleep = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if((stGiantControlParams.AdjustingMode >= AD_SERVICEMODE_S) && (stGiantControlParams.AdjustingMode <= AD_SERVICEMODE_E))
|
|
|
+ {
|
|
|
+ ulOBC_ComTimeOutCount = cp_ulSystickCnt;
|
|
|
+ stGiantControlParams.CommSleep = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if((cp_ulSystickCnt - ulOBC_ComTimeOutCount) > 750)
|
|
|
+ {
|
|
|
+ stGiantControlParams.CommSleep = 2;
|
|
|
+
|
|
|
+ power_stPowStateOut.powerstate = POWER_OFF;
|
|
|
+ power_stPowStateOut.blPowerStartupFlg = FALSE;
|
|
|
+ }
|
|
|
+ else if((cp_ulSystickCnt - ulOBC_ComTimeOutCount) > 500)
|
|
|
+ {
|
|
|
+ stGiantControlParams.CommSleep = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ stGiantControlParams.CommSleep = 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
giant_10mscount++;
|
|
@@ -59,6 +100,15 @@ void giant_10msTask(void)
|
|
|
{
|
|
|
giant_10mscount = 0;
|
|
|
|
|
|
+ if(stGiantControlParams.CommSleep == 1)
|
|
|
+ {
|
|
|
+ giant_SendRemote(0x2);
|
|
|
+ }
|
|
|
+
|
|
|
+ if((power_stPowStateOut.powerstate == POWER_OFF) || ((stGiantControlParams.AdjustingMode >= AD_SERVICEMODE_S) && (stGiantControlParams.AdjustingMode <= AD_CHECKMODE)))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
giant_SendDriveChainActiveData(FG_NORMALDATA, 0x0);
|
|
|
giant_SendDriveChainActiveData(FG_NORMALDATA, 0x1);
|
|
|
giant_SendDriveChainActiveData(FG_NORMALDATA, 0x2);
|
|
@@ -70,6 +120,7 @@ void giant_10msTask(void)
|
|
|
giant_SendDriveChainActiveData(FG_NORMALDATA, 0xF);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
void giant_DataProcess(void)
|
|
|
{
|
|
|
if(pRxMsg2->rx_ft == CAN_FT_DATA)
|
|
@@ -144,10 +195,27 @@ void giant_DataProcess(void)
|
|
|
|
|
|
if((pRxMsg2->rx_data[4] & 0x04) == 0x04)//Reset odometer distance and odometer time
|
|
|
{
|
|
|
-
|
|
|
+ MC_RideLog.ODO_Km = 0;
|
|
|
+ MC_RideLog.ODO_Time = 0;
|
|
|
+
|
|
|
+ cp_stHistoryPara.ulODOTrip = 0;
|
|
|
+ cp_stHistoryPara.ulODOTime = 0;
|
|
|
+// cp_stHistoryPara.ulTripSum = 0;
|
|
|
+// cp_stHistoryPara.ulTripSumTime = 0;
|
|
|
+
|
|
|
+ MC_UpcInfo.stHistoryInfo.uwODOTripH = 0;
|
|
|
+ MC_UpcInfo.stHistoryInfo.uwODOTripL = 0;
|
|
|
+ MC_UpcInfo.stHistoryInfo.uwODOTimeH = 0;
|
|
|
+ MC_UpcInfo.stHistoryInfo.uwODOTimeL = 0;
|
|
|
+// MC_UpcInfo.stHistoryInfo.uwTripSumH = 0;
|
|
|
+// MC_UpcInfo.stHistoryInfo.uwTripSumL = 0;
|
|
|
+// MC_UpcInfo.stHistoryInfo.uwTripSumTimeH = 0;
|
|
|
+// MC_UpcInfo.stHistoryInfo.uwTripSumTimeL = 0;
|
|
|
+
|
|
|
+ cp_stBikeRunInfoPara.ulRiTime = 0;
|
|
|
}
|
|
|
|
|
|
- ass_stParaCong.uwStartMode = ((pRxMsg2->rx_data[6] & 0xC0) >> 6);//Start mode,1-soft,2-normal,3-strong
|
|
|
+ stGiantControlParams.StartMode = ((pRxMsg2->rx_data[6] & 0xC0) >> 6);//Start mode,1-soft,2-normal,3-strong
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -170,14 +238,6 @@ void giant_DataProcess(void)
|
|
|
MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;
|
|
|
|
|
|
stGiantControlParams.WheelCircumference = (pRxMsg2->rx_data[2] + (pRxMsg2->rx_data[3]<<8));//Tire circumference,900-2500mm
|
|
|
-// if(stGiantControlParams.WheelCircumference < 900)
|
|
|
-// {
|
|
|
-// stGiantControlParams.WheelCircumference = 900;//default
|
|
|
-// }
|
|
|
-// else if(stGiantControlParams.WheelCircumference > 2500)
|
|
|
-// {
|
|
|
-// stGiantControlParams.WheelCircumference = 2500;//default
|
|
|
-// }
|
|
|
|
|
|
stGiantControlParams.MaximumTorque = ((pRxMsg2->rx_data[4] & 0xF0)>>4);//Maximum torque,*10Nm
|
|
|
// if(0 == stGiantControlParams.MaximumTorque)
|
|
@@ -265,6 +325,10 @@ void giant_DataProcess(void)
|
|
|
stGiantStandardRemoteFrameID_rx.RequireNodeGroup = (UBYTE)((pRxMsg2->rx_sfid & 0x0F0)>>4);
|
|
|
stGiantStandardRemoteFrameID_rx.ResponseNodeGroup = (UBYTE)(pRxMsg2->rx_sfid & 0x00F);
|
|
|
|
|
|
+ if(stGiantStandardRemoteFrameID_rx.RequireNodeGroup == NODE_USERINTERFACE)
|
|
|
+ {
|
|
|
+ ulOBC_ComTimeOutCount = cp_ulSystickCnt;
|
|
|
+ }
|
|
|
if((stGiantStandardRemoteFrameID_rx.ResponseNodeGroup == NODE_ALL) || (stGiantStandardRemoteFrameID_rx.ResponseNodeGroup == NODE_DRIVECHAIN))//
|
|
|
{
|
|
|
switch(stGiantStandardRemoteFrameID_rx.MotionGroup)
|
|
@@ -375,12 +439,12 @@ void giant_SendDriveChainPassiveData(UBYTE remoteMG, UBYTE DataAddr)
|
|
|
}
|
|
|
case 0xB:
|
|
|
{
|
|
|
- memcpy(data, MC_VerInfo.SN_Num, 8);//SN1
|
|
|
+ memcpy(data, MC_VerInfo.ProductLabel, 8);//SN1
|
|
|
break;
|
|
|
}
|
|
|
case 0xC:
|
|
|
{
|
|
|
- memcpy(data, &MC_VerInfo.SN_Num[8], 8);//SN2
|
|
|
+ memcpy(data, &MC_VerInfo.ProductLabel[8], 8);//SN2
|
|
|
break;
|
|
|
}
|
|
|
case 0xF:
|
|
@@ -402,7 +466,7 @@ void giant_SendDriveChainActiveData(UBYTE functiongroup, UBYTE dataaddr)
|
|
|
UBYTE len = 8;
|
|
|
UBYTE data[8] = {0,};
|
|
|
UWORD ID = 0;
|
|
|
-
|
|
|
+
|
|
|
ID = ((functiongroup<<9)
|
|
|
|(NODE_DRIVECHAIN<<5)
|
|
|
|(DB_ACTIVEDATA<<4)
|
|
@@ -512,10 +576,10 @@ void giant_SendDriveChainActiveData(UBYTE functiongroup, UBYTE dataaddr)
|
|
|
data[1] = (UBYTE)((MC_RunInfo.Ride_Km & 0xFF00) >> 8);
|
|
|
data[2] = (UBYTE)((MC_RunInfo.Ride_Time/60) & 0xFF);//ride time after power on,min
|
|
|
data[3] = (UBYTE)(((MC_RunInfo.Ride_Time/60) & 0xFF00) >> 8);
|
|
|
-// data[4] = (UBYTE)((MC_RideLog.ODO_Km/10) & 0xFF);// total ride distance Can’t be reset
|
|
|
-// data[5] = (UBYTE)(((MC_RideLog.ODO_Km/10) & 0xFF00) >> 8);
|
|
|
-// data[6] = (UBYTE)((MC_RideLog.ODO_Time/60) & 0xFF);// rtotal ride time Can’t be reset
|
|
|
-// data[7] = (UBYTE)(((MC_RideLog.ODO_Time/60) & 0xFF00) >> 8);
|
|
|
+ data[4] = (UBYTE)((cp_stHistoryPara.ulRealODOTrip/10) & 0xFF);// total ride distance Can’t be reset
|
|
|
+ data[5] = (UBYTE)(((cp_stHistoryPara.ulRealODOTrip/10) & 0xFF00) >> 8);
|
|
|
+ data[6] = (UBYTE)((cp_stHistoryPara.ulRealODOTime/60) & 0xFF);// rtotal ride time Can’t be reset
|
|
|
+ data[7] = (UBYTE)(((cp_stHistoryPara.ulRealODOTime/60) & 0xFF00) >> 8);
|
|
|
break;
|
|
|
}
|
|
|
case 0x8:
|
|
@@ -548,23 +612,37 @@ void giant_SendDriveChainActiveData(UBYTE functiongroup, UBYTE dataaddr)
|
|
|
CAN_SendData(ID, data, len);
|
|
|
}
|
|
|
|
|
|
+void giant_SendRemote(UBYTE motiongroup)
|
|
|
+{
|
|
|
+ UWORD ID = 0;
|
|
|
+
|
|
|
+ ID = ((motiongroup<<8)
|
|
|
+ |(NODE_DRIVECHAIN<<4)
|
|
|
+ |NODE_USERINTERFACE);
|
|
|
+
|
|
|
+ CAN_SendRemote(ID);
|
|
|
+}
|
|
|
+
|
|
|
void giant_CANRxData_Process(void)
|
|
|
{
|
|
|
if(stGiantControlParams.RefreshFlag)
|
|
|
{
|
|
|
- stGiantControlParams.RefreshFlag = FALSE;
|
|
|
-
|
|
|
- if((stGiantControlParams.AdjustingMode == 0xC) || (stGiantControlParams.ManualSleepEn) || (stGiantControlParams.AutomaticSleepEn) || ((cp_ulSystickCnt - ulOBC_ComTimeOutCount) < 1500))//Off state
|
|
|
+ stGiantControlParams.RefreshFlag = FALSE;
|
|
|
+ if((stGiantControlParams.AdjustingMode == AD_OFFMODE) || (stGiantControlParams.ManualSleepEn) || (stGiantControlParams.AutomaticSleepEn))//Off state
|
|
|
+ {
|
|
|
+ power_stPowStateOut.powerstate = POWER_OFF;
|
|
|
+ power_stPowStateOut.blPowerStartupFlg = FALSE;
|
|
|
+ }
|
|
|
+ ass_stParaCong.uwStartMode = stGiantControlParams.StartMode;
|
|
|
+ if((stGiantControlParams.AdjustingMode >= AD_CHECKMODE) && (stGiantControlParams.AdjustingMode <= AD_OFFMODE))
|
|
|
{
|
|
|
- power_stPowStateOut.powerstate = POWER_OFF;
|
|
|
- power_stPowStateOut.blPowerStartupFlg = FALSE;
|
|
|
+ MC_ControlCode.GearSt = MC_GearSt_OFF;
|
|
|
}
|
|
|
-
|
|
|
- if((stGiantControlParams.AdjustingMode >= AD_SERVICEMODE) && (stGiantControlParams.AdjustingMode <= AD_ERRORMODE))
|
|
|
+ else if(stGiantControlParams.WalkEn == 1)
|
|
|
{
|
|
|
- MC_ControlCode.GearSt = MC_GearSt_OFF;
|
|
|
+ MC_ControlCode.GearSt = MC_GearSt_WALK;
|
|
|
}
|
|
|
- else if(stGiantControlParams.AssistRatio == 0)
|
|
|
+ else if((stGiantControlParams.AdjustingMode >= AD_SERVICEMODE_S) && (stGiantControlParams.AdjustingMode <= AD_SERVICEMODE_E))
|
|
|
{
|
|
|
MC_ControlCode.GearSt = MC_GearSt_OFF;
|
|
|
}
|
|
@@ -572,9 +650,9 @@ void giant_CANRxData_Process(void)
|
|
|
{
|
|
|
MC_ControlCode.GearSt = MC_GearSt_OFF;
|
|
|
}
|
|
|
- else if(stGiantControlParams.WalkEn == 1)
|
|
|
+ else if(stGiantControlParams.AssistRatio == 0)
|
|
|
{
|
|
|
- MC_ControlCode.GearSt = MC_GearSt_WALK;
|
|
|
+ MC_ControlCode.GearSt = MC_GearSt_OFF;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -582,16 +660,32 @@ void giant_CANRxData_Process(void)
|
|
|
}
|
|
|
MC_RunInfo.GearSt = (UBYTE)MC_ControlCode.GearSt;
|
|
|
|
|
|
- //轮径更新
|
|
|
- if((stGiantControlParams.AdjustingMode == AD_CHECKMODE) && (MC_UpcInfo.stBikeInfo.uwWheelPerimeter != (stGiantControlParams.WheelCircumference/10)))
|
|
|
+ if(stGiantControlParams.AdjustingMode == AD_CHECKMODE)
|
|
|
{
|
|
|
- MC_UpcInfo.stBikeInfo.uwWheelPerimeter = stGiantControlParams.WheelCircumference/10;
|
|
|
-
|
|
|
- MC_UpcInfo.stBikeInfo.uwSaveFlg = 0;
|
|
|
- cp_stFlg.ParaSaveEEFlg = FALSE;
|
|
|
- cp_stFlg.ParaUpdateFlg = TRUE;
|
|
|
- cp_stFlg.ParaBikeInfoUpdateFlg = TRUE;
|
|
|
- cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
|
|
|
+ //轮径更新
|
|
|
+ UWORD tmpdata;
|
|
|
+ if(stGiantControlParams.WheelCircumference < 900)
|
|
|
+ {
|
|
|
+ tmpdata = 90;//default
|
|
|
+ }
|
|
|
+ else if(stGiantControlParams.WheelCircumference > 2500)
|
|
|
+ {
|
|
|
+ tmpdata = 250;//default
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ tmpdata = stGiantControlParams.WheelCircumference/10;
|
|
|
+ }
|
|
|
+ if((stGiantControlParams.AdjustingMode == AD_CHECKMODE) && (MC_UpcInfo.stBikeInfo.uwWheelPerimeter != tmpdata))
|
|
|
+ {
|
|
|
+ MC_UpcInfo.stBikeInfo.uwWheelPerimeter = tmpdata;
|
|
|
+
|
|
|
+ MC_UpcInfo.stBikeInfo.uwSaveFlg = 0;
|
|
|
+ cp_stFlg.ParaSaveEEFlg = FALSE;
|
|
|
+ cp_stFlg.ParaUpdateFlg = TRUE;
|
|
|
+ cp_stFlg.ParaBikeInfoUpdateFlg = TRUE;
|
|
|
+ cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//限速更新
|
|
@@ -610,6 +704,29 @@ void giant_CANRxData_Process(void)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+SLONG giant_slPolynomial(const SWORD *value)
|
|
|
+{
|
|
|
+ SLONG out;
|
|
|
+ UWORD gian;
|
|
|
+
|
|
|
+ if(stGiantControlParams.StartMode == 1)
|
|
|
+ {
|
|
|
+ gian = 82;
|
|
|
+ }
|
|
|
+ else if(stGiantControlParams.StartMode == 3)
|
|
|
+ {
|
|
|
+ gian = 123;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ gian = 102;
|
|
|
+ }
|
|
|
+
|
|
|
+ out = stGiantControlParams.AssistRatio * *value * gian >> 10;
|
|
|
+
|
|
|
+ return out;
|
|
|
+}
|
|
|
/*************************************************************************
|
|
|
End of this File (EOF)!
|
|
|
Do not put anything after this part!
|