#!/bin/sh

. ./Common


USB_ID=20b7:1540
CLOCK_DRIFT_PPM=50


enumerate()
{
	step "Enumeration"
	cmd "usbwait -t 5 $USB_ID && echo okay"
	expect okay
}


led()
{
#
#		BBBBBBBB CCCCCCCC DDDDDDDD
#		01234567 01234567 01234567
#
#		-xxxS-L- -x-----n InMM-S--     
#		    T E         R RSIO C
#
	step "LED"
	cmd "echo >/dev/tty;						\
		echo 'Press [P]ass if the LED blinks, [F]ail if not'	\
		  >/dev/tty;						\
		atrf-gpio -c -p						\
                xxxxxx1x.xxxxxxxx.xxxxxxxx				\
		delay=50						\
                xxxxxx0x.xxxxxxxx.xxxxxxxx				\
		delay=200"
	doit
}


gpio_usb()
{
	# TRX_OFF state (transceiver pull-up/downs inactive)

	#	-xxxS-L- -x-----n InMM-S--     
	#	    T E         R RSIO C

	step "GPIO scan (TRX_OFF)"
	cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT \
		HHHH0HzH.HxHxHHHh.oHHHHHHH	'# TRX_OFF state (H)'	\
		0HHH0HzH.HxHxHHHh.oHHHHHHH	'# test B0'		\
		H0HH0HzH.HxHxHHHh.oHHHHHHH	'# test B1 (ICSP SCK)'	\
		HH0H0HzH.HxHxHHHh.oHHHHHHH	'# test B2 (ICSP MOSI)'	\
		HHH00HzH.HxHxHHHh.oHHHHHHH	'# test B3 (ICSP MISO)'	\
		HHHH00zH.HxHxHHHh.oHHHHHHH	'# test B5'		\
		HHHH0H0H.HxHxHHHh.oHHHHHHH	'# test B6 (LED, 0)'	\
		HHHH0H1H.HxHxHHHh.oHHHHHHH	'# test B6 (LED, 1)'	\
		HHHH0Hz0.HxHxHHHh.oHHHHHHH	'# test B7'		\
		HHHH0HzH.0xHxHHHh.oHHHHHHH	'# test C0'		\
		HHHH0HzH.Hx0xHHHh.oHHHHHHH	'# test C2'		\
		HHHH0HzH.HxHx0HHh.oHHHHHHH	'# test C4'		\
		HHHH0HzH.HxHxH0Hh.oHHHHHHH	'# test C5'		\
		HHHH0HzH.HxHxHH0h.oHHHHHHH	'# test C6'		\
		HHHH0HzH.HxHxHHH1.oHHHHHHH	'# test C7 (nRST_RF)'	\
		HHHH0HzH.HxHxHHHh.0HHHHHHH	'# test D0 (IRQ_RF)'	\
		HHHH0HzH.HxHxHHHh.o0zHHHHH	'# test D1 (nSS)'	\
		HHHH0HzH.HxHxHHHh.oH0HHHHH	'# test D2 (MISO)'	\
		HHHH0HzH.HxHxHHHh.oHz0HHHH	'# test D3 (MOSI)'	\
		HHHH0HzH.HxHxHHHh.oHzH0HHH	'# test D4'		\
		HHHH0HzH.HxHxHHHh.oHzHH0HH	'# test D5 (SCLK)'	\
		HHHH0HzH.HxHxHHHh.oHzHHH0H	'# test D6'		\
		HHHH0HzH.HxHxHHHh.oHzHHHH0	'# test D7'		\
		HHHH0HzH.HxHxHHHh.oHzHHHHH	'# test LED'"
	doit

	# INT

	#	-xxxS-L- -x-----n InMM-S--     
	#	    T E         R RSIO C

	step "GPIO scan (INT)"
	cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT			\
		xxxxxxxx.xxxxxxxx.oxxxxxxx	'# reset state'		\
		0x04=1				'# IRQ_POLARITY = 1'	\
		xxxxxxxx.xxxxxxxx.hxxxxxxx	'# test INT (1)'	\
		xxxxxxxx.xxxxxxxx.h0xxxxxx	'# test INT (2)'	\
		xxxxxxxx.xxxxxxxx.h1xxxxxx	'# restore nSEL'	\
		0x04=0				'# IRQ_POLARITY = 0'	\
		xxxxxxxx.xxxxxxxx.o1xxxxxx	'# test INT again'"
	doit

	# SLP_TR

	#	-xxxS-L- -x-----n InMM-S--     
	#	    T E         R RSIO C

	step "GPIO scan (SLP_TR)"
	cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT			\
		02=9 delay			'# enter PLL_ON'	\
		02:9/0x1f			'# verify state'	\
		frame				'# one-byte frame'	\
		0xf:				'# clear interrupts'	\
		0xe=8				'# enable TRX_END intr'	\
		xxxxxxxx.xxxxxxxx.oxxxxxxx	'# confirm INT'		\
		slp_tr delay			'# send frame'		\
		xxxxxxxx.xxxxxxxx.hxxxxxxx	'# check INT'"
	doit

	# nRST

	step "GPIO scan (nRST)"
	cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT			\
		02:8/0x1f			'# verify TRX_OFF'	\
		reset				'# reset transceiver'	\
		02:0/0x1f			'# verify P_ON'"
	doit
}


xtal_usb()
{
	step "Crystal frequency"
	cmd "$LOCAL_EXEC atrf-xtal -d $LOCAL_DUT -p $CLOCK_DRIFT_PPM"
	expect_re ppm   # we catch any problems via the exit code
}


begin usb.profile
enumerate
led
# power ?
gpio_usb
identify
xtal_usb
spectrum
transmit