1 /** 2 * Copyright: Enalye 3 * License: Zlib 4 * Authors: Enalye 5 */ 6 module minuit.util.input; 7 8 import std.exception; 9 import std.string; 10 import std.stdio; 11 import std.conv; 12 13 import minuit.device; 14 import minuit.util.misc; 15 16 final class MnInput { 17 private { 18 MnInputPort _port; 19 MnInputHandle _handle; 20 bool _isOpen = false; 21 } 22 23 @property { 24 bool isOpen() const { return _isOpen; } 25 26 MnInputPort port() { return _port; } 27 MnInputPort port(MnInputPort newPort) { return _port = newPort; } 28 29 string name() const { return _port ? _port.name : ""; } 30 } 31 32 this() {} 33 34 this(MnInputPort newPort) { 35 _port = newPort; 36 } 37 38 ~this() { 39 close(); 40 } 41 42 bool open(uint num = 0u) { 43 if(_isOpen) { 44 close(); 45 _isOpen = false; 46 } 47 48 _handle = mnOpenInput(num); 49 if(_handle) { 50 _isOpen = true; 51 } 52 return _isOpen; 53 } 54 55 bool open(string name) { 56 if(_isOpen) { 57 close(); 58 _isOpen = false; 59 } 60 61 _handle = mnOpenInput(name); 62 if(_handle) { 63 _isOpen = true; 64 } 65 return _isOpen; 66 } 67 68 bool open(MnInputPort port) { 69 if(_isOpen) { 70 close(); 71 _isOpen = false; 72 } 73 74 _port = port; 75 _handle = mnOpenInput(port); 76 if(_handle) { 77 _isOpen = true; 78 } 79 return _isOpen; 80 } 81 82 bool close() { 83 if(_isOpen) { 84 mnCloseInput(_handle); 85 _isOpen = false; 86 } 87 return !_isOpen; 88 } 89 90 bool canReceive() { 91 if(!_isOpen) 92 return false; 93 return mnCanReceiveInput(_handle); 94 } 95 96 ubyte[] receive() { 97 if(!_isOpen) 98 return []; 99 return mnReceiveInput(_handle); 100 } 101 }