got sending encoder values working
diff --git a/bbb_cape/src/cape/encoder.h b/bbb_cape/src/cape/encoder.h
index 5a69835..c5b0bf0 100644
--- a/bbb_cape/src/cape/encoder.h
+++ b/bbb_cape/src/cape/encoder.h
@@ -18,10 +18,10 @@
static const uint16_t kHalf = 0xFFFF / 2;
uint16_t old = *counter & 0xFFFF;
int32_t counter_top = *counter ^ old;
- int32_t delta = (int32_t)new - (int32_t)old;
+ int32_t delta = (int32_t)old - (int32_t)new;
int32_t new_counter;
if (__builtin_expect(delta < -kHalf, 0)) {
- new_counter = counter_top - 0x10000;
+ new_counter = (counter_top - 0x10000) ^ 0xFFFF;
} else if (__builtin_expect(delta > kHalf, 0)) {
new_counter = counter_top + 0x10000;
} else {
@@ -39,12 +39,13 @@
uint32_t new) {
uint16_t old = *counter & 0xFFFF;
int64_t counter_top = *counter ^ old;
+ int64_t new_counter;
if (__builtin_expect(new < old, 0)) {
- *counter = counter_top + 0x10000;
+ new_counter = counter_top + 0x10000;
} else {
- *counter = counter_top;
+ new_counter = counter_top;
}
- *counter |= new;
+ *counter = new_counter | new;
}
// number is the 0-indexed number on the silkscreen