关于Linux中socket can怎么使用,优快云上已经有很多文章介绍。本文重点记录can_filter中的 CAN_INV_FILTER的使用,很多文章对此一笔带过,且很多文章翻译不全,或者原文不全,导致自己浪费了些时间,最后在看candump源码时才发现问题所在。
直接贴代码解释,以下为写的一个最简单的canId过滤函数:
宏定义
/** CAN报文过滤方式 **/
#define CAN_FILTER_PASS 0x01 //过滤方式-通过
#define CAN_FILTER_REJECT 0x02 //过滤方式-拒绝
函数声明
/**
* @brief canRcvFiltersSet - CAN报文接收过滤设置
* @param canIdArray: 数组中每个元素为要过滤的canId且不能为0;若该参数置为NULL,则表示该Can口不需要接收任何报文
* @param arraySize: 数组大小,若canIdArray置为NULL,则该项置0
* @param filterType: 过滤方式的宏定义,若canIdArray置为NULL,则该项置0,否则应为以下二选一
* CAN_FILTER_PASS: 只接收与canIdArray中canId一致的报文
* CAN_FILTER_REJECT: 与canIdArray中canId一致的报文都不接收,其它报文接收
* @return true:成功,false:失败
*/
bool canRcvFiltersSet(const uint *canIdArray, const uint &arraySize, short filterType);
函数定义
bool rcvFiltersSet(const uint *canIdArray, const uint &arraySize