mirror of
https://github.com/xtacocorex/CHIP_IO
synced 2025-07-20 12:53:22 +00:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
8ecec67bad | |||
d0ed4665aa | |||
1d641ecdff | |||
8241f54891 | |||
abbc4968c6 | |||
9a2e81f093 | |||
7cce06b472 |
@ -1,3 +1,19 @@
|
||||
0.3.0
|
||||
----
|
||||
* Added setmode() function for GPIO to maintain compatibility with Raspberry Pi scripts, this function literally does nothing
|
||||
* Added per pin cleanup functionality for GPIO and SoftPWM so you can unexport a pin without unexporting every pin
|
||||
* Updated README to make edge detection wording a little better and to add the per pin cleanup code
|
||||
* Version update since I blasted through 3 issues on github and feel like we need a nice bump to 0.3
|
||||
|
||||
0.2.7
|
||||
----
|
||||
* Fix to the Enable 1.8V Pin code as it wasn't working due to bit shifting isn't allowed on a float.
|
||||
* Updated README to denote the PocketCHIP Pin names better
|
||||
|
||||
0.2.6
|
||||
----
|
||||
* Fix to keep the GPIO value file open until the pin is unexported (issue #34)
|
||||
|
||||
0.2.5
|
||||
----
|
||||
* Updates to the pytest code for HWPWM and SoftPWM
|
||||
|
@ -35,7 +35,7 @@ def set_1v8_pin_voltage(voltage):
|
||||
return False
|
||||
if voltage < 1.8 or voltage > 3.3:
|
||||
return False
|
||||
voltage=round((voltage - 1.8) / 0.1) << 4
|
||||
voltage=int(round((voltage - 1.8) / 0.1)) << 4
|
||||
if subprocess.call(["/usr/sbin/i2cset", "-f", "-y" ,"0", "0x34", "0x90", "0x03"]):
|
||||
return False
|
||||
if subprocess.call(["/usr/sbin/i2cset", "-f", "-y", "0", "0x34", "0x91", str(voltage)]):
|
||||
|
2
Makefile
2
Makefile
@ -6,7 +6,7 @@ publish: package
|
||||
|
||||
clean:
|
||||
rm -rf CHIP_IO.* build dist
|
||||
rm -f *.pyo
|
||||
rm -f *.pyo *.pyc
|
||||
rm -f *.egg
|
||||
rm -f overlays/*.pyo overlays/*.pyc
|
||||
tests:
|
||||
|
228
README.rst
228
README.rst
@ -44,115 +44,115 @@ All scripts that require GPIO, PWM (HW and/or SW), and Overlay Manager need to b
|
||||
|
||||
**Allowable Pin Names for the Library**
|
||||
|
||||
The following "table" is the allowable pin names that are able to be used by the library.
|
||||
The following "table" is the allowable pin names that are able to be used by the library. The Name column is the normal name used on the CHIP Headers, the Alt Name column is the value used by the PocketCHIP header (if it's broken out), and the Key is the Header and Pin Number the the Pin is physically located. Either of these 3 means is able to specify a pin in CHIP_IO.
|
||||
|
||||
+-----------+-------------+--------+
|
||||
| Name | Alt Name | Key |
|
||||
+-----------+-------------+--------+
|
||||
| TWI1-SDA | KPD-I2C-SDA | U13_9 |
|
||||
+-----------+-------------+--------+
|
||||
| TWI1-SCK | KPD-I2C-SCL | U13_11 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D2 | LCD-D2 | U13_17 |
|
||||
+-----------+-------------+--------+
|
||||
| PWM0 | PWM0 | U13_18 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D4 | LCD-D4 | U13_19 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D3 | LCD-D3 | U13_20 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D6 | LCD-D6 | U13_21 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D5 | LCD-D5 | U13_22 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D10 | LCD-D10 | U13_23 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D7 | LCD-D7 | U13_24 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D12 | LCD-D12 | U13_25 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D11 | LCD-D11 | U13_26 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D14 | LCD-D14 | U13_27 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D13 | LCD-D13 | U13_28 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D18 | LCD-D18 | U13_29 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D15 | LCD-D15 | U13_30 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D20 | LCD-D20 | U13_31 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D19 | LCD-D19 | U13_32 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D22 | LCD-D22 | U13_33 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D21 | LCD-D21 | U13_34 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-CLK | LCD-CLK | U13_35 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-D23 | LCD-D23 | U13_36 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-VSYNC | LCD-VSYNC | U13_37 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-HSYNC | LCD-HSYNC | U13_38 |
|
||||
+-----------+-------------+--------+
|
||||
| LCD-DE | LCD-DE | U13_40 |
|
||||
+-----------+-------------+--------+
|
||||
| UART1-TX | UART-TX | U14_3 |
|
||||
+-----------+-------------+--------+
|
||||
| UART1-RX | UART-RX | U14_5 |
|
||||
+-----------+-------------+--------+
|
||||
| LRADC | ADC | U14_11 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P0 | XIO-P0 | U14_13 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P1 | XIO-P1 | U14_14 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P2 | GPIO1 | U14_15 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P3 | GPIO2 | U14_16 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P4 | GPIO3 | U14_17 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P5 | GPIO4 | U14_18 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P6 | GPIO5 | U14_19 |
|
||||
+-----------+-------------+--------+
|
||||
| XIO-P7 | GPIO6 | U14_20 |
|
||||
+-----------+-------------+--------+
|
||||
| AP-EINT1 | KPD-INT | U14_23 |
|
||||
+-----------+-------------+--------+
|
||||
| AP-EINT3 | AP-INT3 | U14_24 |
|
||||
+-----------+-------------+--------+
|
||||
| TWI2-SDA | I2C-SDA | U14_25 |
|
||||
+-----------+-------------+--------+
|
||||
| TWI2-SCK | I2C-SCL | U14_26 |
|
||||
+-----------+-------------+--------+
|
||||
| CSIPCK | SPI-SEL | U14_27 |
|
||||
+-----------+-------------+--------+
|
||||
| CSICK | SPI-CLK | U14_28 |
|
||||
+-----------+-------------+--------+
|
||||
| CSIHSYNC | SPI-MOSI | U14_29 |
|
||||
+-----------+-------------+--------+
|
||||
| CSIVSYNC | SPI-MISO | U14_30 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID0 | CSID0 | U14_31 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID1 | CSID1 | U14_32 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID2 | CSID2 | U14_33 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID3 | CSID3 | U14_34 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID4 | CSID4 | U14_35 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID5 | CSID5 | U14_36 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID6 | CSID6 | U14_37 |
|
||||
+-----------+-------------+--------+
|
||||
| CSID7 | CSID7 | U14_38 |
|
||||
+-----------+-------------+--------+
|
||||
+------------------+--------------------------+--------+
|
||||
| CHIP (Name) | PocketCHIP (Alt Name) | Key |
|
||||
+------------------+--------------------------+--------+
|
||||
| TWI1-SDA | KPD-I2C-SDA | U13_9 |
|
||||
+------------------+--------------------------+--------+
|
||||
| TWI1-SCK | KPD-I2C-SCL | U13_11 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D2 | LCD-D2 | U13_17 |
|
||||
+------------------+--------------------------+--------+
|
||||
| PWM0 | PWM0 | U13_18 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D4 | LCD-D4 | U13_19 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D3 | LCD-D3 | U13_20 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D6 | LCD-D6 | U13_21 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D5 | LCD-D5 | U13_22 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D10 | LCD-D10 | U13_23 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D7 | LCD-D7 | U13_24 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D12 | LCD-D12 | U13_25 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D11 | LCD-D11 | U13_26 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D14 | LCD-D14 | U13_27 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D13 | LCD-D13 | U13_28 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D18 | LCD-D18 | U13_29 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D15 | LCD-D15 | U13_30 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D20 | LCD-D20 | U13_31 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D19 | LCD-D19 | U13_32 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D22 | LCD-D22 | U13_33 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D21 | LCD-D21 | U13_34 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-CLK | LCD-CLK | U13_35 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-D23 | LCD-D23 | U13_36 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-VSYNC | LCD-VSYNC | U13_37 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-HSYNC | LCD-HSYNC | U13_38 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LCD-DE | LCD-DE | U13_40 |
|
||||
+------------------+--------------------------+--------+
|
||||
| UART1-TX | UART-TX | U14_3 |
|
||||
+------------------+--------------------------+--------+
|
||||
| UART1-RX | UART-RX | U14_5 |
|
||||
+------------------+--------------------------+--------+
|
||||
| LRADC | ADC | U14_11 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P0 | XIO-P0 | U14_13 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P1 | XIO-P1 | U14_14 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P2 | GPIO1 | U14_15 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P3 | GPIO2 | U14_16 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P4 | GPIO3 | U14_17 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P5 | GPIO4 | U14_18 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P6 | GPIO5 | U14_19 |
|
||||
+------------------+--------------------------+--------+
|
||||
| XIO-P7 | GPIO6 | U14_20 |
|
||||
+------------------+--------------------------+--------+
|
||||
| AP-EINT1 | KPD-INT | U14_23 |
|
||||
+------------------+--------------------------+--------+
|
||||
| AP-EINT3 | AP-INT3 | U14_24 |
|
||||
+------------------+--------------------------+--------+
|
||||
| TWI2-SDA | I2C-SDA | U14_25 |
|
||||
+------------------+--------------------------+--------+
|
||||
| TWI2-SCK | I2C-SCL | U14_26 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSIPCK | SPI-SEL | U14_27 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSICK | SPI-CLK | U14_28 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSIHSYNC | SPI-MOSI | U14_29 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSIVSYNC | SPI-MISO | U14_30 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID0 | CSID0 | U14_31 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID1 | CSID1 | U14_32 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID2 | CSID2 | U14_33 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID3 | CSID3 | U14_34 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID4 | CSID4 | U14_35 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID5 | CSID5 | U14_36 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID6 | CSID6 | U14_37 |
|
||||
+------------------+--------------------------+--------+
|
||||
| CSID7 | CSID7 | U14_38 |
|
||||
+------------------+--------------------------+--------+
|
||||
|
||||
**GPIO Setup**
|
||||
|
||||
@ -191,12 +191,12 @@ Polling inputs::
|
||||
else:
|
||||
print("LOW")
|
||||
|
||||
The edge detection code below only works for the AP-EINT1, AP-EINT3, and XPO Pins on the CHIP.
|
||||
|
||||
Waiting for an edge (GPIO.RISING, GPIO.FALLING, or GPIO.BOTH::
|
||||
|
||||
GPIO.wait_for_edge(channel, GPIO.RISING)
|
||||
|
||||
This only works for the AP-EINT1, AP-EINT3, and XPO Pins on the CHIP
|
||||
|
||||
Detecting events::
|
||||
|
||||
GPIO.setup("XIO-P0", GPIO.IN)
|
||||
@ -206,11 +206,16 @@ Detecting events::
|
||||
if GPIO.event_detected("XIO-P0"):
|
||||
print "event detected!"
|
||||
|
||||
CHIP_IO can also handle adding callback functions on any pin that supports edge detection.
|
||||
|
||||
**GPIO Cleanup**
|
||||
|
||||
To clean up the GPIO when done, do the following::
|
||||
|
||||
# Clean up every exported GPIO Pin
|
||||
GPIO.cleanup()
|
||||
# Clean up a single pin (keeping everything else intact)
|
||||
GPIO.cleanup("XIO-P0")
|
||||
|
||||
**PWM**::
|
||||
|
||||
@ -239,7 +244,10 @@ Hardware PWM requires a DTB Overlay loaded on the CHIP to allow the kernel to kn
|
||||
SPWM.set_frequency("XIO-P7", 10)
|
||||
# To Stop SPWM
|
||||
SPWM.stop("XIO-P7")
|
||||
# Cleanup can have no argument to clean up all SoftPWM outputs
|
||||
SPWM.cleanup()
|
||||
# Or you can specify a single SoftPWM output to cleanup (keeping the rest intact)
|
||||
SPWM.cleanup("XIO-P7")
|
||||
#For specific polarity: this example sets polarity to 1 on start:
|
||||
SPWM.start("XIO-P7", 50, 2000, 1)
|
||||
|
||||
|
@ -7,7 +7,6 @@ import sys
|
||||
def compile():
|
||||
print("Compiling DTS Files")
|
||||
call(["dtc", "-O", "dtb", "-o", "overlays/chip-spi2.dtbo", "-b", "o", "-@", "overlays/chip-spi2.dts"])
|
||||
call(["dtc", "-O", "dtb", "-o", "overlays/chip-i2c1.dtbo", "-b", "o", "-@", "overlays/chip-i2c1.dts"])
|
||||
call(["dtc", "-O", "dtb", "-o", "overlays/chip-pwm0.dtbo", "-b", "o", "-@", "overlays/chip-pwm0.dts"])
|
||||
|
||||
def copy():
|
||||
@ -22,5 +21,4 @@ def copy():
|
||||
os.remove(fl)
|
||||
print("Moving DTBO files to "+overlay_path)
|
||||
shutil.move("overlays/chip-spi2.dtbo", overlay_path+"/chip-spi2.dtbo")
|
||||
shutil.move("overlays/chip-i2c1.dtbo", overlay_path+"/chip-i2c1.dtbo")
|
||||
shutil.move("overlays/chip-pwm0.dtbo", overlay_path+"/chip-pwm0.dtbo")
|
||||
|
2
setup.py
2
setup.py
@ -20,7 +20,7 @@ classifiers = ['Development Status :: 3 - Alpha',
|
||||
'Topic :: System :: Hardware']
|
||||
|
||||
setup(name = 'CHIP_IO',
|
||||
version = '0.2.5',
|
||||
version = '0.3.0',
|
||||
author = 'Robert Wolterman',
|
||||
author_email = 'robert.wolterman@gmail.com',
|
||||
description = 'A module to control CHIP IO channels',
|
||||
|
162
source/common.c
162
source/common.c
@ -50,87 +50,87 @@ int setup_error = 0;
|
||||
int module_setup = 0;
|
||||
|
||||
pins_t pins_info[] = {
|
||||
{ "GND", "GND", "U13_1", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CHG-IN", "CHG-IN", "U13_2", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "VCC-5V", "VCC-5V", "U13_3", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "GND", "GND", "U13_4", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "VCC-3V3", "VCC-3V3", "U13_5", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "TS", "TS", "U13_6", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "VCC-1V8", "VCC-1V8", "U13_7", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "BAT", "BAT", "U13_8", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "TWI1-SDA", "KPD-I2C-SDA", "U13_9", 48, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "PWRON", "PWRON", "U13_10", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "TWI1-SCK", "KPD-I2C-SCL", "U13_11", 47, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "GND", "GND", "U13_12", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "X1", "X1", "U13_13", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "X2", "X2", "U13_14", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "Y1", "Y1", "U13_15", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "Y2", "Y2", "U13_16", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D2", "LCD-D2", "U13_17", 98, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "PWM0", "PWM0", "U13_18", 34, BASE_METHOD_AS_IS, 0, -1},
|
||||
{ "LCD-D4", "LCD-D4", "U13_19", 100, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D3", "LCD-D3", "U13_20", 99, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D6", "LCD-D6", "U13_21", 102, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D5", "LCD-D5", "U13_22", 101, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D10", "LCD-D10", "U13_23", 106, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D7", "LCD-D7", "U13_24", 103, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D12", "LCD-D12", "U13_25", 108, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D11", "LCD-D11", "U13_26", 107, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D14", "LCD-D14", "U13_27", 110, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D13", "LCD-D13", "U13_28", 109, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D18", "LCD-D18", "U13_29", 114, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D15", "LCD-D15", "U13_30", 111, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D20", "LCD-D20", "U13_31", 116, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D19", "LCD-D19", "U13_32", 115, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D22", "LCD-D22", "U13_33", 118, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D21", "LCD-D21", "U13_34", 117, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-CLK", "LCD-CLK", "U13_35", 120, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-D23", "LCD-D23", "U13_36", 119, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-VSYNC", "LCD-VSYNC", "U13_37", 123, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-HSYNC", "LCD-HSYNC", "U13_38", 122, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "GND", "GND", "U13_39", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LCD-DE", "LCD-DE", "U13_40", 121, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "GND", "GND", "U14_1", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "VCC-5V", "VCC-5V", "U14_2", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "UART1-TX", "UART-TX", "U14_3", 195, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "HPL", "HPL", "U14_4", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "UART1-RX", "UART-RX", "U14_5", 196, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "HPCOM", "HPCOM", "U14_6", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "FEL", "FEL", "U14_7", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "HPR", "HPR", "U14_8", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "VCC-3V3", "VCC-3V3", "U14_9", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "MICM", "MICM", "U14_10", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "LRADC", "ADC", "U14_11", -1, BASE_METHOD_AS_IS, -1, 0},
|
||||
{ "MICIN1", "MICIN1", "U14_12", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "XIO-P0", "XIO-P0", "U14_13", 0, BASE_METHOD_XIO, -1, -1},
|
||||
{ "XIO-P1", "XIO-P1", "U14_14", 1, BASE_METHOD_XIO, -1, -1},
|
||||
{ "XIO-P2", "GPIO1", "U14_15", 2, BASE_METHOD_XIO, -1, -1},
|
||||
{ "XIO-P3", "GPIO2", "U14_16", 3, BASE_METHOD_XIO, -1, -1},
|
||||
{ "XIO-P4", "GPIO3", "U14_17", 4, BASE_METHOD_XIO, -1, -1},
|
||||
{ "XIO-P5", "GPIO4", "U14_18", 5, BASE_METHOD_XIO, -1, -1},
|
||||
{ "XIO-P6", "GPIO5", "U14_19", 6, BASE_METHOD_XIO, -1, -1},
|
||||
{ "XIO-P7", "GPIO6", "U14_20", 7, BASE_METHOD_XIO, -1, -1},
|
||||
{ "GND", "GND", "U14_21", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "GND", "GND", "U14_22", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "AP-EINT1", "KPD-INT", "U14_23", 193, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "AP-EINT3", "AP-INT3", "U14_24", 35, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "TWI2-SDA", "I2C-SDA", "U14_25", 50, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "TWI2-SCK", "I2C-SCL", "U14_26", 49, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSIPCK", "SPI-SEL", "U14_27", 128, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSICK", "SPI-CLK", "U14_28", 129, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSIHSYNC", "SPI-MOSI", "U14_29", 130, BASE_METHOD_AS_IS, 1, -1},
|
||||
{ "CSIVSYNC", "SPI-MISO", "U14_30", 131, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSID0", "CSID0", "U14_31", 132, BASE_METHOD_AS_IS, 1, -1},
|
||||
{ "CSID1", "CSID1", "U14_32", 133, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSID2", "CSID2", "U14_33", 134, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSID3", "CSID3", "U14_34", 135, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSID4", "CSID4", "U14_35", 136, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSID5", "CSID5", "U14_36", 137, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSID6", "CSID6", "U14_37", 138, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "CSID7", "CSID7", "U14_38", 139, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "GND", "GND", "U14_39", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ "GND", "GND", "U14_40", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||
{ NULL, NULL, NULL, -1, 0, -1, -1}
|
||||
{ "GND", "GND", "U13_1", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CHG-IN", "CHG-IN", "U13_2", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "VCC-5V", "VCC-5V", "U13_3", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "GND", "GND", "U13_4", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "VCC-3V3", "VCC-3V3", "U13_5", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "TS", "TS", "U13_6", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "VCC-1V8", "VCC-1V8", "U13_7", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "BAT", "BAT", "U13_8", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "TWI1-SDA", "KPD-I2C-SDA", "U13_9", 48, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "PWRON", "PWRON", "U13_10", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "TWI1-SCK", "KPD-I2C-SCL", "U13_11", 47, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "GND", "GND", "U13_12", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "X1", "X1", "U13_13", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "X2", "X2", "U13_14", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "Y1", "Y1", "U13_15", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "Y2", "Y2", "U13_16", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D2", "LCD-D2", "U13_17", 98, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "PWM0", "PWM0", "U13_18", 34, BASE_METHOD_AS_IS, 0, -1, SPWM_DISABLED},
|
||||
{ "LCD-D4", "LCD-D4", "U13_19", 100, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D3", "LCD-D3", "U13_20", 99, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D6", "LCD-D6", "U13_21", 102, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D5", "LCD-D5", "U13_22", 101, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D10", "LCD-D10", "U13_23", 106, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D7", "LCD-D7", "U13_24", 103, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D12", "LCD-D12", "U13_25", 108, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D11", "LCD-D11", "U13_26", 107, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D14", "LCD-D14", "U13_27", 110, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D13", "LCD-D13", "U13_28", 109, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D18", "LCD-D18", "U13_29", 114, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D15", "LCD-D15", "U13_30", 111, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D20", "LCD-D20", "U13_31", 116, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D19", "LCD-D19", "U13_32", 115, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D22", "LCD-D22", "U13_33", 118, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D21", "LCD-D21", "U13_34", 117, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-CLK", "LCD-CLK", "U13_35", 120, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-D23", "LCD-D23", "U13_36", 119, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-VSYNC", "LCD-VSYNC", "U13_37", 123, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-HSYNC", "LCD-HSYNC", "U13_38", 122, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "GND", "GND", "U13_39", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LCD-DE", "LCD-DE", "U13_40", 121, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "GND", "GND", "U14_1", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "VCC-5V", "VCC-5V", "U14_2", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "UART1-TX", "UART-TX", "U14_3", 195, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "HPL", "HPL", "U14_4", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "UART1-RX", "UART-RX", "U14_5", 196, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "HPCOM", "HPCOM", "U14_6", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "FEL", "FEL", "U14_7", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "HPR", "HPR", "U14_8", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "VCC-3V3", "VCC-3V3", "U14_9", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "MICM", "MICM", "U14_10", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "LRADC", "ADC", "U14_11", -1, BASE_METHOD_AS_IS, -1, 0, SPWM_DISABLED},
|
||||
{ "MICIN1", "MICIN1", "U14_12", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "XIO-P0", "XIO-P0", "U14_13", 0, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "XIO-P1", "XIO-P1", "U14_14", 1, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "XIO-P2", "GPIO1", "U14_15", 2, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "XIO-P3", "GPIO2", "U14_16", 3, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "XIO-P4", "GPIO3", "U14_17", 4, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "XIO-P5", "GPIO4", "U14_18", 5, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "XIO-P6", "GPIO5", "U14_19", 6, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "XIO-P7", "GPIO6", "U14_20", 7, BASE_METHOD_XIO, -1, -1, SPWM_ENABLED},
|
||||
{ "GND", "GND", "U14_21", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "GND", "GND", "U14_22", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "AP-EINT1", "KPD-INT", "U14_23", 193, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "AP-EINT3", "AP-INT3", "U14_24", 35, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "TWI2-SDA", "I2C-SDA", "U14_25", 50, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "TWI2-SCK", "I2C-SCL", "U14_26", 49, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSIPCK", "SPI-SEL", "U14_27", 128, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSICK", "SPI-CLK", "U14_28", 129, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSIHSYNC", "SPI-MOSI", "U14_29", 130, BASE_METHOD_AS_IS, 1, -1, SPWM_DISABLED},
|
||||
{ "CSIVSYNC", "SPI-MISO", "U14_30", 131, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSID0", "CSID0", "U14_31", 132, BASE_METHOD_AS_IS, 1, -1, SPWM_DISABLED},
|
||||
{ "CSID1", "CSID1", "U14_32", 133, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSID2", "CSID2", "U14_33", 134, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSID3", "CSID3", "U14_34", 135, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSID4", "CSID4", "U14_35", 136, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSID5", "CSID5", "U14_36", 137, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSID6", "CSID6", "U14_37", 138, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "CSID7", "CSID7", "U14_38", 139, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "GND", "GND", "U14_39", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ "GND", "GND", "U14_40", -1, BASE_METHOD_AS_IS, -1, -1, SPWM_DISABLED},
|
||||
{ NULL, NULL, NULL, -1, 0, -1, -1, -1}
|
||||
};
|
||||
|
||||
|
||||
|
@ -54,11 +54,15 @@ SOFTWARE.
|
||||
#define MODE_UNKNOWN -1
|
||||
#define BOARD 10
|
||||
#define BCM 11
|
||||
#define CHIP 0
|
||||
#define CHIPPRO 1
|
||||
|
||||
// In the pins_t structure, the "base_method" field tells how
|
||||
// the "gpio" field should be interpreted.
|
||||
#define BASE_METHOD_AS_IS 1 /* use the gpio value directly */
|
||||
#define BASE_METHOD_XIO 2 /* add the gpio value to the XIO base */
|
||||
#define SPWM_ENABLED 1 /* pin able to be used by software pwm */
|
||||
#define SPWM_DISABLED 0 /* pin unable to be used by software pwm */
|
||||
|
||||
typedef struct pins_t {
|
||||
const char *name;
|
||||
@ -66,8 +70,9 @@ typedef struct pins_t {
|
||||
const char *key;
|
||||
int gpio; /* port number to use under /sys/class/gpio */
|
||||
int base_method; /* modifier for port number; see BASE_METHOD_... */
|
||||
int pwm_mux_mode;
|
||||
int ain;
|
||||
int pwm_mux_mode; /* pwm pin */
|
||||
int ain; /* analog pin */
|
||||
int spwm_allow; /* pin allowed for software pwm */
|
||||
} pins_t;
|
||||
|
||||
|
||||
|
@ -76,6 +76,15 @@ void define_constants(PyObject *module)
|
||||
both_edge = Py_BuildValue("i", BOTH_EDGE);
|
||||
PyModule_AddObject(module, "BOTH", both_edge);
|
||||
|
||||
version = Py_BuildValue("s", "0.2.5");
|
||||
unknown = Py_BuildValue("i", MODE_UNKNOWN);
|
||||
PyModule_AddObject(module, "UNKNOWN", unknown);
|
||||
|
||||
board = Py_BuildValue("i", BOARD);
|
||||
PyModule_AddObject(module, "BOARD", board);
|
||||
|
||||
bcm = Py_BuildValue("i", BCM);
|
||||
PyModule_AddObject(module, "BCM", bcm);
|
||||
|
||||
version = Py_BuildValue("s", "0.3.0");
|
||||
PyModule_AddObject(module, "VERSION", version);
|
||||
}
|
||||
|
@ -10,5 +10,8 @@ PyObject *rising_edge;
|
||||
PyObject *falling_edge;
|
||||
PyObject *both_edge;
|
||||
PyObject *version;
|
||||
PyObject *unknown;
|
||||
PyObject *board;
|
||||
PyObject *bcm;
|
||||
|
||||
void define_constants(PyObject *module);
|
@ -215,7 +215,9 @@ int open_value_file(int gpio)
|
||||
// create file descriptor of value file
|
||||
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio); BUF2SMALL(filename);
|
||||
|
||||
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) < 0) {
|
||||
// Changed this to open Read/Write to prevent a ton of file open/closes from happening when using
|
||||
// the GPIO for SOFTPWM
|
||||
if ((fd = open(filename, O_RDWR | O_NONBLOCK)) < 0) {
|
||||
char err[256];
|
||||
snprintf(err, sizeof(err), "open_value_file: could not open '%s' (%s)", filename, strerror(errno));
|
||||
add_error_msg(err);
|
||||
@ -376,17 +378,23 @@ int gpio_get_direction(int gpio, unsigned int *value)
|
||||
|
||||
int gpio_set_value(int gpio, unsigned int value)
|
||||
{
|
||||
int fd, e_no;
|
||||
// This now uses the value file descriptor that is set in the other struct
|
||||
// in an effort to minimize opening/closing this
|
||||
int fd = fd_lookup(gpio);
|
||||
int e_no;
|
||||
char filename[MAX_FILENAME];
|
||||
char vstr[16];
|
||||
|
||||
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio); BUF2SMALL(filename);
|
||||
|
||||
if ((fd = open(filename, O_WRONLY)) < 0) {
|
||||
char err[256];
|
||||
snprintf(err, sizeof(err), "gpio_set_value: could not open '%s' (%s)", filename, strerror(errno));
|
||||
add_error_msg(err);
|
||||
return -1;
|
||||
if (!fd)
|
||||
{
|
||||
if ((fd = open_value_file(gpio)) == -1) {
|
||||
char err[256];
|
||||
snprintf(err, sizeof(err), "gpio_get_value: could not open GPIO %d value file", gpio);
|
||||
add_error_msg(err);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (value) {
|
||||
@ -396,7 +404,6 @@ int gpio_set_value(int gpio, unsigned int value)
|
||||
}
|
||||
|
||||
ssize_t s = write(fd, vstr, strlen(vstr)); e_no = errno;
|
||||
close(fd);
|
||||
|
||||
if (s != strlen(vstr)) {
|
||||
char err[256];
|
||||
|
@ -71,13 +71,36 @@ static void remember_gpio_direction(int gpio, int direction)
|
||||
dyn_int_array_set(&gpio_direction, gpio, direction, -1);
|
||||
}
|
||||
|
||||
// python function cleanup()
|
||||
// Dummy function to mimic RPi.GPIO for easier porting.
|
||||
// python function setmode(mode)
|
||||
static PyObject *py_setmode(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
// python function cleanup(channel=None)
|
||||
static PyObject *py_cleanup(PyObject *self, PyObject *args)
|
||||
{
|
||||
int gpio;
|
||||
char *channel;
|
||||
|
||||
clear_error_msg();
|
||||
|
||||
// clean up any exports
|
||||
event_cleanup();
|
||||
// Channel is optional
|
||||
if (!PyArg_ParseTuple(args, "|s", &channel))
|
||||
return NULL;
|
||||
|
||||
if (strcmp(channel, "") == 0) {
|
||||
event_cleanup();
|
||||
} else {
|
||||
if (get_gpio_number(channel, &gpio) < 0) {
|
||||
char err[2000];
|
||||
snprintf(err, sizeof(err), "Invalid channel %s. (%s)", channel, get_error_msg());
|
||||
PyErr_SetString(PyExc_ValueError, err);
|
||||
return NULL;
|
||||
}
|
||||
gpio_unexport(gpio);
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
@ -749,9 +772,6 @@ static PyObject *py_selftest(PyObject *self, PyObject *args)
|
||||
|
||||
static const char moduledocstring[] = "GPIO functionality of a CHIP using Python";
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
mine for changing pin directipn
|
||||
*/
|
||||
@ -811,7 +831,8 @@ PyMethodDef gpio_methods[] = {
|
||||
{"setwarnings", py_setwarnings, METH_VARARGS, "Enable or disable warning messages"},
|
||||
{"get_gpio_base", py_gpio_base, METH_VARARGS, "Get the XIO base number for sysfs"},
|
||||
{"selftest", py_selftest, METH_VARARGS, "Internal unit tests"},
|
||||
{ "direction", (PyCFunction)py_set_direction, METH_VARARGS, "Change direction of gpio channel. Either INPUT or OUTPUT\n" },
|
||||
{"direction", (PyCFunction)py_set_direction, METH_VARARGS, "Change direction of gpio channel. Either INPUT or OUTPUT\n" },
|
||||
{"setmode", (PyCFunction)py_setmode, METH_VARARGS, "Dummy function that does nothing but maintain compatibility with RPi.GPIO\n" },
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
|
@ -34,11 +34,26 @@ SOFTWARE.
|
||||
#include "common.h"
|
||||
#include "c_softpwm.h"
|
||||
|
||||
// python function cleanup()
|
||||
// python function cleanup(channel=None)
|
||||
static PyObject *py_cleanup(PyObject *self, PyObject *args)
|
||||
{
|
||||
// unexport the PWM
|
||||
softpwm_cleanup();
|
||||
char key[8];
|
||||
char *channel = NULL;
|
||||
|
||||
// Channel is optional
|
||||
if (!PyArg_ParseTuple(args, "|s", &channel))
|
||||
return NULL;
|
||||
|
||||
if (strcmp(channel, "") == 0) {
|
||||
softpwm_cleanup();
|
||||
} else {
|
||||
if (!get_key(channel, key)) {
|
||||
PyErr_SetString(PyExc_ValueError, "Invalid SOFTPWM key or name.");
|
||||
return NULL;
|
||||
}
|
||||
softpwm_disable(key);
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
@ -171,15 +186,14 @@ static PyObject *py_set_frequency(PyObject *self, PyObject *args, PyObject *kwar
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
static const char moduledocstring[] = "Software PWM functionality of a CHIP using Python";
|
||||
|
||||
PyMethodDef pwm_methods[] = {
|
||||
{"start", (PyCFunction)py_start_channel, METH_VARARGS | METH_KEYWORDS, "Set up and start the PWM channel. channel can be in the form of 'XIO-P0', or 'U14_13'"},
|
||||
{"stop", (PyCFunction)py_stop_channel, METH_VARARGS | METH_KEYWORDS, "Stop the PWM channel. channel can be in the form of 'XIO-P0', or 'U14_13'"},
|
||||
{ "start", (PyCFunction)py_start_channel, METH_VARARGS | METH_KEYWORDS, "Set up and start the PWM channel. channel can be in the form of 'XIO-P0', or 'U14_13'"},
|
||||
{ "stop", (PyCFunction)py_stop_channel, METH_VARARGS | METH_KEYWORDS, "Stop the PWM channel. channel can be in the form of 'XIO-P0', or 'U14_13'"},
|
||||
{ "set_duty_cycle", (PyCFunction)py_set_duty_cycle, METH_VARARGS, "Change the duty cycle\ndutycycle - between 0.0 and 100.0" },
|
||||
{ "set_frequency", (PyCFunction)py_set_frequency, METH_VARARGS, "Change the frequency\nfrequency - frequency in Hz (freq > 0.0)" },
|
||||
{"cleanup", py_cleanup, METH_VARARGS, "Clean up by resetting all GPIO channels that have been used by this program to INPUT with no pullup/pulldown and no event detection"},
|
||||
{ "cleanup", (PyCFunction)py_cleanup, METH_VARARGS, "Clean up by resetting all GPIO channels that have been used by this program to INPUT with no pullup/pulldown and no event detection"},
|
||||
//{"setwarnings", py_setwarnings, METH_VARARGS, "Enable or disable warning messages"},
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
Reference in New Issue
Block a user