From 51dd062bfac3f4cb087313d4b2a64edd897d50da Mon Sep 17 00:00:00 2001 From: wlt233 <1486185683@qq.com> Date: Tue, 18 Apr 2023 00:51:39 +0800 Subject: [PATCH] fix felica template read --- .../main/java/moe/tqlwsl/aicemu/EmuCard.kt | 3 +- .../main/java/moe/tqlwsl/aicemu/FelicaCard.kt | 77 +++++++------------ .../main/java/moe/tqlwsl/aicemu/GlobalVar.kt | 2 +- 3 files changed, 29 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/moe/tqlwsl/aicemu/EmuCard.kt b/app/src/main/java/moe/tqlwsl/aicemu/EmuCard.kt index 851c33d..bafa438 100644 --- a/app/src/main/java/moe/tqlwsl/aicemu/EmuCard.kt +++ b/app/src/main/java/moe/tqlwsl/aicemu/EmuCard.kt @@ -9,7 +9,6 @@ import android.widget.Toast class EmuCard : HostNfcFService() { private lateinit var card: FelicaCard - // byte utils fun byteArrayOfInts(vararg ints: Int) = ByteArray(ints.size) { pos -> ints[pos].toByte() } fun ByteArray.toHexString(hasSpace: Boolean = true) = this.joinToString("") { @@ -80,7 +79,7 @@ class EmuCard : HostNfcFService() { Log.d("HCEFService", "onCreate NFCF") super.onCreate() val globalVar = this.applicationContext as GlobalVar - card = FelicaCard(globalVar.IDm) + card = FelicaCard(this, globalVar.IDm) // Toast.makeText(this, "onCreate", Toast.LENGTH_LONG).show() } diff --git a/app/src/main/java/moe/tqlwsl/aicemu/FelicaCard.kt b/app/src/main/java/moe/tqlwsl/aicemu/FelicaCard.kt index 9a9c2a9..08df9dc 100644 --- a/app/src/main/java/moe/tqlwsl/aicemu/FelicaCard.kt +++ b/app/src/main/java/moe/tqlwsl/aicemu/FelicaCard.kt @@ -1,58 +1,45 @@ package moe.tqlwsl.aicemu -import android.app.Application import android.content.Context import android.util.Log import com.google.gson.Gson import com.google.gson.JsonSyntaxException import com.google.gson.reflect.TypeToken import java.io.BufferedReader -import java.io.File import java.io.IOException import java.io.InputStreamReader -class FelicaCard(IDm: String) { +class FelicaCard(context: Context, IDm: String) { private var cardData = mutableMapOf() private val gson = Gson() + private val TAG = "AICEmu" + private val fileName = "felica_template.json" init { -// instance = this -// val fileName = "felica_template.json" -// Log.d("HCEFService", "Load Felica Data from assets/$fileName") -// val fileContent = readAssetFile(applicationContext, fileName) -// val mutableBlock = object : TypeToken>() {}.type -// try { -// val jsonData = gson.fromJson>(fileContent, mutableBlock) -// if (jsonData != null) { -// cardData = jsonData -// val block82 = ByteArray(16) -// val IDmBytes = IDm.decodeHex() -// System.arraycopy(IDmBytes, 0, block82, 0, 16) -// cardData["82"] = block82.toHexString() -// } - val block82 = ByteArray(16) - Log.d("HCEFService","Felica Card $IDm") - val IDmBytes = IDm.decodeHex() - System.arraycopy(IDmBytes, 0, block82, 0, 8) - cardData["82"] = block82.toHexString() - val block = ByteArray(16) - cardData["80"] = block.toHexString() - cardData["86"] = block.toHexString() - cardData["90"] = block.toHexString() - cardData["91"] = block.toHexString() - cardData["00"] = block.toHexString() - Log.d("HCEFService","Felica Card Data") - Log.d("HCEFService","=".repeat(53)) - for (en in cardData.entries) { - Log.d("HCEFService","[${en.key}]: ${en.value}") + Log.d(TAG, "Load Felica Data from assets/$fileName") + val fileContent = readAssetFile(context, fileName) + val mutableBlock = object : TypeToken>() {}.type + try { + val jsonData = gson.fromJson>(fileContent, mutableBlock) + if (jsonData != null) { + cardData = jsonData + val block82 = ByteArray(16) + val IDmBytes = IDm.decodeHex() + System.arraycopy(IDmBytes, 0, block82, 0, 8) + cardData["82"] = block82.toHexString() + } + Log.d(TAG,"[Felica Card Data]") + Log.d(TAG, "=".repeat(53)) + for (en in cardData.entries) { + Log.d(TAG,"[${en.key}]: ${en.value}") + } + Log.d(TAG, "=".repeat(53)) + } catch (e: IOException) { + Log.e(TAG, "assets/$fileName Read Error") + } catch (e: JsonSyntaxException) { + Log.e(TAG, "assets/$fileName Syntax Error") } - Log.d("HCEFService","=".repeat(53)) -// } catch (e: IOException) { -// Log.e("Error", "File Read Error") -// } catch (e: JsonSyntaxException) { -// Log.e("Error", "File Syntax Error") -// } } // utils @@ -76,33 +63,23 @@ class FelicaCard(IDm: String) { System.arraycopy(blockData, 0, resp, 0, blockData.size) return resp } - - Log.e("Error", "Invalid Block") + Log.e(TAG, "Invalid Block $idStr") return null } fun writeBlock(id: Byte, data: ByteArray) { } - fun readAssetFile(context: Context, fileName: String): String { + private fun readAssetFile(context: Context, fileName: String): String { val stringBuilder = StringBuilder() - - // 获取AssetManager val assetManager = context.assets - - // 通过AssetManager打开文件 val inputStream = assetManager.open(fileName) val bufferedReader = BufferedReader(InputStreamReader(inputStream)) - - // 逐行读取文件内容并将其添加到StringBuilder中 bufferedReader.forEachLine { line -> stringBuilder.append(line) stringBuilder.append("\n") } - - // 关闭流资源 bufferedReader.close() inputStream.close() - return stringBuilder.toString() } } \ No newline at end of file diff --git a/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt b/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt index 29ddfbe..7083a76 100644 --- a/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt +++ b/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt @@ -3,5 +3,5 @@ package moe.tqlwsl.aicemu import android.app.Application class GlobalVar : Application() { - var IDm: String = "" + var IDm: String = "02fe000000000000" } \ No newline at end of file