]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/tool/mbed/mbed-sdk/workspace_tools/host_tests/midi.py
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[qmk_firmware.git] / tmk_core / tool / mbed / mbed-sdk / workspace_tools / host_tests / midi.py
1 from __future__ import print_function
2 import sys
3 import re
4 import time
5 import mido
6 from mido import Message
7
8
9 def test_midi_in(port):
10         expected_messages_count=0
11         while expected_messages_count < 7:
12                 for message in port.iter_pending():
13                         if message.type in ('note_on', 'note_off', 'program_change', 'sysex'):
14                                 yield message
15                                 expected_messages_count+=1
16                 time.sleep(0.1)
17
18 def test_midi_loopback(input_port):
19         expected_messages_count=0
20         while expected_messages_count < 1:
21                 for message in input_port.iter_pending():
22                         print('Test MIDI OUT loopback received {}'.format(message.hex()))
23                         expected_messages_count+=1
24
25 def test_midi_out_loopback(output_port,input_port):
26         print("Test MIDI OUT loopback")
27         output_port.send(Message('program_change', program=1))
28         test_midi_loopback(input_port)
29
30         output_port.send(Message('note_on', note=21))
31         test_midi_loopback(input_port)
32
33         output_port.send(Message('note_off', note=21))
34         test_midi_loopback(input_port)
35
36         output_port.send(Message('sysex', data=[0x7E,0x7F,0x09,0x01]))
37         test_midi_loopback(input_port)
38
39         output_port.send(Message('sysex', data=[0x7F,0x7F,0x04,0x01,0x7F,0x7F]))
40         test_midi_loopback(input_port)
41
42         output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x7F,0x00,0x41]))
43         test_midi_loopback(input_port)
44
45         output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x04,0x7F,0x3D]))
46         test_midi_loopback(input_port)
47
48 portname=""
49
50 while portname=="":
51         print("Wait for MIDI IN plug ...")
52         for name in mido.get_input_names():
53                 matchObj = re.match( r'Mbed', name)
54
55                 if matchObj:
56                         portname=name
57         time.sleep( 1 )
58
59 try:
60         input_port = mido.open_input(portname)
61         output_port = mido.open_output(portname)
62         
63         print('Using {}'.format(input_port))
64
65         print("Test MIDI IN")
66
67         for message in test_midi_in(input_port):
68                 print('Test MIDI IN received {}'.format(message.hex()))
69
70         test_midi_out_loopback(output_port,input_port)
71 except KeyboardInterrupt:
72     pass