Skip to content

Commit 17bacdd

Browse files
Tapasztó LejlaTapasztó Lejla
Tapasztó Lejla
authored and
Tapasztó Lejla
committed
profiles
1 parent f5f3e13 commit 17bacdd

File tree

4 files changed

+129
-1
lines changed

4 files changed

+129
-1
lines changed

libAnt/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__all__ = []
1+
__all__ = ['message', 'node', 'driver', 'constants', 'profiles']

libAnt/profiles/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
__all__ = ['factory']

libAnt/profiles/factory.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from copy import deepcopy
2+
3+
4+
class Factory:
5+
pass
6+
7+
8+
class ProfileMessage():
9+
def __init__(self, msg, previous):
10+
self.previous = deepcopy(previous)
11+
self.msg = deepcopy(msg)
+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
from libAnt.profiles.factory import ProfileMessage
2+
3+
4+
class SpeedAndCadenceProfileMessage(ProfileMessage):
5+
""" Message from Speed & Cadence sensor """
6+
7+
def __init__(self, msg, previous, staleSpeedCounter, staleCadenceCounter):
8+
super().__init__(msg, previous)
9+
self.staleSpeedCounter = staleSpeedCounter
10+
self.staleCadenceCounter = staleCadenceCounter
11+
12+
if self.previous is not None:
13+
if self.speedEventTime == self.previous.speedEventTime:
14+
self.staleSpeedCount[0] += 1
15+
else:
16+
self.staleSpeedCount[0] = 0
17+
18+
if self.cadenceEventTime == self.previous.cadenceEventTime:
19+
self.staleCadenceCount[0] += 1
20+
else:
21+
self.staleCadenceCount[0] = 0
22+
23+
maxCadenceEventTime = 65536
24+
maxSpeedEventTime = 65536
25+
maxSpeedRevCount = 65536
26+
maxCadenceRevCount = 65536
27+
maxStaleSpeedCount = 7
28+
maxStaleCadenceCount = 7
29+
30+
@lazyproperty
31+
def cadenceEventTime(self):
32+
""" Represents the time of the last valid bike cadence event (1/1024 sec) """
33+
return (self.raw[2] << 8) | self.raw[1]
34+
35+
@lazyproperty
36+
def cumulativeCadenceRevolutionCount(self):
37+
""" Represents the total number of pedal revolutions """
38+
return (self.raw[4] << 8) | self.raw[3]
39+
40+
@lazyproperty
41+
def speedEventTime(self):
42+
""" Represents the time of the last valid bike speed event (1/1024 sec) """
43+
return (self.raw[6] << 8) | self.raw[5]
44+
45+
@lazyproperty
46+
def cumulativeSpeedRevolutionCount(self):
47+
""" Represents the total number of wheel revolutions """
48+
return (self.raw[8] << 8) | self.raw[7]
49+
50+
@lazyproperty
51+
def speedEventTimeDiff(self):
52+
if self.previous is None:
53+
return 0
54+
elif self.speedEventTime < self.previous.speedEventTime:
55+
# Rollover
56+
return (self.speedEventTime - self.previous.speedEventTime) + self.maxSpeedEventTime
57+
else:
58+
return self.speedEventTime - self.previous.speedEventTime
59+
60+
@lazyproperty
61+
def cadenceEventTimeDiff(self):
62+
if self.previous is None:
63+
return 0
64+
elif self.cadenceEventTime < self.previous.cadenceEventTime:
65+
# Rollover
66+
return (self.cadenceEventTime - self.previous.cadenceEventTime) + self.maxCadenceEventTime
67+
else:
68+
return self.cadenceEventTime - self.previous.cadenceEventTime
69+
70+
@lazyproperty
71+
def speedRevCountDiff(self):
72+
if self.previous is None:
73+
return None
74+
elif self.cumulativeSpeedRevolutionCount < self.previous.cumulativeSpeedRevolutionCount:
75+
# Rollover
76+
return (
77+
self.cumulativeSpeedRevolutionCount - self.previous.cumulativeSpeedRevolutionCount) + self.maxSpeedRevCount
78+
else:
79+
return self.cumulativeSpeedRevolutionCount - self.previous.cumulativeSpeedRevolutionCount
80+
81+
@lazyproperty
82+
def cadenceRevCountDiff(self):
83+
if self.previous is None:
84+
return None
85+
elif self.cumulativeCadenceRevolutionCount < self.previous.cumulativeCadenceRevolutionCount:
86+
# Rollover
87+
return (
88+
self.cumulativeCadenceRevolutionCount - self.previous.cumulativeCadenceRevolutionCount) + self.maxCadenceRevCount
89+
else:
90+
return self.cumulativeCadenceRevolutionCount - self.previous.cumulativeCadenceRevolutionCount
91+
92+
def speed(self, c):
93+
"""
94+
:param c: circumference of the wheel (mm)
95+
:return: The current speed (m/sec)
96+
"""
97+
if self.previous is None:
98+
return 0
99+
if self.speedEventTime == self.previous.speedEventTime:
100+
if self.staleSpeedCount[0] > self.maxStaleSpeedCount:
101+
return 0
102+
return self.previous.speed(c)
103+
return self.speedRevCountDiff * 1.024 * c / self.speedEventTimeDiff
104+
105+
@lazyproperty
106+
def cadence(self):
107+
"""
108+
:return: RPM
109+
"""
110+
if self.previous is None:
111+
return 0
112+
if self.cadenceEventTime == self.previous.cadenceEventTime:
113+
if self.staleCadenceCount[0] > self.maxStaleCadenceCount:
114+
return 0
115+
return self.previous.cadence
116+
return self.cadenceRevCountDiff * 1024 * 60 / self.cadenceEventTimeDiff

0 commit comments

Comments
 (0)