#include <stdio.h>
#include <time.h>
#include <uhd.h>

#define SR 25
#define BW 20
#define MHzToHz 1e+6

uint64_t get_posix_clock_time ()
{
    struct timespec ts;

    if (clock_gettime (CLOCK_MONOTONIC, &ts) == 0)
        return (uint64_t) (ts.tv_sec * 1000000 + ts.tv_nsec / 1000);
    else
        return 0;
}

uhd_error createLockedSensor(uhd_usrp_handle hDevice,uhd_sensor_value_handle 
*hSensor)
{
    uhd_error r;

    r = 
uhd_sensor_value_make_from_bool(hSensor,"lo_locked",false,"true","false");
    if (r) return r;

    r = uhd_usrp_get_rx_sensor(hDevice,"lo_locked",0,hSensor);
    if (r)
    uhd_sensor_value_free(hSensor);
    return r;
}

uhd_error setFreq(uhd_usrp_handle hDevice,uhd_sensor_value_handle 
hSensor,double f)
{
    uhd_tune_request_t tune_request =
    {
        .target_freq = f,
        .rf_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO,
        .dsp_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO,
    };
    uhd_tune_result_t tune_result;

    uhd_error r;
    bool lo_locked;

    r = uhd_usrp_set_rx_freq(hDevice,&tune_request,0,&tune_result);
    if(r==UHD_ERROR_NONE && hSensor)
    do
    {
        uhd_sensor_value_to_bool(hSensor,&lo_locked);
    }
    while (!lo_locked);

    return r;
}

int main()
{
    uhd_error r;

    uhd_usrp_handle hDevice = 0;
    uhd_sensor_value_handle hSensor=0;

    r = uhd_usrp_make(&hDevice,"");
    if (r) goto free_device;

    r = createLockedSensor(hDevice,&hSensor);
    if (r) goto free_device;

    if (hDevice)
    {
        int f_start,f_count;

        printf ("Enter start freq [MHz]: ");
        scanf ("%d",&f_start);

        printf ("Enter freq count: ");
        scanf ("%d",&f_count);
        if (f_count < 1) goto free_device;

        uint64_t t0,t;

        bool reverse = false;

        for(int k=3;k>0;--k)
        {
            int f;

            if (reverse)
                f = f_start+BW*(f_count-1);
            else
                f = f_start;

            t=get_posix_clock_time();
            for(int i=0;i<f_count;i++)
            {
                t0 = get_posix_clock_time();
                setFreq(hDevice,hSensor,f*MHzToHz);
                t0 = get_posix_clock_time() - t0;
                printf ("f: %d t: %2.1f \n",f,t0*1e-3);
                f = (reverse) ? f-BW:f+BW;
            }
            t = get_posix_clock_time() - t;

            reverse=!reverse;

            printf (">> scan time: %2.1f \n",t*1e-3);
        }
    }

    free_device:
        if (hDevice)
        uhd_usrp_free(&hDevice);
        if (hSensor)
        uhd_sensor_value_free(&hSensor);

    return 0;
}
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to