diff options
| author | Jacob Palecki <[email protected]> | 2021-04-08 21:49:25 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2021-04-08 21:49:25 -0700 |
| commit | aad1822effaa16c29dba316601923f31d66ce063 (patch) | |
| tree | 939c5262203d1f6648e5f0223e652ae0f55db7a3 | |
| parent | Fix return bug (diff) | |
| download | rawaccel-aad1822effaa16c29dba316601923f31d66ce063.tar.xz rawaccel-aad1822effaa16c29dba316601923f31d66ce063.zip | |
Progress in arbitrary
| -rw-r--r-- | common/accel-lookup.hpp | 15 | ||||
| -rw-r--r-- | common/accel-union.hpp | 3 | ||||
| -rw-r--r-- | wrapper/wrapper.cpp | 3 |
3 files changed, 12 insertions, 9 deletions
diff --git a/common/accel-lookup.hpp b/common/accel-lookup.hpp index 24b61e5..be107f8 100644 --- a/common/accel-lookup.hpp +++ b/common/accel-lookup.hpp @@ -163,6 +163,7 @@ namespace rawaccel { fp_rep_range range; arbitrary_lut_point data[LUT_CAPACITY] = {}; int log_lookup[LUT_CAPACITY] = {}; + float raw_data_in[LUT_CAPACITY * 2] = {}; double first_point_speed; double last_point_speed; int last_arbitrary_index; @@ -226,7 +227,7 @@ namespace rawaccel { return pair.slope + pair.intercept / speed; } - void fill(vec2d* points, int length) + void fill(float* points, int length) { vec2d current = {0, 0}; vec2d next; @@ -237,7 +238,7 @@ namespace rawaccel { for (int i = 0; i < length; i++) { - next = points[i]; + next = vec2d{ points[i * 2], points[i * 2 + 1] }; double slope = (next.y - current.y) / (next.x - current.x); double intercept = next.y - slope * next.x; si_pair current_si = { slope, intercept }; @@ -255,12 +256,12 @@ namespace rawaccel { } } - arbitrary_lut(vec2d* points, int length) + arbitrary_lut(const table_args &args) { - first_point_speed = points[0].x; + first_point_speed = raw_data_in[0]; // -2 because the last index in the arbitrary array is used for slope-intercept only - last_arbitrary_index = length - 2; - last_point_speed = points[last_arbitrary_index].x; + last_arbitrary_index = (length - 2)*2; + last_point_speed = raw_data_in[last_arbitrary_index]; double start = (int)floor(log(first_point_speed)); double end = (int)floor(log(last_point_speed)); @@ -268,7 +269,7 @@ namespace rawaccel { range = fp_rep_range{ start, end, num }; last_log_lookup_index = num * (end - start) - 1; - fill(points, length); + fill(raw_data_in, length); } }; } diff --git a/common/accel-union.hpp b/common/accel-union.hpp index 7f3d5d5..f5c26ba 100644 --- a/common/accel-union.hpp +++ b/common/accel-union.hpp @@ -66,7 +66,7 @@ namespace rawaccel { case internal_mode::motivity_gain: return vis(u.motivity_g); case internal_mode::lut_log: return vis(u.log_lut); case internal_mode::lut_lin: return vis(u.lin_lut); - case internal_mode::lut_arb: + case internal_mode::lut_arb: return vis(u.arb_lut); default: return vis(u.noaccel); } } @@ -84,6 +84,7 @@ namespace rawaccel { motivity motivity_g; linear_lut lin_lut; binlog_lut log_lut; + arbitrary_lut arb_lut; accel_noaccel noaccel = {}; accel_union(const accel_args& args) diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 7992de6..263f019 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -186,7 +186,8 @@ public ref struct ArbitraryLut sealed : public LutBase virtual void SetData(ra::accel_union& accel) override { - throw gcnew NotImplementedException(); + pin_ptr<float> pdata = &data[0,0]; + std::memcpy(&accel.arb_lut.raw_data_in, pdata, sizeof(float) * data->Length * 2); } }; |