#include "set_signal.h" #include "set_wavegen.h" #include #include #include static int starts,stops; static int start(void *ctx,const uint16_t *p,size_t n,uint32_t rate) { (void)ctx;assert(n==3&&rate==1000&&p[2]==4095);++starts;return 0; } static void stop(void *ctx) {(void)ctx;++stops;} static int exchange(set_wave_state *s,unsigned op,unsigned index,unsigned value,uint16_t *out) { uint8_t req[8],reply[32];size_t n; assert(set_wave_request(16,op,index,value,req,8)==8); n=set_wave_rtu(s,16,req,8,reply,sizeof(reply));assert(n>0); assert(set_wave_response(req,reply,n-1,out,8)==0); return set_wave_response(req,reply,n,out,8); } int main(void) { double x[3]={0,1,2},y[3]={0,1,0},ox[5],oy[5],meta[3],work[170]; uint16_t samples[8],out[8],codes[3];set_wave_state state; set_wave_port port={0,start,stop};uint8_t req[8],reply[32]; assert(!set_signal_reconstruct(x,y,3,SET_SIGNAL_SPLINE,2,5,1,ox,oy,meta,work,170)); assert(fabs(oy[1]-.6875)<1e-12&&fabs(oy[3]-.6875)<1e-12&&meta[2]<1e-12); y[1]=1.65;y[2]=3.3;assert(!set_signal_dac12(y,3,3.3,codes)); assert(codes[0]==0&&codes[1]==2048&&codes[2]==4095); y[0]=-1;codes[0]=123;assert(set_signal_dac12(y,3,3.3,codes)&&codes[0]==123); set_wave_init(&state,samples,8,&port); assert(exchange(&state,0,0,0,out)==8&&out[0]==0x5747&&out[7]==8); assert(exchange(&state,6,0,0,out)<0&&starts==0); assert(exchange(&state,1,0,0,out)==1&&stops==1); assert(exchange(&state,2,0,1000,out)==1); assert(exchange(&state,3,0,3,out)==1); assert(exchange(&state,4,1,10,out)<0); /* no holes */ assert(exchange(&state,4,0,0,out)==1); assert(exchange(&state,4,0,0,out)==1&&state.received==1); /* idempotent replay */ assert(exchange(&state,4,0,5,out)<0); assert(exchange(&state,5,0,0,out)<0); /* incomplete upload cannot commit */ assert(exchange(&state,4,1,2048,out)==1); assert(exchange(&state,4,2,4095,out)==1); assert(exchange(&state,7,1,0,out)==1&&out[0]==2048); assert(exchange(&state,5,0,0,out)==1&&state.ready); assert(exchange(&state,6,0,0,out)==1&&state.running&&starts==1); assert(exchange(&state,3,0,2,out)<0&&state.count==3); assert(exchange(&state,4,0,2,out)<0&&samples[0]==0); set_wave_request(16,1,0,0,req,8);req[7]^=1; assert(!set_wave_rtu(&state,16,req,8,reply,32)&&state.running); set_wave_request(17,1,0,0,req,8); assert(!set_wave_rtu(&state,16,req,8,reply,32)&&state.running); assert(exchange(&state,1,0,0,out)==1&&!state.running); return 0; }