Skip to content

Commit

Permalink
Support Inverting Outputs on GPIO by XML config
Browse files Browse the repository at this point in the history
  • Loading branch information
talkkonnect committed May 2, 2022
1 parent 80e22b1 commit b9d4edd
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 29 deletions.
100 changes: 76 additions & 24 deletions gpio.go
Original file line number Diff line number Diff line change
Expand Up @@ -829,13 +829,26 @@ func GPIOOutPin(name string, command string) {
if command == "on" {
switch io.Type {
case "gpio":
log.Printf("debug: Turning On %v at pin %v Output GPIO\n", io.Name, io.PinNo)
gpio.NewOutput(io.PinNo, true)
if !io.Inverted {
log.Printf("debug: Turning On %v at pin %v Output GPIO (Non-Inverting)\n", io.Name, io.PinNo)
gpio.NewOutput(io.PinNo, true)
} else {
log.Printf("debug: Turning On %v at pin %v Output GPIO (Inverting)\n", io.Name, io.PinNo)
gpio.NewOutput(io.PinNo, false)
}
case "mcp23017":
log.Printf("debug: Turning On %v at pin %v Output mcp23017\n", io.Name, io.PinNo)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.LOW)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017 with error %v\n", io.Name, io.PinNo, err)
if !io.Inverted {
log.Printf("debug: Turning On %v at pin %v Output mcp23017 (Inverted)\n", io.Name, io.PinNo)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.HIGH)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017 with error %v\n", io.Name, io.PinNo, err)
}
} else {
log.Printf("debug: Turning On %v at pin %v Output mcp23017 (Non-Inverted)\n", io.Name, io.PinNo)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.LOW)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017 with error %v\n", io.Name, io.PinNo, err)
}
}
default:
log.Println("error: GPIO Types Currently Supported are gpio or mcp23017 only!")
Expand All @@ -846,13 +859,26 @@ func GPIOOutPin(name string, command string) {
if command == "off" {
switch io.Type {
case "gpio":
log.Printf("debug: Turning Off %v at pin %v Output GPIO\n", io.Name, io.PinNo)
gpio.NewOutput(io.PinNo, false)
if !io.Inverted {
log.Printf("debug: Turning Off %v at pin %v Output GPIO (Non-Inverting)\n", io.Name, io.PinNo)
gpio.NewOutput(io.PinNo, false)
} else {
log.Printf("debug: Turning Off %v at pin %v Output GPIO (Inverting)\n", io.Name, io.PinNo)
gpio.NewOutput(io.PinNo, true)
}
case "mcp23017":
log.Printf("debug: Turning Off %v at pin %v Output mcp23017\n", io.Name, io.PinNo)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.HIGH)
if err != nil {
log.Printf("error: Error Turning Off %v at pin %v Output mcp23017 with error %v\n", io.Name, io.PinNo, err)
if !io.Inverted {
log.Printf("debug: Turning Off %v at pin %v Output mcp23017 (Inverted)\n", io.Name, io.PinNo)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.LOW)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017 with error %v\n", io.Name, io.PinNo, err)
}
} else {
log.Printf("debug: Turning Off %v at pin %v Output mcp23017 (Non-Inverted)\n", io.Name, io.PinNo)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.HIGH)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017 with error %v\n", io.Name, io.PinNo, err)
}
}
default:
log.Println("error: GPIO Types Currently Supported are gpio or mcp23017 only!")
Expand Down Expand Up @@ -906,29 +932,55 @@ func GPIOOutAll(name string, command string) {
switch io.Type {
case "gpio":
if command == "on" {
log.Printf("debug: Turning On %v Output GPIO\n", io.Name)
gpio.NewOutput(io.PinNo, true)
if io.Inverted {
log.Printf("debug: Turning On %v Output GPIO (Inverted)\n", io.Name)
gpio.NewOutput(io.PinNo, false)
} else {
log.Printf("debug: Turning On %v Output GPIO (Not-Inverted)\n", io.Name)
gpio.NewOutput(io.PinNo, true)
}
}
if command == "off" {
log.Printf("debug: Turning Off %v Output GPIO\n", io.Name)
gpio.NewOutput(io.PinNo, false)
if io.Inverted {
log.Printf("debug: Turning Off %v Output GPIO (Inverted)\n", io.Name)
gpio.NewOutput(io.PinNo, true)
} else {
log.Printf("debug: Turning Off %v Output GPIO (Not-Inverted)\n", io.Name)
gpio.NewOutput(io.PinNo, false)
}
}
case "mcp23017":
if command == "on" {
log.Printf("debug: Turning On %v Output mcp23017\n", io.Name)
if D[io.ID] != nil {
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.LOW)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017\n", io.Name, io.PinNo)
if io.Inverted {
log.Printf("debug: Turning On %v Output mcp23017 (Inverted)\n", io.Name)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.HIGH)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017 (Inverted)\n", io.Name, io.PinNo)
}
} else {
log.Printf("debug: Turning On %v Output mcp23017 (Not Inverted)\n", io.Name)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.LOW)
if err != nil {
log.Printf("error: Error Turning On %v at pin %v Output mcp23017 (Inverted)\n", io.Name, io.PinNo)
}
}
}
}
if command == "off" {
log.Printf("debug: Turning Off %v Output mcp23017\n", io.Name)
if D[io.ID] != nil {
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.HIGH)
if err != nil {
log.Printf("error: Error Turning Off %v at pin %v Output mcp23017\n", io.Name, io.PinNo)
if io.Inverted {
log.Printf("debug: Turning Off %v Output mcp23017 (Inverted)\n", io.Name)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.LOW)
if err != nil {
log.Printf("error: Error Turning Off %v at pin %v Output mcp23017 (Inverted)\n", io.Name, io.PinNo)
}
} else {
log.Printf("debug: Turning Off %v Output mcp23017 (Not Inverted)\n", io.Name)
err := D[io.ID].DigitalWrite(uint8(io.PinNo), mcp23017.HIGH)
if err != nil {
log.Printf("error: Error Turning Off %v at pin %v Output mcp23017 (Inverted)\n", io.Name, io.PinNo)
}
}
}
}
Expand Down
7 changes: 3 additions & 4 deletions version.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,10 @@
package talkkonnect

