got it working, just a small bug left
This commit is contained in:
parent
4ade3a5f00
commit
f3a619decc
7 changed files with 356 additions and 178 deletions
|
@ -309,47 +309,71 @@ int
|
|||
osclsk_scope::render_block(void)
|
||||
{
|
||||
int res;
|
||||
size_t render_idx;
|
||||
static int async_id;
|
||||
float block_norm;
|
||||
|
||||
float block_norm = 1.f;
|
||||
res = 0;
|
||||
switch (st) {
|
||||
case osc_state::SAMPLE_DONE:
|
||||
block_norm = 1.f;
|
||||
for (render_idx = 0; render_idx < OSCLSK_BLOCK_LEN;
|
||||
render_idx++) {
|
||||
block_norm = std::max(
|
||||
std::abs(block_y_max[render_idx]),
|
||||
block_norm
|
||||
);
|
||||
block_norm = std::max(
|
||||
std::abs(block_y_min[render_idx]),
|
||||
block_norm
|
||||
);
|
||||
}
|
||||
for (render_idx = 0; render_idx < OSCLSK_BLOCK_LEN;
|
||||
render_idx++) {
|
||||
block_y_max[render_idx] =
|
||||
block_y_max[render_idx] / block_norm;
|
||||
block_y_min[render_idx] =
|
||||
block_y_min[render_idx] / block_norm;
|
||||
}
|
||||
for (render_idx = 0; render_idx < OSCLSK_BLOCK_LEN;
|
||||
render_idx++) {
|
||||
screen_px_y_max[render_idx] = 1u + (uint16_t)(
|
||||
OSCLSK_Y_MAX_PX * (.5f + block_y_max[render_idx])
|
||||
);
|
||||
screen_px_y_min[render_idx] = (uint16_t)(
|
||||
OSCLSK_Y_MAX_PX * (.5f + block_y_min[render_idx])
|
||||
);
|
||||
}
|
||||
|
||||
if (st != osc_state::SAMPLE_DONE)
|
||||
return (-1);
|
||||
tft.async_on_finish(render_finish_tft_cb, this);
|
||||
|
||||
st = osc_state::RENDER;
|
||||
res = tft.async_start();
|
||||
AC_ASSERT(res >= 0);
|
||||
if (res < 0)
|
||||
return (-1);
|
||||
|
||||
for (render_idx = 0; render_idx < OSCLSK_BLOCK_LEN; render_idx++) {
|
||||
block_norm = std::max( std::abs(block_y_max[render_idx]),
|
||||
block_norm);
|
||||
block_norm = std::max( std::abs(block_y_min[render_idx]),
|
||||
block_norm);
|
||||
async_id = res;
|
||||
render_idx = 0;
|
||||
st = osc_state::RENDER;
|
||||
|
||||
__attribute__((fallthrough));
|
||||
case osc_state::RENDER:
|
||||
for (; render_idx < OSCLSK_BLOCK_LEN; render_idx++) {
|
||||
res = tft.async_hline_row_bg_fill(async_id, &bg, &fg,
|
||||
screen_px_y_min[render_idx],
|
||||
screen_px_y_max[render_idx],
|
||||
render_idx);
|
||||
if (res < 0)
|
||||
return (-1);
|
||||
if (res > 0)
|
||||
return (1);
|
||||
}
|
||||
tft.async_end();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
for (render_idx = 0; render_idx < OSCLSK_BLOCK_LEN; render_idx++) {
|
||||
block_y_max[render_idx] = block_y_max[render_idx] / block_norm;
|
||||
block_y_min[render_idx] = block_y_min[render_idx] / block_norm;
|
||||
}
|
||||
|
||||
for (render_idx = 0; render_idx < OSCLSK_BLOCK_LEN; render_idx++) {
|
||||
screen_px_y_max[render_idx] = 1u + (uint16_t)(
|
||||
OSCLSK_Y_MAX_PX * (.5f + block_y_max[render_idx]));
|
||||
screen_px_y_min[render_idx] = (uint16_t)(
|
||||
OSCLSK_Y_MAX_PX * (.5f + block_y_min[render_idx]));
|
||||
}
|
||||
|
||||
res = -1;
|
||||
tft.async_on_finish(render_finish_tft_cb, this);
|
||||
tft.async_start();
|
||||
for (render_idx = 0; render_idx < OSCLSK_BLOCK_LEN; render_idx++) {
|
||||
res = tft.async_hline_row_bg_fill(&bg, &fg,
|
||||
screen_px_y_min[render_idx], screen_px_y_max[render_idx],
|
||||
render_idx);
|
||||
if (res == -1)
|
||||
break;
|
||||
}
|
||||
tft.async_end();
|
||||
|
||||
return (res);
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue