mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-08-21 03:47:43 +00:00
add shift feat for protcol view tool (#2258)
* add shift * add shift * format * add padding (wrote by AI) * layout fine tune * remove debug thing * edit per request * remove torjan (jk) * int 16 should be good enough for it
This commit is contained in:
@@ -51,6 +51,7 @@ ProtoView::ProtoView(NavigationView& nav)
|
||||
&field_frequency,
|
||||
&labels,
|
||||
&options_zoom,
|
||||
&number_shift,
|
||||
&button_reset,
|
||||
&waveform,
|
||||
&waveform2,
|
||||
@@ -63,6 +64,11 @@ ProtoView::ProtoView(NavigationView& nav)
|
||||
draw();
|
||||
draw2();
|
||||
};
|
||||
number_shift.on_change = [this](int32_t value) {
|
||||
waveform_shift = value;
|
||||
draw();
|
||||
draw2();
|
||||
};
|
||||
button_reset.on_select = [this](Button&) {
|
||||
reset();
|
||||
};
|
||||
@@ -74,6 +80,8 @@ ProtoView::ProtoView(NavigationView& nav)
|
||||
|
||||
void ProtoView::reset() {
|
||||
cnt = 0;
|
||||
number_shift.set_value(0);
|
||||
waveform_shift = 0;
|
||||
for (uint16_t i = 0; i < MAXSIGNALBUFFER; i++) time_buffer[i] = 0;
|
||||
needCntReset = false;
|
||||
draw();
|
||||
@@ -126,9 +134,19 @@ void ProtoView::draw() {
|
||||
drawcnt = 0;
|
||||
for (uint16_t i = 0; i < MAXDRAWCNT; i++) waveform_buffer[i] = 0; // reset
|
||||
|
||||
for (uint16_t i = 0; i < MAXSIGNALBUFFER; ++i) {
|
||||
state = time_buffer[i] >= 0;
|
||||
int32_t timeabs = state ? time_buffer[i] : -1 * time_buffer[i];
|
||||
// add empty data for padding (so you can shift left/nagetive)
|
||||
for (int32_t i = 0;
|
||||
i < ((waveform_shift > 0) ? 0 : -waveform_shift) && drawcnt < MAXDRAWCNT; // this is for shift nagetive (left side)
|
||||
++i) {
|
||||
waveform_buffer[drawcnt++] = 0;
|
||||
}
|
||||
|
||||
for (uint16_t i = ((waveform_shift < 0) ? -waveform_shift : 0); // this is for shift positive aka right side
|
||||
i < MAXSIGNALBUFFER && drawcnt < MAXDRAWCNT; // prevent out of ranging
|
||||
++i) {
|
||||
uint16_t buffer_index = (i + waveform_shift + MAXSIGNALBUFFER) % MAXSIGNALBUFFER;
|
||||
state = time_buffer[buffer_index] >= 0;
|
||||
int32_t timeabs = state ? time_buffer[buffer_index] : -1 * time_buffer[buffer_index];
|
||||
int32_t timesize = timeabs / zoom;
|
||||
if (timesize == 0) {
|
||||
remain += timeabs;
|
||||
@@ -145,9 +163,8 @@ void ProtoView::draw() {
|
||||
}
|
||||
remain = 0;
|
||||
lmax = 0;
|
||||
for (int32_t ii = 0; ii < timesize; ++ii) {
|
||||
for (int32_t ii = 0; ii < timesize && drawcnt < MAXDRAWCNT; ++ii) {
|
||||
waveform_buffer[drawcnt++] = state;
|
||||
if (drawcnt >= MAXDRAWCNT) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user