Skip to content

Commit cc5edb2

Browse files
committed
Adapt code from PyBBIO.RotaryEncoder
Add code to use as a basis for our QEP module from: graycatlabs/PyBBIO/bbio/libraries/RotaryEncoder/rotary_encoder.py
1 parent db114ac commit cc5edb2

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

Adafruit_BBIO/Encoder.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
import os
1313

14-
15-
1614
class QEP :
1715

1816
def __init__(self, channel=1, debug=False):
@@ -45,7 +43,9 @@ def errMsg(self):
4543

4644

4745
class RotaryEncoder(object):
48-
OCP_PATH = "/sys/TEST/TODO/"
46+
# TODO: check that kernel 4.1+
47+
# TODO: use config-pin to set qep mode
48+
OCP_PATH = "/sys/devices/platform/ocp"
4949
_eqep_dirs = [
5050
'%s/48300000.epwmss/48300180.eqep' % OCP_PATH,
5151
'%s/48302000.epwmss/48302180.eqep' % OCP_PATH,
@@ -64,28 +64,24 @@ def __init__(self, eqep_num):
6464
eqep_num can be: EQEP0, EQEP1, EQEP2 or EQEP2b based on which pins \
6565
the rotary encoder is connected to.
6666
'''
67+
print("RotaryEncoder(): eqep_num: {0}".format(eqep_num))
68+
print("RotaryEncoder(): self._eqep_dirs[0]: {0}".format(self._eqep_dirs[0]))
69+
print("RotaryEncoder(): self._eqep_dirs[1]: {0}".format(self._eqep_dirs[1]))
70+
print("RotaryEncoder(): self._eqep_dirs[2]: {0}".format(self._eqep_dirs[2]))
71+
print("RotaryEncoder(): self._eqep_dirs[eqep_num]: {0}".format(self._eqep_dirs[eqep_num]))
6772
assert 0 <= eqep_num <= 3 , "eqep_num must be between 0 and 3"
68-
if eqep_num == 3:
69-
overlay = "PyBBIO-eqep2b"
70-
eqep_num = 2
71-
else:
72-
overlay = 'PyBBIO-eqep%i' % eqep_num
73-
74-
pwmss_overlay = "PyBBIO-epwmss%i" % eqep_num
75-
#cape_manager.load(pwmss_overlay, auto_unload=False)
76-
delay(10)
77-
#cape_manager.load(overlay, auto_unload=False)
78-
delay(250) # Give driver time to load
7973
self.base_dir = self._eqep_dirs[eqep_num]
74+
print("RotaryEncoder(): self.base_dir: {0}".format(self.base_dir))
8075
self.enable()
81-
addToCleanup(self.disable)
8276

8377
def enable(self):
8478
'''
8579
enable()
8680
Turns the eQEP hardware ON
8781
'''
8882
enable_file = "%s/enabled" % self.base_dir
83+
print("enable(): enable_file: {0}".format(enable_file))
84+
print("enable(): TODO: write 1 to enable_file")
8985
#return sysfs.kernelFileIO(enable_file, '1')
9086

9187
def disable(self):
@@ -94,6 +90,8 @@ def disable(self):
9490
Turns the eQEP hardware OFF
9591
'''
9692
enable_file = "%s/enabled" % self.base_dir
93+
print("disable(): enable_file: {0}".format(enable_file))
94+
print("disable(): TODO: write 0 to enable_file")
9795
#return sysfs.kernelFileIO(enable_file, '0')
9896

9997
def setAbsolute(self):
@@ -104,6 +102,8 @@ def setAbsolute(self):
104102
decremented by the encoder's movement
105103
'''
106104
mode_file = "%s/mode" % self.base_dir
105+
print("setAbsolute(): mode_file: {0}".format(mode_file))
106+
print("setAbsolute(): TODO: write 0 to mode_file")
107107
#return sysfs.kernelFileIO(mode_file, '0')
108108

109109
def setRelative(self):
@@ -113,6 +113,8 @@ def setRelative(self):
113113
The position is reset when the unit timer overflows.
114114
'''
115115
mode_file = "%s/mode" % self.base_dir
116+
print("setRelative(): mode_file: {0}".format(mode_file))
117+
print("setRelative(): TODO: write 1 to mode_file")
116118
#return sysfs.kernelFileIO(mode_file, '1')
117119

118120
def getMode(self):
@@ -121,6 +123,8 @@ def getMode(self):
121123
Returns the mode the eQEP hardware is in.
122124
'''
123125
mode_file = "%s/mode" % self.base_dir
126+
print("getMode(): mode_file: {0}".format(mode_file))
127+
print("getMode(): TODO: read mode_file")
124128
#return sysfs.kernelFileIO(mode_file)
125129

126130
def getPosition(self):
@@ -133,6 +137,8 @@ def getPosition(self):
133137
encoder at the last unit timer overflow.
134138
'''
135139
position_file = "%s/position" % self.base_dir
140+
print("getPosition(): position_file: {0}".format(position_file))
141+
print("getPosition(): TODO: read position_file")
136142
#return sysfs.kernelFileIO(position_file)
137143

138144
def setFrequency(self,freq):
@@ -141,6 +147,12 @@ def setFrequency(self,freq):
141147
Set the frequency in Hz at which the driver reports new positions.
142148
'''
143149
period_file = "%s/period" % self.base_dir
150+
print("setFrequency(): period_file: {0}".format(period_file))
151+
print("setFrequency(): freq: {0}".format(period_file))
152+
print("setFrequency(): freq: {0}".format(freq))
153+
print("setFrequency(): 1000000000/freq: {0}".format(1000000000/freq))
154+
print("setFrequency(): str(1000000000/freq)): {0}".format(str(1000000000/freq)))
155+
print("setFrequency(): TODO: set period_file: {0}".format(str(1000000000/freq)))
144156
#return sysfs.kernelFileIO(period_file, str(1000000000/freq))
145157

146158
def setPosition(self,val):

0 commit comments

Comments
 (0)