import mido

class MidiWrapper:
    def __init__(self):
        self._inPort = None
        self._outPort = None

    def connect(self, deviceName, callback):
        if self._inPort is None and self._outPort is None:
            self._inPort = mido.open_input(deviceName)
            self._inPort.callback = callback
            self._outPort = mido.open_output(deviceName)

    def disconnect(self):
        if self._inPort is not None:
            self._inPort.close()
            self._inPort = None

        if self._outPort is not None:
            self._outPort.reset()
            self._outPort.close()
            self._outPort = None

    def sendMessage(self, note, velocity, channel):
        if self._outPort is not None:
            msg = mido.Message('note_on', channel=channel, velocity=velocity, note=note)
            self._outPort.send(msg)