gobot.io/x/gobot/v2@v2.1.0/drivers/gpio/direct_pin_driver.go (about) 1 package gpio 2 3 import ( 4 "strconv" 5 6 "gobot.io/x/gobot/v2" 7 ) 8 9 // DirectPinDriver represents a GPIO pin 10 type DirectPinDriver struct { 11 name string 12 pin string 13 connection gobot.Connection 14 gobot.Commander 15 } 16 17 // NewDirectPinDriver return a new DirectPinDriver given a Connection and pin. 18 // 19 // Adds the following API Commands: 20 // 21 // "DigitalRead" - See DirectPinDriver.DigitalRead 22 // "DigitalWrite" - See DirectPinDriver.DigitalWrite 23 // "PwmWrite" - See DirectPinDriver.PwmWrite 24 // "ServoWrite" - See DirectPinDriver.ServoWrite 25 func NewDirectPinDriver(a gobot.Connection, pin string) *DirectPinDriver { 26 d := &DirectPinDriver{ 27 name: gobot.DefaultName("DirectPin"), 28 connection: a, 29 pin: pin, 30 Commander: gobot.NewCommander(), 31 } 32 33 d.AddCommand("DigitalRead", func(params map[string]interface{}) interface{} { 34 val, err := d.DigitalRead() 35 return map[string]interface{}{"val": val, "err": err} 36 }) 37 d.AddCommand("DigitalWrite", func(params map[string]interface{}) interface{} { 38 level, _ := strconv.Atoi(params["level"].(string)) 39 return d.DigitalWrite(byte(level)) 40 }) 41 d.AddCommand("PwmWrite", func(params map[string]interface{}) interface{} { 42 level, _ := strconv.Atoi(params["level"].(string)) 43 return d.PwmWrite(byte(level)) 44 }) 45 d.AddCommand("ServoWrite", func(params map[string]interface{}) interface{} { 46 level, _ := strconv.Atoi(params["level"].(string)) 47 return d.ServoWrite(byte(level)) 48 }) 49 50 return d 51 } 52 53 // Name returns the DirectPinDrivers name 54 func (d *DirectPinDriver) Name() string { return d.name } 55 56 // SetName sets the DirectPinDrivers name 57 func (d *DirectPinDriver) SetName(n string) { d.name = n } 58 59 // Pin returns the DirectPinDrivers pin 60 func (d *DirectPinDriver) Pin() string { return d.pin } 61 62 // Connection returns the DirectPinDrivers Connection 63 func (d *DirectPinDriver) Connection() gobot.Connection { return d.connection } 64 65 // Start implements the Driver interface 66 func (d *DirectPinDriver) Start() (err error) { return } 67 68 // Halt implements the Driver interface 69 func (d *DirectPinDriver) Halt() (err error) { return } 70 71 // Off turn off pin 72 func (d *DirectPinDriver) Off() (err error) { 73 if writer, ok := d.Connection().(DigitalWriter); ok { 74 return writer.DigitalWrite(d.Pin(), byte(0)) 75 } 76 err = ErrDigitalWriteUnsupported 77 return 78 } 79 80 // On turn on pin 81 func (d *DirectPinDriver) On() (err error) { 82 if writer, ok := d.Connection().(DigitalWriter); ok { 83 return writer.DigitalWrite(d.Pin(), byte(1)) 84 } 85 err = ErrDigitalWriteUnsupported 86 return 87 } 88 89 // DigitalRead returns the current digital state of the pin 90 func (d *DirectPinDriver) DigitalRead() (val int, err error) { 91 if reader, ok := d.Connection().(DigitalReader); ok { 92 return reader.DigitalRead(d.Pin()) 93 } 94 err = ErrDigitalReadUnsupported 95 return 96 } 97 98 // DigitalWrite writes to the pin. Acceptable values are 1 or 0 99 func (d *DirectPinDriver) DigitalWrite(level byte) (err error) { 100 if writer, ok := d.Connection().(DigitalWriter); ok { 101 return writer.DigitalWrite(d.Pin(), level) 102 } 103 err = ErrDigitalWriteUnsupported 104 return 105 } 106 107 // PwmWrite writes the 0-254 value to the specified pin 108 func (d *DirectPinDriver) PwmWrite(level byte) (err error) { 109 if writer, ok := d.Connection().(PwmWriter); ok { 110 return writer.PwmWrite(d.Pin(), level) 111 } 112 err = ErrPwmWriteUnsupported 113 return 114 } 115 116 // ServoWrite writes value to the specified pin 117 func (d *DirectPinDriver) ServoWrite(level byte) (err error) { 118 if writer, ok := d.Connection().(ServoWriter); ok { 119 return writer.ServoWrite(d.Pin(), level) 120 } 121 err = ErrServoWriteUnsupported 122 return 123 }