📄 can_gener.c
字号:
#include "can_hardvalue.h"
extern int read_tx_counter0(int);
extern int read_tx_counter1(int);
extern int read_rx_counter1(int);
extern int read_rx_counter0(int);
int change_frame_format(struct CAN_frame *message,int io)
{
int mess_len,frame_type;
u8 *ptr;
int i;
frame_type=message->ff & 0xc0;
switch (frame_type) {
case 0x40:
case 0xc0:
break;
case 0x80:
ptr=&message->id3;
mess_len=message->ff&0x0f;
if ((mess_len<1)||(mess_len>8)) {
printk("error mess len %d \n",mess_len);
return -EFRAME;
}
break;
case 0x00:
ptr=&message->id3;
mess_len=message->ff&0x0f;
if ((mess_len>8)||(mess_len<1)) {
printk("type 0x00 mess len %d \n",mess_len);
return -EFRAME;
}
if (io==BUFTOHARD)
for (i=0;i<mess_len;i++,ptr++)
*ptr=message->data[i];
else if (io==HARDTOBUF) {
ptr=ptr+mess_len;
for (i=0;i<mess_len;i++,ptr--)
*(ptr+1)=*(ptr-1);
}
break;
default:
printk("error message type\n");
return -EFRAME;
}
return 0;
}
int modify_irq(int irq,struct CAN_device_struct *dev)
{
int result;
if (irq==dev->int_level) {
printk("current IRQ is that you will set \n");
return -1;
}
if (dev->ref_count>1) {
printk("device is busy, current IRQ=%d,don't modify IRQ\n",dev->int_level);
return -1;
}
//81
free_irq(irq,dev);
result=request_irq(irq,CAN_interrupt,
SA_INTERRUPT|SA_SHIRQ,dev->dev_name,dev);
if (result) {
printk("request_irq failed\n");
result=request_irq(dev->int_level,CAN_interrupt,
SA_SHIRQ|SA_INTERRUPT,dev->dev_name,dev);
if (result) printk("CAN halt ,please insmod can.o again\n");
return result;
}
else {
printk("request_irq succeed,irq=%d\n",irq);
dev->int_level=irq;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -