FreeBSD kernel usb device Code
g_audio.c File Reference
#include <sys/param.h>
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/queue.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/linker_set.h>
#include <sys/module.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
#include <sys/sysctl.h>
#include <sys/sx.h>
#include <sys/unistd.h>
#include <sys/callout.h>
#include <sys/malloc.h>
#include <sys/priv.h>
#include <dev/usb/usb.h>
#include <dev/usb/usb_cdc.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usbhid.h>
#include "usb_if.h"
#include <dev/usb/usb_debug.h>
#include <dev/usb/gadget/g_audio.h>
Include dependency graph for g_audio.c:

Go to the source code of this file.

Data Structures

struct  g_audio_softc
 

Macros

#define USB_DEBUG_VAR   g_audio_debug
 

Enumerations

enum  {
  G_AUDIO_ISOC0_RD , G_AUDIO_ISOC1_RD , G_AUDIO_ISOC0_WR , G_AUDIO_ISOC1_WR ,
  G_AUDIO_N_TRANSFER
}
 

Functions

 __FBSDID ("$FreeBSD$")
 
static SYSCTL_NODE (_hw_usb, OID_AUTO, g_audio, CTLFLAG_RW|CTLFLAG_MPSAFE, 0, "USB audio gadget")
 
 SYSCTL_INT (_hw_usb_g_audio, OID_AUTO, mode, CTLFLAG_RWTUN, &g_audio_mode, 0, "Mode selection")
 
 SYSCTL_INT (_hw_usb_g_audio, OID_AUTO, pattern_interval, CTLFLAG_RWTUN, &g_audio_pattern_interval, 0, "Pattern interval in milliseconds")
 
 SYSCTL_STRING (_hw_usb_g_audio, OID_AUTO, pattern, CTLFLAG_RW, &g_audio_pattern_data, sizeof(g_audio_pattern_data), "Data pattern")
 
 SYSCTL_INT (_hw_usb_g_audio, OID_AUTO, throughput, CTLFLAG_RD, &g_audio_throughput, sizeof(g_audio_throughput), "Throughput in bytes per second")
 
static void g_audio_watchdog (void *arg)
 
static void g_audio_timeout (void *arg)
 
 DRIVER_MODULE (g_audio, uhub, g_audio_driver, g_audio_devclass, 0, 0)
 
 MODULE_DEPEND (g_audio, usb, 1, 1, 1)
 
static void g_audio_timeout_reset (struct g_audio_softc *sc)
 
static void g_audio_watchdog_reset (struct g_audio_softc *sc)
 
static int g_audio_probe (device_t dev)
 
static int g_audio_attach (device_t dev)
 
static int g_audio_detach (device_t dev)
 
static int32_t g_noise (struct g_audio_softc *sc)
 
static void g_audio_make_samples (struct g_audio_softc *sc, int16_t *ptr, int samples)
 
static void g_audio_isoc_write_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void g_audio_isoc_read_callback (struct usb_xfer *xfer, usb_error_t error)
 
static int g_audio_handle_request (device_t dev, const void *preq, void **pptr, uint16_t *plen, uint16_t offset, uint8_t *pstate)
 

Variables

static int g_audio_mode = 0
 
static int g_audio_pattern_interval = 1000
 
static char g_audio_pattern_data [G_AUDIO_MAX_STRLEN]
 
static int g_audio_throughput
 
static device_probe_t g_audio_probe
 
static device_attach_t g_audio_attach
 
static device_detach_t g_audio_detach
 
static usb_handle_request_t g_audio_handle_request
 
static usb_callback_t g_audio_isoc_read_callback
 
static usb_callback_t g_audio_isoc_write_callback
 
static devclass_t g_audio_devclass
 
static device_method_t g_audio_methods []
 
static driver_t g_audio_driver
 
static const struct usb_config g_audio_config [G_AUDIO_N_TRANSFER]
 

Macro Definition Documentation

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   g_audio_debug

Definition at line 62 of file g_audio.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
G_AUDIO_ISOC0_RD 
G_AUDIO_ISOC1_RD 
G_AUDIO_ISOC0_WR 
G_AUDIO_ISOC1_WR 
G_AUDIO_N_TRANSFER 

Definition at line 67 of file g_audio.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( g_audio  ,
uhub  ,
g_audio_driver  ,
g_audio_devclass  ,
,
 
)

◆ g_audio_attach()

◆ g_audio_detach()

static int g_audio_detach ( device_t  dev)
static

◆ g_audio_handle_request()

static int g_audio_handle_request ( device_t  dev,
const void *  preq,
void **  pptr,
uint16_t *  plen,
uint16_t  offset,
uint8_t *  pstate 
)
static

◆ g_audio_isoc_read_callback()

◆ g_audio_isoc_write_callback()

◆ g_audio_make_samples()

static void g_audio_make_samples ( struct g_audio_softc sc,
int16_t *  ptr,
int  samples 
)
static

Definition at line 407 of file g_audio.c.

References g_noise(), g_audio_softc::sc_pattern, g_audio_softc::sc_pattern_len, and g_audio_softc::sc_state.

Referenced by g_audio_isoc_write_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ g_audio_probe()

◆ g_audio_timeout()

static void g_audio_timeout ( void *  arg)
static

◆ g_audio_timeout_reset()

static void g_audio_timeout_reset ( struct g_audio_softc sc)
static

