nidas v1.2.3
Classes | Macros | Functions
short_filters.c File Reference
#include <linux/module.h>
#include <linux/version.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <nidas/linux/klog.h>
#include <nidas/linux/Revision.h>
#include "short_filters_kernel.h"

Classes

struct  pickoff_filter
 Private data used by a pickoff filter. More...
 
struct  boxcar_filter
 Private data used by a boxcar filter. More...
 
struct  timeavg_filter
 Private data used by a timeavg filter. More...
 

Macros

#define REPO_REVISION   "unknown"
 
#define F_MALLOC(x)   kmalloc(x,GFP_KERNEL)
 

Functions

 MODULE_AUTHOR ("Gordon Maclean <maclean@ucar.edu>")
 
 MODULE_LICENSE ("Dual BSD/GPL")
 
 MODULE_DESCRIPTION ("Some simple filters for A2D data")
 
 MODULE_VERSION (REPO_REVISION)
 
static void * pickoff_init (void)
 Constructor for a pickoff filter.
 
static int pickoff_config (struct short_filter_data *fdata, const void *cfg, int nbcfg)
 Configure a pickoff filter.
 
static int pickoff_filter (void *obj, dsm_sample_time_t tt, const short *in, int skip_factor, short_sample_t *out)
 Pickoff filter method.
 
static void pickoff_cleanup (void *obj)
 Destructor for a pickoff filter.
 
static void * boxcar_init (void)
 Constructor for a boxcar filter.
 
static int boxcar_config (struct short_filter_data *fdata, const void *cfg, int nbcfg)
 Configure a boxcar filter.
 
static int boxcar_filter (void *obj, dsm_sample_time_t tt, const short *in, int skip_factor, short_sample_t *out)
 Boxcar filter method.
 
static void boxcar_cleanup (void *obj)
 Destructor for a boxcar filter.
 
static void * timeavg_init (void)
 Constructor for a time average filter.
 
static int timeavg_config (struct short_filter_data *fdata, const void *cfg, int nbcfg)
 Configure a time average filter.
 
static int timeavg_filter (void *obj, dsm_sample_time_t tt, const short *in, int skip_factor, short_sample_t *out)
 Time average filter method.
 
static void timeavg_cleanup (void *obj)
 Destructor for a timeavg filter.
 
struct short_filter_methods get_short_filter_methods (enum nidas_short_filter which)
 Return structure of pointers to the methods for a given filter.
 
 EXPORT_SYMBOL (get_short_filter_methods)
 
static int __init short_filters_init (void)
 
static void __exit short_filters_cleanup (void)
 
 module_init (short_filters_init)
 
 module_exit (short_filters_cleanup)
 

Macro Definition Documentation

◆ F_MALLOC

#define F_MALLOC ( x)    kmalloc(x,GFP_KERNEL)

◆ REPO_REVISION

#define REPO_REVISION   "unknown"

Referenced by short_filters_init().

Function Documentation

◆ boxcar_cleanup()

static void boxcar_cleanup ( void * obj)
static

Destructor for a boxcar filter.

References boxcar_filter::sums, and boxcar_filter::vindices.

Referenced by get_short_filter_methods().

◆ boxcar_config()

static int boxcar_config ( struct short_filter_data * fdata,
const void * cfg,
int nbcfg )
static

Configure a boxcar filter.

References F_MALLOC.

Referenced by get_short_filter_methods().

◆ boxcar_filter()

static int boxcar_filter ( void * obj,
dsm_sample_time_t tt,
const short * in,
int skip_factor,
short_sample_t * out )
static

Boxcar filter method.

More advanced math! Uses decimate and number of points parameters. Example: input rate 1000/s. Requested output rate 100/s, which is a decimate value of 10. npts=4. Boxcar will average first 4 input samples and generate an output. Then it will skip the next 6 samples, then average 4, etc.

References boxcar_filter::count, boxcar_filter::decimate, MSECS_PER_SEC, boxcar_filter::npts, boxcar_filter::nvars, boxcar_filter::sampleIndex, boxcar_filter::sums, TMSECS_PER_SEC, boxcar_filter::tsave, and boxcar_filter::vindices.

