On 21.03.2011 08:25, Jorge Fernandez Monteagudo wrote:
> I would like to know how to set the filter masks in order to receive can
> frames.
Hello Jorge,
please read
<a href="http://lxr.linux.no/#linux+v2.6.38/Documentation/networking/can.txt#L378">http://lxr.linux.no/#linux+v2.6.38/Documentation/networking/can.txt#L378
It tells that ...
A filter matches, when
<received_can_id> & mask == can_id & mask
which is analogous to known CAN controllers hardware filter semantics.
>
> In my current code I'm using only standard frames with 11 bits. The
> three possible
>
> situations for me are:
>
> - Read frames from only an identifier: Then I set :
>
> can_id = 0x1A4
>
> can_mask = 0x00
>
No.
Setting the can_mask to '0' means that no bits are relevant for the
filter and therefore you'll receive *anything* with this filter.
If you would like to filter only for 0x1A4 the filter mask must be 0x7FF
and as you would like to have no RTR nor EFF frames the higher bits must
be set:
can_mask = 0xC00007FF
which is the #defines (CAN_EFF_FLAG | CAN_RTR_FLAG | CAN_SFF_MASK) in can.h
Your other examples are flipped in the can_mask bits also.
Regards,
Oliver
_______________________________________________
Socketcan-users mailing list
[hidden email]
https://lists.berlios.de/mailman/listinfo/socketcan-users