diff options
Diffstat (limited to 'src/ufodecode.h')
-rw-r--r-- | src/ufodecode.h | 76 |
1 files changed, 62 insertions, 14 deletions
diff --git a/src/ufodecode.h b/src/ufodecode.h index bce17ec..38ea85a 100644 --- a/src/ufodecode.h +++ b/src/ufodecode.h @@ -3,34 +3,82 @@ #include <inttypes.h> -typedef struct ufo_decoder_t *ufo_decoder; +typedef struct _UfoDecoder UfoDecoder; + +typedef struct { + unsigned dummy1:2; + unsigned fsm_master_readout:4; + unsigned dummy2:4; + unsigned fsm_daq:4; + unsigned pixel_full:1; + unsigned control_lock:1; + unsigned data_lock:16; +} UfoDecoderStatus1; + +typedef struct { + unsigned end_of_frames:1; + unsigned busy_or:1; + unsigned busy_ddr:1; + unsigned busy_interl:1; + unsigned error_status:4; /* What the heck? */ + unsigned data_fifo_read_count:10; + unsigned data_fifo_full:1; + unsigned data_fifo_empty:1; + unsigned dummy:2; + unsigned ddr_fifo_write_count:8; + unsigned ddr_fifo_full:1; + unsigned ddr_fifo_empty:1; +} UfoDecoderStatus2; + +typedef struct { + unsigned dummy:2; + unsigned row_counter:10; + unsigned pixel_counter:8; + unsigned ddr_read:4; + unsigned ddr_write:4; + unsigned ddr_arbiter:4; +} UfoDecoderStatus3; + +typedef struct { + uint32_t frame_number; + uint32_t time_stamp; + uint32_t n_rows; + uint8_t n_skipped_rows; + uint16_t cmosis_start_address; + union { + uint32_t bits; + UfoDecoderStatus1 desc; + } status1; + union { + uint32_t bits; + UfoDecoderStatus2 desc; + } status2; + union { + uint32_t bits; + UfoDecoderStatus3 desc; + } status3; +} UfoDecoderMeta; #ifdef __cplusplus extern "C" { #endif -ufo_decoder ufo_decoder_new (int32_t height, +UfoDecoder *ufo_decoder_new (int32_t height, uint32_t width, uint32_t *raw, size_t num_bytes); -void ufo_decoder_free (ufo_decoder decoder); -size_t ufo_decoder_decode_frame (ufo_decoder decoder, +void ufo_decoder_free (UfoDecoder *decoder); +size_t ufo_decoder_decode_frame (UfoDecoder *decoder, uint32_t *raw, size_t num_bytes, uint16_t *pixels, - uint32_t *num_rows, - uint32_t *frame_number, - uint32_t *time_stamp, - uint16_t *cmask); -void ufo_decoder_set_raw_data (ufo_decoder decoder, + UfoDecoderMeta *meta); +void ufo_decoder_set_raw_data (UfoDecoder *decoder, uint32_t *raw, size_t num_bytes); -int ufo_decoder_get_next_frame (ufo_decoder decoder, +int ufo_decoder_get_next_frame (UfoDecoder *decoder, uint16_t **pixels, - uint32_t *num_rows, - uint32_t *frame_number, - uint32_t *time_stamp, - uint16_t *cmask); + UfoDecoderMeta *meta_data); void ufo_deinterlace_interpolate (const uint16_t *frame_in, uint16_t *frame_out, int width, |