quarqd

  Purpose: 
  
    quarqd is a daemon for communicating with an Ant device and
    reading Ant+Sport data.  Data is communicated over a network socket.

    Source code is available to ANT+ members at the forums over at
    thisisant.com
    
  Usage:
    
    quarqd may be run by itself.  It does not detach from the terminal.

    Control files:     

       quarqd can take some information from the file
       $HOME/.quarqd_config, e.g.:

          QUARQD_PORT=8168    # the port quarqd should listen for 
	                        connections on
          ANT_TTY=/dev/ttyS0  # the device name of the Ant serial port 
          ANT_BAUDRATE=115200 # the baudrate of the Ant device
	  QUARQD_DEBUG=1      # debug is a bitmask.  
	  		      # 1 -> print runtime error information
			      # 2 -> print Ant connection status changes
			      # 4 -> (quarq builds only) print all Ant messages 
			      # (default is 1)

       Environment variables of the same names may be used, overriding the
       settings in $HOME/.quarqd_config

    Getting data:

       1) Connect to $QUARQD_PORT.  Data is streamed out as XML.

  Implementation:

     Single thread.  All data input comes from a select loop.
     
     Data output is buffered, and the messages are (hopefully) short
     enough that I/O doesn't block.

     The part of the code that generates messages comes from the
     Python script quarqd_messages.py, which generates the messages
     with the help of ant_messages.py.

   About XML messages:
 
        <$xml_message id=$ID time=$TIME $xml_message_dataname=$value 
             [$xml_message_dataname=$value [...]] />

     $ID is the Ant device_number for the sensor followed by:
         'h' (heart rate),
	 'p' (power sensor),
	 's' (speed sensor),
	 'c' (cadence sensor),
	 'd' (dual speed+cadence sensor)

     $TIME is seconds past the epoch

     For values of $xml_message and $xml_message_dataname, see 
     message_format.txt     

     Out-of-band values:

        <SensorFound id=$ID type=$SENSORTYPE [paired]>
          A new sensor has been found.  if paired, then the device was
          found through the pairing process. 

        <SensorStale id=$ID type=$SENSORTYPE>
          The data from the sensor hasn't been updated for the stale
	  timeout.
          (time to blank the display)

        <SensorDropped id=$ID type=$SENSORTYPE>
	  The sensor has not been heard from for the drop timeout.

	<SensorLost  id=$ID type=$SENSORTYPE>
          The sensor is missing.  To restart scan, resend
          X-set-channel for the channel.

	<Timeout type=$TIMEOUT_TYPE value=$V>
  	  Reports timeout.  

	  $TIMEOUT_TYPE is one of:
           
 	  - blanking: timeout before a "stale data" message is reported.

          - drop: timeout before a drop is reported.
 
	  - scan: initial scan timeout.  Lower values for quicker
                initial connection with sensors.

	  - lost: timeout in seconds before giving up on a sensor.
 	        Set to "0" to reserve a channel for a specific sensor
 	        always.
	 
	<Error> message </Error>

   Commands:
     X-set-channel: $ID[,channel_number]

        - where $ID is the Ant device_number of the sensor, followed
          by the one-character sensor type.  "0" for any device_number
          of the specified type.

	  Examples: X-set-channel: 17p  (power meter #17)
	            X-set-channel: 0h,1   (scan for heart rate sensor)

	- channel_number is the Ant channel to use for the
	  device. Four channels, numbered 0-3. The previous occupant
	  of the channel will be booted if necessary.  Leave blank for
	  next-available-channel.
	
     X-unset-channel: $ID
        channel is closed and removed.

     X-set-timeout: timeout_type=$TIMEOUT_TYPE
        value is in seconds, floating-point
	<Timeout> message is returned

     X-list-channels: 
        Will cause quarqd to output SensorFound messages for all the
        channels it is connected to.

     X-pair-device: $ID[,channel_number] Looks for a device with the
        pairing bit set.  device_number in $ID should be 0.

     X-calibrate: $ID
        Sends the calibration message to the power channel $ID

     X-set-test-mode: $ID
        Sets the test mode for $ID (must be a CinQo meter)

     X-unset-test-mode: $ID
        Unsets the test mode for $ID 
     
     X-get-slope: $ID
        Retrieves the slope value for $ID

     X-set-slope: $ID $SLOPE
        Sets the slope value for $ID to $SLOPE

  Setup notes:

     OS X:

       Garmin ANT stick:

         With Garmin driver:

	   Use the following .quarqd_config:
             ANT_TTY=/dev/cu.ANTUSBStick.slabvcp
             ANT_BAUDRATE=115200 

	 With generic SiLabs driver:
  
           Uses cp210x driver.  Download from SiLabs:

           http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

           Then edit
           /System/Library/Extensions/SiLabsUSBDriver.kext/Contents/Info.plist
           and change the idProduct to 4100 and the idVendor to 4047.

           Then reboot.  Look for the device at /dev/cu.SLAB_USBtoUART

           set .quarqd_config:
             ANT_TTY=/dev/cu.SLAB_USBtoUART
             ANT_BAUDRATE=115200

           Thanks to Mark Liversedge for access to his computer for
           testing this.

       Sparkfun ANT stick:

         Uses FTDI driver. http://www.ftdichip.com/Drivers/VCP.htm

         set .quarqd_config:
           ANT_BAUDRATE=4800 # SparkFun baudrate
           ANT_TTY=/dev/cu.usbserial-A7005G7c # SparkFun FTDI driver

         Thanks to Justin Knotzke for access to his computer for
         testing this.
 
     Linux:  
         
       The required drivers are already in the kernel.  ANT_TTY will
       be /dev/ttyUSB0 or similar and ANT_BAUDRATE will be the same as
       on OS X.

     iPhone: 

       Quarqd can talk to the hardware serial port.  This was tested
       with an Ant module connected to the +3.3v, ground, and serial
       RX/TX lines of the dock connector.  Tested with a jailbroken
       iPod touch.  (When Apple-sanctioned ANT devices hit the market,
       it is likely that they will have an intervening microprocessor
       and quarqd won't be compatible.)
 NameLast modifiedSize

 Parent Directory   -
 quarqd_dist.tar.gz 2011-02-03 23:34 31K
 message_format.txt 2009-10-05 23:34 1.5K
 build-osx-ppc-i386/ 2016-05-27 19:21 -
 build-linux-x86_64/ 2016-05-27 19:21 -
 build-linux-i386/ 2016-05-27 19:21 -
 build-iphone-arm/ 2016-05-27 19:21 -
 README.txt 2010-08-13 04:01 6.1K