diff options
-rw-r--r-- | include/osmo-fl2k.h | 9 | ||||
-rw-r--r-- | src/libosmo-fl2k.c | 26 |
2 files changed, 28 insertions, 7 deletions
diff --git a/include/osmo-fl2k.h b/include/osmo-fl2k.h index 02ad4ad..7aafc24 100644 --- a/include/osmo-fl2k.h +++ b/include/osmo-fl2k.h @@ -54,6 +54,7 @@ typedef struct fl2k_data_info { char *r_buf; /* pointer to red buffer */ char *g_buf; /* pointer to green buffer */ char *b_buf; /* pointer to blue buffer */ + char *raw_buf; /* pointer to pre-arranged buffer */ } fl2k_data_info_t; typedef struct fl2k_dev fl2k_dev_t; @@ -90,6 +91,14 @@ FL2K_API int fl2k_close(fl2k_dev_t *dev); FL2K_API int fl2k_set_sample_rate(fl2k_dev_t *dev, uint32_t target_freq); /*! + * Set RGB332 sample format + * + * \param dev the device handle given by fl2k_open() + * \return 0 on success + */ +FL2K_API int fl2k_set_rgb332(fl2k_dev_t *dev); + +/*! * Get actual sample rate the device is configured to. * * \param dev the device handle given by fl2k_open() diff --git a/src/libosmo-fl2k.c b/src/libosmo-fl2k.c index 9ebe130..2ac371e 100644 --- a/src/libosmo-fl2k.c +++ b/src/libosmo-fl2k.c @@ -204,6 +204,13 @@ int fl2k_deinit_device(fl2k_dev_t *dev) return r; } +int fl2k_set_rgb332(fl2k_dev_t *dev) +{ + uint32_t reg; + fl2k_read_reg(dev, 0x8004, ®); + return fl2k_write_reg(dev, 0x8004, reg | (1 << 25)); +} + static double fl2k_reg_to_freq(uint32_t reg) { double sample_clock, offset, offs_div; @@ -910,15 +917,20 @@ static void *fl2k_sample_worker(void *arg) xfer_info = (fl2k_xfer_info_t *)xfer->user_data; out_buf = (char *)xfer->buffer; - /* Re-arrange and copy bytes in buffer for DACs */ - fl2k_convert_r(out_buf, data_info.r_buf, dev->xfer_buf_len, - data_info.sampletype_signed ? 128 : 0); + if (data_info.raw_buf) { + /* Shove a pre-arranged buffer into the DACs */ + memcpy(out_buf, data_info.raw_buf, dev->xfer_buf_len); + } else { + /* Re-arrange and copy bytes in buffer for DACs */ + fl2k_convert_r(out_buf, data_info.r_buf, dev->xfer_buf_len, + data_info.sampletype_signed ? 128 : 0); - fl2k_convert_g(out_buf, data_info.g_buf, dev->xfer_buf_len, - data_info.sampletype_signed ? 128 : 0); + fl2k_convert_g(out_buf, data_info.g_buf, dev->xfer_buf_len, + data_info.sampletype_signed ? 128 : 0); - fl2k_convert_b(out_buf, data_info.b_buf, dev->xfer_buf_len, - data_info.sampletype_signed ? 128 : 0); + fl2k_convert_b(out_buf, data_info.b_buf, dev->xfer_buf_len, + data_info.sampletype_signed ? 128 : 0); + } xfer_info->seq = buf_cnt++; xfer_info->state = BUF_FILLED; |