int main(
int argc,
char *argv[])
{
CAN_ERR_CODE rc = 0;
int ch = 0;
int handle = 0;
UINT32 baudrate;
UINT32 slaveID = 1;
UINT16 guardTime = 3000;
UINT8 lifeTimeFactor = 3;
UINT16 producerTime = 3000;
UINT16 consumerTime = 6000;
CAN_NMT_ERROR_STATUS NMTStatus;
CAN_NMT_NODE_GUARDING_STATE GUARDINGStatus;
UINT32 SyncCOBID = 128;
UINT32 CANstatus;
UINT16 timer = 3000;
UINT32 syncTimes = 0;
UINT32 pdoTimes = 5;
UINT32 wLen = 0;
UINT32 rLen = 0;
UINT32 abortCode = 0;
UINT8 pdoNumber = 1;
while(-1 != (rc = getopt(argc, argv, "hs:p:b:i:")))
{
switch(rc)
{
case 's':
slot = atoi(optarg);
if (slot < 1 || slot > 9) {
printf("error slot\n");
return 0;
}
break;
case 'p':
port = atoi(optarg);
if (port!=0 && port!= 1) {
printf("error port\n");
return 0;
}
break;
case 'b':
baudrate = atoi(optarg);
break;
case 'i':
slaveID = atoi(optarg);
break;
case 'h':
case '?':
default:
printf("%s.\n\n", "CANopen");
printf("Usage: ./can [OPTIONS]\n\n");
printf("Options:\n");
printf("\t%-8s Slot.\n", "-s");
printf("\t%-8s Port.\n", "-p");
printf("\t%-8s Baudrate.\n", "-b");
printf("\t%-8s Slave ID.\n", "-i");
printf("\t%-8s Help\n", "-h");
printf("\n");
return 0;
}
}
printf("Setting: slot = %d, port = %d, baudrate = %d, slaveID = %d\n", slot, port, baudrate, slaveID);
printf("Get baudrate = %d\n", baudrate);
printf("CANstatus = %d(0x%x)\n", CANstatus, CANstatus);
printf("MX_RTU_CanOpen handle = %d, rc = %d\r\n", handle, rc);
}
printf("CANOpen handle = %d\n", handle);
printf("Set NMT Start.\n");
if(rc != 0)
printf("CAN NMT Start Fail!\n");
else {
printf("MX_RTU_CanNMTSetState: handle = %d, rc = %d\r\n", handle, rc);
}
sleep(5);
printf("MX_RTU_CanNMTHeartbeat: handle = %d, rc = %d\r\n", handle, rc);
if(rc != 0)
{
printf("MX_RTU_CanCyclicSYNCSend error: handle = %d, rc = %d\r\n", handle, rc);
}
sleep(5);
producerTime = 5000;
consumerTime = 20000;
if(rc != 0)
printf("Set Heartbeat P/C = %d/%d Fail!\n", producerTime, consumerTime);
memset(wData, 0, sizeof(wData));
wData[0] = 0xF0;
wLen = 1;
printf("MX_RTU_CanCyclicPDOSend: handle = %d, rc = %d\r\n", handle, rc);
if(rc != 0)
printf("MX_RTU_CanCyclicPDOSend error: handle = %d, rc = %d\r\n", handle, rc);
rLen = 0;
abortCode = 0;
memset(rData, 0, sizeof(rData));
printf("MX_RTU_CanSDORead: handle = %d, rc = %d, rLen = %d, abortCode = 0x%x\r\n", handle, rc, rLen, abortCode);
if(rc != 0)
printf("MX_RTU_CanSDORead error: handle = %d, rc = %d\r\n", handle, rc);
while(1)
{
printf("\tNMTStatus = %d(0x%x)\n", NMTStatus, NMTStatus);
printf("\tGUARDINGStatus = %d(0x%x)\n", GUARDINGStatus, GUARDINGStatus);
usleep(1000000);
}
if(rc != 0)
printf("Can NMT stop Fail!\n");
printf("Can CLOSE! \n");
return 0;
}