hal_stream

NOMBRE
SINOPSIS
DESCRIPCIÃN
ARGUMENTOS
CÃDIGO DE MUESTRA
CONSIDERACIONES EN TIEMPO REAL
VALOR DEVUELTO
ERRORES
VER TAMBIÃN

NOMBRE

hal_stream  - streams en tiempo real sin bloqueo

SINOPSIS

#include <hal.h>

int hal_stream_create(hal_stream_t *stream, int comp_id, int key, int depth, const char *typestring);
void hal_stream_destroy(hal_stream_t *stream);
int hal_stream_attach(hal_stream_t *stream, int comp_id, int key, const char *typestring);
int hal_stream_detach(hal_stream_t *stream);

int hal_stream_element_count(hal_stream_t *stream);
hal_type_t hal_stream_element_type(hal_stream_t *stream, int idx);
int hal_stream_depth(hal_stream_t *stream);
int hal_stream_maxdepth(hal_stream_t *stream);
int hal_stream_num_underruns(hal_stream_t *stream);
int hal_stream_num_overruns(hal_stream_t *stream);

int hal_stream_read(hal_stream_t *stream, union hal_stream_data *buf, unsigned *sampleno);
bool hal_stream_readable(hal_stream_t *stream);

int hal_stream_write(hal_stream_t *stream, union hal_stream_data *buf);
bool hal_stream_writable(hal_stream_t *stream);

#ifdef ULAPI
void hal_stream_wait_writable(hal_stream_t *stream, sig_atomic_t *stop);
void hal_stream_wait_readable(hal_stream_t *stream, sig_atomic_t *stop);
#endif

DESCRIPCIÃN

Un stream HAL proporciona una capacidad limitada para que dos componentes se comuniquen datos que no se ajustan al modelo de pines HAL. Un lector y un escritor deben acordar una clave (Identificador entero de 32 bits) y una estructura de datos especificada por typestring será hal_stream_create y qué componente (el segundo cargado) hal_stream_attach a la secuencia ya creada.

La parte del espacio de usuario puede ser halstreamer o halsampler. En el caso de halstreamer la clave es 0x48535430 más el número de canal. En el caso de halsampler la clave es 0x48534130 más el número de canal.

hal_stream_create
Crea el flujo dado, inicializando el stream que se pasa por referencia. Si es un error no diagnosticado si ya se ha creado una secuencia con la misma key.

hal_stream_destroy
Destruye el stream dado. Es un error no diagnosticado si el stream todavÃa está conectada por otro componente. Es un error no diagnosticado si la secuencia se adjuntó con hal_stream_attach en lugar de creado con hal_stream_create. Es un error no diagnosticado si la llamada a hal_stream_destroy se omite.

hal_stream_attach
Adjunta la secuencia dada, que ya fue creada por hal_stream_create. Si se especifica typestring, esta llamada falla si no coincide con la cadena de texto con la que se creó la secuencia. Si el argumento typetring es NULL, entonces se acepta cualquier typestring.

hal_stream_detach
Separa la secuencia dada. Es un error no diagnosticado si la secuencia se creó con hal_stream_create en lugar de adjuntarla con hal_stream_attach. Es un error no diagnosticado si la llamada a hal_stream_detach se omite.

hal_stream_element_count
Devuelve el número de pines.

hal_stream_element_type
Devuelve el tipo del número de pin dado.

hal_stream_readable
Devuelve verdadero si la secuencia tiene al menos una muestra para leer

hal_stream_read
Si la secuencia tiene una muestra para leer, la almacena en buf.

hal_stream_writable
Devuelve true si la secuencia tiene espacio para que se escriba al menos una muestra.

hal_stream_depth
Devuelve el número de muestras que esperan ser leÃdas.

hal_stream_maxdepth
Devuelve el argumento depth con el que se creó la secuencia.

hal_stream_num_overruns
Devuelve un número que se incrementa cada vez que hal_stream_write se llama sin espacio disponible.

