/** * @brief Update Arbitrary Signal Generator module towards actual settings. * * A function is intended to be called whenever one of the following settings on each channel * is modified * - enable * - signal type * - amplitude * - frequency * - DC offset * - trigger mode * * @param[in] params Pointer to overall configuration parameters * @retval -1 failure, error message is repoted on standard error device * @retval 0 succesful update */ int generate_update(rp_app_params_t *params) { awg_param_t ch1_param, ch2_param; awg_signal_t ch1_type; awg_signal_t ch2_type; int ch1_enable = params[GEN_ENABLE_CH1].value; int ch2_enable = params[GEN_ENABLE_CH2].value; //float time_vect[AWG_SIG_LEN], ch1_amp[AWG_SIG_LEN], ch2_amp[AWG_SIG_LEN]; float ch1_arb[AWG_SIG_LEN]; float ch2_arb[AWG_SIG_LEN]; int wrap; //int invalid_file=0; int in_smpl_len1 = 0; int in_smpl_len2 = 0; ch1_type = (awg_signal_t)params[GEN_SIG_TYPE_CH1].value; ch2_type = (awg_signal_t)params[GEN_SIG_TYPE_CH2].value; if( (ch1_type == eSignalFile) || (params[GEN_AWG_REFRESH].value == 1) ) { if((in_smpl_len1 = read_in_file(1, ch1_arb)) < 0) { // Invalid file params[GEN_ENABLE_CH1].value = 0; params[GEN_SIG_TYPE_CH1].value = eSignalSine; ch1_type = params[GEN_SIG_TYPE_CH1].value; ch1_enable = params[GEN_ENABLE_CH1].value; //invalid_file=1; } } if( (ch2_type == eSignalFile) || (params[GEN_AWG_REFRESH].value == 2) ) { if((in_smpl_len2 = read_in_file(2, ch2_arb)) < 0) { // Invalid file params[GEN_ENABLE_CH2].value = 0; params[GEN_SIG_TYPE_CH2].value = eSignalSine; ch2_type = params[GEN_SIG_TYPE_CH2].value; ch2_enable = params[GEN_ENABLE_CH2].value; // invalid_file=1; } } params[GEN_AWG_REFRESH].value = 0; /* Waveform from signal gets treated differently then others */ if(ch1_enable > 0) { if(ch1_type < eSignalFile) { synthesize_signal(params[GEN_SIG_AMP_CH1].value, params[GEN_SIG_FREQ_CH1].value, gen_calib_params->be_ch1_dc_offs, gen_calib_params->be_ch1_fs, ch1_max_dac_v, params[GEN_SIG_DCOFF_CH1].value, ch1_type, ch1_data, &ch1_param); wrap = 0; // whole buffer used } else { /* Signal file */ calculate_data(ch1_arb, in_smpl_len1, params[GEN_SIG_AMP_CH1].value, params[GEN_SIG_FREQ_CH1].value, gen_calib_params->be_ch1_dc_offs, gen_calib_params->be_ch1_fs, ch1_max_dac_v, params[GEN_SIG_DCOFF_CH1].value, ch1_data, &ch1_param); wrap = 0; if (in_smpl_len1<AWG_SIG_LEN) wrap = 1; // wrapping after (in_smpl_lenx) samples } } else { clear_signal(gen_calib_params->be_ch1_dc_offs, ch1_data, &ch1_param); } write_data_fpga(0, params[GEN_TRIG_MODE_CH1].value, params[GEN_SINGLE_CH1].value, ch1_data, &ch1_param, wrap); /* Waveform from signal gets treated differently then others */ if(ch2_enable > 0) { if(ch2_type < eSignalFile) { synthesize_signal(params[GEN_SIG_AMP_CH2].value, params[GEN_SIG_FREQ_CH2].value, gen_calib_params->be_ch2_dc_offs, gen_calib_params->be_ch2_fs, ch2_max_dac_v, params[GEN_SIG_DCOFF_CH2].value, ch2_type, ch2_data, &ch2_param); wrap = 0; // whole buffer used } else { /* Signal file */ calculate_data(ch2_arb, in_smpl_len2, params[GEN_SIG_AMP_CH2].value, params[GEN_SIG_FREQ_CH2].value, gen_calib_params->be_ch2_dc_offs, gen_calib_params->be_ch2_fs, ch2_max_dac_v, params[GEN_SIG_DCOFF_CH2].value, ch2_data, &ch2_param); wrap = 0; if (in_smpl_len2<AWG_SIG_LEN) wrap = 1; // wrapping after (in_smpl_lenx) samples } } else { clear_signal(gen_calib_params->be_ch2_dc_offs, ch2_data, &ch2_param); } write_data_fpga(1, params[GEN_TRIG_MODE_CH2].value, params[GEN_SINGLE_CH2].value, ch2_data, &ch2_param, wrap); /* Always return singles to 0 */ params[GEN_SINGLE_CH1].value = 0; params[GEN_SINGLE_CH2].value = 0; //if (invalid_file==1) // return -1; // Use this return value to notify the GUI user about invalid file. return 0; }
void wotid_full_dynorun() { unsigned long sample[300]; int i = 0; _gear_ratio_ = (float)3.75; sample[i++] = 0x510E; // 20750 microseconds, the time it took for the drum to turn 1/4 sample[i++] = 0x4EE2; // 20194 microseconds. the drum has gained in speed, only 20194 microseconds to complete the same 1/4 turn sample[i++] = 0x4CE5; sample[i++] = 0x4B15; sample[i++] = 0x4968; sample[i++] = 0x47D8; sample[i++] = 0x465F; sample[i++] = 0x450B; sample[i++] = 0x43D0; sample[i++] = 0x429F; sample[i++] = 0x4180; sample[i++] = 0x4076; sample[i++] = 0x3F78; sample[i++] = 0x3E77; sample[i++] = 0x3D83; sample[i++] = 0x3C9A; sample[i++] = 0x3BAD; sample[i++] = 0x3ACC; sample[i++] = 0x39F5; sample[i++] = 0x392A; sample[i++] = 0x3866; sample[i++] = 0x37A5; sample[i++] = 0x36ED; sample[i++] = 0x3640; sample[i++] = 0x3596; sample[i++] = 0x34EC; sample[i++] = 0x3444; sample[i++] = 0x33AA; sample[i++] = 0x330E; sample[i++] = 0x3277; sample[i++] = 0x31E9; sample[i++] = 0x3156; sample[i++] = 0x30CB; sample[i++] = 0x3046; sample[i++] = 0x2FC0; sample[i++] = 0x2F41; sample[i++] = 0x2EC0; sample[i++] = 0x2E49; sample[i++] = 0x2DD2; sample[i++] = 0x2D5D; sample[i++] = 0x2CED; sample[i++] = 0x2C84; sample[i++] = 0x2C1A; sample[i++] = 0x2BB2; sample[i++] = 0x2B4D; sample[i++] = 0x2AEC; sample[i++] = 0x2A8B; sample[i++] = 0x2A2E; sample[i++] = 0x29D1; sample[i++] = 0x2976; sample[i++] = 0x291D; sample[i++] = 0x28C5; sample[i++] = 0x2872; sample[i++] = 0x281F; sample[i++] = 0x27CE; sample[i++] = 0x2780; sample[i++] = 0x2732; sample[i++] = 0x26E4; sample[i++] = 0x2696; sample[i++] = 0x264F; sample[i++] = 0x2604; sample[i++] = 0x25BF; sample[i++] = 0x257A; sample[i++] = 0x2539; sample[i++] = 0x24F6; sample[i++] = 0x24BA; sample[i++] = 0x247E; sample[i++] = 0x2445; sample[i++] = 0x240E; sample[i++] = 0x23D6; sample[i++] = 0x23A1; sample[i++] = 0x236A; sample[i++] = 0x2335; sample[i++] = 0x2300; sample[i++] = 0x22C9; sample[i++] = 0x2293; sample[i++] = 0x225D; sample[i++] = 0x2227; sample[i++] = 0x21F1; sample[i++] = 0x21BA; sample[i++] = 0x2186; sample[i++] = 0x2154; sample[i++] = 0x2121; sample[i++] = 0x20F0; sample[i++] = 0x20BD; sample[i++] = 0x208C; sample[i++] = 0x205D; sample[i++] = 0x2031; sample[i++] = 0x2003; sample[i++] = 0x1FD4; sample[i++] = 0x1FA8; sample[i++] = 0x1F7D; sample[i++] = 0x1F51; sample[i++] = 0x1F24; sample[i++] = 0x1EFD; sample[i++] = 0x1ED6; sample[i++] = 0x1EB0; sample[i++] = 0x1E89; sample[i++] = 0x1E65; sample[i++] = 0x1E40; sample[i++] = 0x1E1C; sample[i++] = 0x1DFD; sample[i++] = 0x1DDD; sample[i++] = 0x1DBB; sample[i++] = 0x1D95; sample[i++] = 0x1D74; sample[i++] = 0x1D53; sample[i++] = 0x1D34; sample[i++] = 0x1D13; sample[i++] = 0x1CF1; sample[i++] = 0x1CD2; sample[i++] = 0x1CB1; sample[i++] = 0x1C96; sample[i++] = 0x1C7A; sample[i++] = 0x1C5B; sample[i++] = 0x1C3C; sample[i++] = 0x1C21; sample[i++] = 0x1C05; sample[i++] = 0x1BE9; sample[i++] = 0x1BCD; sample[i++] = 0x1BB3; sample[i++] = 0x1B97; sample[i++] = 0x1B79; sample[i++] = 0x1B5F; sample[i++] = 0x1B48; sample[i++] = 0x1B2E; sample[i++] = 0x1B12; sample[i++] = 0x1AF7; sample[i++] = 0x1ADF; sample[i++] = 0x1AC6; sample[i++] = 0x1AAF; sample[i++] = 0x1A95; sample[i++] = 0x1A79; sample[i++] = 0x1A5F; sample[i++] = 0x1A49; sample[i++] = 0x1A36; sample[i++] = 0x1A1E; sample[i++] = 0x1A01; sample[i++] = 0x19EA; sample[i++] = 0x19D6; sample[i++] = 0x19A9; sample[i++] = 0x1992; sample[i++] = 0x1966; sample[i++] = 0x1952; sample[i++] = 0x1927; sample[i++] = 0x1911; sample[i++] = 0x18EA; sample[i++] = 0x18D5; sample[i++] = 0x18AD; sample[i++] = 0x189B; sample[i++] = 0x1872; sample[i++] = 0x1861; sample[i++] = 0x183B; sample[i++] = 0x182A; sample[i++] = 0x1808; sample[i++] = 0x17F4; sample[i++] = 0x17D6; sample[i++] = 0x17C5; sample[i++] = 0x17A3; sample[i++] = 0x1794; sample[i++] = 0x1774; sample[i++] = 0x1764; sample[i++] = 0x1746; sample[i++] = 0x1736; sample[i++] = 0x1719; sample[i++] = 0x170A; sample[i++] = 0x16ED; sample[i++] = 0x16DF; sample[i++] = 0x16C3; sample[i++] = 0x16B5; sample[i++] = 0x1698; sample[i++] = 0x168B; sample[i++] = 0x1671; sample[i++] = 0x1662; sample[i++] = 0x164A; sample[i++] = 0x163C; sample[i++] = 0x1622; sample[i++] = 0x1618; sample[i++] = 0x15FE; sample[i++] = 0x15F2; sample[i++] = 0x15DC; sample[i++] = 0x15CD; sample[i++] = 0x15B6; sample[i++] = 0x15AC; sample[i++] = 0x1595; sample[i++] = 0x158A; sample[i++] = 0x1577; sample[i++] = 0x1569; sample[i++] = 0x1553; sample[i++] = 0x154A; sample[i++] = 0x1533; sample[i++] = 0x152A; sample[i++] = 0x1515; sample[i++] = 0x1509; sample[i++] = 0x14F9; sample[i++] = 0x14EF; sample[i++] = 0x14DB; sample[i++] = 0x14D2; sample[i++] = 0x14BD; sample[i++] = 0x14B6; sample[i++] = 0x14A4; sample[i++] = 0x149A; sample[i++] = 0x1487; sample[i++] = 0x147F; sample[i++] = 0x146B; sample[i++] = 0x146B; sample[i++] = 0x1462; sample[i++] = 0x1457; sample[i++] = 0x1452; sample[i++] = 0x144E; sample[i++] = 0x1444; sample[i++] = 0x1440; sample[i++] = 0x143E; sample[i++] = 0x143D; sample[i++] = 0x144D; sample[i++] = 0x1456; calculate_data(sample, i); return; }