1 module dgpio; 2 3 import std.stdio : File; 4 import std.conv : to; 5 import std.string : strip; 6 7 class GPIO{ 8 immutable ubyte gpio; 9 bool err = false; 10 11 private void activate(){ 12 try{ 13 File pExport = File("/sys/class/gpio/export", "w"); 14 pExport.writefln("%s", gpio); 15 pExport.close(); 16 }catch(Exception e){ 17 err = true; 18 } 19 } 20 21 void deactivate(){ 22 try{ 23 File pUnexport = File("/sys/class/gpio/unexport", "w"); 24 pUnexport.writefln("%s", gpio); 25 pUnexport.close(); 26 }catch(Exception e){ 27 err = true; 28 } 29 } 30 31 void setInput(){ 32 scope(failure){ 33 err = true; 34 } 35 File pDirection = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/direction", "w"); 36 pDirection.writefln("in"); 37 pDirection.close(); 38 } 39 40 void setOutput(){ 41 scope(failure){ 42 err = true; 43 } 44 File pDirection = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/direction", "w"); 45 pDirection.writefln("out"); 46 pDirection.close(); 47 } 48 49 bool isInput(){ 50 scope(failure){ 51 err = true; 52 } 53 File pDirection = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/direction", "r"); 54 string str = strip(pDirection.readln()); 55 pDirection.close(); 56 switch(str){ 57 case "in": 58 return(true); 59 default: 60 return(false); 61 } 62 } 63 64 bool isOutput(){ 65 scope(failure){ 66 err = true; 67 } 68 File pDirection = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/direction", "r"); 69 string str = strip(pDirection.readln()); 70 pDirection.close(); 71 switch(str){ 72 case "out": 73 return(true); 74 default: 75 return(false); 76 } 77 } 78 79 void setHigh(){ 80 scope(failure){ 81 err = true; 82 return; 83 } 84 File pValue = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/value", "w"); 85 pValue.writefln("1"); 86 pValue.close(); 87 } 88 89 void setLow(){ 90 scope(failure){ 91 err = true; 92 return; 93 } 94 File pValue = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/value", "w"); 95 pValue.writefln("0"); 96 pValue.close(); 97 } 98 99 bool isHigh(){ 100 scope(failure){ 101 err = true; 102 } 103 File pValue = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/value", "r"); 104 string str = strip(pValue.readln()); 105 pValue.close(); 106 switch(str){ 107 case "0": 108 return(false); 109 default: 110 return(true); 111 } 112 } 113 114 bool isLow(){ 115 scope(failure){ 116 err = true; 117 } 118 File pValue = File("/sys/class/gpio/gpio" ~ to!string(gpio) ~ "/value", "r"); 119 string str = strip(pValue.readln()); 120 pValue.close(); 121 switch(str){ 122 case "0": 123 return(true); 124 default: 125 return(false); 126 } 127 } 128 129 void deleteError(){ 130 scope(failure){ 131 err = true; 132 } 133 err = false; 134 } 135 136 this(ubyte gpio){ 137 scope(failure){ 138 err = true; 139 } 140 this.gpio = gpio; 141 activate(); 142 } 143 144 ~this(){ 145 deactivate(); 146 } 147 }