示例#1
0
from ant.core import event
from ant.core import message
from ant.core.constants import *

from config import *

NETKEY = '\xB9\xA5\x21\xFB\xBD\x72\xC3\x45'

# A run-the-mill event listener
class HRMListener(event.EventCallback):
    def process(self, msg, _channel):
        if isinstance(msg, message.ChannelBroadcastDataMessage):
            print 'Heart Rate:', ord(msg.payload[-1])

# Initialize
stick = driver.USB1Driver(SERIAL, log=LOG, debug=DEBUG)
antnode = node.Node(stick)
antnode.start()

# Setup channel
net = node.Network(name='N:ANT+', key=NETKEY)
antnode.setNetworkKey(0, net)
channel = antnode.getFreeChannel()
channel.name = 'C:HRM'
channel.assign(net, CHANNEL_TYPE_TWOWAY_RECEIVE)
channel.setID(120, 0, 0)
channel.searchTimeout = TIMEOUT_NEVER
channel.period = 8070
channel.frequency = 57
channel.open()
    def open(self):
        #Setup the logger:
        self.logger = LogWriter(filename=self.outfile, runName=self.runName)
        # Initialize driver
        self.stick = driver.USB1Driver(self.serial,
                                       log=self.logger,
                                       debug=True,
                                       baud_rate=4800)
        self.stick.open()

        # Initialize event machine
        self.evm = event.EventMachine(self.stick)
        self.evm.registerCallback(MyCallback())
        self.evm.start()

        # Reset
        logging.debug("\n\n-------------------------------\n:")
        logging.debug("Setting UP")
        logging.debug("\n\n-------------------------------\n")
        msg = SystemResetMessage()
        self.stick.write(msg.encode())
        time.sleep(1)

        # Set network key
        msg = NetworkKeyMessage(key=NETKEY)
        self.stick.write(msg.encode())
        sleep(1)
        #        if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR:
        #            logging.debug( 'ERROR SETTING UP: SETTING NETWORK KEY')
        #            sys.exit()

        # Initialize it as a receiving channel using our network key
        msg = ChannelAssignMessage()
        self.stick.write(msg.encode())
        sleep(1)
        #        if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR:
        #            logging.debug( 'ERROR SETTING UP: INITIALISING AS RECEIVING CHANNEL')
        #            sys.exit()

        # Now set the channel id for pairing with an ANT+ bike cadence/speed sensor
        msg = ChannelIDMessage(device_type=121)
        self.stick.write(msg.encode())
        sleep(1)
        #        if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR:
        #            logging.debug( 'ERROR SETTING UP: SETTING CHANNEL ID ')
        #            sys.exit()

        # Listen forever and ever (not really, but for a long time)
        msg = ChannelSearchTimeoutMessage(timeout=255)
        self.stick.write(msg.encode())
        sleep(1)
        #        if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR:
        #            logging.debug( 'ERROR SETTING UPL LISTENING TIMEOUT')
        #            sys.exit()

        # We want a ~4.05 Hz transmission period
        msg = ChannelPeriodMessage(period=8085)
        self.stick.write(msg.encode())
        sleep(1)
        #        if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR:
        #            logging.debug( 'ERROR SETTING UP: TRANSMISSION FREQUENCY')
        #            sys.exit()

        # And ANT frequency 57, of course
        msg = ChannelFrequencyMessage(frequency=57)
        self.stick.write(msg.encode())
        sleep(1)
        #        if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR:
        #            logging.debug( 'ERROR SETTING UP: SETTING FREQUENCY')
        #            sys.exit()

        # Time to go live
        msg = ChannelOpenMessage()
        self.stick.write(msg.encode())
        sleep(1)
        #        if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR:
        #            logging.debug( 'ERROR SETTING UP: GOING LIVE')
        #            sys.exit()

        logging.debug("\n\n-------------------------------\n:")
        logging.debug("Listening for ANT events: Press CTRL+C to Exit.")
        logging.debug("\n\n-------------------------------\n")
示例#3
0
from ant.core import driver
from ant.core import node
from PowerMeterTx import PowerMeterTx
from SpeedTx import SpeedTx
from iConst import *

power_meter = None
POWER_SENSOR_ID = int(
    int(hashlib.md5(getserial()).hexdigest(), 16) & 0xFFFFfffe) + 1
