|
@@ -130,7 +130,15 @@ void giant_10msTask(void)
|
|
|
|
|
|
void CANFrame_Rx_ISR(void)
|
|
|
{
|
|
|
- stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].id = (UWORD)pRxMsg2->rx_sfid;
|
|
|
+ if(pRxMsg2->rx_ff == CAN_FF_STANDARD)
|
|
|
+ {
|
|
|
+ stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].id = pRxMsg2->rx_sfid;
|
|
|
+ }
|
|
|
+ else if(pRxMsg2->rx_ff == CAN_FF_EXTENDED)
|
|
|
+ {
|
|
|
+ stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].id = pRxMsg2->rx_efid;
|
|
|
+ }
|
|
|
+ stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].rx_ff = (UBYTE)pRxMsg2->rx_ff;
|
|
|
stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].rx_ft = (UBYTE)pRxMsg2->rx_ft;
|
|
|
stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].rx_dlen = (UBYTE)pRxMsg2->rx_dlen;
|
|
|
memcpy(stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].rx_data, (uint8_t*)pRxMsg2->rx_data, pRxMsg2->rx_dlen);
|
|
@@ -155,7 +163,36 @@ void giant_CANRxData_Process(void)
|
|
|
{
|
|
|
CAN_ReceiveFrame_tmp = &stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameRdInde];
|
|
|
|
|
|
- if(CAN_ReceiveFrame_tmp->rx_ft == CAN_FT_DATA)
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_ff == CAN_FF_EXTENDED)
|
|
|
+ {
|
|
|
+ stGiantStandardDataFrameID_rx.FunctionGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x38000)>>15);
|
|
|
+ stGiantStandardDataFrameID_rx.NodeGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x07E00)>>9);
|
|
|
+ stGiantStandardDataFrameID_rx.DataBehaviors = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x001C0)>>6);
|
|
|
+ stGiantStandardDataFrameID_rx.DataAddress = (UBYTE)(CAN_ReceiveFrame_tmp->id & 0x0003F);
|
|
|
+
|
|
|
+ if(stGiantStandardDataFrameID_rx.NodeGroup == NODE_SERVICETOOL)
|
|
|
+ {
|
|
|
+ if((stGiantStandardDataFrameID_rx.DataAddress == 0x1) && (CAN_ReceiveFrame_tmp->rx_dlen == 6))
|
|
|
+ {
|
|
|
+ UWORD Filemain_dir = ((CAN_ReceiveFrame_tmp->rx_data[1]) + (CAN_ReceiveFrame_tmp->rx_data[2]<<8));
|
|
|
+ UWORD Filesub_dir = ((CAN_ReceiveFrame_tmp->rx_data[3]) + (CAN_ReceiveFrame_tmp->rx_data[4]<<8));
|
|
|
+ if(((CAN_ReceiveFrame_tmp->rx_data[0] & 0x3F) == NODE_DRIVECHAIN) && (Filemain_dir == MC_FILEMAINDIR) && (Filesub_dir == MC_FILESUBDIR))
|
|
|
+ {
|
|
|
+ if((CAN_ReceiveFrame_tmp->rx_data[5] & 0x0F) == 0x01)
|
|
|
+ {
|
|
|
+ UBYTE reply_data[6];
|
|
|
+ memcpy(reply_data, CAN_ReceiveFrame_tmp->rx_data, CAN_ReceiveFrame_tmp->rx_dlen);
|
|
|
+ reply_data[5] = 0x10;
|
|
|
+ giant_SendExtendData(0x01, DB_ACTIVEDATA, reply_data, CAN_ReceiveFrame_tmp->rx_dlen);
|
|
|
+
|
|
|
+ power_stPowStateOut.powerstate = POWER_RESET;
|
|
|
+ power_stPowStateOut.blPowerStartupFlg = FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(CAN_ReceiveFrame_tmp->rx_ft == CAN_FT_DATA)//Standard
|
|
|
{
|
|
|
stGiantStandardDataFrameID_rx.FunctionGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x600)>>9);
|
|
|
stGiantStandardDataFrameID_rx.NodeGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x1E0)>>5);
|
|
@@ -351,7 +388,7 @@ void giant_CANRxData_Process(void)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- else if(CAN_ReceiveFrame_tmp->rx_ft == CAN_FT_REMOTE)
|
|
|
+ else if(CAN_ReceiveFrame_tmp->rx_ft == CAN_FT_REMOTE)//Standard
|
|
|
{
|
|
|
stGiantStandardRemoteFrameID_rx.MotionGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x700)>>8);
|
|
|
stGiantStandardRemoteFrameID_rx.RequireNodeGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x0F0)>>4);
|
|
@@ -668,6 +705,33 @@ void giant_SendRemote(UBYTE motiongroup)
|
|
|
CAN_SendRemote(ID);
|
|
|
}
|
|
|
|
|
|
+void giant_SendExtendData(UBYTE dataaddr, UBYTE datatype, UBYTE *data, UBYTE len)
|
|
|
+{
|
|
|
+ ULONG ID = 0;
|
|
|
+ can_trasnmit_message_struct can_trasnmit_message1;
|
|
|
+ ULONG OVtim = 0;
|
|
|
+
|
|
|
+ ID = 0x1FFC0000 + (FG_NORMALDATA<<15) + (NODE_DRIVECHAIN<<9) + (datatype<<6) + dataaddr;
|
|
|
+
|
|
|
+ can_trasnmit_message1.tx_efid = ID;
|
|
|
+ can_trasnmit_message1.tx_ff = CAN_FF_EXTENDED;
|
|
|
+ can_trasnmit_message1.tx_ft = CAN_FT_DATA;
|
|
|
+ can_trasnmit_message1.tx_dlen = len;
|
|
|
+ memcpy(can_trasnmit_message1.tx_data, data, len);
|
|
|
+
|
|
|
+ can_ubMbox = can_message_transmit(CAN0, &can_trasnmit_message1);
|
|
|
+
|
|
|
+ while((can_transmit_states(CAN0,can_ubMbox) != CAN_TRANSMIT_OK) && (OVtim < 0XFFF))
|
|
|
+ {
|
|
|
+ OVtim++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (OVtim >= 0XFFF)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void giant_DataProcess(void)
|
|
|
{
|
|
|
if(stGiantControlParams.RefreshFlag)
|