/* "sti2s.c"   
select MQ of type I2S

Sekhar Talluri.
Reference list: Not implemented.

*/
#include <standard.h>
static int ph1[2] = {0,2}, 
           ph2[8] = {0,0,2,2,1,1,3,3},
           ph3[8] = {1,1,3,3,2,2,0,0},
           ph59[8]= {0,2,2,0,3,1,1,3};
pulsesequence()
{ /* DECLARE VARIABLES */
 int         phase;
 double      at,pwx,pwxlvl,j,delta,satpwr,satdly; 
/* LOAD VARIABLES */
  at = getval("at");
  pwx = getval("pwx");
  pwxlvl = getval("pwxlvl");
  satpwr = getval("satpwr");
  satdly = getval("satdly");
  j = getval("j");
  phase = (int) (getval("phase") + 0.5);
  settable(t1,2,ph1); settable(t2,8,ph2); 
  settable(t3,8,ph3); 
  settable(t59,8,ph59);
  getelem(t1,ct,v1);
  getelem(t2,ct,v2);
  getelem(t3,ct,v3);
  getelem(t59,ct,oph);
  assign(zero,v4);
  initval(2.0*(double)((int)(d2*getval("sw1")+0.5)%2),v13); 
  if (phase == 2)
     decr(v4);
  add(v13,v4,v4);
  add(v13,oph,oph);
  hlv(ct,v9); hlv(v9,v9); hlv(v9,v9); mod4(v9,v9);
  add(v9,v1,v1);
  add(v9,v2,v2);
  add(v9,v3,v3);
  add(v9,v4,v4);
  add(v9,one,v5);
  add(v9,oph,oph);
/* INITIALIZE VARIABLES */
 if (j > 0.0)
    delta = 1 / (2.0*j);
 else
    delta = 0.001;
 if ((dm[A] == 'y') || (dm[B] == 'y'))
 {   printf("dm must be no during A&B.\n");
    abort(1); }
  if (at > 0.150)
{     printf("at is too long for decoupling.\n");
     abort(1); }
  if (d1 < 1.0)
    { printf("d1 should be 1s or more.\n"); abort(1); }
status(A);
        decoff();
	rlpower(satpwr,TODEV);
        hsdelay(d1-satdly);
        pulse(satdly,zero);
	rlpower(tpwr,TODEV);
        rlpower(pwxlvl,DODEV);
status(B);
	rgpulse(pw,v9,rof1,0.0); 
	delay(delta);
	simpulse(2*pw,pwx,v5,v4,0.0,0.0);
	delay(delta);
        rgpulse(pw,v9,0.0,0.0);
	if (d2 > ((2*pw) + 4.2e-6))
		{
		delay((d2/2.0) - pw - 4.2e-6);
		rgpulse(2*pw,v5,4.2e-6,0.0);
		delay((d2/2.0) - pw);
		}
	else
		{   delay(d2/2.0); 
                    delay(d2/2.0);  } 
	simpulse(pw,2.0*pwx,v2,v9,0.0,0.0);
	delay(delta);
	simpulse(2.0*pw,pwx,v3,v1,rof1,0.0);
	rlpower(dpwr,DODEV);
	delay(delta);
status(C);
}