speed = None
SPEED_SENSOR_ID = int(
    int(hashlib.md5(getserial()).hexdigest(), 16) & 0xFFFFfffe) + 2

if __name__ == '__main__':
    NETKEY = unhexlify(sys.argv[1])
    stick = driver.USB1Driver(device="/dev/ttyANT", log=None, debug=True)
    antnode = node.Node(stick)
    print("Starting ANT node on network %s" % sys.argv[1])
    antnode.start()
    key = node.NetworkKey('N:ANT+', NETKEY)
    antnode.setNetworkKey(0, key)

    print("Starting power meter with ANT+ ID " + repr(POWER_SENSOR_ID))
    try:
        # Create the power meter object and open it
        power_meter = PowerMeterTx(antnode, POWER_SENSOR_ID)
        power_meter.open()
    except Exception as e:
        print("power_meter error: " + e.message)
        power_meter = None
示例#4
0
        got = send_ack(READ, plen=21)
        if len(got) == 21:
            ic = IConsole(got)
            power_meter.update(power=ic.power, cadence=ic.rpm)
            speed.update(ic.speed)
            win.addstr(
                0, 0, "%s - %s - %s - %s - %s - %s - %s - %s" %
                (ic.time_str, ic.speed_str, ic.rpm_str, ic.distance_str,
                 ic.calories_str, ic.hf_str, ic.power_str, ic.lvl_str))
            win.clrtoeol()
            win.refresh()


if __name__ == '__main__':
    NETKEY = unhexlify(sys.argv[1])
    stick = driver.USB1Driver(device="/dev/ttyANT", log=LOG, debug=DEBUG)
    antnode = node.Node(stick)
    print("Starting ANT node on network %s" % sys.argv[1])
    antnode.start()
    key = node.NetworkKey('N:ANT+', NETKEY)
    antnode.setNetworkKey(0, key)

    print("Starting power meter with ANT+ ID " + repr(POWER_SENSOR_ID))
    try:
        # Create the power meter object and open it
        power_meter = PowerMeterTx(antnode, POWER_SENSOR_ID)
        power_meter.open()
    except Exception as e:
        print("power_meter error: " + e.message)
        power_meter = None
示例#5
0
 def _start_antnode(self):
     stick = driver.USB1Driver(self.serial, log=None, debug=False)
     self.antnode = node.Node(stick)
     self.antnode.start()
示例#6
0
 def start(self):
     print 'Initializing'
     # Initialize
     stick = driver.USB1Driver(SERIAL, debug=DEBUG)
     self.antnode = node.Node(stick)
     self.antnode.start()
示例#7
0
from ant.core.constants import *
from ant.core.message import *

from config import *

NETKEY = '\xB9\xA5\x21\xFB\xBD\x72\xC3\x45'


# Event callback
class MyCallback(event.EventCallback):
    def process(self, msg):
        print msg


# Initialize driver
stick = driver.USB1Driver(SERIAL, log=LOG, debug=DEBUG, baud_rate=4800)
stick.open()

# Initialize event machine
evm = event.EventMachine(stick)
evm.registerCallback(MyCallback())
evm.start()

# Reset
msg = SystemResetMessage()
stick.write(msg.encode())
time.sleep(1)

# Set network key
msg = NetworkKeyMessage(key=NETKEY)
stick.write(msg.encode())
from ant.core.message import *

from config import *

NETKEY = '\xB9\xA5\x21\xFB\xBD\x72\xC3\x45'

# Event callback
class MyCallback(event.EventCallback):
    def process(self, msg):
        print msg
        if isinstance(msg, ChannelBroadcastDataMessage):
            print 'Beat Count:', ord(msg.getPayload()[7])
            print 'Heart Rate:', ord(msg.getPayload()[8])

# Initialize driver
stick = driver.USB1Driver(SERIAL, log=LOG) # No debug, too much data
stick.open()

# Initialize event machine
evm = event.EventMachine(stick)
evm.registerCallback(MyCallback())
evm.start()

# Reset
msg = SystemResetMessage()
stick.write(msg.encode())
time.sleep(1)

# Set network key
msg = NetworkKeyMessage(key=NETKEY)
stick.write(msg.encode())