git-svn-id: svn://db.shs.com.ru/pip@613 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2018-05-10 13:41:05 +00:00
parent 906da66480
commit 62f0942e2d

View File

@@ -37,25 +37,27 @@ PICAN::PICAN(const PIString & path, PIIODevice::DeviceMode mode) : PIIODevice(pa
bool PICAN::openDevice() {
#ifdef PIP_CAN
piCout << "PICAN OpenDevice()";
sock = socket(PF_CAN, SOCK_RAW, CAN_RAW);
if(sock < 0){
piCoutObj << "Error! while opening socket";
return false;
}
struct ifreq ifr;
ifreq ifr;
strcpy(ifr.ifr_name, path().dataAscii());
if(ioctl(sock, SIOCGIFINDEX, &ifr) < 0){
piCoutObj << "Error! while determin the interface ioctl";
return false;
}
// bind socket to all CAN interface
struct sockaddr_can addr;
sockaddr_can addr;
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
if(bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0){
piCoutObj << "Error! while binding socket";
return false;
}
piCout << "PICAN Open OK!";
return true;
#else
piCoutObj << "PICAN not implemented on windows";
@@ -74,6 +76,7 @@ bool PICAN::closeDevice() {
int PICAN::readDevice(void * read_to, int max_size) {
#ifdef PIP_CAN
piCout << "PICAN read";
can_frame frame;
int ret = 0;
ret = ::read(sock, &frame, sizeof(can_frame));
@@ -88,6 +91,7 @@ int PICAN::readDevice(void * read_to, int max_size) {
int PICAN::writeDevice(const void * data, int max_size) {
#ifdef PIP_CAN
piCout << "PICAN write" << can_id << max_size;
if (max_size > 8) {piCoutObj << "Can't send CAN frame bigger than 8 bytes (requested " << max_size << ")!"; return -1;}
can_frame frame;
frame.can_id = can_id;