Skip to content

Commit

Permalink
Merge pull request #281 from F-Army/antenna-calibration
Browse files Browse the repository at this point in the history
Implemented antenna calibration API with backwards compatibility
  • Loading branch information
Rotzbua authored Jun 12, 2019
2 parents 3734fae + 1645165 commit cb2e64d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
23 changes: 18 additions & 5 deletions src/DW1000.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ byte DW1000Class::_preambleLength = TX_PREAMBLE_LEN_128;
byte DW1000Class::_preambleCode = PREAMBLE_CODE_16MHZ_4;
byte DW1000Class::_channel = CHANNEL_5;
DW1000Time DW1000Class::_antennaDelay;
boolean DW1000Class::_antennaCalibrated = false;
boolean DW1000Class::_smartPower = false;

boolean DW1000Class::_frameCheck = true;
Expand Down Expand Up @@ -1007,6 +1008,15 @@ void DW1000Class::interruptOnAutomaticAcknowledgeTrigger(boolean val) {
setBit(_sysmask, LEN_SYS_MASK, AAT_BIT, val);
}

void DW1000Class::setAntennaDelay(const uint16_t value) {
_antennaDelay.setTimestamp(value);
_antennaCalibrated = true;
}

uint16_t DW1000Class::getAntennaDelay() {
return static_cast<uint16_t>(_antennaDelay.getTimestamp());
}

void DW1000Class::clearInterrupts() {
memset(_sysmask, 0, LEN_SYS_MASK);
}
Expand Down Expand Up @@ -1070,11 +1080,14 @@ void DW1000Class::commitConfiguration() {
writeSystemEventMaskRegister();
// tune according to configuration
tune();
// TODO clean up code + antenna delay/calibration API
// TODO setter + check not larger two bytes integer
byte antennaDelayBytes[LEN_STAMP];
writeValueToBytes(antennaDelayBytes, 16384, LEN_STAMP);
_antennaDelay.setTimestamp(antennaDelayBytes);
// TODO check not larger two bytes integer
byte antennaDelayBytes[DW1000Time::LENGTH_TIMESTAMP];
if( _antennaDelay.getTimestamp() == 0 && _antennaCalibrated == false) {
_antennaDelay.setTimestamp(16384);
_antennaCalibrated = true;
} // Compatibility with old versions.
_antennaDelay.getTimestamp(antennaDelayBytes);

writeBytes(TX_ANTD, NO_SUB, antennaDelayBytes, LEN_TX_ANTD);
writeBytes(LDE_IF, LDE_RXANTD_SUB, antennaDelayBytes, LEN_LDE_RXANTD);
}
Expand Down
7 changes: 6 additions & 1 deletion src/DW1000.h
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,11 @@ class DW1000Class {
static void interruptOnReceiveTimeout(boolean val);
static void interruptOnReceiveTimestampAvailable(boolean val);
static void interruptOnAutomaticAcknowledgeTrigger(boolean val);


/* Antenna delay calibration */
static void setAntennaDelay(const uint16_t value);
static uint16_t getAntennaDelay();

/* callback handler management. */
static void attachErrorHandler(void (* handleError)(void)) {
_handleError = handleError;
Expand Down Expand Up @@ -451,6 +455,7 @@ class DW1000Class {
static byte _dataRate;
static byte _pacSize;
static DW1000Time _antennaDelay;
static boolean _antennaCalibrated;

/* internal helper to remember how to properly act. */
static boolean _permanentReceive;
Expand Down

0 comments on commit cb2e64d

Please sign in to comment.