我正在为我们的自定义板编写一个中间件,该中间件使用CC8M Nano通过CAN接口与较低级别板通信。我在CC8M纳米开发工具包板和我们的自定义设备中使用DEY 3.0 rev2和一些自定义层。我已经测试了apix-can-send和apix-can-recv示例可以正常工作。
从这些示例中,我创建了一个程序来管理CAN接口的写入和读取。

基本上,我请求can接口,注册清理方法和信号,初始化它,最后注册接收回调:

canInterface = ldx_can_request_by_name(iface.c_str());/ /……ldx_can_set_bitrate(canInterface, bitrate);canConfig。Bitrate =比特率;//——注册信号并退出清理函数atexit(cleanup);register_signals ();//——初始化接口initCode = ldx_can_init(canInterface, &canConfig);/ /……管理错误(删除为清晰)//——使用默认的过滤器结构can_filter defffilter; deffilter.can_id = 0; deffilter.can_mask = 0; cfilter = &deffilter; int nfilters = 1; int ret = ldx_can_register_rx_handler(canInterface, can_rx_callback, cfilter, nfilters);

然而,在此之后,每当我发送消息时,回调被调用,我读取自己的消息。我知道在某些情况下这是可取的,但在我和同事建立的自定义协议中不是这样。所以,我一直试图通过配置来防止这种情况。

我一直在钻研https://github.com/digi-embedded/libdigiapix/blob/dey-3.0/maint/src/can.c和can_netlink.c查看API是否碰巧打开了CAN_RAW_RECV_OWN_MSGS选项(见https://www.kernel.org/doc/Documentation/networking/can.txt(见4.1.4节)。然而,事实并非如此……

CAN API文档(//www.phdurl.com/2022世界杯G组resources/documentation/digidocs/embedded/dey/3.0/cc8mnano/yocto_r_apix-can)似乎无法访问这些标志或任何类似的配置。

我唯一能想到的是在发送消息之前取消回调的注册,然后再重新注册……但这似乎不是一个干净或正确的解决方案。

我错过什么了吗?我怎样才能不让别人看到我自己的can消息?
提前感谢您的任何帮助。