code: def send(self, msg, timeout=None):
          
          try:
              timestamp = struct.pack('<I', int(msg.timestamp * 1000))
          except struct.error:
              raise ValueError('Timestamp is out of range')
          try:
              a_id = struct.pack('<I', msg.arbitration_id)
          except struct.error:
              raise ValueError('Arbitration Id is out of range')
          byte_msg = bytearray()
          byte_msg.append(0xAA)
          for i in range(0, 4):
              byte_msg.append(timestamp[i])
          byte_msg.append(msg.dlc)
          for i in range(0, 4):
              byte_msg.append(a_id[i])
          for i in range(0, msg.dlc):
              byte_msg.append(msg.data[i])
          byte_msg.append(0xBB)
          self.ser.write(byte_msg)
docs: Send a message over the serial device.
  
          :param can.Message msg:
              Message to send.
  
              .. note:: Flags like ``extended_id``, ``is_remote_frame`` and
                        ``is_error_frame`` will be ignored.
  
              .. note:: If the timestamp is a float value it will be converted
                        to an integer.
  
          :param timeout:
              This parameter will be ignored. The timeout value of the channel is
              used instead.