示例#1
0
/**
 * @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;
}
示例#2
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;
}