code: def send(self, msg, timeout=None):
          
          if timeout is not None and timeout >= 0:
              self._ucan.set_tx_timeout(self.channel, int(timeout * 1000))
  
          message = CanMsg(msg.arbitration_id,
                           MsgFrameFormat.MSG_FF_STD |
                           (MsgFrameFormat.MSG_FF_EXT if msg.is_extended_id else 0) |
                           (MsgFrameFormat.MSG_FF_RTR if msg.is_remote_frame else 0),
                           msg.data)
          self._ucan.write_can_msg(self.channel, [message])
docs: Sends one CAN message.
  
          When a transmission timeout is set the firmware tries to send
          a message within this timeout. If it could not be sent the firmware sets
          the "auto delete" state. Within this state all transmit CAN messages for
          this channel will be deleted automatically for not blocking the other channel.
  
          :param can.Message msg:
              The CAN message.
  
          :param float timeout:
              Transmit timeout in seconds (value 0 switches off the "auto delete")
  
          :raises can.CanError:
              If the message could not be sent.