From 9d2a4f8bc22e833a947c2bdd454d6669fe1ae9e0 Mon Sep 17 00:00:00 2001 From: Jake <jake.read@cba.mit.edu> Date: Mon, 19 Sep 2022 16:31:58 -0400 Subject: [PATCH] statewise control back online --- firmware/axl-stepper/src/axl | 2 +- firmware/axl-stepper/src/main.cpp | 44 +++++++++++++++---------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/firmware/axl-stepper/src/axl b/firmware/axl-stepper/src/axl index 0b8fc43..bda32c5 160000 --- a/firmware/axl-stepper/src/axl +++ b/firmware/axl-stepper/src/axl @@ -1 +1 @@ -Subproject commit 0b8fc43e4c0ac860abc96a51eccc5d222ed11bb6 +Subproject commit bda32c5b94c68a6f674d8ccac94a9abf4524e9d5 diff --git a/firmware/axl-stepper/src/main.cpp b/firmware/axl-stepper/src/main.cpp index baa4db0..6882870 100644 --- a/firmware/axl-stepper/src/main.cpp +++ b/firmware/axl-stepper/src/main.cpp @@ -20,9 +20,9 @@ //OSAP osap("axl-stepper_y-right"); //OSAP osap("axl-stepper_x"); //OSAP osap("axl-stepper_e"); -OSAP osap("axl-stepper_z"); -//OSAP osap("axl-stepper_rl"); -//OSAP osap("axl-stepper_rr"); +// OSAP osap("axl-stepper_z"); +OSAP osap("axl-stepper_rl"); +// OSAP osap("axl-stepper_rr"); // -------------------------------------------------------- 0: USB Serial @@ -54,8 +54,7 @@ Endpoint axlSettingsEP(&osap, "axlSettings", onAXLSettingsData); // -------------------------------------------------------- 3: Axl Modal Requests -EP_ONDATA_RESPONSES onStateData(uint8_t* data, uint16_t len){ - /* +EP_ONDATA_RESPONSES onStateRequestData(uint8_t* data, uint16_t len){ // check for partner-config badness, if(len != AXL_NUM_DOF * 4 + 2){ OSAP::error("state req has bad DOF count"); return EP_ONDATA_REJECT; } // we have accel, rate, posn data, @@ -96,44 +95,43 @@ EP_ONDATA_RESPONSES onStateData(uint8_t* data, uint16_t len){ break; } } - */ // since we routinely update it w/ actual states (not requests) return EP_ONDATA_REJECT; } -Endpoint statesEP(&osap, "states", onStateData); +Endpoint stateRequestsEP(&osap, "stateRequests", onStateRequestData); // -------------------------------------------------------- 4: Axl Queue Addition EP_ONDATA_RESPONSES onSegmentData(uint8_t* data, uint16_t len){ // careful, if you add a new field in axlPlannedSegment_t, recall you have to copy // it manually into the buffer (!) - axlPlannedSegment_t move; + axlPlannedSegment_t segment; uint16_t rptr = 0; - // location of move-in-sequence, to count continuity, - move.segmentNumber = ts_readUint32(data, &rptr); + // location of segment-in-sequence, to count continuity, + segment.segmentNumber = ts_readUint32(data, &rptr); // which actuator is requested to ack this mfer, - move.returnActuator = ts_readUint8(data, &rptr); + segment.returnActuator = ts_readUint8(data, &rptr); // is it the end of this stream ? - move.isLastSegment = ts_readBoolean(data, &rptr); - OSAP::debug("segnum, isLast " + String(move.segmentNumber) + ", " + String(move.isLastSegment)); - // unit vector describing move's direction, + segment.isLastSegment = ts_readBoolean(data, &rptr); + OSAP::debug("segnum, isLast " + String(segment.segmentNumber) + ", " + String(segment.isLastSegment)); + // unit vector describing segment's direction, for(uint8_t a = 0; a < AXL_NUM_DOF; a ++){ - move.unitVector.axis[a] = ts_readFloat32(data, &rptr); + segment.unitVector.axis[a] = ts_readFloat32(data, &rptr); } // start vel, accel-rate (up, and down), max velocity, final velocity, distance (all +ve) - move.vi = ts_readFloat32(data, &rptr); - move.accel = ts_readFloat32(data, &rptr); - move.vmax = ts_readFloat32(data, &rptr); - move.vf = ts_readFloat32(data, &rptr); - move.distance = ts_readFloat32(data, &rptr); + segment.vi = ts_readFloat32(data, &rptr); + segment.accel = ts_readFloat32(data, &rptr); + segment.vmax = ts_readFloat32(data, &rptr); + segment.vf = ts_readFloat32(data, &rptr); + segment.distance = ts_readFloat32(data, &rptr); // and send it... - axl_addMoveToQueue(move); + axl_addSegmentToQueue(segment); // don't write to endpoint... return EP_ONDATA_REJECT; } -Endpoint precalculatedMoveEP(&osap, "segmentsIn", onSegmentData); +Endpoint precalculatedSegmentEP(&osap, "segmentsIn", onSegmentData); // -------------------------------------------------------- 5: Halt Input @@ -216,7 +214,7 @@ void loop() { if(axlDataLen){ segmentAckOutEP.write(axlData, axlDataLen); } - // check for queueMoveComplete + // check for queueSegmentComplete axlDataLen = axl_getSegmentCompleteMsg(axlData); if(axlDataLen){ segmentCompleteOutEP.write(axlData, axlDataLen); -- GitLab