52 lines
2.5 KiB
C
52 lines
2.5 KiB
C
#include "set_signal.h"
|
|
#include "set_wavegen.h"
|
|
#include <assert.h>
|
|
#include <math.h>
|
|
#include <string.h>
|
|
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;
|
|
}
|