+/// @brief Create a RX_SETUP receive job using the BCM socket.
+///
+/// @return 0 if ok else -1
+int can_bus_dev_t::create_rx_filter(const can_signal_t& s)
+{
+ uint32_t can_id = s.get_message().get_id();
+
+ struct utils::canfd_bcm_msg bcm_msg;
+
+ uint8_t bit_size = s.get_bit_size();
+ float val = (float)exp2(bit_size);
+ uint64_t filter = eightbyte_encode_float(val, s.get_bit_position(), bit_size, s.get_factor(), s.get_offset());
+
+ bcm_msg.msg_head.opcode = RX_SETUP;
+ bcm_msg.msg_head.can_id = can_id;
+ bcm_msg.msg_head.nframes = 1;
+ U64_DATA(&bcm_msg.frames[0]) = filter;
+
+ if(can_socket_ << bcm_msg)
+ return 0;
+ return -1;
+}
+