#include "scs_events.h"
#include "scs_timer.h"
#include "system.h"
#include "sys/alt_irq.h"
#include "scs_pc_uart.h"
#include "scs_io_uart.h"
#include "scs_utils.h"
Defines | |
#define | FE_STR_SIZE 21 |
buffers auxiliares para convertir a cadenas los eventos para el envio el evento de frecuencia se envia como XFETTTTTTTTFFFFCC el evento de cambio de se envia como XVETTTTTTTTVVMM el evento de cambio de IO se envia como XIOTTTTTTTTDD | |
#define | VS_STR_SIZE 15 |
#define | IO_STR_SIZE 13 |
Functions | |
void | get_events (void) |
Para el registro de eventos mantengo una cola para cad tipo cada cola es una queue de structs del tipo de evento el registro se llama desde las isr, ademas de proteger la concurrencia (que se esta logrando impidiendo interrupciones anidadas) se debe salir de la llamada lo mas rapido posible, por tanto si una ola esta llena, el evento se descarta. | |
void | scs_events_init (scs_fp_queue_t *trs_ptr) |
inicializa las colas de eventos | |
void | scs_save_event (enum scs_event_type tipo, void *params) |
Registra el evento, requiere el tipo y un puntero a una estructura con los datos del evento la estructura se interpreta en funcion del tipo de evento. | |
void | scs_events_send_all_fe_queue (void) |
Envia todos los eventos de frecuencia de la cola La funcion usa send_data de scs_pc_uart, la cual puede quedar bloqueada en caso de estar enviando datos al momento de ser llamada. | |
void | scs_events_send_all_ve_queue (void) |
Envia todos los eventos de cambio de pines de la cola La funcion usa send_data de scs_pc_uart, la cual puede quedar bloqueada en caso de estar enviando datos al momento de ser llamada. | |
void | scs_events_send_all_io_queue (void) |
Envia todos los eventos de lectura IO La funcion usa send_data de scs_pc_uart, la cual puede quedar bloqueada en caso de estar enviando datos al momento de ser llamada. | |
Variables | |
alt_u8 | fe_event_str [FE_STR_SIZE] |
alt_u8 | vs_event_str [VS_STR_SIZE] |
alt_u8 | io_event_str [IO_STR_SIZE] |
#define FE_STR_SIZE 21 |
buffers auxiliares para convertir a cadenas los eventos para el envio el evento de frecuencia se envia como XFETTTTTTTTFFFFCC el evento de cambio de se envia como XVETTTTTTTTVVMM el evento de cambio de IO se envia como XIOTTTTTTTTDD
#define IO_STR_SIZE 13 |
#define VS_STR_SIZE 15 |
void get_events | ( | void | ) |
Para el registro de eventos mantengo una cola para cad tipo cada cola es una queue de structs del tipo de evento el registro se llama desde las isr, ademas de proteger la concurrencia (que se esta logrando impidiendo interrupciones anidadas) se debe salir de la llamada lo mas rapido posible, por tanto si una ola esta llena, el evento se descarta.
TODO avisar de la cola llena de alguna formausado para enviar tarea que vacia los eventos al pc
para el envio de eventos al pc, hay que tener cuidado en que se envien mas rapido de lo que se generan de lo contrario, podria quedar esta funcion retornando eventos indefinidamente en esta implementacion, se asume que se generan eventos a una taza mucho menor que la taza de envio por tanto es seguro que esta funcion retorna en un lapso breve. TODO implementar un el control de tiempo de ejecucion de esta funcion para evaluar cuanto permanece en ejecucion TODO este control temporal podria usarse para obligar a salir de la funcion luego de cierto tiempo
envio todos los eventos de frecuencia
envio todos los eventos de cambio de pines
envio todos los eventos de lectura de IO
void scs_events_init | ( | scs_fp_queue_t * | trs_ptr | ) |
inicializa las colas de eventos
void scs_events_send_all_fe_queue | ( | void | ) |
Envia todos los eventos de frecuencia de la cola La funcion usa send_data de scs_pc_uart, la cual puede quedar bloqueada en caso de estar enviando datos al momento de ser llamada.
veo si hay eventos
si no hay nada, salgo.
si hay, saco uno para convertir a string
acomodo el evento en el string
void scs_events_send_all_io_queue | ( | void | ) |
Envia todos los eventos de lectura IO La funcion usa send_data de scs_pc_uart, la cual puede quedar bloqueada en caso de estar enviando datos al momento de ser llamada.
veo si hay eventos
si no hay nada, salgo.
si hay, saco uno para convertir a string
acomodo el evento en el string
void scs_events_send_all_ve_queue | ( | void | ) |
Envia todos los eventos de cambio de pines de la cola La funcion usa send_data de scs_pc_uart, la cual puede quedar bloqueada en caso de estar enviando datos al momento de ser llamada.
veo si hay eventos
si no hay nada, salgo.
si hay, saco uno para convertir a string
acomodo el evento en el string
void scs_save_event | ( | enum scs_event_type | tipo, | |
void * | params | |||
) |
Registra el evento, requiere el tipo y un puntero a una estructura con los datos del evento la estructura se interpreta en funcion del tipo de evento.
Los valores de la estructura se copian al lugar de memoria gestionado por este modulo.
tipo | tipo de evento | |
params | puntero a la estructura de datos del evento, es interpretado en funcion del tipo de evento |
obtengo el timestamp
proceso los parametros en funcion del tipo de evento
ver si hay espacio en la cola, si no hay salir y/o iniciar vaciado de datos. (ahora no hace nada)
agregar a la cola
ver si hay espacio en la cola, si no hay salir y/o iniciar vaciado de datos. (ahora no hace nada)
agregar a la cola
ver si hay espacio en la cola, si no hay salir y/o iniciar vaciado de datos. (ahora no hace nada)
agregar a la cola
alt_u8 fe_event_str[FE_STR_SIZE] |
alt_u8 io_event_str[IO_STR_SIZE] |
alt_u8 vs_event_str[VS_STR_SIZE] |