Skip to content

Commit 0c86def

Browse files
authored
update
1 parent 604d34e commit 0c86def

3 files changed

Lines changed: 48 additions & 19 deletions

File tree

src/hal/user_comps/xhc-whb04b-6/Submakefile

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
GCC_VERSION := $(shell gcc -dumpversion)
2-
MIN_VERSION := 4.7
3-
ifeq ($(MIN_VERSION),$(firstword $(sort $(GCC_VERSION) $(MIN_VERSION))))
1+
GCC_GTEQ_470 := $(shell $(CC) --version | head -n1 | grep gcc >/dev/null && (expr `($(CC) -dumpfullversion 2>/dev/null || $(CC) -dumpversion) | awk -F '.' '{print $$1*10000+$$2*100+$$3}'` \>= 40700 || true) || echo 1)
2+
ifeq "$(GCC_GTEQ_470)" "1"
43
ifdef HAVE_LIBUSB10
54

65
XHC_WHB04B6_LIB_DEPENDENCIES = ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcncini.so.0
@@ -27,5 +26,5 @@ TARGETS += ../bin/xhc-whb04b-6
2726
endif # HAVE_LIBUSB10
2827

2928
else
30-
$(info gcc version $(GCC_VERSION) too old: skipping hal/user_comps/xhc-whb04b-6)
29+
$(info Compiler version: "$(shell $(CC) --version | head -n1)" is too old: skipping hal/user_comps/xhc-whb04b-6)
3130
endif # GCC VERSION CHECK

src/hal/user_comps/xhc-whb04b-6/hal.cc

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <string.h>
2727
#include <stdarg.h>
2828
#include <unistd.h>
29+
#include <fstream>
2930

3031
// local library includes
3132
#include "./pendant.h"
@@ -749,11 +750,11 @@ void Hal::setStart(bool enabled)
749750
if (requestAutoMode(enabled))
750751
{
751752
if (enabled)
752-
{
753-
toggleStartResumeProgram();
753+
{
754+
toggleStartResumeProgram();
755+
}
756+
setPin(enabled, KeyCodes::Buttons.start.text);
754757
}
755-
setPin(enabled, KeyCodes::Buttons.start.text);
756-
}
757758

758759
if (!enabled)
759760
{
@@ -795,6 +796,24 @@ void Hal::clearStartResumeProgramStates()
795796
*memory->out.doRunProgram = false;
796797
*memory->out.doResumeProgram = false;
797798
}
799+
800+
void Hal::checkState(bool state, hal_bit_t *pin)
801+
{
802+
// 500 milliseconds timeout
803+
unsigned int timeouts=500;
804+
unsigned int timeoutMs=1;
805+
do
806+
{
807+
if (state == *pin)
808+
{
809+
usleep(timeoutMs * 1000);
810+
}
811+
else
812+
{
813+
break;
814+
}
815+
} while ((state == *pin) && (--timeouts) > 0);
816+
}
798817
// ----------------------------------------------------------------------
799818
void Hal::toggleStartResumeProgram()
800819
{
@@ -803,17 +822,21 @@ void Hal::toggleStartResumeProgram()
803822
*memory->out.doPauseProgram = false;
804823
*memory->out.doRunProgram = false;
805824
*memory->out.doResumeProgram = true;
806-
}
807-
if (*memory->in.isProgramRunning)
825+
checkState(true, memory->in.isProgramPaused);
826+
*memory->out.doResumeProgram = false;
827+
} else if (*memory->in.isProgramRunning)
808828
{
809829
*memory->out.doPauseProgram = true;
830+
checkState(false, memory->in.isProgramPaused);
831+
*memory->out.doPauseProgram = false;
810832
*memory->out.doRunProgram = false;
811833
*memory->out.doResumeProgram = false;
812-
}
813-
if (*memory->in.isProgramIdle)
834+
} else if (*memory->in.isProgramIdle)
814835
{
815836
*memory->out.doPauseProgram = false;
816837
*memory->out.doRunProgram = true;
838+
checkState(false, memory->in.isProgramRunning);
839+
*memory->out.doRunProgram = false;
817840
*memory->out.doResumeProgram = false;
818841
}
819842
}
@@ -1335,8 +1358,8 @@ void Hal::setJogCounts(const HandWheelCounters& counters)
13351358
*memory->out.axisAJogCounts = counters.counts(HandWheelCounters::CounterNameToIndex::AXIS_A);
13361359
*memory->out.axisBJogCounts = counters.counts(HandWheelCounters::CounterNameToIndex::AXIS_B);
13371360
*memory->out.axisCJogCounts = counters.counts(HandWheelCounters::CounterNameToIndex::AXIS_C);
1338-
requestManualMode(false);
1339-
requestTeleopMode(false);
1361+
requestManualMode(false);
1362+
requestTeleopMode(false);
13401363
}
13411364
// ----------------------------------------------------------------------
13421365
void Hal::setFunction(bool enabled)
@@ -1373,6 +1396,7 @@ bool Hal::requestMode(bool isRisingEdge, hal_bit_t *requestPin, hal_bit_t * mode
13731396
{
13741397
if (isRisingEdge)
13751398
{
1399+
bool rv;
13761400
if (true == *modeFeedbackPin)
13771401
{
13781402
// shortcut for mode request which is already active
@@ -1381,15 +1405,16 @@ bool Hal::requestMode(bool isRisingEdge, hal_bit_t *requestPin, hal_bit_t * mode
13811405
// request mode
13821406
*requestPin = true;
13831407
usleep(mHalRequestProfile.mode.holdMs * 1000);
1408+
rv = waitForRequestedMode(modeFeedbackPin);
13841409
*requestPin = false;
13851410
usleep(mHalRequestProfile.mode.spaceMs * 1000);
1386-
return waitForRequestedMode(modeFeedbackPin);
1411+
return rv;
13871412
}
13881413
else
13891414
{
1390-
// on button released always clear request
1391-
*requestPin = false;
1392-
return false;
1415+
// on button released always clear request
1416+
*requestPin = false;
1417+
return false;
13931418
}
13941419
return false;
13951420
}
@@ -1403,6 +1428,7 @@ bool Hal::waitForRequestedMode(volatile hal_bit_t * condition)
14031428
useconds_t timeoutMs = mHalRequestProfile.mode.modeCheckLoopTimeoutMs;
14041429
unsigned int maxTimeouts = mHalRequestProfile.mode.modeCheckLoops;
14051430
unsigned int timeouts = maxTimeouts;
1431+
14061432
do
14071433
{
14081434
if (false == *condition)
@@ -1417,7 +1443,7 @@ bool Hal::waitForRequestedMode(volatile hal_bit_t * condition)
14171443
if (false == *condition)
14181444
{
14191445
auto delay = (maxTimeouts - timeouts) * timeoutMs;
1420-
std::cerr << "hal failed to wait for reqested mode. waited " << delay << "ms\n";
1446+
std::cerr << "hal failed to wait for requested mode. waited " << delay << "ms\n";
14211447
return false;
14221448
}
14231449
else

src/hal/user_comps/xhc-whb04b-6/hal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,10 @@ class Hal
549549
//! Writes the corresponding counter to to each axis' count.
550550
//! \param counters values to propagate to each axis
551551
void setJogCounts(const HandWheelCounters& counters);
552+
//! waits until a given pin is set to a requested state
553+
//! \param state requested state
554+
//! \param pin requested pin to compare with
555+
void checkState(bool state, hal_bit_t *pin);
552556

553557
//! Returns the axis position.
554558
//! \param absolute true absolute, false relative

0 commit comments

Comments
 (0)