Referenced by get_short_filter_methods().

◆ boxcar_init()

static void * boxcar_init ( void )
static

Constructor for a boxcar filter.

References F_MALLOC.

Referenced by get_short_filter_methods().

◆ EXPORT_SYMBOL()

EXPORT_SYMBOL ( get_short_filter_methods )

◆ get_short_filter_methods()

struct short_filter_methods get_short_filter_methods ( enum nidas_short_filter which)

Return structure of pointers to the methods for a given filter.

Pointers will be 0 if the filter is not supported. This structure is passed back by value and does not need to be kfree'd. This function is exposed to other driver modules.

References boxcar_cleanup(), boxcar_config(), boxcar_filter(), boxcar_init(), NIDAS_FILTER_BOXCAR, NIDAS_FILTER_PICKOFF, NIDAS_FILTER_TIMEAVG, pickoff_cleanup(), pickoff_config(), pickoff_filter(), pickoff_init(), timeavg_cleanup(), timeavg_config(), timeavg_filter(), and timeavg_init().

Referenced by addA2DSampleConfig(), and addSampleConfig().

◆ MODULE_AUTHOR()

MODULE_AUTHOR ( "Gordon Maclean <maclean@ucar.edu>" )

◆ MODULE_DESCRIPTION()

MODULE_DESCRIPTION ( "Some simple filters for A2D data" )

◆ module_exit()

module_exit ( short_filters_cleanup )

◆ module_init()

module_init ( short_filters_init )

◆ MODULE_LICENSE()

MODULE_LICENSE ( "Dual BSD/GPL" )

◆ MODULE_VERSION()

MODULE_VERSION ( REPO_REVISION )

◆ pickoff_cleanup()

static void pickoff_cleanup ( void * obj)
static

Destructor for a pickoff filter.

References pickoff_filter::vindices.

Referenced by get_short_filter_methods().

◆ pickoff_config()

static int pickoff_config ( struct short_filter_data * fdata,
const void * cfg,
int nbcfg )
static

◆ pickoff_filter()

static int pickoff_filter ( void * obj,
dsm_sample_time_t tt,
const short * in,
int skip_factor,
short_sample_t * out )
static

◆ pickoff_init()

static void * pickoff_init ( void )
static

Constructor for a pickoff filter.

References F_MALLOC.

Referenced by get_short_filter_methods().

◆ short_filters_cleanup()

static void __exit short_filters_cleanup ( void )
static

◆ short_filters_init()

static int __init short_filters_init ( void )
static

References REPO_REVISION.

◆ timeavg_cleanup()

static void timeavg_cleanup ( void * obj)
static

Destructor for a timeavg filter.

References timeavg_filter::sums, and timeavg_filter::vindices.

Referenced by get_short_filter_methods().

◆ timeavg_config()

static int timeavg_config ( struct short_filter_data * fdata,
const void * cfg,
int nbcfg )
static

Configure a time average filter.

References F_MALLOC, and TMSECS_PER_SEC.

Referenced by get_short_filter_methods().

◆ timeavg_filter()

static int timeavg_filter ( void * obj,
dsm_sample_time_t tt,
const short * in,
int skip_factor,
short_sample_t * out )
static

Time average filter method.

Example: input scan rate 1000/s. time average rate 100/s output rate 20/s Time averager will average data over 0.01 seconds intervals but then only 1 out of 5 of those averages will be output.

References timeavg_filter::decimate, timeavg_filter::deltaTmsecs, timeavg_filter::endTime, timeavg_filter::nout, timeavg_filter::nsum, timeavg_filter::nvars, timeavg_filter::sampleIndex, timeavg_filter::sums, TMSECS_PER_DAY, and timeavg_filter::vindices.

Referenced by get_short_filter_methods().

◆ timeavg_init()

static void * timeavg_init ( void )
static

Constructor for a time average filter.

References timeavg_filter::endTime, and F_MALLOC.

Referenced by get_short_filter_methods().