123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- //
- // Created by robin on 6/19/16.
- //
-
- #include <sstream>
- #include <map>
- #include "FreeFareTagInternal.h"
-
- namespace LibNfc
- {
- namespace FreeFare
- {
-
- FreeFareTagInternal::FreeFareTagInternal(FreefareTag tag)
- : _tag(tag)
- {
- _type = freefare_get_tag_type(tag);
- _uid = freefare_get_tag_uid(tag);
- }
-
- FreeFareTagInternal::~FreeFareTagInternal()
- {
- freefare_free_tag(_tag);
- }
-
- LibNfc::Utils::ResultBool FreeFareTagInternal::authenticate(int sector, std::string key, int keyType)
- {
-
- if (mifare_classic_connect(_tag) != 0) {
- return LibNfc::Utils::ResultBool::error("Failed to connect to MIFARE tag");
- }
- int block = mifare_classic_sector_last_block((MifareClassicBlockNumber)sector);
- if (mifare_classic_authenticate(_tag, (MifareClassicBlockNumber)block, (const unsigned char*)key.c_str(),
- (MifareClassicKeyType)keyType) != 0) {
- return LibNfc::Utils::ResultBool::error("Failed to authenticate to MIFARE tag");
- }
- mifare_classic_disconnect(_tag);
- return LibNfc::Utils::ResultBool::ok(true);
- }
-
- LibNfc::Utils::ResultString FreeFareTagInternal::readBlock(int sector, int block, std::string key, int keyType)
- {
- if (mifare_classic_connect(_tag) != 0) {
- return LibNfc::Utils::ResultString::error("Failed to connect to MIFARE tag");
- }
- block = mifare_classic_sector_first_block((MifareClassicBlockNumber)sector) + block;
- if (mifare_classic_authenticate(_tag, (MifareClassicBlockNumber)block, (const unsigned char*)key.c_str(),
- (MifareClassicKeyType)keyType) != 0) {
- return LibNfc::Utils::ResultString::error("Failed to authenticate to MIFARE tag");
- }
-
- MifareClassicBlock data;
- if (mifare_classic_read(_tag, (MifareClassicBlockNumber)block, &data)) {
- return LibNfc::Utils::ResultString::error("Failed to read MIFARE tag data");
- }
- mifare_classic_disconnect(_tag);
- return LibNfc::Utils::ResultString::ok(std::string((const char*)data, sizeof(data)));
- }
-
- LibNfc::Utils::ResultBool FreeFareTagInternal::writeBlock(int sector, int block, std::string key, int keyType, const std::string &data)
- {
- if (mifare_classic_connect(_tag) != 0) {
- return LibNfc::Utils::ResultBool::error("Failed to connect to MIFARE tag");
- }
- block = mifare_classic_sector_first_block((MifareClassicBlockNumber)sector) + block;
- if (mifare_classic_authenticate(_tag, (MifareClassicBlockNumber)block, (const unsigned char*)key.c_str(),
- (MifareClassicKeyType)keyType) != 0) {
- return LibNfc::Utils::ResultBool::error("Failed to authenticate to MIFARE tag");
- }
-
- if (mifare_classic_write(_tag, (MifareClassicBlockNumber)block, (const unsigned char*)data.c_str())) {
- return LibNfc::Utils::ResultBool::error("Failed to write data to MIFARE tag");
- }
- mifare_classic_disconnect(_tag);
- return LibNfc::Utils::ResultBool::ok(true);
- }
-
- const freefare_tag *FreeFareTagInternal::getTag() const
- {
- return _tag;
- }
-
- int FreeFareTagInternal::getFirstBlock(int sector) const
- {
- return mifare_classic_sector_first_block(sector);
- }
-
- int FreeFareTagInternal::getLastBlock(int sector) const
- {
- return mifare_classic_sector_last_block(sector);
- }
-
- int FreeFareTagInternal::getSectorBlockCount(int sector)
- {
- return mifare_classic_sector_block_count(sector);
- }
-
- freefare_tag_type FreeFareTagInternal::getType() const
- {
- return _type;
- }
-
- const std::string &FreeFareTagInternal::getUid() const
- {
- return _uid;
- }
-
- }; // FreeFare
- }; // LibNfc
|