Skip to content
RF stack for the Animas OneTouch Ping insulin pump
Branch: master
Clone or download
Pull request Compare This branch is 14 commits behind mariusae:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


BEWARE! This software is highly experimental, and is NOT INTENDED
for diagnostic or medical use. I have no affiliation with Animas or J&J.

Pingrf implements RF communications with the Animas OneTouch Ping
insulin pump. Pingrf is factored into three components: Packet radio
firmware (using the TI/Chipcon CC11xx series chips); a radio RPC
layer, so that clients may communicate with the packet radio through
UART or SPI; and a pump driver, which implements the pump session
and application layers.

All are provided as cleanly separated APIs.

Command cmd/pingrf implements a utility and test client for pingrf
using Unix ttys. This tool demonstrates how to construct a pump client
and invoke it. It's also useful in its own right, e.g.,:

	% pingrf -h
	usage: pingrf [-t tty] [-b baud] [-dh] command [options]
	Where command is one of:
	  chkadd data checksum
		Add known data-checksum pair. Arguments are hexadecimal strings.
	  combo insulin hours
		Issue a combo bolus for the given amount of insulin and time.
		Cancel a currently running combo bolus.
	  pcall status
		Retrieve the home-screen status message of the pump
	  pcall status1
		Retrieve status screen 1 from the pump
	  pcall status2
		Retrieve status screen 2 from the pump
	  pcall status3
		Retrieve status screen 3 from the pump
	  pcall cancelcombo
		Cancel an existing combo bolus

Setup instructions (for raspberry pi):
	Once completed, pingrf can be used from raspberry pi shell to control
	Ping using the commands above.

HW required:
	raspberry pi, ftdi/usb cable, cc1110 mini development kit
	(pin header installed on cc1110 & some jumper wires between c1110 & ftdi/usb)

HW setup:
	1) connect cc1110 to raspberry pi using two connections
		2.1 - raspberry pi <-> usb cable <-> cc debugger
			<-> adapter <-> debug pins on cc1110
			this connection is to program cc1110 and to power it up.
			if properly connected, cc debugger will show green.
			jumper on cc1110 should remain between p3/4 and
			no need to install battery.
		2.2  - raspberry pi <-> ftdi/usb cable <-> cc1110 INT10 UART pins
			P0.2 to TX on ftdi/usb cable
			P0.3 to RX on ftdi/usb cable
			P0.4 to RT on ftdi/usb cable
			P0.5 to CT on ftdi/usb cable
			this connection is to communicate between pingrf and cc1110.
			wires are cross-wired. i.e. RX on cc1110 is connected to RX on ftdi

SW setup
	1) raspberry pi needs to be set up according to openaps instruction
	2) install sdcc - compiler for cc1110 firmware
		sudo apt-get install sdcc
	3) install cc-tool - to program cc1110
		git clone
		sudo apt-get install libboost-all-dev libusb-1.0-0-dev
		cd to cc-tool directory
		make install
	4) clone pingrf repository
		git clone
	5) burn new firmware unto cc1110. once programmed, the board will reset
		cd pingrf
		cd cc1110
		sudo make UART=1 flash
	6) pingrf now needs to learn checksum for a given command
		export TAP=<some directory>
		makedir -p $TAP
		cd pingrf
		cd cmd
		pingrf -d chklearn (now use pump remote to scroll through status pages)
		control-c to terminate pingrf when you are done
	7) pingrf is now ready
		'pingrf stat' to see the pump status output

debug hints
	1) not every remote will use the same wake up payload. if the hardcoded
		value in libpump/conv.c doesn't work, pingrf stat will time out.
		capture the 0000 0004 related payload from "pingrf -d chklearn"
		and replace those four bytes in order. example:

			0000 0004 e02d 6bd2 AABB CCDD

	2) if pingrf fails and complains about missing checksum, then pingrf didn't
		learn the command/checksum combo as part of "pingrf -d chklearn".
		just reissue the command and use your remote to replicate the
		action that you are looking for pingrf to do. the existing
		table will be added with new command/checksum combo
You can’t perform that action at this time.