#include "tfl_can.h"
//
int can_init( int* sock )
{
struct sockaddr_can addr;
struct ifreq ifr;
const char* ifrname = "can1";
// open socket
if ((*sock = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0)
{
perror("Error open socket...\n");
return 1;
}
strcpy(ifr.ifr_name, ifrname);
// ioctl(*sock, SIOCGIFINDEX, &ifr);
ifr.ifr_ifindex = if_nametoindex(ifr.ifr_name);
// printf("%s \n", ifr.ifr_name);
if (!ifr.ifr_ifindex)
{
perror("if_nametoindex error...\n");
return 1;
}
memset(&addr, 0, sizeof(addr));
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
setsockopt(*sock, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); //disable filter.
// bind socket
if (bind(*sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("Error in socket bind...\n");
return 1;
}
return 0;
}
void can_tfl(int s, TFL* data)
{
char buf[5][8] = {0};
buf[0][7] = (data->total)<<2;
for(int i=0; i<5; i++)
{
buf[i][0] = ((data->type)<<4) + (data->color);
buf[i][1] = (data->xpos)>>4;
buf[i][2] = ((data->xpos)<<8) + ((data->level)<<2);
data++;
buf[i][4] = ((data->type)<<4) + (data->color);
buf[i][5] = (data->xpos)>>4;
buf[i][6] = ((data->xpos)<<8) + ((data->level)<<2);
buf[i][7] = buf[i][7] + (data->rlcnt);
if(i<4) data++;
cansend_tfl(s, i, buf[i]);
usleep(2000); // us
}
printf("**********can_tfl once*******\n");
return;
}
void cansend_tfl(int s, int i, char* buffer)
{
// send CAN frame
struct can_frame frame;
if(i==0) frame.can_id = 0x461;
else if(i==1) frame.can_id = 0x462;
else if(i==2) frame.can_id = 0x463;
else if(i==3) frame.can_id = 0x464;
else if(i==4) frame.can_id = 0x465;
frame.can_dlc = 8;
frame.data[0] = *buffer;
frame.data[1] = *(buffer+1);
frame.data[2] = *(buffer+2);
frame.data[3] = *(buffer+3);
frame.data[4] = *(buffer+4);
frame.data[5] = *(buffer+5);
frame.data[6] = *(buffer+6);
frame.data[7] = *(buffer+7);
printf("frame: %x %x %x %x %x %x %x %x\n", *buffer, *(buffer+1), *(buffer+2), *(buffer+3), *(buffer+4), *(buffer+5), *(buffer+6), *(buffer+7));
// int nbyte = write(s, &frame, sizeof(struct can_frame));
// printf("nbyte: %d, CAN_MTU: %d\n", nbyte, CAN_MTU);
if(write(s, &frame, sizeof(struct can_frame)) != CAN_MTU)
{
perror("write frame error.\n");
return;
}
return;
}
int main()
{
for (int k=0; k<100; k++)
{
TFL objs[10] = {{1, 1, 640, 3, 2, 0}, {3, 1, 456, 2, 2, 0}, {0}};
for(int i=0; i<10; i++) objs[i].rlcnt = 1;
TFL* data = objs;
int s;
can_init(&s);
can_tfl(s, data);
close(s);
printf("loop: %d\n", k);
}
}
int main_data()
{
int s;
can_init(&s);
struct can_frame frame;
frame.can_id = 0x461;
frame.can_dlc = 8;
printf("ID=%#x data length=%d\n", frame.can_id, frame.can_dlc);
/* prepare data for sending: 0x11,0x22...0x88 */
for (int i=0; i<8; i++)
{
frame.data[i] = ((i+1)<<4) | (i+1);
printf("%#x ", frame.data[i]);
}
printf("Sent out\n");
/* Sending data */
if(write(s, &frame, sizeof(frame)) < 0)
{
perror("Send failed");
return 1;
}
close(s);
return 0;
}
int main_init()
{
int s;
struct sockaddr_can addr;
struct ifreq ifr;
const char* ifrname = "can1";
// open socket
if ((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0)
{
perror("Error open socket...\n");
return 1;
}
strcpy(ifr.ifr_name, ifrname);
// ioctl(*sock, SIOCGIFINDEX, &ifr);
ifr.ifr_ifindex = if_nametoindex(ifr.ifr_name);
printf("%s \n", ifr.ifr_name);
if (!ifr.ifr_ifindex)
{
perror("if_nametoindex error...\n");
return 1;
}
memset(&addr, 0, sizeof(addr));
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); //disable filter.
// bind socket
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("Error in socket bind...\n");
return 1;
}
struct can_frame frame;
frame.can_id = 0x461;
frame.can_dlc = 8;
printf("ID=%#x data length=%d\n", frame.can_id, frame.can_dlc);
/* prepare data for sending: 0x11,0x22...0x88 */
for (int i=0; i<8; i++)
{
frame.data[i] = ((i+1)<<4) | (i+1);
printf("%#x ", frame.data[i]);
}
printf("Sent out\n");
/* Sending data */
if(write(s, &frame, sizeof(frame)) < 0)
{
perror("Send failed");
return 1;
}
close(s);
return 0;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.
- 161.
- 162.
- 163.
- 164.
- 165.
- 166.
- 167.
- 168.
- 169.
- 170.
- 171.
- 172.
- 173.
- 174.
- 175.
- 176.
- 177.