void sample(uint32_t *s, RAND_CTX *rand_ctx) { int i, j; for (i = 0; i < 16; i++) { uint64_t r = RANDOM64(rand_ctx); for (j = 0; j < 64; j++) { uint64_t rnd[3]; int32_t m; RANDOM192(rnd, rand_ctx); m = (r & 1); r >>= 1; m = 2 * m - 1; s[i * 64 + j] = single_sample(rnd); if (m == -1) { s[i * 64 + j] = 0xFFFFFFFF - s[i * 64 + j]; } } } }
void sample(uint32_t *s) { RANDOM_VARS int i, j; for (i = 0; i < 16; i++) { uint64_t r = RANDOM64; for (j = 0; j < 64; j++) { uint64_t rnd[3]; int32_t m; RANDOM192(rnd); m = (r & 1); r >>= 1; m = 2 * m - 1; s[i * 64 + j] = single_sample(rnd); if (m == -1) { s[i * 64 + j] = 0xFFFFFFFF - s[i * 64 + j]; } } } }
//run magnetometer //read data from the magnetometer and print to terminal int mag_take_data(char **argv,unsigned short argc) { unsigned short single=0,gauss=0,addr=0x14; unsigned char c,mag_addr=0x14; long result[2]; float time=0; int i,res; MAGon(); //parse arguments for(i=1; i<=argc; i++) { if(!strcmp("single",argv[i])) { single=1; } else if(!strcmp("gauss",argv[i])) { gauss=1; } else if((addr=getI2C_addr(argv[i],0,magAddrSym))!=0xFF) { mag_addr=addr; } else { printf("Error Unknown argument \'%s\'.\r\n",argv[i]); return -1; } } //run until abort is detected do { res=single_sample(mag_addr,result); if(res!=0) { printf("Error encountered. Aborting\r\n"); break; } if(gauss) { printf("%f %f\r\n",ADCtoGauss(result[0])/2,ADCtoGauss(result[1])/2); } else { printf("%li %li\r\n",result[0],result[1]); } c=async_CheckKey(); } while(!(c==0x03 || c=='Q' || c=='q' || single||c==' ')); return 0; MAGoff(); }