This commit is contained in:
Anders Sandstrom
2021-03-02 12:49:13 +01:00
parent e94ba4b29b
commit de9e23dd85
3 changed files with 17 additions and 15 deletions

View File

@@ -61,12 +61,14 @@ ecmcSocketCAN::ecmcSocketCAN(char* configStr,
0, /* Default priority */
0) /* Default stack size */
{
// Init
cfgCanIFStr_ = NULL;
destructs_ = 0;
socketId_ = -1;
memset(&ifr_,0,sizeof(ifr_));
memset(&ifr_,0,sizeof(struct ifreq));
memset(&rxmsg_,0,sizeof(struct can_frame));
memset(&txmsg_,0,sizeof(struct can_frame));
memset(&addr_,0,sizeof(struct sockaddr_can));
parseConfigStr(configStr); // Assigns all configs
// Check valid nfft
@@ -113,7 +115,7 @@ void ecmcSocketCAN::parseConfigStr(char *configStr) {
// ECMC_PLUGIN_IF_OPTION_CMD (Source string)
else if (!strncmp(pThisOption, ECMC_PLUGIN_IF_OPTION_CMD, strlen(ECMC_PLUGIN_IF_OPTION_CMD))) {
pThisOption += strlen(ECMC_PLUGIN_IF_OPTION_CMD)destructs_;
pThisOption += strlen(ECMC_PLUGIN_IF_OPTION_CMD);
cfgCanIFStr_=strdup(pThisOption);
}
@@ -129,21 +131,21 @@ void ecmcSocketCAN::parseConfigStr(char *configStr) {
void ecmcSocketCAN::initCAN(){
if((socketId_ = socket(PF_CAN, SOCK_RAW, CAN_RAW)) == -1) {
throw std::runtime_error( "Error while opening socket.");
return -1;
throw std::runtime_error( "Error while opening socket.");
return;
}
strcpy(ifr.ifr_name, cfgCanIFStr_);
ioctl(socketId, SIOCGIFINDEX, &ifr_);
strcpy(ifr_.ifr_name, cfgCanIFStr_);
ioctl(socketId_, SIOCGIFINDEX, &ifr_);
addr.can_family = AF_CAN;
addr.can_ifindex = ifr_.ifr_ifindex;
addr_.can_family = AF_CAN;
addr_.can_ifindex = ifr_.ifr_ifindex;
printf("%s at index %d\n", ifname, ifr.ifr_ifindex);
printf("%s at index %d\n", cfgCanIFStr_, ifr_.ifr_ifindex);
if(bind(socketId, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
if(bind(socketId_, (struct sockaddr *)&addr_, sizeof(addr_)) == -1) {
throw std::runtime_error( "Error in socket bind.");
return -2;
return;
}
}
@@ -176,7 +178,8 @@ int ecmcSocketCAN::writeCAN() {
txmsg_.can_dlc = 2;
txmsg_.data[0] = frame.data[0]+1;
txmsg_.data[1] = frame.data[1]+1;
int nbytes = write(socketId, &txmsg_, sizeof(struct can_frame));
// Maybe need to add the size to write here.. if struct is not full, hmm?!
int nbytes = write(socketId_, &txmsg_, sizeof(struct can_frame));
printf("\nWrote %d bytes\n", nbytes);
}

View File

@@ -67,8 +67,7 @@ class ecmcSocketCAN : public asynPortDriver {
struct can_frame txmsg_;
struct ifreq ifr_;
int socketId_;
struct sockaddr_can addr_;
};
#endif /* ECMC_FFT_H_ */

View File

@@ -34,7 +34,7 @@ int createFFT(char* configStr) {
// create asynport name for new object ()
memset(portNameBuffer, 0, ECMC_PLUGIN_MAX_PORTNAME_CHARS);
snprintf (portNameBuffer, ECMC_PLUGIN_MAX_PORTNAME_CHARS,
ECMC_PLUGIN_PORTNAME_PREFIX "%d", fftObjCounter);
ECMC_PLUGIN_PORTNAME_PREFIX);
try {
can = new ecmcSocketCAN(configStr, portNameBuffer);
}