Definition at line 214 of file g_audio.c.

References g_audio_pattern_interval, g_audio_timeout(), g_audio_softc::sc_callout, g_audio_softc::sc_tx_interval, usb_callout_reset, and USB_MS_TO_TICKS.

Referenced by g_audio_attach(), and g_audio_timeout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ g_audio_watchdog()

static void g_audio_watchdog ( void *  arg)
static

Definition at line 257 of file g_audio.c.

References g_audio_throughput, g_audio_watchdog_reset(), and g_audio_softc::sc_throughput.

Referenced by g_audio_watchdog_reset().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ g_audio_watchdog_reset()

static void g_audio_watchdog_reset ( struct g_audio_softc sc)
static

Definition at line 251 of file g_audio.c.

References g_audio_watchdog(), g_audio_softc::sc_watchdog, and usb_callout_reset.

Referenced by g_audio_attach(), and g_audio_watchdog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ g_noise()

static int32_t g_noise ( struct g_audio_softc sc)
static

Definition at line 385 of file g_audio.c.

References g_audio_softc::sc_noise_rem.

Referenced by g_audio_make_samples().

Here is the caller graph for this function:

◆ MODULE_DEPEND()

MODULE_DEPEND ( g_audio  ,
usb  ,
,
,
 
)

◆ SYSCTL_INT() [1/3]

SYSCTL_INT ( _hw_usb_g_audio  ,
OID_AUTO  ,
mode  ,
CTLFLAG_RWTUN  ,
g_audio_mode,
,
"Mode selection"   
)

◆ SYSCTL_INT() [2/3]

SYSCTL_INT ( _hw_usb_g_audio  ,
OID_AUTO  ,
pattern_interval  ,
CTLFLAG_RWTUN  ,
g_audio_pattern_interval,
,
"Pattern interval in milliseconds"   
)

◆ SYSCTL_INT() [3/3]

SYSCTL_INT ( _hw_usb_g_audio  ,
OID_AUTO  ,
throughput  ,
CTLFLAG_RD  ,
g_audio_throughput,
sizeof(g_audio_throughput ,
"Throughput in bytes per second"   
)

◆ SYSCTL_NODE()

static SYSCTL_NODE ( _hw_usb  ,
OID_AUTO  ,
g_audio  ,
CTLFLAG_RW|  CTLFLAG_MPSAFE,
,
"USB audio gadget"   
)
static

◆ SYSCTL_STRING()

SYSCTL_STRING ( _hw_usb_g_audio  ,
OID_AUTO  ,
pattern  ,
CTLFLAG_RW  ,
g_audio_pattern_data,
sizeof(g_audio_pattern_data ,
"Data pattern"   
)

Variable Documentation

◆ g_audio_attach

device_attach_t g_audio_attach
static

Definition at line 130 of file g_audio.c.

◆ g_audio_config

const struct usb_config g_audio_config[G_AUDIO_N_TRANSFER]
static

Definition at line 163 of file g_audio.c.

Referenced by g_audio_attach().

◆ g_audio_detach

device_detach_t g_audio_detach
static

Definition at line 131 of file g_audio.c.

Referenced by g_audio_attach().

◆ g_audio_devclass

devclass_t g_audio_devclass
static

Definition at line 137 of file g_audio.c.

◆ g_audio_driver

driver_t g_audio_driver
static
Initial value:
= {
.name = "g_audio",
.methods = g_audio_methods,
.size = sizeof(struct g_audio_softc),
}
static device_method_t g_audio_methods[]
Definition: g_audio.c:142

Definition at line 154 of file g_audio.c.

◆ g_audio_handle_request

usb_handle_request_t g_audio_handle_request
static

Definition at line 132 of file g_audio.c.

◆ g_audio_isoc_read_callback

usb_callback_t g_audio_isoc_read_callback
static

Definition at line 134 of file g_audio.c.

◆ g_audio_isoc_write_callback

usb_callback_t g_audio_isoc_write_callback
static

Definition at line 135 of file g_audio.c.

◆ g_audio_methods

device_method_t g_audio_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, g_audio_probe),
DEVMETHOD(device_attach, g_audio_attach),
DEVMETHOD(device_detach, g_audio_detach),
DEVMETHOD_END
}
static device_detach_t g_audio_detach
Definition: g_audio.c:131
static usb_handle_request_t g_audio_handle_request
Definition: g_audio.c:132
static device_probe_t g_audio_probe
Definition: g_audio.c:129
static device_attach_t g_audio_attach
Definition: g_audio.c:130
static usb_error_t usb_handle_request(struct usb_xfer *)

Definition at line 142 of file g_audio.c.

◆ g_audio_mode

int g_audio_mode = 0
static

Definition at line 109 of file g_audio.c.

Referenced by g_audio_timeout().

◆ g_audio_pattern_data

char g_audio_pattern_data[G_AUDIO_MAX_STRLEN]
static

Definition at line 119 of file g_audio.c.

Referenced by g_audio_timeout().

◆ g_audio_pattern_interval

int g_audio_pattern_interval = 1000
static

Definition at line 114 of file g_audio.c.

Referenced by g_audio_timeout_reset().

◆ g_audio_probe

device_probe_t g_audio_probe
static

Definition at line 129 of file g_audio.c.

◆ g_audio_throughput

int g_audio_throughput
static

Definition at line 124 of file g_audio.c.

Referenced by g_audio_watchdog().