const (
talkkonnectVersion string = "2.13.06"
talkkonnectReleased string = "Apr 11 2022"
talkkonnectVersion string = "2.14.01"
talkkonnectReleased string = "May 02 2022"
)

/* Release Notes
1. User Event Shown with User Responsible for Event in Log
2. Participant LED logical Bug Fixed
1. Support Inverting in GPIO Outputs For Convinience (Configurable by XML)
*/
3 changes: 2 additions & 1 deletion xmlparser.go
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,7 @@ type ConfigStruct struct {
PinNo uint `xml:"pinno,attr"`
Type string `xml:"type,attr"`
ID int `xml:"chipid,attr"`
Inverted bool `xml:"inverted,attr"`
Enabled bool `xml:"enabled,attr"`
} `xml:"pin"`
} `xml:"pins"`
Expand Down Expand Up @@ -1171,7 +1172,7 @@ func printxmlconfig() {
if Config.Global.Software.PrintVariables.PrintPins {
log.Println("info: ------------ PINS -------------- ")
for _, pins := range Config.Global.Hardware.IO.Pins.Pin {
log.Printf("info: Direction=%v Device%v Name=%v PinNo=%v Type=%v ID=%v Enabled=%v\n", pins.Direction, pins.Device, pins.Name, pins.PinNo, pins.Type, pins.ID, pins.Enabled)
log.Printf("info: Direction=%v Device%v Name=%v PinNo=%v Type=%v ID=%v Inverted=%v Enabled=%v\n", pins.Direction, pins.Device, pins.Name, pins.PinNo, pins.Type, pins.ID, pins.Inverted, pins.Enabled)
}
} else {
log.Println("info: ------------ PINS -------------- SKIPPED")
Expand Down

0 comments on commit b9d4edd

Please sign in to comment.