From: Pawel Kaczmarek
Date: Mon, 16 Mar 2015 15:02:42 +0000 (+0100)
Subject: [NFC] HCE initial JS part
X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~281
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37b2c2d4cf93a420b03fde7bd961b263571c8e36;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[NFC] HCE initial JS part
[Verification]
TCT without change 91/91
Change-Id: I57234eb7a18072b10a5489b1516a8b1e0149901c
Signed-off-by: Pawel Kaczmarek
---
diff --git a/src/nfc/nfc_api.js b/src/nfc/nfc_api.js
index 91567a46..59673dc9 100644
--- a/src/nfc/nfc_api.js
+++ b/src/nfc/nfc_api.js
@@ -8,6 +8,73 @@ var type_ = xwalk.utils.type;
var converter_ = xwalk.utils.converter;
var native_ = new xwalk.utils.NativeManager(extension);
+
+var NDEFRecordTextEncoding = {
+ UTF8: 'UTF8',
+ UTF16: 'UTF16'
+};
+
+var NFCTagType = {
+ GENERIC_TARGET: 'GENERIC_TARGET',
+ ISO14443_A: 'ISO14443_A',
+ ISO14443_4A: 'ISO14443_4A',
+ ISO14443_3A: 'ISO14443_3A',
+ MIFARE_MINI: 'MIFARE_MINI',
+ MIFARE_1K: 'MIFARE_1K',
+ MIFARE_4K: 'MIFARE_4K',
+ MIFARE_ULTRA: 'MIFARE_ULTRA',
+ MIFARE_DESFIRE: 'MIFARE_DESFIRE',
+ ISO14443_B: 'ISO14443_B',
+ ISO14443_4B: 'ISO14443_4B',
+ ISO14443_BPRIME: 'ISO14443_BPRIME',
+ FELICA: 'FELICA',
+ JEWEL: 'JEWEL',
+ ISO15693: 'ISO15693',
+ UNKNOWN_TARGET: 'UNKNOWN_TARGET'
+};
+
+var CardEmulationMode = {
+ ALWAYS_ON: 'ALWAYS_ON',
+ OFF: 'OFF'
+};
+
+var SecureElementType = {
+ ESE: 'ESE',
+ UICC: 'UICC',
+ HCE: 'HCE'
+};
+
+var CardEmulationCategoryType = {
+ PAYMENT: 'PAYMENT',
+ OTHER: 'OTHER'
+};
+
+var HCEEventType = {
+ DEACTIVATED: 'DEACTIVATED',
+ ACTIVATED: 'ACTIVATED',
+ APDU_RECEIVED: 'APDU_RECEIVED'
+};
+
+function HCEEventData(data) {
+ Object.defineProperties(this, {
+ eventType: {
+ value: data.eventType,
+ writable: false,
+ enumerable: true
+ },
+ apdu: {
+ value: data.apdu || [],
+ writable: false,
+ enumerable: true
+ },
+ length: {
+ value: data.length || 0,
+ writable: false,
+ enumerable: true
+ }
+ });
+}
+
function ListenerManager(native, listenerName) {
this.listeners = {};
this.nextId = 1;
@@ -23,6 +90,8 @@ ListenerManager.prototype.onListenerCalled = function(msg) {
this.listeners[key](msg.mode);
} else if ('Transaction' === msg.type) {
this.listeners[key](msg.aid, msg.data);
+ } else if('HCEEventData' === msg.type) {
+ this.listeners[key](new HCEEventData(msg));
}
}
}
@@ -51,49 +120,14 @@ var CARD_EMULATION_MODE_LISTENER = 'CardEmulationModeChanged';
var ACTIVE_SECURE_ELEMENT_LISTENER = 'ActiveSecureElementChanged';
var TRANSACTION_EVENT_ESE_LISTENER = 'TransactionEventListener_ESE';
var TRANSACTION_EVENT_UICC_LISTENER = 'TransactionEventListener_UICC';
+var HCE_EVENT_LISTENER = 'HCEEventListener';
var TAG_LISTENER = 'TagListener';
var cardEmulationModeListener = new ListenerManager(native_, CARD_EMULATION_MODE_LISTENER);
var activeSecureElementChangeListener = new ListenerManager(native_, ACTIVE_SECURE_ELEMENT_LISTENER);
var transactionEventListenerEse = new ListenerManager(native_, TRANSACTION_EVENT_ESE_LISTENER);
var transactionEventListenerUicc = new ListenerManager(native_, TRANSACTION_EVENT_UICC_LISTENER);
+var HCEEventListener = new ListenerManager(native_, HCE_EVENT_LISTENER);
-//enumeration NDEFRecordTextEncoding ////////////////////////////////////////////////////
-var NDEFRecordTextEncoding = {
- UTF8: 'UTF8',
- UTF16: 'UTF16'
-};
-
-//enumeration NFCTagType ////////////////////////////////////////////////////
-var NFCTagType = {
- GENERIC_TARGET: 'GENERIC_TARGET',
- ISO14443_A: 'ISO14443_A',
- ISO14443_4A: 'ISO14443_4A',
- ISO14443_3A: 'ISO14443_3A',
- MIFARE_MINI: 'MIFARE_MINI',
- MIFARE_1K: 'MIFARE_1K',
- MIFARE_4K: 'MIFARE_4K',
- MIFARE_ULTRA: 'MIFARE_ULTRA',
- MIFARE_DESFIRE: 'MIFARE_DESFIRE',
- ISO14443_B: 'ISO14443_B',
- ISO14443_4B: 'ISO14443_4B',
- ISO14443_BPRIME: 'ISO14443_BPRIME',
- FELICA: 'FELICA',
- JEWEL: 'JEWEL',
- ISO15693: 'ISO15693',
- UNKNOWN_TARGET: 'UNKNOWN_TARGET'
-};
-
-////enumeration CardEmulationMode ////////////////////////////////////////////////////
-var CardEmulationMode = {
- ALWAYS_ON: 'ALWAYS_ON',
- OFF: 'OFF'
-};
-
-////enumeration SecureElementType ////////////////////////////////////////////////////
-var SecureElementType = {
- ESE: 'ESE',
- UICC: 'UICC'
-};
//////////////////NFCManager /////////////////
@@ -542,6 +576,168 @@ NFCAdapter.prototype.setExclusiveModeForTransaction = function() {
return;
};
+NFCAdapter.prototype.addHCEEventListener = function(eventCallback) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'eventCallback', type: types_.LISTENER, values: ['onchanged']}
+ ]);
+
+ if (type_.isEmptyObject(HCEEventListener.listeners)) {
+ var result = native_.callSync('NFCAdapter_addHCEEventListener');
+ if (native_.isFailure(result)) {
+ throw new WebAPIException(0, result.error.message,
+ result.error.name);
+ }
+ }
+
+ return HCEEventListener.addListener(args.eventCallback);
+};
+
+NFCAdapter.prototype.removeHCEEventListener = function(watchId) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'watchId', type: types_.LONG}
+ ]);
+
+ HCEEventListener.removeListener(args.watchId);
+
+ if (type_.isEmptyObject(HCEEventListener.listeners)) {
+ native_.callSync('NFCAdapter_removeHCEEventListener');
+ }
+};
+
+NFCAdapter.prototype.sendHostAPDUResponse = function(apdu, successCallback, errorCallback) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'apdu', type: types_.BYTE},
+ {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
+ {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
+ ]);
+
+ var data = {
+ apdu: args.apdu
+ };
+
+ var callback = function(result) {
+ if (native_.isFailure(result)) {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+ return;
+ }
+ native_.callIfPossible(args.successCallback);
+ };
+
+ native_.call('NFCAdapter_sendHostAPDUResponse', data, callback);
+};
+
+NFCAdapter.prototype.isActivatedHandlerForAID = function(aid) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'aid', type: types_.BYTE}
+ ]);
+
+ var data = {
+ aid: args.aid
+ };
+
+ var result = native_.callSync('NFCAdapter_isActivatedHandlerForAID', data);
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+ return native_.getResultObject(result);
+};
+
+NFCAdapter.prototype.isActivatedHandlerForCategory = function(category) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'category', type: types_.ENUM, values: Object.keys(CardEmulationCategoryType)}
+ ]);
+
+ var data = {
+ category: args.category
+ };
+
+ var result = native_.callSync('NFCAdapter_isActivatedHandlerForCategory', data);
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+ return native_.getResultObject(result);
+};
+
+NFCAdapter.prototype.registerAID = function(aid, category) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'aid', type: types_.BYTE},
+ {name: 'category', type: types_.ENUM, values: Object.keys(CardEmulationCategoryType)}
+ ]);
+
+ var data = {
+ aid: args.aid,
+ category: args.category
+ };
+
+ var result = native_.callSync('NFCAdapter_registerAID', data);
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+};
+
+NFCAdapter.prototype.unregisterAID = function(aid, category) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'aid', type: types_.BYTE},
+ {name: 'category', type: types_.ENUM, values: Object.keys(CardEmulationCategoryType)}
+ ]);
+
+ var data = {
+ aid: args.aid,
+ category: args.category
+ };
+
+ var result = native_.callSync('NFCAdapter_unregisterAID', data);
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+};
+
+function AIDData(data) {
+ Object.defineProperties(this, {
+ type: {
+ value: data.type,
+ writable: false,
+ enumerable: true
+ },
+ aid: {
+ value: data.aid || [],
+ writable: false,
+ enumerable: true
+ },
+ readOnly: {
+ value: data.readOnly || false,
+ writable: false,
+ enumerable: true
+ }
+ });
+}
+
+NFCAdapter.prototype.getAIDsForCategory = function(category, successCallback, errorCallback) {
+ var args = validator_.validateArgs(arguments, [
+ {name: 'category', type: types_.ENUM, values: Object.keys(CardEmulationCategoryType)},
+ {name: 'successCallback', type: types_.FUNCTION},
+ {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
+ ]);
+
+ var data = {
+ category: args.category
+ };
+
+ var callback = function(result) {
+ if (native_.isFailure(result)) {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+ return;
+ }
+ native_.callIfPossible(args.successCallback, new AIDData(native_.getResultObject(result)));
+ };
+
+ native_.call('NFCAdapter_getAIDsForCategory', data, callback);
+};
+
//////////////////NFCTag /////////////////
function NFCTag(tagid) {