M5Unit-RFID 0.2.0 git rev:79c1939
Loading...
Searching...
No Matches
m5::unit::UHFRFIDComponent Class Referenceabstract

Non-instantiable base class for UHF-RFID reader units. More...

#include <unit_UHFRFID.hpp>

Inheritance diagram for m5::unit::UHFRFIDComponent:
m5::unit::UnitJRD4035

Classes

struct  config_t
 Settings for begin. More...
 

Public Member Functions

virtual bool begin () override
 
virtual void update (const bool force=false) override
 
Settings for begin
config_t config () const
 Gets the configuration.
 
void config (const config_t &cfg)
 Sets the configuration.
 
Polling
bool startPolling (const uint16_t count)
 Start continuous polling.
 
bool stopPolling ()
 Stop continuous polling.
 
bool inPolling () const
 In continuous polling?
 
unsigned long lastFrameAt () const
 Timestamp (m5::utility::millis()) of the most recently arrived frame.
 
Tag queue (raw; not deduplicated)
size_t available () const
 Number of queued tag notifications.
 
const m5::uhf::Tagoldest () const
 Oldest queued tag.
 
void discard ()
 Discard the oldest queued tag.
 
void flush ()
 Discard all queued tags.
 
uint32_t dropped () const
 Number of tag notifications dropped due to queue overflow.
 
void clearDropped ()
 Clear the dropped counter.
 
Reader settings
virtual bool readModuleInformation (m5::uhf::ModuleInformation &info)=0
 Read the module information.
 
virtual bool readTransmitPower (int16_t &dbm100)=0
 Read the transmit power in 1/100 dBm.
 
virtual bool writeTransmitPower (const int16_t dbm100)=0
 Write the transmit power in 1/100 dBm.
 
virtual bool readRegion (m5::uhf::Region &region)=0
 Read the operating region.
 
virtual bool writeRegion (const m5::uhf::Region region)=0
 Write the operating region.
 
virtual bool readChannel (uint8_t &index)=0
 Read the operating channel index.
 
virtual bool writeChannel (const uint8_t index)=0
 Write the operating channel index.
 
virtual bool writeAutomaticFrequencyHopping (const bool enable)=0
 Enable or disable automatic frequency hopping.
 
virtual bool writeContinuousCarrier (const bool enable)=0
 Turn the unmodulated carrier on or off.
 
virtual bool readQueryParameters (m5::uhf::QueryParameters &qp)=0
 Read the query parameters.
 
virtual bool writeQueryParameters (const m5::uhf::QueryParameters &qp)=0
 Write the query parameters.
 
virtual bool writeAutoSleepTime (const uint8_t minutes)=0
 Write the inactivity period after which the module sleeps automatically.
 
virtual bool writeIdle (const bool enter, const uint8_t minutes=0)=0
 Put the module into IDLE, or bring it out.
 
virtual bool sleep ()=0
 Put the module into low power sleep.
 
virtual bool wake ()=0
 Wake the module from low power sleep.
 
virtual bool writeOperatingChannels (const std::vector< uint8_t > &channels)=0
 Replace the channel list used for automatic frequency hopping.
 
virtual bool readBlockingSignal (m5::uhf::ChannelLevels &levels)=0
 Measure the blocking signal on every channel of the operating region.
 
virtual bool readChannelRSSI (m5::uhf::ChannelLevels &levels)=0
 Measure the RSSI on every channel of the operating region.
 
virtual bool readSelectParameter (m5::uhf::SelectParameter &sp)=0
 Read back the select mask the reader holds.
 
Tag operations
virtual bool writeSelectParameter (const m5::uhf::Bank bank, const uint32_t pointer_bits, const uint8_t *mask, const size_t mask_len)=0
 Store the mask that picks out one tag.
 
virtual bool writeSelectEnabled (const bool enable)=0
 Apply the stored mask to tag operations, or stop applying it.
 
virtual TagResult readTagMemory (std::vector< uint8_t > &out, const m5::uhf::Bank bank, const uint16_t word_address, const uint16_t word_count, const uint32_t access_password)=0
 Read word_count 16-bit words from bank, starting at word_address.
 
virtual TagResult writeTagMemory (const m5::uhf::Bank bank, const uint16_t word_address, const uint8_t *data, const size_t len, const uint32_t access_password)=0
 Write len bytes to bank, starting at word_address.
 
virtual TagResult lockTagMemory (const uint32_t payload, const uint32_t access_password)=0
 Apply a 20-bit Gen2 lock payload.
 
virtual TagResult killTag (const uint32_t kill_password)=0
 Kill the addressed tag permanently.
 
virtual TagResult blockPermalock (std::vector< uint8_t > &out, const m5::uhf::Bank bank, const uint16_t block_pointer, const uint8_t block_range, const uint8_t *mask, const size_t mask_len, const uint32_t access_password, const bool allow_permanent)=0
 Read or set which blocks of a bank are permanently locked.
 
virtual TagResult qtCommand (uint16_t &control, const bool write, const bool persistent, const uint32_t access_password)=0
 Read or write the QT control word of the addressed tag.
 
virtual TagResult nxpChangeConfig (uint16_t &config, const uint16_t toggle, const uint32_t access_password)=0
 Read the Config-Word of an NXP UCODE G2X, or invert bits of it.
 
virtual TagResult nxpChangeEAS (const bool enable, const uint32_t access_password)=0
 Set or clear the Product Status Flag of an NXP UCODE G2X.
 
virtual bool nxpEASAlarm (std::vector< uint8_t > &alarm)=0
 Ask the field whether any tag has its Product Status Flag asserted.
 
virtual TagResult nxpReadProtect (const bool protect, const uint32_t access_password)=0
 Turn the read protection of an NXP UCODE G2X on or off.
 
virtual m5::uhf::Reason classify (const uint8_t error_code) const =0
 Say what one of this reader's error codes means in EPC Gen2 terms.
 

Protected Member Functions

 UHFRFIDComponent (const uint8_t addr=0x00)
 
virtual bool pump (const uint32_t timeout_ms)=0
 
virtual bool start_polling_command (const uint16_t count)=0
 
virtual bool stop_polling_command ()=0
 
bool reject_while_polling (const char *what) const
 
bool reject_without_selection (const char *what) const
 
void push_tag (const m5::uhf::Tag &tag)
 
void note_frame_arrival ()
 
void reissue_polling_if_needed ()
 

Protected Attributes

config_t _cfg {}
 
std::unique_ptr< m5::container::CircularBuffer< m5::uhf::Tag > > _tags {}
 
uint32_t _dropped {}
 
bool _polling {}
 
bool _rounds_running {}
 
bool _select_mask_stored {}
 
bool _select_enabled {}
 
uint16_t _polling_count {}
 
unsigned long _last_frame_at {}
 
unsigned long _polling_issued_at {}
 

Friends

class m5::uhf::UHFLayer
 

Detailed Description

Non-instantiable base class for UHF-RFID reader units.

Owns the UART transport, the frame pump and the raw tag queue. EPC Gen2 semantics live in m5::uhf::UHFLayer.

Warning
A tag's write range is shorter than its read range: writing takes more power, and these memories erase before they program, of which erasing is the cheaper half. A tag well within reading distance can therefore have a word erased and not programmed, leaving it neither as it was nor as it was asked to be. A command that goes unanswered is not a command that did nothing

Member Function Documentation

◆ blockPermalock()

virtual TagResult m5::unit::UHFRFIDComponent::blockPermalock ( std::vector< uint8_t > & out,
const m5::uhf::Bank bank,
const uint16_t block_pointer,
const uint8_t block_range,
const uint8_t * mask,
const size_t mask_len,
const uint32_t access_password,
const bool allow_permanent )
pure virtual

Read or set which blocks of a bank are permanently locked.

Parameters
[out]outMask read, one bit per block with the first block in the most significant bit. Left alone when locking
bankBank the blocks are in
block_pointerFirst block the mask covers, in units of sixteen
block_rangeWords of mask, each covering sixteen blocks
maskMask to apply, or nullptr to read
mask_lenIts length in bytes, which is twice block_range
access_passwordAccess password the tag holds, or zero
allow_permanentSay so to mean a lock, which is refused without it
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused
Warning
A block locked this way is unwritable for the life of the tag. Reading it is unaffected, and so is every other block

Implemented in m5::unit::UnitJRD4035.

◆ classify()

virtual m5::uhf::Reason m5::unit::UHFRFIDComponent::classify ( const uint8_t error_code) const
pure virtual

Say what one of this reader's error codes means in EPC Gen2 terms.

Parameters
error_codeCode from the error of a TagResult
Returns
What became of the operation

Which codes a reader uses is its own affair, so each reader says what its own mean. That keeps the layer above able to act on a failure without knowing the reader

Implemented in m5::unit::UnitJRD4035.

◆ killTag()

virtual TagResult m5::unit::UHFRFIDComponent::killTag ( const uint32_t kill_password)
pure virtual

Kill the addressed tag permanently.

Parameters
kill_passwordKill password the tag holds, which may not be zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused
Warning
A killed tag never answers again. Nothing here can say whether the mask in force picks out the tag that was meant rather than another one in the field, so what is about to die is worth reading back first
std::vector<uint8_t> epc{};
if (unit.readTagMemory(epc, m5::uhf::Bank::Epc, 2, 6, 0) && epc == expected) {
unit.killTag(password);
}
Unit-related namespace.

Implemented in m5::unit::UnitJRD4035.

◆ lastFrameAt()

unsigned long m5::unit::UHFRFIDComponent::lastFrameAt ( ) const
inline

Timestamp (m5::utility::millis()) of the most recently arrived frame.

Updated by note_frame_arrival() for every frame, including a no-tag notification (Inventory Fail). Useful to observe polling liveness from outside even when no tag is present, since available() alone cannot show that frames are still flowing.

◆ lockTagMemory()

virtual TagResult m5::unit::UHFRFIDComponent::lockTagMemory ( const uint32_t payload,
const uint32_t access_password )
pure virtual

Apply a 20-bit Gen2 lock payload.

Parameters
payloadLock payload, see m5::uhf::buildLockPayload
access_passwordAccess password the tag holds, or zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused
Warning
A payload asking for a permanent lock cannot be undone. m5::uhf::LockAction names which of them those are

Implemented in m5::unit::UnitJRD4035.

◆ nxpChangeConfig()

virtual TagResult m5::unit::UHFRFIDComponent::nxpChangeConfig ( uint16_t & config,
const uint16_t toggle,
const uint32_t access_password )
pure virtual

Read the Config-Word of an NXP UCODE G2X, or invert bits of it.

Parameters
[out]configWord the tag holds once the command has been carried out
toggleBits to invert. Zero reads the word without changing anything
access_passwordAccess password the tag holds, or zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused

The word is toggled rather than assigned: a one inverts the bit it stands over and a zero leaves it alone. Sending the same bits twice puts the word back

Warning
Reading costs nothing, but a tag answers a toggle from the secured state alone. From the open state it hands back the word it already had and changes nothing, and says nothing about having refused (UCODE G2iM SL3S1003_1013 Rev3.7 Table 12)
The Config-Word carries the read protection and the range reduction among other things, so a bit inverted by mistake changes what the tag will answer at all

Implemented in m5::unit::UnitJRD4035.

◆ nxpChangeEAS()

virtual TagResult m5::unit::UHFRFIDComponent::nxpChangeEAS ( const bool enable,
const uint32_t access_password )
pure virtual

Set or clear the Product Status Flag of an NXP UCODE G2X.

Parameters
enableTrue to assert the flag, false to clear it
access_passwordAccess password the tag holds, or zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused

A tag whose flag is asserted answers nxpEASAlarm(), which is what an article surveillance gate listens for

Warning
A tag whose access password is zero ignores this command outright. Give it one first

Implemented in m5::unit::UnitJRD4035.

◆ nxpEASAlarm()

virtual bool m5::unit::UHFRFIDComponent::nxpEASAlarm ( std::vector< uint8_t > & alarm)
pure virtual

Ask the field whether any tag has its Product Status Flag asserted.

Parameters
[out]alarmCode the tag backscattered, or empty when nothing answered
Returns
True when the question was put and an answer came back

This asks the field rather than one tag, so it needs neither a selection nor a password. What answers hands back a code rather than a name: an NXP UCODE G2iM sends a fixed 64-bit one

Note
Nothing being flagged is an answer and not a failure, which is why an empty code is reported apart from whether the question could be asked at all

Implemented in m5::unit::UnitJRD4035.

◆ nxpReadProtect()

virtual TagResult m5::unit::UHFRFIDComponent::nxpReadProtect ( const bool protect,
const uint32_t access_password )
pure virtual

Turn the read protection of an NXP UCODE G2X on or off.

Parameters
protectTrue to protect, false to put it back
access_passwordAccess password the tag holds, or zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused

Protected memory reads back as zeroes rather than falling silent, so the tag still answers an inventory round and can be addressed again to undo this

Warning
Both the EPC and the TID are protected at once, so every protected tag reads back the same all-zero EPC and they can no longer be told apart. Undo this with one tag in the field
A tag whose access password is zero ignores this command outright. Give it one first

Implemented in m5::unit::UnitJRD4035.

◆ qtCommand()

virtual TagResult m5::unit::UHFRFIDComponent::qtCommand ( uint16_t & control,
const bool write,
const bool persistent,
const uint32_t access_password )
pure virtual

Read or write the QT control word of the addressed tag.

Parameters
[in,out]controlWord read, or word to write
writeTrue to write, false to read
persistentTrue to write where a loss of power does not undo it
access_passwordAccess password the tag holds, or zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused
Warning
Switching an Impinj Monza 4QT to its public map changes the EPC it answers under, so the mask in force stops picking it out

Implemented in m5::unit::UnitJRD4035.

◆ readBlockingSignal()

virtual bool m5::unit::UHFRFIDComponent::readBlockingSignal ( m5::uhf::ChannelLevels & levels)
pure virtual

Measure the blocking signal on every channel of the operating region.

Parameters
[out]levelsMeasured level of each channel
Returns
True if successful

Scans for interference the reader itself does not produce, which is what keeps a tag from being read when the antenna and the power are both fine

Implemented in m5::unit::UnitJRD4035.

◆ readChannel()

virtual bool m5::unit::UHFRFIDComponent::readChannel ( uint8_t & index)
pure virtual

Read the operating channel index.

Parameters
[out]indexChannel index within the operating region
Returns
True if successful

Whichever channel the reader is on at that moment, which is not the same as a setting: while it hops it moves on its own, and two reads a second apart disagree

Implemented in m5::unit::UnitJRD4035.

◆ readChannelRSSI()

virtual bool m5::unit::UHFRFIDComponent::readChannelRSSI ( m5::uhf::ChannelLevels & levels)
pure virtual

Measure the RSSI on every channel of the operating region.

Parameters
[out]levelsMeasured level of each channel
Returns
True if successful

Reveals other readers operating nearby

Implemented in m5::unit::UnitJRD4035.

◆ readModuleInformation()

virtual bool m5::unit::UHFRFIDComponent::readModuleInformation ( m5::uhf::ModuleInformation & info)
pure virtual

Read the module information.

Implemented in m5::unit::UnitJRD4035.

◆ readQueryParameters()

virtual bool m5::unit::UHFRFIDComponent::readQueryParameters ( m5::uhf::QueryParameters & qp)
pure virtual

Read the query parameters.

Implemented in m5::unit::UnitJRD4035.

◆ readRegion()

virtual bool m5::unit::UHFRFIDComponent::readRegion ( m5::uhf::Region & region)
pure virtual

Read the operating region.

Implemented in m5::unit::UnitJRD4035.

◆ readSelectParameter()

virtual bool m5::unit::UHFRFIDComponent::readSelectParameter ( m5::uhf::SelectParameter & sp)
pure virtual

Read back the select mask the reader holds.

Parameters
[out]spSelect parameter
Returns
True if successful

No tag replies to a Select, so this is the only way to confirm that the reader is addressing what the caller believes it is

Implemented in m5::unit::UnitJRD4035.

◆ readTagMemory()

virtual TagResult m5::unit::UHFRFIDComponent::readTagMemory ( std::vector< uint8_t > & out,
const m5::uhf::Bank bank,
const uint16_t word_address,
const uint16_t word_count,
const uint32_t access_password )
pure virtual

Read word_count 16-bit words from bank, starting at word_address.

Parameters
[out]outBytes read
bankMemory bank
word_addressStart address in 16-bit words
word_countNumber of 16-bit words
access_passwordAccess password the tag holds, or zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused

Implemented in m5::unit::UnitJRD4035.

◆ readTransmitPower()

virtual bool m5::unit::UHFRFIDComponent::readTransmitPower ( int16_t & dbm100)
pure virtual

Read the transmit power in 1/100 dBm.

Implemented in m5::unit::UnitJRD4035.

◆ sleep()

virtual bool m5::unit::UHFRFIDComponent::sleep ( )
pure virtual

Put the module into low power sleep.

Returns
True if successful
Warning
Any byte wakes a sleeping module, and the module throws that byte away. Sending a command to one therefore wakes it and loses the command, so the first command after a sleep goes unanswered
The select mask does not survive this. See wake()
A tag being addressed should be given up with UHFLayer::deselect() first. The mask does not survive the sleep, and a layer that still believes a tag is selected would read whichever tag answers

Implemented in m5::unit::UnitJRD4035.

◆ startPolling()

bool m5::unit::UHFRFIDComponent::startPolling ( const uint16_t count)

Start continuous polling.

Parameters
countRounds requested per multiple polling command (0 - 65535)
Returns
True if successful
Note
The count is finite, and update() renews the command before it runs out, so the caller sees continuous operation. Keep it short: the module runs the rounds on its own and cannot be stopped once the host is gone

◆ stopPolling()

bool m5::unit::UHFRFIDComponent::stopPolling ( )

Stop continuous polling.

Returns
True if the module confirmed it stopped
Note
Returning false does not leave the module running rounds for ever. Nothing renews the polling once this has been called, so the count it was started with runs out and it falls silent on its own within seconds

◆ wake()

virtual bool m5::unit::UHFRFIDComponent::wake ( )
pure virtual

Wake the module from low power sleep.

Returns
True if successful

Sends one byte to wake it and waits for the chip firmware to reload. The byte itself is thrown away by the module, which is why it is sent on its own rather than as the first real command

Warning
Waking restores the power, the frequency, the hopping mode, the sleep time and the demodulator parameters, but not the select mode or the select parameter. The module comes back holding a mask of zero length, which matches every tag rather than none, so a read or a write goes on succeeding against whichever tag answers. A tag addressed before the sleep has to be selected again; UHFLayer::wake() does that for a caller working through the layer
This can return before the module answers. How long waking takes is not documented, and a module can take over a second
Note
This spends a command of its own, so it is not free to call on a module that is already awake

Implemented in m5::unit::UnitJRD4035.

◆ writeAutomaticFrequencyHopping()

virtual bool m5::unit::UHFRFIDComponent::writeAutomaticFrequencyHopping ( const bool enable)
pure virtual

Enable or disable automatic frequency hopping.

Implemented in m5::unit::UnitJRD4035.

◆ writeAutoSleepTime()

virtual bool m5::unit::UHFRFIDComponent::writeAutoSleepTime ( const uint8_t minutes)
pure virtual

Write the inactivity period after which the module sleeps automatically.

Parameters
minutes1 to 30 minutes, or 0 to disable automatic sleep
Returns
True if successful
Warning
This is the same sleep as sleep(), reached without anyone calling it, so it takes the select mask with it: a tag addressed before the module went to sleep is not the one answering afterwards. writeIdle() takes a period of its own and keeps the mask
The module has no command to say what this is set to, and it survives a power cycle, so what a module holds now cannot be found out

Implemented in m5::unit::UnitJRD4035.

◆ writeChannel()

virtual bool m5::unit::UHFRFIDComponent::writeChannel ( const uint8_t index)
pure virtual

Write the operating channel index.

Implemented in m5::unit::UnitJRD4035.

◆ writeContinuousCarrier()

virtual bool m5::unit::UHFRFIDComponent::writeContinuousCarrier ( const bool enable)
pure virtual

Turn the unmodulated carrier on or off.

Parameters
enableTrue to transmit a carrier, false to stop
Returns
True if successful

A carrier with nothing modulated onto it, which is what a spectrum analyser or a power meter needs to measure the transmitter. No tag answers it and nothing else uses it

Warning
This transmits until it is turned off. What may be radiated, and for how long, is a question of where the unit is being used: a carrier that never stops is not what the channel rules of most regions have in mind

Implemented in m5::unit::UnitJRD4035.

◆ writeIdle()

virtual bool m5::unit::UHFRFIDComponent::writeIdle ( const bool enter,
const uint8_t minutes = 0 )
pure virtual

Put the module into IDLE, or bring it out.

Parameters
enterTrue to enter IDLE, false to leave it
minutesHow long without work before the module enters IDLE by itself, 0 to 30. Zero means it does not
Returns
True if successful

IDLE turns off everything but the digital part and the serial port. Unlike sleep() it keeps what the module was holding, the select parameter included, and the module goes on answering commands

Note
The first tag operation after this brings the module back by itself, and that one may fail where a later one would not: the radio is still settling

Implemented in m5::unit::UnitJRD4035.

◆ writeOperatingChannels()

virtual bool m5::unit::UHFRFIDComponent::writeOperatingChannels ( const std::vector< uint8_t > & channels)
pure virtual

Replace the channel list used for automatic frequency hopping.

Parameters
channelsChannel indices of the operating region, in the order to hop through
Returns
True if successful
Note
Automatic frequency hopping picks from this list once it is set, instead of the list preset in the module. Useful to keep the reader inside the channels a region permits

Implemented in m5::unit::UnitJRD4035.

◆ writeQueryParameters()

virtual bool m5::unit::UHFRFIDComponent::writeQueryParameters ( const m5::uhf::QueryParameters & qp)
pure virtual

Write the query parameters.

Implemented in m5::unit::UnitJRD4035.

◆ writeRegion()

virtual bool m5::unit::UHFRFIDComponent::writeRegion ( const m5::uhf::Region region)
pure virtual

Write the operating region.

Implemented in m5::unit::UnitJRD4035.

◆ writeSelectEnabled()

virtual bool m5::unit::UHFRFIDComponent::writeSelectEnabled ( const bool enable)
pure virtual

Apply the stored mask to tag operations, or stop applying it.

Parameters
enableTrue to address only the selected tag, false to address any tag
Returns
True if successful
Note
Inventory is left unfiltered either way, so polling keeps reporting every tag in the field while Read, Write, Lock and Kill are narrowed down to the selected one

Implemented in m5::unit::UnitJRD4035.

◆ writeSelectParameter()

virtual bool m5::unit::UHFRFIDComponent::writeSelectParameter ( const m5::uhf::Bank bank,
const uint32_t pointer_bits,
const uint8_t * mask,
const size_t mask_len )
pure virtual

Store the mask that picks out one tag.

Parameters
bankBank the mask is matched against; Reserved is not selectable
pointer_bitsWhere the mask starts, as a bit address inside the bank
maskMask bytes
mask_lenLength of mask in bytes
Returns
True if successful
Note
Storing a mask does not talk to any tag, so this succeeds for a tag that is not in the field. Reading the tag back is the only way to learn whether it answered
A mask of zero length matches every tag rather than none, so it is refused here

Implemented in m5::unit::UnitJRD4035.

◆ writeTagMemory()

virtual TagResult m5::unit::UHFRFIDComponent::writeTagMemory ( const m5::uhf::Bank bank,
const uint16_t word_address,
const uint8_t * data,
const size_t len,
const uint32_t access_password )
pure virtual

Write len bytes to bank, starting at word_address.

Parameters
bankMemory bank
word_addressStart address in 16-bit words
dataBytes to write
lenTheir length, which has to be even
access_passwordAccess password the tag holds, or zero
Returns
Nothing on success, or the error code the reader reported
Precondition
A mask has to have been stored and applied, or this is refused
Warning
Writing the EPC bank changes the very bytes an EPC mask matches on, so the mask in force stops picking this tag out. Store it again from what the tag now holds

Implemented in m5::unit::UnitJRD4035.

◆ writeTransmitPower()

virtual bool m5::unit::UHFRFIDComponent::writeTransmitPower ( const int16_t dbm100)
pure virtual

Write the transmit power in 1/100 dBm.

Implemented in m5::unit::UnitJRD4035.