hal_stream_num_underruns
Devuelve un número que se incrementa cada vez que hal_stream_read se llama sin una muestra disponible.

hal_stream_wait_readable
Espera hasta que la stream sea legible o se establezca el indicador de detención.

hal_stream_wait_writable
Espera hasta que la stream se pueda escribir o se establezca el indicador de detención.

hal_stream_read
Lee un registro desde la stream. Si tiene éxito, se almacena en el búfer dado. Opcionalmente, se puede recuperar el número de muestra. Si no hay muestra disponible, num_underruns se incrementa. Es un error no detectado si más de un componente o funciones en tiempo real llaman a hal_stream_read concurrentemente

hal_stream_write
Escribe un registro en la stream. Si tiene éxito, se copió del buffer dado. Si no hay espacio disponible, num_overruns se incrementa. En cualquier caso, el valor interno sampleno se incrementa. Es un error no detectado si más de un componente o funciones en tiempo real llaman a hal_stream_write concurrentemente

ARGUMENTOS

stream

Un puntero a un objeto stream. En el caso de hal_stream_create y hal_stream_attach esta es una stream no inicializada; en otros casos, debe ser una stream creada o adjuntada por una llamada anterior y aún no separada o destruida.

hal_id

Un identificador de componente HAL devuelto por una llamada anterior a hal_init.

key

La clave para el segmento de memoria compartida.

depth

El número de muestras que pueden no leerse antes de que se pierdan muestras (desbordamiento)

typestring

Una typestring es una cadena que no distingue entre mayúsculas y minúsculas que consta de uno o más de los siguientes tipos de caracteres:

B

para bool / hal_bit_t

S

para int32_t / hal_s32_t

U

para uint32_t / hal_u32_t

F

para real_t / hal_float_t

Una typestring está limitada a 16 caracteres.

buf

Un búfer lo suficientemente grande como para contener todos los datos en una muestra.

sampleno

Si no es NULL, el último número de muestra se almacena aquÃ. Brechas en esta secuencia indican que se produjo un desbordamiento entre la lectura anterior y esta. Si es NULL, el número de muestra no se recupera.

stop

Puntero a un valor que se supervisa mientras espera. Si no es cero, la operación de espera vuelve pronto. Esto permite que una llamada en espera sea terminada en forma segura en el caso de una señal.

CÃDIGO DE MUESTRA

En el árbol fuente debajo src/hal/components, sampler.c y streamer.c hay componentes en tiempo real que leen y escriben streams hal.

CONSIDERACIONES EN TIEMPO REAL

hal_stream_read, hal_stream_readable, hal_stream_write, hal_stream_writable, hal_stream_element_count, hal_tream_pin_type, hal_stream_depth, hal_stream_maxdepth, hal_stream_num_underruns, hal_stream_num_underruns, hal_stream_num_underruns, hal_stream_num_underruns, se pueden llamar desde código en tiempo real.

hal_stream_wait_writable, hal_stream_wait_writable se puede llamar desde el código ULAPI.

Se pueden invocar otras funciones en cualquier contexto, incluidos los contextos en tiempo real.

VALOR DEVUELTO

hal_stream_create, hal_stream_attach, hal_stream_read, hal_stream_write, hal_stream_detachy hal_stream_destroy devuelven un código de estado RTAPI. Los valores de retorno de otras funciones se explicaron anteriormente.

ERRORES

La sobrecarga de memoria de una secuencia puede ser grande. Cada elemento en un registro usa 8 bytes, y el número de muestra implÃcito también usa 8 bytes. Como resultado, una stream que se usa para transportar valores de 8 bits usa el 94% de su memoria como sobrecarga. Sin embargo, para tamaños de stream modestos, esta sobrecarga no es importante. (esta memoria es parte de su propia región de memoria compartida y no cuenta en contra de la región HAL de memoria compartida utilizada para pines, parámetros y señales)

VER TAMBIÃN

sampler(9), streamer(9), halsampler(1), halstreamer(1)