mirror of
https://github.com/brmlab/brmdoor_libnfc.git
synced 2025-06-08 08:34:00 +02:00
Explicit unload() 'destructor'
This commit is contained in:
parent
3717cb2563
commit
bbec77f248
3 changed files with 31 additions and 4 deletions
|
@ -1,4 +1,5 @@
|
|||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include <nfc/nfc.h>
|
||||
#include <nfc/nfc-types.h>
|
||||
|
@ -13,7 +14,8 @@ NFCDevice::NFCDevice() throw(NFCError):
|
|||
pollPeriod(2),
|
||||
_nfcContext(NULL),
|
||||
_nfcDevice(NULL),
|
||||
_opened(false)
|
||||
_opened(false),
|
||||
_unloaded(false)
|
||||
{
|
||||
nfc_init(&_nfcContext);
|
||||
if (_nfcContext == NULL) {
|
||||
|
@ -26,7 +28,7 @@ NFCDevice::NFCDevice() throw(NFCError):
|
|||
NFCDevice::~NFCDevice()
|
||||
{
|
||||
close();
|
||||
nfc_exit(_nfcContext);
|
||||
unload();
|
||||
}
|
||||
|
||||
void NFCDevice::open() throw(NFCError)
|
||||
|
@ -55,11 +57,26 @@ void NFCDevice::close()
|
|||
return;
|
||||
}
|
||||
|
||||
assert(_nfcDevice);
|
||||
|
||||
nfc_close(_nfcDevice);
|
||||
_nfcDevice = NULL;
|
||||
_opened = false;
|
||||
}
|
||||
|
||||
void NFCDevice::unload()
|
||||
{
|
||||
if (_unloaded) {
|
||||
return;
|
||||
}
|
||||
|
||||
assert(_nfcContext);
|
||||
|
||||
nfc_exit(_nfcContext);
|
||||
_nfcContext = NULL;
|
||||
_unloaded = true;
|
||||
}
|
||||
|
||||
std::string NFCDevice::scanUID() throw(NFCError)
|
||||
{
|
||||
int res;
|
||||
|
|
|
@ -71,12 +71,18 @@ public:
|
|||
/** Open device explicitly. May be useful after explicit close */
|
||||
void open() throw(NFCError);
|
||||
|
||||
/** Returns true iff device was opened */
|
||||
bool opened() const {return _opened;}
|
||||
/** Returns true iff device was opened and not unloaded. */
|
||||
bool opened() const {return _opened && !_unloaded;}
|
||||
|
||||
/** Close reader. You need to reopen before reading again */
|
||||
void close();
|
||||
|
||||
/**
|
||||
* Unload all structures, close device. It's kind of explicit destructor
|
||||
* since we can't be sure the destructor will be called in Python.
|
||||
*/
|
||||
void unload();
|
||||
|
||||
/**
|
||||
* Specifies the number of polling (0x01 – 0xFE: 1 up to 254 polling, 0xFF:
|
||||
* Endless polling)
|
||||
|
@ -106,6 +112,9 @@ protected:
|
|||
/** Whether device has been successfully opened */
|
||||
bool _opened;
|
||||
|
||||
/** Whether device and its internal libnfc structures have been unloaded */
|
||||
bool _unloaded;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
1
runme.py
1
runme.py
|
@ -11,5 +11,6 @@ try:
|
|||
print "Closing device"
|
||||
nfc.close()
|
||||
print "Device is opened:", nfc.opened()
|
||||
nfc.unload()
|
||||
except NFCError, e:
|
||||
print "Reading UID failed:", e.what()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue