lib: implement enabling RGB332 mode
I've decided to provide a separate pointer for a raw buffer in case the library user comes up with a non-RGB332 use case that avoids byte rearrangement (and copying should be replaced with pulling from the user's pointer in this case)
This commit is contained in:
parent
f05c961455
commit
b82303f44f
|
@ -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;
|
||||
|
@ -89,6 +90,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.
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue