diff --git a/.gitignore b/.gitignore index a4c7838..5e6513e 100755 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,91 @@ -*.iml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -.externalNativeBuild +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# mac specific +.DS_Store + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Android Profiling +*.hprof diff --git a/app/build.gradle b/app/build.gradle index a8147fe..7444479 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "com.csl.cs108ademoapp" minSdkVersion 19 targetSdkVersion 28 - versionCode 24 - versionName "1.19.0" + versionCode 25 + versionName "1.20.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 diff --git a/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java b/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java index b264296..9bbcbe0 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java @@ -36,11 +36,35 @@ public enum TaskCancelRReason { boolean done = false; boolean ending = false; private String endingMessaage; - int qValue; - boolean repeat, nextNew; + + int qValue=0; + boolean repeat=false, nextNew=false; + boolean bEnableErrorPopWindow=true; + boolean gotInventory; int batteryCountInventory_old; + public AccessTask(Button button, boolean invalidRequest, + String selectMask, int selectBank, int selectOffset, + String strPassword, int powerLevel, Cs108Connector.HostCommands hostCommand, boolean bEnableErrorPopWindow) { + this.button = button; + this.registerTagGot = registerTagGot; + this.registerVoltageLevel = registerVoltageLevel; + + this.invalidRequest = invalidRequest; MainActivity.mCs108Library4a.appendToLog("invalidRequest = " + invalidRequest); + this.selectMask = selectMask; + this.selectBank = selectBank; + this.selectOffset = selectOffset; + this.strPassword = strPassword; + this.powerLevel = powerLevel; + this.hostCommand = hostCommand; + this.bEnableErrorPopWindow = bEnableErrorPopWindow; + if (true) { + total = 0; + tagList.clear(); + } + preExecute(); + } public AccessTask(Button button, TextView textViewWriteCount, boolean invalidRequest, String selectMask, int selectBank, int selectOffset, String strPassword, int powerLevel, Cs108Connector.HostCommands hostCommand, @@ -69,15 +93,15 @@ public AccessTask(Button button, TextView textViewWriteCount, boolean invalidReq total = 0; tagList.clear(); } + preExecute(); + } + void preExecute() { accessResult = null; playerO = MainActivity.sharedObjects.playerO; playerN = MainActivity.sharedObjects.playerN; - playerN.start(); - } + //playerN.start(); - @Override - protected void onPreExecute() { buttonText = button.getText().toString().trim(); String buttonText1 = null; String strLastChar = buttonText.substring(buttonText.length()-1); if (strLastChar.toUpperCase().matches("E")) { @@ -158,7 +182,7 @@ else if (rx000pkgData != null) { } else if (rx000pkgData.responseType == Cs108Connector.HostCmdResponseTypes.TYPE_18K6C_TAG_ACCESS) { if (true) { if (rx000pkgData.decodedError == null) { - if (done == false) { accessResult = rx000pkgData.decodedResult; } + if (done == false) { accessResult = rx000pkgData.decodedResult; MainActivity.mCs108Library4a.appendToLog("HelloA, accResult=" + accessResult);} done = true; publishProgress(null, rx000pkgData.decodedResult); } @@ -194,11 +218,11 @@ else if (repeat && (nextNew == false || resultError.length() != 0)) { String tagInventoried = null; @Override protected void onProgressUpdate(String... output) { - if (output[0] != null) { + if (true) progressUpdate(output); + else if (output[0] != null) { if (output[0].length() == 2) { if (output[0].contains("TT")) { gotInventory = true; - if (registerTagGot != null) registerTagGot.setText(output[1]); boolean matched = false; for (int i = 0; i < tagList.size(); i++) { if (output[1].matches(tagList.get(i))) { @@ -206,6 +230,7 @@ protected void onProgressUpdate(String... output) { break; } } + if (registerTagGot != null) registerTagGot.setText(output[1]); if (matched == false) tagInventoried = output[1]; } else if (output[0].contains("WW")) { long timePeriod = (System.currentTimeMillis() - startTimeMillis) / 1000; @@ -249,6 +274,45 @@ protected void onPostExecute(String result) { DeviceConnectTask4RegisterEnding(); } + protected void progressUpdate(String... output) { + if (output[0] != null) { + if (output[0].length() == 2) { + if (output[0].contains("TT")) { + gotInventory = true; + boolean matched = false; + for (int i = 0; i < tagList.size(); i++) { + if (output[1].matches(tagList.get(i))) { + matched = true; + break; + } + } + if (registerTagGot != null) registerTagGot.setText(output[1]); + if (matched == false) tagInventoried = output[1]; + } else if (output[0].contains("WW")) { + long timePeriod = (System.currentTimeMillis() - startTimeMillis) / 1000; + if (timePeriod > 0) { + if (registerRunTime != null) registerRunTime.setText(String.format("Run time: %d sec", timePeriod)); + } + } else if (taskCancelReason == TaskCancelRReason.NULL) { + if (registerVoltageLevel != null) registerVoltageLevel.setText(MainActivity.mCs108Library4a.getBatteryDisplay(true)); + } + } else { + resultError += output[0]; + if (true) + MainActivity.mCs108Library4a.appendToLog("output[0]: " + output[0] + ", resultError = " + resultError); + } + } else { + if (registerYield != null) { + if (tagInventoried != null) { + tagList.add(tagInventoried); + tagInventoried = null; + } + registerYield.setText("Unique:" + Integer.toString(tagList.size())); + } + if (registerTotal != null) registerTotal.setText("Total:" + Integer.toString(++total)); + } + } + void DeviceConnectTask4RegisterEnding() { String strErrorMessage = ""; if (false) { @@ -267,7 +331,7 @@ void DeviceConnectTask4RegisterEnding() { switch (taskCancelReason) { case NULL: if (accessResult == null || (resultError != null && resultError.length() != 0) || (endingMessaage != null && endingMessaage.length() != 0)) strErrorMessage += ("Finish as COMMAND END is received " + (gotInventory ? "WITH" : "WITHOUT") + " tag response"); - else Toast.makeText(MainActivity.mContext, R.string.toast_abort_by_SUCCESS, Toast.LENGTH_SHORT).show(); + //else Toast.makeText(MainActivity.mContext, R.string.toast_abort_by_SUCCESS, Toast.LENGTH_SHORT).show(); break; case STOP: strErrorMessage += "Finish as STOP is pressed. "; @@ -290,9 +354,12 @@ void DeviceConnectTask4RegisterEnding() { if (strErrorMessage.length() != 0) endingMessaage = strErrorMessage; button.setText(buttonText); if (endingMessaage != null) { - if (endingMessaage.length() != 0) { - CustomPopupWindow customPopupWindow = new CustomPopupWindow(MainActivity.mContext); - customPopupWindow.popupStart(endingMessaage, false); + if (endingMessaage.length() != 0 || true) { + MainActivity.mCs108Library4a.appendToLog("endingMessage=" + endingMessaage); + if (bEnableErrorPopWindow) { + CustomPopupWindow customPopupWindow = new CustomPopupWindow(MainActivity.mContext); + customPopupWindow.popupStart(endingMessaage, false); + } } } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/AccessTask1.java b/app/src/main/java/com/csl/cs108ademoapp/AccessTask1.java new file mode 100644 index 0000000..20144f8 --- /dev/null +++ b/app/src/main/java/com/csl/cs108ademoapp/AccessTask1.java @@ -0,0 +1,192 @@ +package com.csl.cs108ademoapp; + +import android.os.AsyncTask; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import com.csl.cs108library4a.Cs108Connector; + +public class AccessTask1 { + Button button; + boolean invalidRequest; + int accBank, accOffset, accSize, accSizeNow, accBlockCount = 90; String accWriteData, accWriteDataNow; + String selectMask; + int selectBank, selectOffset; + String strPassword; + int powerLevel; + Cs108Connector.HostCommands hostCommand; + + AccessTask accessTask; + public AccessTask1(Button button, boolean invalidRequest, + int accBank, int accOffset, int accSize, int accBlockCount, String accWriteData, + String selectMask, int selectBank, int selectOffset, + String strPassword, int powerLevel, Cs108Connector.HostCommands hostCommand) { + this.button = button; + this.invalidRequest = invalidRequest; + MainActivity.mCs108Library4a.appendToLog("HelloK: invalidRequest=" + invalidRequest); + this.accBank = accBank; + this.accOffset = accOffset; + if (hostCommand == Cs108Connector.HostCommands.CMD_18K6CWRITE) { if (accBlockCount > 16) accBlockCount = 16; } + else if (accBlockCount > 255) accBlockCount = 255; + this.accBlockCount = accBlockCount; + if (accWriteData == null) accWriteData = ""; + if (hostCommand == Cs108Connector.HostCommands.CMD_18K6CWRITE) { + MainActivity.mCs108Library4a.appendToLog("strOut: accWriteData=" + accWriteData); + accWriteData = deformatWriteAccessData(accWriteData); + if (accWriteData.length() < accSize * 4) { + accSize = accWriteData.length()/4; + if (accSize*4 != accWriteData.length()) accSize++; + } + } + this.accSize = accSize; + if (accSize == 0) { + isResultReady = true; + accessResult = ""; + } + this.accWriteData = accWriteData; + this.selectMask = selectMask; + this.selectBank = selectBank; + this.selectOffset = selectOffset; + this.strPassword = strPassword; + this.powerLevel = powerLevel; + this.hostCommand = hostCommand; + MainActivity.mCs108Library4a.appendToLog("HelloA, AccessTask1"); + CustomMediaPlayer playerN = MainActivity.sharedObjects.playerN; + playerN.start(); + setup(); + } + + public void execute() { + if (accessTask != null) accessTask.execute(); + } + + public boolean cancel(boolean bCancel) { + if (accessTask == null) return true; + return accessTask.cancel(bCancel); + } + + public AsyncTask.Status getStatus() { + if (accessTask == null) return AsyncTask.Status.FINISHED; + return accessTask.getStatus(); + } + + public String deformatWriteAccessData(String strIn) { + MainActivity.mCs108Library4a.appendToLog("strOut: strIn=" + strIn); + String strOut = strIn.replaceAll("\\P{Print}", ""); + MainActivity.mCs108Library4a.appendToLog("strOut=" + strOut); + while (strOut.indexOf(":") > 0) { + int index = strOut.indexOf(":"); + String writeDataTemp = ""; + if (index > 4) writeDataTemp = strOut.substring(0, index - 3); + writeDataTemp += strOut.substring(index + 1); + strOut = writeDataTemp; + MainActivity.mCs108Library4a.appendToLog("strOut=" + strOut); + } + MainActivity.mCs108Library4a.appendToLog("strOut=" + strOut); + return strOut; + } + + boolean isResultReady = false; int tryCount = 0, tryCountMax = 20; + public boolean isResultReady() { + boolean bValue = false; + if (accessTask == null) { } + else if (accessTask.getStatus() != AsyncTask.Status.FINISHED) { } + else if (button.getText().toString().indexOf("ING") > 0) { } + else if (isResultReady == false) { + String strAccessResult = ""; + if (hostCommand != Cs108Connector.HostCommands.CMD_18K6CREAD || accBank != 3) strAccessResult = accessTask.accessResult; + else { + int word4line = 7; + for (int i = 0; i < accSizeNow; i=i+word4line) { + if (tryCount < tryCountMax && accessTask.accessResult == null) break; + strAccessResult += String.format("%03d:", accOffset + i); + if (accessTask.accessResult != null) { + if ((i + word4line) * 4 >= accessTask.accessResult.length()) { + int iLastWordIndex = accessTask.accessResult.substring(i * 4).length() / 4; + if (iLastWordIndex * 4 != accessTask.accessResult.substring(i * 4).length()) + iLastWordIndex++; + strAccessResult += String.format("%03d:", accOffset + i + iLastWordIndex - 1) + accessTask.accessResult.substring(i * 4); + } else + strAccessResult += accessTask.accessResult.substring(i * 4, (i + word4line) * 4); + } + strAccessResult += "\n"; + MainActivity.mCs108Library4a.appendToLog("i=" + i + ", formatted accessTask.accessResult=" + strAccessResult); + } + } + if (accessResult == null) accessResult = strAccessResult; + else accessResult += strAccessResult; + + MainActivity.mCs108Library4a.appendToLog("HelloA: accessResult=" + accessTask.accessResult); + if (accessTask.accessResult != null && accSizeNow >= accSize) { + bValue = true; + Toast.makeText(MainActivity.mContext, R.string.toast_abort_by_SUCCESS, Toast.LENGTH_SHORT).show(); + } + else { + if (accessTask.accessResult != null) { + accOffset += accSizeNow; + accSize -= accSizeNow; + if (accWriteData != null) { if (accWriteData.length() >= accSizeNow*4) accWriteData = accWriteData.substring(accSizeNow*4); } + tryCount = 0; + } else MainActivity.mCs108Library4a.appendToLog("HelloA: Going to retry with TryCount=" + tryCount); + if (tryCount < tryCountMax) { + MainActivity.mCs108Library4a.appendToLog("HelloA: re-setup"); + setup(); + execute(); + } else bValue = true; + } + } else bValue = true; + MainActivity.mCs108Library4a.appendToLog("HelloA: bValue=" + bValue); + isResultReady = bValue; + return bValue; + } + public String accessResult; + public String getResult() { + MainActivity.mCs108Library4a.appendToLog("HelloA: accessResult=" + accessResult); + if (accessTask == null) return null; + if (accessTask.getStatus() != AsyncTask.Status.FINISHED) return null; + if (button.getText().toString().indexOf("ING") > 0) return null; + return accessResult; + } + + void setup() { + tryCount++; + if (invalidRequest == false) { + if (MainActivity.mCs108Library4a.setAccessBank(accBank) == false) { + MainActivity.mCs108Library4a.appendToLog("HelloK: accBank, invalidRequest=" + invalidRequest); + invalidRequest = true; + } + } + if (invalidRequest == false) { + if (MainActivity.mCs108Library4a.setAccessOffset(accOffset) == false) { + MainActivity.mCs108Library4a.appendToLog("HelloK: accOffset, invalidRequest=" + invalidRequest); + invalidRequest = true; + } + } + if (invalidRequest == false) { + if (accSize == 0) { + MainActivity.mCs108Library4a.appendToLog("HelloK: accSize0, invalidRequest=" + invalidRequest); + invalidRequest = true; + } else { + if (accSize > accBlockCount) accSizeNow = accBlockCount; + else accSizeNow = accSize; + MainActivity.mCs108Library4a.appendToLog("HelloA: accSize=" + accSize + ", accSizeNow=" + accSizeNow); + if (MainActivity.mCs108Library4a.setAccessCount(accSizeNow) == false) { + invalidRequest = true; + } + } + } + if (invalidRequest == false && hostCommand == Cs108Connector.HostCommands.CMD_18K6CWRITE) { + if (accWriteData.length() > accSizeNow * 4) accWriteDataNow = accWriteData.substring(0, accSizeNow*4); + else accWriteDataNow = accWriteData; + if (MainActivity.mCs108Library4a.setAccessWriteData(accWriteDataNow) == false) { + invalidRequest = true; + } + } + MainActivity.mCs108Library4a.appendToLog("HelloA: accOffset=" + accOffset + ", accSizeNow=" + accSizeNow + ", accSize=" + accSize); + MainActivity.mCs108Library4a.appendToLog("HelloK: invalidRequest=" + invalidRequest); + accessTask = new AccessTask(button, invalidRequest, + selectMask, selectBank, selectOffset, + strPassword, powerLevel, hostCommand, tryCount==tryCountMax); + } +} diff --git a/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java b/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java index 38e14ac..d98068c 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java +++ b/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java @@ -19,11 +19,11 @@ public enum DrawerPositions { MAIN, SPECIAL, ABOUT, CONNECT, INVENTORY, SEARCH, MULTIBANK, - SETTING, FILTER, READWRITE, SECURITY, REGISTER, - COLDCHAIN, CTESIUS, AXZON, RFMICRON, + SETTING, FILTER, READWRITE, SECURITY, + COLDCHAIN, AXZON, RFMICRON, CTESIUS, UCODE, UCODE8, BAPCARD, IMPINVENTORY, AURASENSE, - WEDGE, BLANK; + REGISTER, READWRITEUSER, WEDGE, BLANK; public static DrawerPositions toDrawerPosition(int x) { switch(x) { @@ -36,17 +36,18 @@ public static DrawerPositions toDrawerPosition(int x) { case 6: return FILTER; case 7: return READWRITE; case 8: return SECURITY; - case 9: return REGISTER; - case 10: return COLDCHAIN; - case 11: return AXZON; - case 12: return RFMICRON; - case 13: return CTESIUS; - case 14: return UCODE; - case 15: return UCODE8; - case 16: return BAPCARD; - case 17: return IMPINVENTORY; - case 18: return AURASENSE; - case 19: return WEDGE; + case 9: return COLDCHAIN; + case 10: return AXZON; + case 11: return RFMICRON; + case 12: return CTESIUS; + case 13: return UCODE; + case 14: return UCODE8; + case 15: return BAPCARD; + case 16: return IMPINVENTORY; + case 17: return AURASENSE; + case 18: return REGISTER; + case 19: return READWRITEUSER; + case 20: return WEDGE; } return null; } @@ -63,17 +64,18 @@ public static DrawerPositions toDrawerPosition(int x) { addItem(new DrawerItem("6", "Filters", R.drawable.dl_filters)); addItem(new DrawerItem("7", "Read/Write", R.drawable.dl_access)); addItem(new DrawerItem("8", "Security", R.drawable.dl_access)); - addItem(new DrawerItem("9", "Register Tag", R.drawable.dl_rr)); - addItem(new DrawerItem("10", "Cold Chain CS8300", R.drawable.dl_loc)); - addItem(new DrawerItem("11", "Axzon", R.drawable.dl_loc)); - addItem(new DrawerItem("12", "Axzon Magnus", R.drawable.dl_loc)); - addItem(new DrawerItem("13", "CTESIUS Temp", R.drawable.dl_loc)); - addItem(new DrawerItem("14", "UCODE DNA", R.drawable.dl_loc)); - addItem(new DrawerItem("15", "UCODE 8", R.drawable.dl_loc)); - addItem(new DrawerItem("16", "CS9010 BAP ID Card", R.drawable.dl_loc)); - addItem(new DrawerItem("17", "Impinj FastID", R.drawable.dl_loc)); - addItem(new DrawerItem("18", "Aura-sense", R.drawable.dl_loc)); - addItem(new DrawerItem("19", "Wedge", R.drawable.dl_rr)); + addItem(new DrawerItem("9", "Cold Chain CS8300", R.drawable.dl_loc)); + addItem(new DrawerItem("10", "Axzon", R.drawable.dl_loc)); + addItem(new DrawerItem("11", "Axzon Magnus", R.drawable.dl_loc)); + addItem(new DrawerItem("12", "CTESIUS Temp", R.drawable.dl_loc)); + addItem(new DrawerItem("13", "UCODE DNA", R.drawable.dl_loc)); + addItem(new DrawerItem("14", "UCODE 8", R.drawable.dl_loc)); + addItem(new DrawerItem("15", "CS9010 BAP ID Card", R.drawable.dl_loc)); + addItem(new DrawerItem("16", "Impinj FastID", R.drawable.dl_loc)); + addItem(new DrawerItem("17", "Aura-sense", R.drawable.dl_loc)); + addItem(new DrawerItem("18", "Register Tag", R.drawable.dl_rr)); + addItem(new DrawerItem("19", "Large sized memroy read/write", R.drawable.dl_rr)); + addItem(new DrawerItem("20", "Wedge", R.drawable.dl_rr)); } private static void addItem(DrawerItem item) { diff --git a/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java b/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java index feae623..e8f3223 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java @@ -126,7 +126,7 @@ protected void onProgressUpdate(String... output) { } } if (match == false) { - ReaderDevice readerDevice = new ReaderDevice(null, "", output[1], false, "", 1, 0); + ReaderDevice readerDevice = new ReaderDevice("", output[1], false, "", 1, 0); if (tagsList != null) { if (bAdd2End) tagsList.add(readerDevice); else tagsList.add(0, readerDevice); diff --git a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java index b2a6cb7..f9b32e9 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java @@ -240,13 +240,20 @@ else if (output[0].contains("WW")) { while (rx000pkgDataArrary.size() != 0) { Cs108Connector.Rx000pkgData rx000pkgData = rx000pkgDataArrary.get(0); rx000pkgDataArrary.remove(0); - if (rx000pkgData == null) continue;; + if (rx000pkgData == null) { + MainActivity.mCs108Library4a.appendToLog("InventoryRfidTask: null rx000pkgData !!!"); + continue; + }; boolean match = false; boolean updated = false; currentTime = rx000pkgData.decodedTime; int iFlag = rx000pkgData.flags; String strPc = MainActivity.mCs108Library4a.byteArrayToString(rx000pkgData.decodedPc); + if (strPc.length() != 4) { + MainActivity.mCs108Library4a.appendToLog("InventoryRfidTask: !!! rx000pkgData.Pc length = " + strPc.length()); + continue; + } int extraLength = 0; if (extra1Bank != -1 && rx000pkgData.decodedData1 != null) extraLength += rx000pkgData.decodedData1.length; if (extra2Bank != -1 && rx000pkgData.decodedData2 != null) extraLength += rx000pkgData.decodedData2.length; @@ -437,6 +444,10 @@ else if (output[0].contains("WW")) { new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS").format(new Date()), new SimpleDateFormat("z").format(new Date()).replaceAll("GMT", ""), MainActivity.mSensorConnector.mLocationDevice.getLocation(), MainActivity.mSensorConnector.mSensorDevice.getEcompass(), 1, rssi, phase, chidx, port, portstatus, backport1, backport2, codeSensor, codeRssi, codeTempC, brand, iSensorData); + if (strMdid != null) { + if (strMdid.indexOf("E282402") == 0) readerDevice.setCodeSensorMax(0x1F); + else readerDevice.setCodeSensorMax(0x1FF); + } if (bAdd2End) tagsList.add(readerDevice); else tagsList.add(0, readerDevice); SharedObjects.TagsIndex tagsIndex = new SharedObjects.TagsIndex(strAddresss, tagsList.size()-1); MainActivity.sharedObjects.tagsIndexList.add(tagsIndex); Collections.sort(MainActivity.sharedObjects.tagsIndexList); diff --git a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java index c2099a6..6b8d286 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java +++ b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java @@ -47,7 +47,7 @@ public class MainActivity extends AppCompatActivity { public static String mDid; public static int selectHold; public static int selectFor; public static class Config { - public String configPassword, configPower, config0, config1, config2; + public String configPassword, configPower, config0, config1, config2, config3; }; public static Config config = new Config(); @@ -195,36 +195,39 @@ private void selectItem(DrawerPositions position) { case SECURITY: fragment = new AccessSecurityFragment(); break; - case REGISTER: - fragment = new AccessRegisterFragment(); - break; case COLDCHAIN: fragment = new ColdChainFragment(); break; - case BAPCARD: - fragment = InventoryRfidiMultiFragment.newInstance(true, "E200B0"); - break; - case CTESIUS: - fragment = InventoryRfidiMultiFragment.newInstance(true, "E203510"); - break; - case AURASENSE: - fragment = new AuraSenseFragment(); - break; case AXZON: fragment = AxzonSelectorFragment.newInstance(true); break; case RFMICRON: fragment = AxzonSelectorFragment.newInstance(false); break; + case CTESIUS: + fragment = InventoryRfidiMultiFragment.newInstance(true, "E203510"); + break; case UCODE: fragment = new UcodeFragment(); break; case UCODE8: fragment = new Ucode8Fragment(); break; + case BAPCARD: + fragment = InventoryRfidiMultiFragment.newInstance(true, "E200B0"); + break; case IMPINVENTORY: fragment = new ImpinjFragment(); break; + case AURASENSE: + fragment = new AuraSenseFragment(); + break; + case REGISTER: + fragment = new AccessRegisterFragment(); + break; + case READWRITEUSER: + fragment = new AccessReadWriteUserFragment(); + break; case WEDGE: fragment = new HomeSpecialFragment(); break; @@ -276,6 +279,9 @@ public void sfnClicked(View view) { selectItem(DrawerPositions.SPECIAL); } + public void aboutClicked(View view) { + selectItem(DrawerPositions.ABOUT); + } public void connectClicked(View view) { selectItem(DrawerPositions.CONNECT); } @@ -301,6 +307,7 @@ public void filterClicked(View view) { public void rrClicked(View view) { selectItem(DrawerPositions.READWRITE); } + public void rrUserClicked(View view) { selectItem(DrawerPositions.READWRITEUSER); } public void accessClicked(View view) { selectItem(DrawerPositions.SECURITY); diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java index 694b7ab..9de6424 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java +++ b/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java @@ -112,6 +112,15 @@ public View getView(int position, View convertView, ViewGroup parent) { } } else if (codeSensor > reader.INVALID_CODESENSOR && codeRssi > reader.INVALID_CODERSSI) { //for Axzon/Magnus tags strExtra = "SC=" + String.format("%d", codeSensor); + int iHumidityThreshold = Integer.parseInt(MainActivity.config.config3); + if (false && reader.getCodeSensorMax() > 0) { + float fValue = (float) codeSensor; + fValue /= (float) reader.getCodeSensorMax(); + fValue *= 100; + strExtra += "\nSC=" + String.format("%.1f", fValue) + "%"; + } else if (iHumidityThreshold > 0) { + strExtra += "\nSC=" + (codeSensor >= iHumidityThreshold ? "Dry" : "Wet"); + } int ocrssiMin = -1; int ocrssiMax = -1; boolean bValidOcrssi = false; ocrssiMax = Integer.parseInt(MainActivity.config.config1); ocrssiMin = Integer.parseInt(MainActivity.config.config2); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessMicronFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessMicronFragment.java index a9a2c72..8c9cfe5 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessMicronFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessMicronFragment.java @@ -67,6 +67,10 @@ public void onActivityCreated(Bundle savedInstanceState) { editText.setText(MainActivity.config.config1); editText = (EditText) getActivity().findViewById(R.id.accessMNRssiLowerLimit); editText.setText(MainActivity.config.config2); + editText = (EditText) getActivity().findViewById(R.id.accessMNHumidityThreshold); + editText.setText(MainActivity.config.config3); + TableRow tableRow = (TableRow) getActivity().findViewById(R.id.accessMNHumidityThresholdRow); + if (MainActivity.mDid.matches("E28240")) tableRow.setVisibility(View.GONE); textViewConfigOk = (TextView) getActivity().findViewById(R.id.accessMNModelCodeOK); textViewCalibrationOk = (TextView) getActivity().findViewById(R.id.accessMNCalibrationOK); @@ -193,6 +197,7 @@ public void onNothingSelected(AdapterView adapterView) { } }); + if (MainActivity.mDid.matches("E28240")) spinnerSensorUnit.setEnabled(false); ArrayAdapter arrayAdapterTemperatureUnit = ArrayAdapter.createFromResource(getActivity(), R.array.temperature_unit_options, R.layout.custom_spinner_layout); arrayAdapterTemperatureUnit.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); @@ -266,6 +271,8 @@ public void setUserVisibleHint(boolean isVisibleToUser) { MainActivity.config.config1 = editText.getText().toString(); editText = (EditText) getActivity().findViewById(R.id.accessMNRssiLowerLimit); MainActivity.config.config2 = editText.getText().toString(); + editText = (EditText) getActivity().findViewById(R.id.accessMNHumidityThreshold); + MainActivity.config.config3 = editText.getText().toString(); } } @@ -473,12 +480,20 @@ boolean setSensorCode(String strData) { if (strData.length() < 4) return false; strSensorCode0 = strData; strData = str2Decimal(strData); - if (spinnerSensorUnit.getSelectedItemPosition() == 0) { + if (spinnerSensorUnit.getSelectedItemPosition() == 1) { float fValue = (float) Integer.parseInt(strData); - if (modelCode == 2) fValue /= (float) 0x1F; - else fValue /= (float) 0x1FF; - fValue *= 100; - strData = String.format("%.1f", fValue); + if (true) { + EditText editText = (EditText) getActivity().findViewById(R.id.accessMNHumidityThreshold); + int iValue = Integer.parseInt(editText.getText().toString()); + MainActivity.mCs108Library4a.appendToLog("iValue for Dry/Wet comparision = " + iValue); + if (fValue >= iValue) strData = "dry"; + else strData = "wet"; + } else { + if (modelCode == 2) fValue /= (float) 0x1F; + else fValue /= (float) 0x1FF; + fValue *= 100; + strData = String.format("%.1f", fValue); + } } textViewSensorCode.setText(strData); return true; diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessReadWriteFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessReadWriteFragment.java index 43b7988..2a7fdcf 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessReadWriteFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessReadWriteFragment.java @@ -1,8 +1,9 @@ package com.csl.cs108ademoapp.fragments; -import android.os.AsyncTask; +import android.graphics.Typeface; import android.os.Bundle; import android.os.Handler; +import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; @@ -16,7 +17,7 @@ import android.widget.TextView; import android.widget.Toast; -import com.csl.cs108ademoapp.AccessTask; +import com.csl.cs108ademoapp.AccessTask1; import com.csl.cs108ademoapp.CustomPopupWindow; import com.csl.cs108ademoapp.GenericTextWatcher; import com.csl.cs108library4a.Cs108Connector; @@ -24,6 +25,11 @@ import com.csl.cs108ademoapp.R; import com.csl.cs108library4a.ReaderDevice; +import java.time.Clock; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.temporal.ChronoField; + import static com.csl.cs108ademoapp.MainActivity.mContext; import static com.csl.cs108ademoapp.MainActivity.tagSelected; @@ -31,7 +37,7 @@ public class AccessReadWriteFragment extends CommonFragment { Spinner spinnerSelectBank, spinnerRWSelectEpc1; EditText editTextRWSelectOffset, editTextRWTagID, editTextAccessRWAccPassword, editTextAccessRWKillPwd, editTextAccessRWAccPwd, editTextAccPc, editTextAccessRWEpc, editTExtAccessRWXpc; EditText editTextTidValue, editTextUserValue, editTextEpcValue, editTextaccessRWAntennaPower; - TextView textViewEpcLength; + TextView textViewEpcLength, textViewRunTime; private Button buttonRead; private Button buttonWrite; Handler mHandler = new Handler(); @@ -44,7 +50,7 @@ enum ReadWriteTypes { boolean operationRead = false; ReadWriteTypes readWriteTypes; - private AccessTask accessTask; + private AccessTask1 accessTask; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -113,7 +119,7 @@ public void onNothingSelected(AdapterView parent) { editTExtAccessRWXpc = (EditText) getActivity().findViewById(R.id.accessRWAccXpcValue); editTextTidValue = (EditText) getActivity().findViewById(R.id.accessRWTidValue); editTextTidValue.setHint("Data Pattern"); - editTextUserValue = (EditText) getActivity().findViewById(R.id.accessRWUserValue); + editTextUserValue = (EditText) getActivity().findViewById(R.id.accessRWUserValue); editTextUserValue.setTypeface(Typeface.MONOSPACE); editTextUserValue.setHint("Data Pattern"); editTextEpcValue = (EditText) getActivity().findViewById(R.id.accessRWEpcValue); editTextEpcValue.setHint("Data Pattern"); @@ -122,6 +128,7 @@ public void onNothingSelected(AdapterView parent) { editTextaccessRWAntennaPower.setText(String.valueOf(300)); textViewEpcLength = (TextView) getActivity().findViewById(R.id.accessRWAccEpcLength); + textViewRunTime = (TextView) getActivity().findViewById(R.id.accessRWRunTime); buttonRead = (Button) getActivity().findViewById(R.id.accessRWReadButton); buttonRead.setOnClickListener(new View.OnClickListener() { @@ -164,7 +171,7 @@ public void onClick(View v) { updatePCEpc(strPCValueRef, strEpcValue); } } - MainActivity.mCs108Library4a.setSameCheck(false); + MainActivity.mCs108Library4a.setSameCheck(true); } @Override @@ -233,8 +240,15 @@ void updatePCEpc(String strPCValue, String strEpcValue) { } } + long msStartTime; void startAccessTask() { + if (editTextRWTagID.getText().toString().length() == 0) { + Toast.makeText(MainActivity.mContext, "Please select tag first !!!", Toast.LENGTH_SHORT).show(); + return; + } if (updating == false) { + msStartTime = SystemClock.elapsedRealtime(); + textViewRunTime.setText(""); updating = true; bankProcessing = 0; restartAccessBank = -1; // MainActivity.mCs108Library4a. mHandler.removeCallbacks(updateRunnable); @@ -246,17 +260,8 @@ void startAccessTask() { @Override public void run() { boolean rerunRequest = true; boolean taskRequest = false; - if (accessTask == null) { - if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteFragment().updateRunnable(): NULL accessReadWriteTask"); - taskRequest = true; - } else if (accessTask.getStatus() != AsyncTask.Status.FINISHED) { - if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteFragment().updateRunnable(): accessReadWriteTask.getStatus() = " + accessTask.getStatus().toString()); - } else { - taskRequest = true; - if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteFragment().updateRunnable(): FINISHED accessReadWriteTask"); - } if (processResult()) { rerunRequest = true; } - else if (taskRequest) { + else if (accessTask == null || accessTask.isResultReady()) { bcheckBoxAll = false; boolean invalid = processTickItems(); if (bankProcessing == 0 && bcheckBoxAll) rerunRequest = false; @@ -269,21 +274,25 @@ else if (taskRequest) { if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteFragment().InventoryRfidTask(): tagID=" + editTextRWTagID.getText() + ", operationrRead=" + operationRead + ", accessBank=" + accessBank + ", accOffset=" + accOffset + ", accSize=" + accSize); int selectOffset = 0; selectOffset = Integer.parseInt(editTextRWSelectOffset.getText().toString()); - accessTask = new AccessTask( - (operationRead ? buttonRead : buttonWrite), null, - invalid, + EditText editTextBlockCount = (EditText) getActivity().findViewById(R.id.accessRWBlockCount); + Integer accBlockCount = 32; + try { + accBlockCount = Integer.parseInt(editTextBlockCount.getText().toString()); + } catch (Exception ex) { } + MainActivity.mCs108Library4a.appendToLog("strOut: accWriteData=" + accWriteData); + accessTask = new AccessTask1( + (operationRead ? buttonRead : buttonWrite), invalid, + accessBank, accOffset, accSize, accBlockCount, accWriteData, editTextRWTagID.getText().toString(), spinnerSelectBank.getSelectedItemPosition() + 1, selectOffset, editTextAccessRWAccPassword.getText().toString(), Integer.valueOf(editTextaccessRWAntennaPower.getText().toString()), - (operationRead ? Cs108Connector.HostCommands.CMD_18K6CREAD: Cs108Connector.HostCommands.CMD_18K6CWRITE), - 0, false, false,true, - null, null, null, null, null); + (operationRead ? Cs108Connector.HostCommands.CMD_18K6CREAD: Cs108Connector.HostCommands.CMD_18K6CWRITE)); accessTask.execute(); rerunRequest = true; } } if (rerunRequest) { - mHandler.postDelayed(updateRunnable, 500); + mHandler.postDelayed(updateRunnable, 100); if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteFragment().updateRunnable(): Restart"); } else { @@ -297,14 +306,16 @@ else if (taskRequest) { TextView textViewReserveOk, textViewPcOk, textViewEpcOk, textViewTidOk, textViewUserOk, textViewEpc1Ok; CheckBox checkBoxReserve, checkBoxPc, checkBoxEpc, checkBoxTid, checkBoxUser, checkBoxEpc1; - int accessBank, accSize, accOffset; + int accessBank, accSize, accOffset; String accWriteData; int restartCounter = 0; int restartAccessBank = -1; boolean processResult() { String accessResult = null; if (accessTask == null) return false; - else if (accessTask.getStatus() != AsyncTask.Status.FINISHED) return false; + if (accessTask.isResultReady() == false) return false; else { - accessResult = accessTask.accessResult; + long duration = SystemClock.elapsedRealtime() - msStartTime; + textViewRunTime.setText(String.format("Run time: %.2f sec", ((float) duration / 1000))); + accessResult = accessTask.getResult(); if (DEBUG) MainActivity.mCs108Library4a.appendToLog("processResult(): accessResult = " + accessResult); if (accessResult == null) { if (readWriteTypes == ReadWriteTypes.RESERVE) { @@ -398,6 +409,11 @@ boolean processResult() { readWriteTypes = ReadWriteTypes.NULL; if (operationRead) { if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWrite(). DATA with accessBank = " + accessBank); + if (accessTask != null) { + int iLength = accessTask.deformatWriteAccessData(accessResult).length(); + MainActivity.mCs108Library4a.appendToLog("endingMessage length=" + iLength); + if (iLength < accSize*4) textViewUserOk.setText("H"); + } editTextUserValue.setText(accessResult); accUserValue = accessResult; } else { @@ -543,9 +559,8 @@ boolean processTickItems() { editTextUserValue.setText(""); } else { String strValue = editTextUserValue.getText().toString(); - if (strValue.length() >= 4 && strValue.matches(accUserValue) == false) { - accSize = strValue.length() / 4; - if (strValue.length() %4 != 0) accSize++; + MainActivity.mCs108Library4a.appendToLog("strOut: strValue=" + strValue + ", strValue.length=" + strValue.length() + ", accUserValue=" + accUserValue + ", accUserValue.lengt=" + accUserValue.length()); + if (strValue.length() >= 4 && accUserValue.matches(strValue) == false) { writeData = strValue; } } @@ -585,41 +600,7 @@ boolean processTickItems() { if (restartCounter == 0) invalidRequest1 = true; else restartCounter--; } - if (invalidRequest1 == false) { -// if (MainActivity.mCs108Library4a.setFixedQParms(0, -1, false) == false) { -// invalidRequest1 = true; -// } - } - if (invalidRequest1 == false) { - if (MainActivity.mCs108Library4a.setAccessBank(accessBank) == false) { - invalidRequest1 = true; - } - } - if (invalidRequest1 == false) { - if (MainActivity.mCs108Library4a.setAccessOffset(accOffset) == false) { - invalidRequest1 = true; - } - } - if (invalidRequest1 == false) { - if (accSize == 0) { - invalidRequest1 = true; - } else if (MainActivity.mCs108Library4a.setAccessCount(accSize) == false) { - invalidRequest1 = true; - } - } - if (invalidRequest1 == false && operationRead == false) { - /*if (invalidRequest1 == false) { - if (MainActivity.mCs108Library4a.mRfidDevice.mRx000Device.mRx000Setting.setAccessWriteDataSelect(0) == false) - invalidRequest1 = true; - }*/ - if (invalidRequest1 == false) { - if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteFragment().writeData = " + writeData); - if (MainActivity.mCs108Library4a.setAccessWriteData(writeData) == false) { - invalidRequest1 = true; - } - } - //if (operationWrite == true) return true; - } + accWriteData = writeData; return invalidRequest1; } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessReadWriteUserFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessReadWriteUserFragment.java new file mode 100644 index 0000000..a9ce8b3 --- /dev/null +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessReadWriteUserFragment.java @@ -0,0 +1,623 @@ +package com.csl.cs108ademoapp.fragments; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.os.Handler; +import android.os.SystemClock; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.TableRow; +import android.widget.TextView; +import android.widget.Toast; + +import com.csl.cs108ademoapp.AccessTask1; +import com.csl.cs108ademoapp.CustomPopupWindow; +import com.csl.cs108ademoapp.GenericTextWatcher; +import com.csl.cs108library4a.Cs108Connector; +import com.csl.cs108ademoapp.MainActivity; +import com.csl.cs108ademoapp.R; +import com.csl.cs108library4a.ReaderDevice; + +import static com.csl.cs108ademoapp.MainActivity.mContext; +import static com.csl.cs108ademoapp.MainActivity.tagSelected; + +public class AccessReadWriteUserFragment extends CommonFragment { + Spinner spinnerSelectBank, spinnerRWSelectEpc1; + EditText editTextRWSelectOffset, editTextRWTagID, editTextAccessRWAccPassword, editTextAccessRWKillPwd, editTextAccessRWAccPwd, editTextAccPc, editTextAccessRWEpc, editTExtAccessRWXpc; + EditText editTextTidValue, editTextUserValue, editTextEpcValue, editTextaccessRWAntennaPower; + TextView textViewEpcLength, textViewRunTime; + private Button buttonRead; + private Button buttonWrite; + Handler mHandler = new Handler(); + String strPCValueRef = ""; + + String accEpcValue = ""; String accXpcValue = ""; String accTidValue = ""; String accUserValue = ""; + enum ReadWriteTypes { + NULL, RESERVE, PC, EPC, XPC, TID, USER, EPC1 + } + boolean operationRead = false; + ReadWriteTypes readWriteTypes; + + private AccessTask1 accessTask; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState, true); + return inflater.inflate(R.layout.fragment_access_readwrite, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + android.support.v7.app.ActionBar actionBar; + actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); + actionBar.setIcon(R.drawable.dl_access); + actionBar.setTitle(R.string.title_activity_readwrite); + + spinnerSelectBank = (Spinner) getActivity().findViewById(R.id.selectMemoryBank); + ArrayAdapter targetAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.read_memoryBank_options, R.layout.custom_spinner_layout); + targetAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinnerSelectBank.setAdapter(targetAdapter); + spinnerSelectBank.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + switch (position) { + case 0: //if EPC + if (tagSelected != null) editTextRWTagID.setText(tagSelected.getAddress()); + editTextRWSelectOffset.setText("32"); + break; + case 1: + if (tagSelected != null) { if (tagSelected.getTid() != null) editTextRWTagID.setText(tagSelected.getTid()); } + editTextRWSelectOffset.setText("0"); + break; + case 2: + if (tagSelected != null) { if (tagSelected.getUser() != null) editTextRWTagID.setText(tagSelected.getUser()); } + editTextRWSelectOffset.setText("0"); + break; + default: + break; + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + TableRow tableRow = (TableRow) getActivity().findViewById(R.id.accessRWReserveTitleRow); + tableRow.setVisibility(View.GONE); + tableRow = (TableRow) getActivity().findViewById(R.id.accessRWReserveValueRow); + tableRow.setVisibility(View.GONE); + tableRow = (TableRow) getActivity().findViewById(R.id.accessRWPcTitleRow); + tableRow.setVisibility(View.GONE); + tableRow = (TableRow) getActivity().findViewById(R.id.accessRWEpcTitleRow); + tableRow.setVisibility(View.GONE); + tableRow = (TableRow) getActivity().findViewById(R.id.accessRWTidTitleRow); + tableRow.setVisibility(View.GONE); + tableRow = (TableRow) getActivity().findViewById(R.id.accessRWTidValueRow); + tableRow.setVisibility(View.GONE); + tableRow = (TableRow) getActivity().findViewById(R.id.accessRWAnyTitleRow); + tableRow.setVisibility(View.GONE); + tableRow = (TableRow) getActivity().findViewById(R.id.accessRWAnyValueRow); + tableRow.setVisibility(View.GONE); + + editTextRWSelectOffset = (EditText) getActivity().findViewById(R.id.selectMemoryOffset); + spinnerRWSelectEpc1 = (Spinner) getActivity().findViewById(R.id.accessRWEpc1Title1); + ArrayAdapter targetAdapter1 = ArrayAdapter.createFromResource(getActivity(), R.array.memoryBank_options, R.layout.custom_spinner_layout); + targetAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinnerRWSelectEpc1.setAdapter(targetAdapter1); spinnerRWSelectEpc1.setSelection(1); + + editTextRWTagID = (EditText) getActivity().findViewById(R.id.selectTagID); + editTextAccessRWAccPassword = (EditText) getActivity().findViewById(R.id.selectPasswordValue); + editTextAccessRWAccPassword.addTextChangedListener(new GenericTextWatcher(editTextAccessRWAccPassword, 8)); + editTextAccessRWAccPassword.setText("00000000"); + editTextAccessRWKillPwd = (EditText) getActivity().findViewById(R.id.accessRWKillPwdValue); + editTextAccessRWKillPwd.addTextChangedListener(new GenericTextWatcher(editTextAccessRWKillPwd, 8)); + editTextAccessRWAccPwd = (EditText) getActivity().findViewById(R.id.accessRWAccPwdValue); + editTextAccessRWAccPwd.addTextChangedListener(new GenericTextWatcher(editTextAccessRWAccPwd, 8)); + editTextAccPc = (EditText) getActivity().findViewById(R.id.accessRWAccPcValue); + editTextAccPc.setHint("PC value"); + editTextAccPc.addTextChangedListener(new GenericTextWatcher(editTextAccPc, 4)); + editTextAccessRWEpc = (EditText) getActivity().findViewById(R.id.accessRWAccEpcValue); + editTExtAccessRWXpc = (EditText) getActivity().findViewById(R.id.accessRWAccXpcValue); + editTextTidValue = (EditText) getActivity().findViewById(R.id.accessRWTidValue); + editTextTidValue.setHint("Data Pattern"); + EditText editTextUserLength = (EditText) getActivity().findViewById(R.id.accessRWUserLength); + editTextUserLength.setText("512"); + editTextUserValue = (EditText) getActivity().findViewById(R.id.accessRWUserValue); editTextUserValue.setTypeface(Typeface.MONOSPACE); + editTextUserValue.setHint("Data Pattern"); + editTextEpcValue = (EditText) getActivity().findViewById(R.id.accessRWEpcValue); + editTextEpcValue.setHint("Data Pattern"); + + editTextaccessRWAntennaPower = (EditText) getActivity().findViewById(R.id.selectAntennaPower); + editTextaccessRWAntennaPower.setText(String.valueOf(300)); + + textViewEpcLength = (TextView) getActivity().findViewById(R.id.accessRWAccEpcLength); + textViewRunTime = (TextView) getActivity().findViewById(R.id.accessRWRunTime); + + buttonRead = (Button) getActivity().findViewById(R.id.accessRWReadButton); + buttonRead.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (MainActivity.mCs108Library4a.isBleConnected() == false) { + Toast.makeText(MainActivity.mContext, R.string.toast_ble_not_connected, Toast.LENGTH_SHORT).show(); + return; + } else if (MainActivity.mCs108Library4a.isRfidFailure()) { + Toast.makeText(MainActivity.mContext, "Rfid is disabled", Toast.LENGTH_SHORT).show(); + return; + } + operationRead = true; startAccessTask(); + } + }); + + buttonWrite = (Button) getActivity().findViewById(R.id.accessRWWriteButton); + buttonWrite.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (MainActivity.mCs108Library4a.isBleConnected() == false) { + Toast.makeText(MainActivity.mContext, R.string.toast_ble_not_connected, Toast.LENGTH_SHORT).show(); + return; + } else if (MainActivity.mCs108Library4a.isRfidFailure()) { + Toast.makeText(MainActivity.mContext, "Rfid is disabled", Toast.LENGTH_SHORT).show(); + return; + } + operationRead = false; startAccessTask(); + } + }); + + ReaderDevice tagSelected = MainActivity.tagSelected; + if (tagSelected != null) { + if (tagSelected.getSelected() == true) { + String strEpcValue = tagSelected.getAddress(); + String detail = tagSelected.getDetails(); + String header = "PC="; + int index = detail.indexOf(header) + header.length(); + strPCValueRef = detail.substring(index, index + 4); + updatePCEpc(strPCValueRef, strEpcValue); + } + } + MainActivity.mCs108Library4a.setSameCheck(true); + } + + @Override + public void onDestroy() { + if (accessTask != null) accessTask.cancel(true); + MainActivity.mCs108Library4a.setSameCheck(true); + MainActivity.mCs108Library4a.restoreAfterTagSelect(); + super.onDestroy(); + } + + public AccessReadWriteUserFragment() { + super("AccessReadWriteUserFragment"); + } + + int getPC2EpcWordCount(String detail) { + String detail2 = detail.substring(0, 1); + int number2 = Integer.valueOf(detail2, 16) * 2; + String detail3 = detail.substring(1, 2); + int number3 = Integer.valueOf(detail3, 16); + if ((number3 / 8) != 0) number2 += 1; + return number2; + } + void updatePCEpc(String strPCValue, String strEpcValue) { + boolean needPopup = false; + if (strPCValue == null) strPCValue = ""; + if (strPCValue.length() != 0) editTextAccPc.setText(strPCValue); + else strPCValue = strPCValueRef; + if (strPCValueRef != null && strPCValue != null) { + if (strPCValue.matches(strPCValueRef) == false && strPCValue.length() == 4) { + needPopup = true; + strPCValueRef = strPCValue; + } + } + + int iWordCount = getPC2EpcWordCount(strPCValue); + textViewEpcLength.setText("EPC has " + (iWordCount * 16) + " bits"); + if (strEpcValue != null) { + tagSelected.setAddress(strEpcValue); if (spinnerSelectBank.getSelectedItemPosition() == 0) editTextRWTagID.setText(strEpcValue); + editTextAccessRWEpc.setText(strEpcValue); + } else { + if (iWordCount * 4 < editTextRWTagID.getText().toString().length()) { + // needPopup = true; + String strTemp = editTextRWTagID.getText().toString().substring(0, iWordCount * 4); + tagSelected.setAddress(strEpcValue); if (spinnerSelectBank.getSelectedItemPosition() == 0) editTextRWTagID.setText(strTemp); + } + if (iWordCount * 4 < editTextAccessRWEpc.getText().toString().length()) { + // needPopup = true; + String strTemp = editTextAccessRWEpc.getText().toString().substring(0, iWordCount * 4); + editTextAccessRWEpc.setText(strTemp); + } + if (editTextAccessRWEpc.getText().toString().length() != 0) { + String strTemp = editTextAccessRWEpc.getText().toString(); + if (editTextRWTagID.getText().toString().matches(strTemp) == false) { + // needPopup = true; + tagSelected.setAddress(strEpcValue); if (spinnerSelectBank.getSelectedItemPosition() == 0) editTextRWTagID.setText(strTemp); + } + } + } + editTextAccessRWEpc.addTextChangedListener(new GenericTextWatcher(editTextAccessRWEpc, iWordCount * 4)); + String strTemp = editTextAccessRWEpc.getText().toString(); + editTextAccessRWEpc.setText(strTemp); + + if (needPopup) { + CustomPopupWindow customPopupWindow = new CustomPopupWindow(mContext); + customPopupWindow.popupStart("Changing EPC Length will automatically modify to " + (iWordCount * 16) + " bits.", false); + } + } + + long msStartTime; + void startAccessTask() { + if (editTextRWTagID.getText().toString().length() == 0) { + Toast.makeText(MainActivity.mContext, "Please select tag first !!!", Toast.LENGTH_SHORT).show(); + return; + } + CheckBox checkBox = (CheckBox) getActivity().findViewById(R.id.accessRWUserTitle); + checkBox.setChecked(true); + if (updating == false) { + msStartTime = SystemClock.elapsedRealtime(); + textViewRunTime.setText(""); + updating = true; bankProcessing = 0; restartAccessBank = -1; +// MainActivity.mCs108Library4a. + mHandler.removeCallbacks(updateRunnable); + mHandler.post(updateRunnable); + } + } + boolean updating = false; int bankProcessing = 0; + private final Runnable updateRunnable = new Runnable() { + @Override + public void run() { + boolean rerunRequest = true; boolean taskRequest = false; + if (processResult()) { rerunRequest = true; } + else if (accessTask == null || accessTask.isResultReady()) { + bcheckBoxAll = false; + boolean invalid = processTickItems(); + if (bankProcessing == 0 && bcheckBoxAll) rerunRequest = false; + else if (bankProcessing++ != 0 && invalid == true) rerunRequest = false; + else { + if (restartAccessBank != accessBank) { + restartAccessBank = accessBank; + restartCounter = 3; + } + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteUserFragment().InventoryRfidTask(): tagID=" + editTextRWTagID.getText() + ", operationrRead=" + operationRead + ", accessBank=" + accessBank + ", accOffset=" + accOffset + ", accSize=" + accSize); + int selectOffset = 0; + selectOffset = Integer.parseInt(editTextRWSelectOffset.getText().toString()); + EditText editTextBlockCount = (EditText) getActivity().findViewById(R.id.accessRWBlockCount); + Integer accBlockCount = 32; + try { + accBlockCount = Integer.parseInt(editTextBlockCount.getText().toString()); + } catch (Exception ex) { } + MainActivity.mCs108Library4a.appendToLog("strOut: accWriteData=" + accWriteData); + accessTask = new AccessTask1( + (operationRead ? buttonRead : buttonWrite), invalid, + accessBank, accOffset, accSize, accBlockCount, accWriteData, + editTextRWTagID.getText().toString(), spinnerSelectBank.getSelectedItemPosition() + 1, selectOffset, + editTextAccessRWAccPassword.getText().toString(), + Integer.valueOf(editTextaccessRWAntennaPower.getText().toString()), + (operationRead ? Cs108Connector.HostCommands.CMD_18K6CREAD: Cs108Connector.HostCommands.CMD_18K6CWRITE)); + accessTask.execute(); + rerunRequest = true; + } + } + if (rerunRequest) { + mHandler.postDelayed(updateRunnable, 100); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWriteUserFragment().updateRunnable(): Restart"); + } + else { + if (bankProcessing == 0 && bcheckBoxAll) { + Toast.makeText(MainActivity.mContext, "no choice selected yet", Toast.LENGTH_SHORT).show(); + } + updating = false; + } + } + }; + + TextView textViewReserveOk, textViewPcOk, textViewEpcOk, textViewTidOk, textViewUserOk, textViewEpc1Ok; + CheckBox checkBoxReserve, checkBoxPc, checkBoxEpc, checkBoxTid, checkBoxUser, checkBoxEpc1; + int accessBank, accSize, accOffset; String accWriteData; + int restartCounter = 0; int restartAccessBank = -1; + boolean processResult() { + String accessResult = null; + if (accessTask == null) return false; + if (accessTask.isResultReady() == false) return false; + else { + long duration = SystemClock.elapsedRealtime() - msStartTime; + textViewRunTime.setText(String.format("Run time: %.2f sec", ((float) duration / 1000))); + accessResult = accessTask.getResult(); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("processResult(): accessResult = " + accessResult); + if (accessResult == null) { + if (readWriteTypes == ReadWriteTypes.RESERVE) { + textViewReserveOk.setText("E"); checkBoxReserve.setChecked(false); + } + if (readWriteTypes == ReadWriteTypes.PC) { + textViewPcOk.setText("E"); checkBoxPc.setChecked(false); + } + if (readWriteTypes == ReadWriteTypes.EPC) { + textViewEpcOk.setText("E"); checkBoxEpc.setChecked(false); + } + if (readWriteTypes == ReadWriteTypes.TID) { + textViewTidOk.setText("E"); checkBoxTid.setChecked(false); + } + if (readWriteTypes == ReadWriteTypes.USER) { + textViewUserOk.setText("E"); checkBoxUser.setChecked(false); + } + if (readWriteTypes == ReadWriteTypes.EPC1) { + textViewEpc1Ok.setText("E"); checkBoxEpc1.setChecked(false); + } + } else { + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("accessResult = " + accessResult); + if (readWriteTypes == ReadWriteTypes.RESERVE) { + textViewReserveOk.setText("O"); checkBoxReserve.setChecked(false); + readWriteTypes = ReadWriteTypes.NULL; + if (accessResult.length() == 0 || operationRead == false) { + } else if (accessResult.length() < 8) { + editTextAccessRWKillPwd.setText(accessResult); + } else { + editTextAccessRWKillPwd.setText(accessResult.substring(0, 8)); + } + if (accessResult.length() <= 8) { + editTextAccessRWAccPwd.setText(""); + } else if (accessResult.length() < 16) { + editTextAccessRWAccPwd.setText(accessResult.subSequence(8, accessResult.length())); + } else { + editTextAccessRWAccPwd.setText(accessResult.subSequence(8, 16)); + } + } else if (readWriteTypes == ReadWriteTypes.PC) { + textViewPcOk.setText("O"); checkBoxPc.setChecked(false); + readWriteTypes = ReadWriteTypes.NULL; + if (operationRead) { + String newValue = ""; + if (accessResult.length() <= 4) { + newValue = accessResult.subSequence(0, accessResult.length()).toString(); + } else { + newValue = accessResult.subSequence(0, 4).toString(); + } + editTextAccPc.setText(newValue); + } + updatePCEpc(editTextAccPc.getText().toString(), null); + } else if (readWriteTypes == ReadWriteTypes.EPC) { + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWrite(). EPC DATA with accessBank = " + accessBank + ", with accessResult.length = " + accessResult.length()); + textViewEpcOk.setText("O"); checkBoxEpc.setChecked(false); + readWriteTypes = ReadWriteTypes.NULL; + if (operationRead) { + String newValue = ""; + if (accessResult.length() <= 4) { + newValue = accessResult.subSequence(0, accessResult.length()).toString(); + } else { + newValue = accessResult.subSequence(0, 4).toString(); + } + editTextAccPc.setText(newValue); + } + updatePCEpc(editTextAccPc.getText().toString(), null); + + if (operationRead) { + String newValue = ""; + if (accessResult.length() > 4) { + newValue = accessResult.subSequence(4, accessResult.length()).toString(); + } + editTextAccessRWEpc.setText(newValue); + } + } else if (readWriteTypes == ReadWriteTypes.XPC) { + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWrite(). XPC DATA with accessBank = " + accessBank + ", with accessResult.length = " + accessResult.length() + ", with accessResult=" + accessResult); + readWriteTypes = ReadWriteTypes.NULL; + if (operationRead) { + String newValue = accessResult.toString(); + editTExtAccessRWXpc.setText(newValue); + accXpcValue = newValue; + } else { + accXpcValue = editTExtAccessRWXpc.getText().toString(); + } + } else if (readWriteTypes == ReadWriteTypes.TID) { + textViewTidOk.setText("O"); checkBoxTid.setChecked(false); + readWriteTypes = ReadWriteTypes.NULL; + if (accessResult.length() == 0 || operationRead == false) { + } else editTextTidValue.setText(accessResult); + } else if (readWriteTypes == ReadWriteTypes.USER) { + textViewUserOk.setText("O"); checkBoxUser.setChecked(false); + readWriteTypes = ReadWriteTypes.NULL; + if (operationRead) { + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessReadWrite(). DATA with accessBank = " + accessBank); + if (accessTask != null) { + int iLength = accessTask.deformatWriteAccessData(accessResult).length(); + MainActivity.mCs108Library4a.appendToLog("endingMessage length=" + iLength); + if (iLength < accSize*4) textViewUserOk.setText("H"); + } + editTextUserValue.setText(accessResult); + accUserValue = accessResult; + } else { + accUserValue = editTextUserValue.getText().toString(); + } + } else if (readWriteTypes == ReadWriteTypes.EPC1) { + textViewEpc1Ok.setText("O"); checkBoxEpc1.setChecked(false); + readWriteTypes = ReadWriteTypes.NULL; + if (accessResult.length() == 0 || operationRead == false) { + } else { + editTextEpcValue.setText(accessResult); + accEpcValue = accessResult; + } + if (operationRead == false) accEpcValue = editTextEpcValue.getText().toString(); + } + accessResult = null; + } + accessTask = null; + return true; + } + } + boolean bcheckBoxAll = false; + boolean processTickItems() { + String writeData = ""; + boolean invalidRequest1 = false; + + textViewReserveOk = (TextView) getActivity().findViewById(R.id.accessRWReserveOK); + textViewPcOk = (TextView) getActivity().findViewById(R.id.accessRWPcOK); + textViewEpcOk = (TextView) getActivity().findViewById(R.id.accessRWEpcOK); + textViewTidOk = (TextView) getActivity().findViewById(R.id.accessRWTidOK); + textViewUserOk = (TextView) getActivity().findViewById(R.id.accessRWUserOK); + textViewEpc1Ok = (TextView) getActivity().findViewById(R.id.accessRWEpc1OK); + + checkBoxReserve = (CheckBox) getActivity().findViewById(R.id.accessRWReserveTitle); + checkBoxPc = (CheckBox) getActivity().findViewById(R.id.accessRWPcTitle); + checkBoxEpc = (CheckBox) getActivity().findViewById(R.id.accessRWEpcTitle); + checkBoxTid = (CheckBox) getActivity().findViewById(R.id.accessRWTidTitle); + checkBoxUser = (CheckBox) getActivity().findViewById(R.id.accessRWUserTitle); + checkBoxEpc1 = (CheckBox) getActivity().findViewById(R.id.accessRWEpc1); + + if (checkBoxReserve.isChecked() == true) { + textViewReserveOk.setText(""); + accessBank = 0; accOffset = 0; accSize = 4; readWriteTypes = ReadWriteTypes.RESERVE; + if (operationRead) { + editTextAccessRWKillPwd.setText(""); + editTextAccessRWAccPwd.setText(""); + } else { + String strValue = editTextAccessRWKillPwd.getText().toString(); + String strValue1 = editTextAccessRWAccPwd.getText().toString(); + if (strValue.length() != 8 || strValue1.length() != 8) { + invalidRequest1 = true; + } else { + writeData = strValue + strValue1; + } + } + } else if (checkBoxPc.isChecked() == true || ((checkBoxEpc.isChecked() == true) && (strPCValueRef.length() != 4) )) { + textViewPcOk.setText(""); + accessBank = 1; accOffset = 1; accSize = 1; readWriteTypes = ReadWriteTypes.PC; + if (operationRead) { + editTextAccPc.setText(""); + } else { + String strValue = editTextAccPc.getText().toString(); + if (strValue.length() != 4) invalidRequest1 = true; + else writeData = strValue; + } + } else if (checkBoxEpc.isChecked() == true) { + textViewEpcOk.setText(""); + accessBank = 1; accOffset = 1; accSize = 0; readWriteTypes = ReadWriteTypes.EPC; + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("processTickItems(): start EPC operation"); + if (operationRead) { + if (strPCValueRef.length() != 4) accSize = 1; + else { + accSize = getPC2EpcWordCount(strPCValueRef) + 1; + editTextAccessRWEpc.setText(""); + } + } else { + String strValue = editTextAccPc.getText().toString(); + String strValue1 = editTextAccessRWEpc.getText().toString(); + if (strValue1.length() == 0) { + if (strValue.length() != 4) invalidRequest1 = true; + else { + accSize = 1; + writeData = strValue; + } + } else { + accSize += strValue1.length() / 4; + if (strValue1.length() % 4 != 0) accSize++; + if (strValue.length() == 4) { + int iPCWordCount = getPC2EpcWordCount(strValue); + if (iPCWordCount < accSize) accSize = iPCWordCount; + accSize++; + writeData = strValue + strValue1; + } else { + accOffset = 2; + writeData = strValue1; + } + } + } + } else if (checkBoxTid.isChecked() == true) { + textViewTidOk.setText(""); + accessBank = 2; accOffset = 0; accSize = 0; readWriteTypes = ReadWriteTypes.TID; + EditText editTextTidValue = (EditText) getActivity().findViewById(R.id.accessRWTidValue); + if (operationRead) { + int iValue = 0; + try { + EditText editTextTidOffset = (EditText) getActivity().findViewById(R.id.accessRWTidOffset); + iValue = Integer.parseInt(editTextTidOffset.getText().toString()); + } catch (Exception ex) { + } + accOffset = iValue; + iValue = 0; + try { + EditText editTextTidLength = (EditText) getActivity().findViewById(R.id.accessRWTidLength); + iValue = Integer.parseInt(editTextTidLength.getText().toString()); + } catch (Exception ex) { + } + accSize = iValue; + editTextTidValue.setText(""); + } else { + invalidRequest1 = true; + editTextTidValue.setText(""); + + } + } else if (checkBoxUser.isChecked() == true) { + textViewUserOk.setText(""); + accessBank = 3; accOffset = 0; accSize = 0; readWriteTypes = ReadWriteTypes.USER; + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("processTickItems(): start USER operation"); + int iValue = 0; + try { + EditText editTextTidOffset = (EditText) getActivity().findViewById(R.id.accessRWUserOffset); + iValue = Integer.parseInt(editTextTidOffset.getText().toString()); + } catch (Exception ex) { + } + accOffset = iValue; + iValue = 0; + try { + EditText editTextUserLength = (EditText) getActivity().findViewById(R.id.accessRWUserLength); + iValue = Integer.parseInt(editTextUserLength.getText().toString()); + } catch (Exception ex) { + } + accSize = iValue; + if (operationRead) { + editTextUserValue.setText(""); + } else { + String strValue = editTextUserValue.getText().toString(); + MainActivity.mCs108Library4a.appendToLog("strOut: strValue=" + strValue + ", strValue.length=" + strValue.length() + ", accUserValue=" + accUserValue + ", accUserValue.lengt=" + accUserValue.length()); + if (strValue.length() >= 4 && accUserValue.matches(strValue) == false) { + writeData = strValue; + } + } + } else if (checkBoxEpc1.isChecked() == true) { + textViewEpc1Ok.setText(""); + accessBank = spinnerRWSelectEpc1.getSelectedItemPosition(); accOffset = 0; accSize = 0; readWriteTypes = ReadWriteTypes.EPC1; + int iValue = 0; + try { + EditText editTextEpcOffset = (EditText) getActivity().findViewById(R.id.accessRWEpcOffset); + iValue = Integer.parseInt(editTextEpcOffset.getText().toString()); + } catch (Exception ex) { + } + accOffset = iValue; + iValue = 0; + try { + EditText editTextEpcLength = (EditText) getActivity().findViewById(R.id.accessRWEpcLength); + iValue = Integer.parseInt(editTextEpcLength.getText().toString()); + } catch (Exception ex) { + } + accSize = iValue; + if (operationRead) { + editTextEpcValue.setText(""); + } else { + String strValue = editTextEpcValue.getText().toString(); + if (strValue.length() >= 4 && strValue.matches(accEpcValue) == false) { + accSize = strValue.length() / 4; + if (strValue.length() %4 != 0) accSize++; + writeData = strValue; + } + } + } else { + invalidRequest1 = true; + bcheckBoxAll = true; + } + + if (restartAccessBank == accessBank) { + if (restartCounter == 0) invalidRequest1 = true; + else restartCounter--; + } + accWriteData = writeData; + return invalidRequest1; + } +} diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonSelectorFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonSelectorFragment.java index c51fa38..651dfe1 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonSelectorFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonSelectorFragment.java @@ -98,6 +98,8 @@ void gotoAxzonFragment(int tagType) { MainActivity.config.config0 = Integer.toString(9); MainActivity.config.config1 = Integer.toString(21); MainActivity.config.config2 = Integer.toString(13); + if (tagType == 2) MainActivity.config.config3 = Integer.toString(13); + else MainActivity.config.config3 = Integer.toString(160); if (true) { Fragment fragment; diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java index 52c12f2..1892739 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java @@ -235,7 +235,7 @@ protected void onProgressUpdate(String... output) { } } if (match == false) { - ReaderDevice readerDevice = new ReaderDevice(scanResultA.device, scanResultA.device.getName(), scanResultA.device.getAddress(), false, "", 1, scanResultA.rssi); + ReaderDevice readerDevice = new ReaderDevice(scanResultA.device.getName(), scanResultA.device.getAddress(), false, "", 1, scanResultA.rssi); String strInfo = ""; if (scanResultA.device.getBondState() == 12) { strInfo += "BOND_BONDED\n"; @@ -264,7 +264,7 @@ protected void onProgressUpdate(String... output) { } } if (matched == false) { - ReaderDevice readerDevice1 = new ReaderDevice(null, null, readerDeviceNew.getAddress(), false, null, readerDeviceNew.getCount(), 0); + ReaderDevice readerDevice1 = new ReaderDevice(null, readerDeviceNew.getAddress(), false, null, readerDeviceNew.getCount(), 0); readersListOld.add(readerDevice1); } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterPreFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterPreFragment.java index cf2bb84..70fd3ee 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterPreFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterPreFragment.java @@ -258,6 +258,7 @@ void settingUpdate() { settingTask = new SettingTask(button, sameSetting, invalidRequest); settingTask.execute(); + MainActivity.mCs108Library4a.saveSetting2File(); } } diff --git a/app/src/main/res/layout/fragment_access_micron.xml b/app/src/main/res/layout/fragment_access_micron.xml index f1c4cd6..28b410b 100644 --- a/app/src/main/res/layout/fragment_access_micron.xml +++ b/app/src/main/res/layout/fragment_access_micron.xml @@ -146,6 +146,25 @@ style="@style/style_normal_font" android:inputType="numberDecimal" /> + + + + + + + diff --git a/app/src/main/res/layout/fragment_access_readwrite.xml b/app/src/main/res/layout/fragment_access_readwrite.xml index 79495d0..00e0308 100644 --- a/app/src/main/res/layout/fragment_access_readwrite.xml +++ b/app/src/main/res/layout/fragment_access_readwrite.xml @@ -22,9 +22,32 @@ android:layout_height="wrap_content" layout="@layout/custom_select" /> + + + + + + + + android:id="@+id/accessRWReserveTitleRow" + android:layout_width="match_parent" + android:layout_height="wrap_content"> @@ -73,6 +97,7 @@ @@ -103,6 +128,7 @@ @@ -145,6 +171,7 @@ @@ -189,6 +216,7 @@ @@ -257,6 +285,7 @@ @@ -306,6 +335,7 @@ @@ -326,6 +356,17 @@ android:gravity="center|bottom" android:orientation="vertical" > + + + + + diff --git a/app/src/main/res/layout/home_layout.xml b/app/src/main/res/layout/home_layout.xml index 60902e1..d2a9c53 100644 --- a/app/src/main/res/layout/home_layout.xml +++ b/app/src/main/res/layout/home_layout.xml @@ -15,15 +15,15 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" - android:paddingTop="10dp" - android:layout_marginTop="@dimen/home_icon_margin_2" + android:paddingTop="@dimen/default_top_padding" + android:layout_marginTop="@dimen/home_icon_margin_1" android:layout_marginLeft="@dimen/home_icon_margin_1" android:layout_marginRight="@dimen/home_icon_margin_1" android:layout_marginBottom="@dimen/home_icon_margin_1" android:background="@drawable/btn_back" android:gravity="center" - android:text="@string/home_regTag" - android:onClick="regClicked" /> + android:text="@string/home_read_write" + android:onClick="rrClicked" />