From d6a347df0bef1c31ed25afc4406136aed9e0ac8e Mon Sep 17 00:00:00 2001 From: WallaceSit <42763691+WallaceSit@users.noreply.github.com> Date: Tue, 28 Sep 2021 12:19:45 +0800 Subject: [PATCH 1/4] V2.1.28 Release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit V2.1.28: • Try improving “Selected tag in Xerves.Scan page sometimes cannot present in the TagID of Xerves.Security page” problem • Try improving “Huawei phone cannot read temperature or logging of Fudan tags” problem V2.1.27: • Solve “after doing EPC+Brand_identifier+TID_check inventory, selecting a tag, backing to Home page and going to GeigerSearch page, doing GeigerSearch inventory. Then no selected tag is returned” problem V2.1.26A: • Solve “filter is turned on after doing EPC+Brand_identifier inventory, selecting a tag, backing to Home page and going to GeigerSearch page, doing GeigerSearch inventory. Then no selected tag is returned plus filter on when going to filter page.” problem V2.1.26: • Modify the selection sequence for “EPC+TID” and “EPC+Brand” inventory by reverting selections -select EPC 0x203/204 first with action 0 and select TID with action 2 • Change the display or decoding of the brand not due to E2806894 within the TID as TID may not be shown as compact inventory may be used in Ucode8 inventory • Change the decoding of the brand / extended Tid not due to E2806894 within the TID as compact inventory is used in Ucode8 “EPC+TID” or “EPC+Brand_identifier” inventory • Avoid new null extra bank data overwriting the valid old extra bank data for the tag with same Epc during multi-bank inventory. • Set “EP+Brand_identifier” as default Ucode8.configuration page • Add “EPC + Brand_identifier + TID check” inventory which does the same as “EPC + Brand identifier” but using normal inventory with TID multibank read • Remove the multibank read for “EPC+TID” and “EPC+Brand” inventory and use compact inventory for these two inventories • Skip the inventory record if there is no E2806894 found in “EPC+TID” or “EPC+Brand identifier+TID Check” inventory V2.1.25: • Correct the “0x901 brandid bit cannot be reset” problem, which causes changing id in normal inventory after ucode8 inventory • Revise to make abortOperatoin is the first commands when pressing back key during inventorying ucode8 tags. V2.1.24: • Assume connection failure if there are 5 writeCharacteristic failures. This may avoid looping at sending data. • Revise to make abortOperatoin is the first commands when (a) after connection (b) pressing back key during inventorying AuraSense tags, impinj tags, ucode8 tags, magnus and xerses tags. And add abortOperation command when destroying during inventory. This helps avoiding possible data sending when there is possible incoming inventory data. • Revise the minimum RFID firmware version to 2.6.43 which handle Ucode8 in -7 device • Assign different fragment to Em4325.One-Shot and Em4325.Logging pages, which are same segment in previous version • Add length checking during xpc decoding to avoid possible exception. V2.1.23: • Add column select for “time”, “timezone”, “location”, “direction” for CSV format in Setting.Administration page • Handle the exception just after exception as one more permission is deleted in previous version V2.1.22: • Add checkbox selection for the columns(res.bank, epc bank, tid bank, user bank, phase, channel and others) in CSV format in Setting.Administration page • Saving some columns in saving CSV file as per Setting.Administration page setting. • Remove “sequence number”, “number of tags”, “smart phone serial number”, “smart phone bluetooth MAC”, “smart phone Wifi MAC” info from CSV file • Solve “barcode serial number is not shown in csv file” for the first time saving. V2.1.21: • Remove showing “Initialing reader. Please wait” progress dialog when returning from other pages to Home page • Try improving “showing progress dialog continuously when returning from other pages sometimes’ problem. V2.1.20: • Try improving “hard to get the S3 tags in Megus s3 inventory page” problem. V2.1.19: • Correct “exception exit when measuring hot air temperature in Em4325 pages” • Remove the configuration section, BAP section and write button in Em4325.One-Shot page • For the temperature section in Em4325.One-shot page, remove checkpoint and alarm. And enlarge the font of the remained temperature information. V2.1.18: • Within EM4325 page, change tab name “Passive” to “One-shot”, “Configuration” to “Logging” • Within EM4335 page, reverse the tab order of “One-shot” and “Logging” • Delete the unused code V2.1.17: • Within EM4325 page, add Passive tab which does not have logging related control • In Passive tab of Em4325 page, Read temperature will set the BAP to disable before reading temperature to handle possible tag with BAP enable but without battery • Correct “last result from get logging is zero degree for some tags” in em4325.configuration page • Add checking of a written register before starting logging in em4325.configuration page to try avoiding possible wrong hang-up logging • Revise the ways to get smart phone serial number and wifi/bluetooth mac for some higher android version in file saving • Add other non-repeated data in CSV format in file saving • Add header for repeated data in CSV format in file saving • Remove some repeated data (accessPassword, killPassword and antenna port) in CSV format in file saving • Remove sub-header(such as PC=) of repeated data in CSV file saving • Add formatting data to some repeated data (PC, EPC, Bank Data, Time) in CSV format in file saving, so that Excel can reconsider them as String instead of number • Modify the extension from txt to csv in CSV file saving so that Excel can open the file without import V2.1.16: • Change from reading user memory 0x100 to using new command to read the temperature in Em4325.Configuration page • Add some debug message for the possible looping at runnableConfiguring routine • Add reading user memory 0x188 during inventory in Em4325.Scan page so that possible CS model can be found • Add JSON/CSV saving format selection in Settings.Adminstration page • Change ‘BAP status’ to ‘BAP mode’ in Em4325.Configuration page • Remove some unused routines --- app/build.gradle | 2 +- .../com/csl/cs108ademoapp/AccessTask.java | 4 +- .../csl/cs108ademoapp/InventoryRfidTask.java | 58 +- .../com/csl/cs108ademoapp/MainActivity.java | 11 - .../cs108ademoapp/SaveList2ExternalTask.java | 165 +- .../adapters/ColdChainAdapter.java | 13 +- .../adapters/InventoryAdapter.java | 1 - .../adapters/ReaderListAdapter.java | 2 +- .../fragments/AccessAuraSenseFragment.java | 2 - .../fragments/AccessColdChainFragment.java | 59 +- .../AccessEm4325PassiveFragment.java | 306 +++ .../fragments/AccessFdmicroFragment.java | 74 +- .../fragments/AccessImpinjFragment.java | 1 + .../fragments/AccessMicronFragment.java | 7 +- .../fragments/AccessUcode8Fragment.java | 14 +- .../fragments/AccessUcodeFragment.java | 15 +- .../fragments/AccessXerxesLoggerFragment.java | 7 +- .../fragments/AuraSenseFragment.java | 4 +- .../fragments/AxzonFragment.java | 8 +- .../fragments/ColdChainFragment.java | 29 +- .../cs108ademoapp/fragments/HomeFragment.java | 9 +- .../InventoryRfidiMultiFragment.java | 48 +- .../fragments/MicronFragment.java | 4 +- .../fragments/SettingAdminFragment.java | 87 +- .../fragments/Ucode8Fragment.java | 3 +- .../res/layout/fragment_access_coldchain.xml | 2 +- .../layout/fragment_access_em4325passive.xml | 106 + .../res/layout/fragment_access_ucode8.xml | 6 + .../res/layout/fragment_settings_admin.xml | 147 ++ app/src/main/res/values/strings.xml | 5 + cs108library4a/build.gradle | 4 +- .../com/csl/cs108library4a/BleConnector.java | 10 +- .../cs108library4a/BluetoothConnector.java | 13 +- .../csl/cs108library4a/Cs108Connector.java | 2332 +---------------- .../csl/cs108library4a/Cs108Library4A.java | 72 +- .../com/csl/cs108library4a/ReaderDevice.java | 12 + 36 files changed, 1143 insertions(+), 2499 deletions(-) create mode 100644 app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java create mode 100644 app/src/main/res/layout/fragment_access_em4325passive.xml diff --git a/app/build.gradle b/app/build.gradle index 8a346c6..ffde233 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,7 +7,7 @@ android { minSdkVersion 19 targetSdkVersion 30 versionCode 31 - versionName "2.1.15" + versionName "2.1.28" } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java b/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java index 9c9b4ab..de81ac0 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/AccessTask.java @@ -34,7 +34,7 @@ public enum TaskCancelRReason { long timeMillis, startTimeMillis, runTimeMillis; int accessError, backscatterError; boolean timeoutError, crcError; - String resultError = ""; + public String resultError = ""; boolean success; boolean done = false; boolean ending = false; @@ -233,7 +233,7 @@ else if (repeat && (nextNew == false || resultError.length() != 0)) { else if (notificationData != null) { //MainActivity.mCs108Library4a.appendToLog("resultError=" + MainActivity.mCs108Library4a.byteArrayToString(notificationData)); publishProgress("Received notification uplink event 0xA101 with error code=" + MainActivity.mCs108Library4a.byteArrayToString(notificationData)); - taskCancelReason = TaskCancelRReason.TIMEOUT; + taskCancelReason = TaskCancelRReason.ERROR; } if (System.currentTimeMillis() - timeMillis > iTimeOut) { //MainActivity.mCs108Library4a.appendToLog("endingMessage: iTimeout = " + iTimeOut); diff --git a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java index b260c7e..5f21556 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java @@ -198,6 +198,7 @@ protected String doInBackground(Void... a) { long firstTimeOld = 0, timeMillisSound = 0; int totalOld = 0; @Override protected void onProgressUpdate(String... output) { + if (false) MainActivity.mCs108Library4a.appendToLog("InventoryRfidTask: output[0] = " + output[0]); if (output[0] != null) { if (output[0].length() == 1) inventoryHandler_endReason(); else if (output[0].length() == 2) { @@ -307,7 +308,7 @@ void inventoryHandler_tag() { MainActivity.mCs108Library4a.appendToLog("HelloK: strMdid = " + strMdid + ", MainMdid = " + MainActivity.mDid + ", bFastId = " + bFastId); int iPc = Integer.parseInt(strPc, 16); - String strXpc = null; int iSensorData = ReaderDevice.INVALID_SENSORDATA; if ((iPc & 0x0200) != 0) { + String strXpc = null; int iSensorData = ReaderDevice.INVALID_SENSORDATA; if ((iPc & 0x0200) != 0 && strEpc != null && strEpc.length() >= 8) { int iXpcw1 = Integer.parseInt(strEpc.substring(0, 4), 16); if ((iXpcw1 & 0x8000) != 0) { strXpc = strEpc.substring(0, 8); @@ -349,27 +350,47 @@ void inventoryHandler_tag() { } if (bValidFastId == false) return; MainActivity.mCs108Library4a.appendToLog("HelloK: Doing IMPINJ Inventory with strMdid = " + strMdid + ", strEpc1 = " + strEpc1 + ":, strTid = " + strTid); - } else if (strMdid != null && MainActivity.mDid != null) { + } else if (MainActivity.mDid != null) { + MainActivity.mCs108Library4a.appendToLog("HelloK: MainActivity.mDid = " + MainActivity.mDid); if (MainActivity.mDid.matches("E2806894B")) { if (strEpc.length() >= 24) { String strEpc1 = strEpc.substring(0, strEpc.length() - 24); String strTid = strEpc.substring(strEpc.length() - 24, strEpc.length()); + MainActivity.mCs108Library4a.appendToLog("HelloK: matched E2806894B with strEpc = " + strEpc + ", strEpc1 = " + strEpc1 + ", strTid = " + strTid + ", strExtra1 = " + strExtra1); + boolean matched = true; if (strExtra1 != null) { - if (strExtra1.length() == 8 && strTid.contains(strExtra1)) { - strEpc = strEpc1; strAddresss = strEpc; - strExtra2 = strTid; - extra2Bank = 2; - data2_offset = 0; - } + if (!(strExtra1.length() == 8 && strTid.contains(strExtra1))) matched = false; + } + if (matched) { + strEpc = strEpc1; + strAddresss = strEpc; + strExtra2 = strTid; + extra2Bank = 2; + data2_offset = 0; + } + if (strTid.contains("E2806894") == false) { + MainActivity.mCs108Library4a.appendToLog("HelloK: Skip the record without strExtra1 E2806894: " + strEpc); + return; } } - } else if (MainActivity.mDid.matches("E2806894C")) { - if (strExtra1 != null && strEpc.length() >= 4) { - if (strExtra1.contains("E2806894")) { - String strEpc1 = strEpc.substring(0, strEpc.length() - 4); - String strTid = strEpc.substring(strEpc.length() - 4, strEpc.length()); + } else if (MainActivity.mDid.matches("E2806894C") || MainActivity.mDid.matches("E2806894d")) { + if (strEpc.length() >= 4) { + String strEpc1 = strEpc.substring(0, strEpc.length() - 4); + String strBrand = strEpc.substring(strEpc.length() - 4, strEpc.length()); + MainActivity.mCs108Library4a.appendToLog("HelloK: matched E2806894B with strEpc = " + strEpc + ", strEpc1 = " + strEpc1 + ", strBrand = " + strBrand + ", strExtra1 = " + strExtra1); + boolean matched = true; + if (strExtra1 != null || MainActivity.mDid.matches("E2806894d")) { + if (!(strExtra1 != null && strExtra1.length() == 8 && strExtra1.contains("E2806894"))) { + matched = false; + if (MainActivity.mDid.matches("E2806894d")) { + MainActivity.mCs108Library4a.appendToLog("HelloK: Skip the record without strExtra1 E2806894: " + strEpc); + return; + } + } + } + if (matched) { strEpc = strEpc1; strAddresss = strEpc; - brand = strTid; + brand = strBrand; MainActivity.mCs108Library4a.appendToLog("HelloK: brand 1 = " + brand + ", strEpc = " + strEpc); } } @@ -429,7 +450,14 @@ void inventoryHandler_tag() { readerDevice.setBrand(brand); readerDevice.setCodeTempC(codeTempC); readerDevice.setSensorData(iSensorData); - readerDevice.setExtra(strExtra1, extra1Bank, data1_offset, strExtra2, extra2Bank, data2_offset); + if (strExtra1 != null) readerDevice.setExtra1(strExtra1, extra1Bank, data1_offset); + else if (readerDevice.getstrExtra1() != null) { + MainActivity.mCs108Library4a.appendToLog("HelloK: no null replacement of StrExtra1"); + } + if (strExtra2 != null) readerDevice.setExtra2(strExtra2, extra2Bank, data2_offset); + else if (readerDevice.getstrExtra2() != null) { + MainActivity.mCs108Library4a.appendToLog("HelloK: no null replacement of StrExtra2"); + } tagsList.set(iMatchItem, readerDevice); match = true; updated = true; diff --git a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java index 819f42e..db01f08 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java +++ b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java @@ -174,16 +174,6 @@ public void run() { CustomProgressDialog progressDialog; private void selectItem(DrawerPositions position) { Log.i(TAG, "MainActivity.selectItem: position = " + position); - if (false && position != DrawerPositions.MAIN && position != DrawerPositions.ABOUT && position != DrawerPositions.CONNECT && mCs108Library4a != null) { - if (MainActivity.mCs108Library4a.isRfidFailure() == false && mCs108Library4a.mrfidToWriteSize() != 0) { - if (configureDisplaying == false) { - progressDialog = new CustomProgressDialog(this, "Initializing reader. Please wait."); - progressDialog.show(); - mHandler.post(configureRunnable); - } - return; - } - } if (true && position != DrawerPositions.MAIN && position != DrawerPositions.ABOUT && position != DrawerPositions.CONNECT && mCs108Library4a.isBleConnected() == false) { Toast.makeText(MainActivity.mContext, "Bluetooth Disconnected. Please Connect.", Toast.LENGTH_SHORT).show(); return; @@ -208,7 +198,6 @@ private void selectItem(DrawerPositions position) { fragment = new InventoryRfidSearchFragment(); break; case MULTIBANK: - mDid = null; fragment = InventoryRfidiMultiFragment.newInstance(true, null); break; case SETTING: diff --git a/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java b/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java index bb7ae65..46e7a9f 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java @@ -9,7 +9,11 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Environment; +import android.provider.Settings; +import androidx.core.app.ActivityCompat; + +import com.csl.cs108library4a.Cs108Library4A; import com.csl.cs108library4a.ReaderDevice; import org.json.JSONArray; @@ -18,6 +22,7 @@ import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStream; @@ -25,13 +30,16 @@ import java.net.DatagramSocket; import java.net.HttpURLConnection; import java.net.InetAddress; +import java.net.NetworkInterface; import java.net.URL; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; +import java.util.List; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; @@ -50,12 +58,54 @@ public class SaveList2ExternalTask extends AsyncTask { ArrayList tagsList; ReaderDevice tagDevice1; CustomPopupWindow customPopupWindow; boolean savedFile = false; + int fileFormat = 0; String url = null; HttpURLConnection con; + String stringBluetoothMAC, stringWifiMac; public SaveList2ExternalTask(ArrayList tagsList) { this.tagsList = tagsList; + + stringBluetoothMAC = BluetoothAdapter.getDefaultAdapter().getAddress().replaceAll(":", ""); + mCs108Library4a.appendToLog("stringBluetoothMac from getMacAddress = " + stringBluetoothMAC); + if (stringBluetoothMAC.contains("020000000000")) { + final String SECURE_SETTINGS_BLUETOOTH_ADDRESS = "bluetooth_address"; + String macAddress = Settings.Secure.getString(mContext.getContentResolver(), SECURE_SETTINGS_BLUETOOTH_ADDRESS); //Not OK in android 8 + mCs108Library4a.appendToLog("stringBluetoothMac from Settings.Secure.getString = " + macAddress); + stringBluetoothMAC = macAddress; + } + + stringWifiMac = ((WifiManager) MainActivity.mContext.getSystemService(WIFI_SERVICE)).getConnectionInfo().getMacAddress().replaceAll(":", ""); + mCs108Library4a.appendToLog("stringWifMac from getMacAddress = " + stringWifiMac); + if (stringWifiMac.contains("020000000000")) { + try { + List all = Collections.list(NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface nif : all) { + mCs108Library4a.appendToLog("nif.getName = " + nif.getName() + ", macByts = " + mCs108Library4a.byteArrayToString(nif.getHardwareAddress())); + } + + WifiManager wifiMan = (WifiManager) mContext.getSystemService(WIFI_SERVICE); + int wifiState = wifiMan.getWifiState(); + //wifiMan.setWifiEnabled(true); + File fl = new File("/sys/class/net/wlan0/address"); + FileInputStream fin = new FileInputStream(fl); //Not Ok in Amdroid 11 + StringBuilder builder = new StringBuilder(); + int ch; + while ((ch = fin.read()) != -1) { + builder.append((char) ch); + } + String fileMAC = builder.toString(); + mCs108Library4a.appendToLog("getName: file content = " + fileMAC); + fin.close(); + + stringWifiMac = fileMAC; + //boolean enabled = WifiManager.WIFI_STATE_ENABLED == wifiState; + //wifiMan.setWifiEnabled(enabled); + } catch (Exception ex) { + mCs108Library4a.appendToLog("Exception : " + ex.getCause()); + } + } } public SaveList2ExternalTask() { } @@ -63,7 +113,8 @@ public SaveList2ExternalTask() { } protected void onPreExecute() { if (tagsList == null) cancel(true); - messageStr = createJSON(tagsList, null).toString(); + if (MainActivity.mCs108Library4a.getSavingFormatSetting() == 0) messageStr = createJSON(tagsList, null).toString(); + else messageStr = createCSV(tagsList, null); resultDisplay = save2File(messageStr, true); customPopupWindow = new CustomPopupWindow(mContext); mCs108Library4a.appendToLog("SaveList2ExternalTask: resultDisplay = " + resultDisplay); @@ -205,9 +256,18 @@ public JSONObject createJSON(ArrayList tagsList0, ReaderDevice tag object.put("rfidReaderInternalSerialNumber", MainActivity.mCs108Library4a.getRadioSerial()); object.put("smartPhoneName", Build.MODEL); - object.put("smartPhoneSerialNumber", Build.SERIAL); - object.put("smartPhoneBluetoothMACAddress", BluetoothAdapter.getDefaultAdapter().getAddress().replaceAll(":", "")); - object.put("smartPhoneWiFiMACAddress", ((WifiManager) MainActivity.mContext.getSystemService(WIFI_SERVICE)).getConnectionInfo().getMacAddress().replaceAll(":", "")); + String strPhoneSerial = null; + /*if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + try { + strPhoneSerial = Build.getSerial(); + } catch (Exception ex) { + mCs108Library4a.appendToLog("Exception = " + ex.getCause()); + } + } else*/ + strPhoneSerial = Build.SERIAL; + object.put("smartPhoneSerialNumber", strPhoneSerial); + object.put("smartPhoneBluetoothMACAddress", stringBluetoothMAC); + object.put("smartPhoneWiFiMACAddress", stringWifiMac); object.put("smartPhoneUUID", null); object.put("pcName", null); @@ -220,17 +280,110 @@ public JSONObject createJSON(ArrayList tagsList0, ReaderDevice tag return object; } + public String createCSV(ArrayList tagsList0, ReaderDevice tagDevice0) { + String object = ""; + int csvColumnSelect = MainActivity.mCs108Library4a.getCsvColumnSelectSetting(); + try { + if (tagsList0 != null || tagDevice0 != null) { + JSONArray jsonArray = new JSONArray(); + int i = 1; if (tagsList0 != null) i = tagsList0.size(); + if (true) { + String objectTag; + objectTag = "PC,"; + objectTag += "EPC,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.RESERVE_BANK.ordinal())) != 0) objectTag += "Reserve Bank,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.EPC_BANK.ordinal())) != 0) objectTag += "EPC Bank,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TID_BANK.ordinal())) != 0) objectTag += "TID Bank,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.USER_BANK.ordinal())) != 0) objectTag += "User Bank,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.PHASE.ordinal())) != 0) objectTag += "Phase,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.CHANNEL.ordinal())) != 0) objectTag += "Channel,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TIME.ordinal())) != 0) objectTag += "Time Of Read,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TIMEZONE.ordinal())) != 0) objectTag += "Time Zone,"; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.LOCATION.ordinal())) != 0) objectTag += "location Of Read Latitude, Location of Read Longitude, "; + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.DIRECTION.ordinal())) != 0) objectTag += "eCompass"; + objectTag += "\n"; + object += objectTag; + } + + while (--i >= 0) { + ReaderDevice tagDevice; + if (tagsList0 != null) tagDevice = tagsList0.get(i); + else tagDevice = tagDevice0; + + String accessPassword = null, killPassword = null, pcData = null, epcData = null, resBankData = null, epcBankData = null, tidBankData = null, userBankData = null; + String timeOfRead = null, timeZone = null, location = null, compass = null; + int phase = -1, channel = -1; + if (tagDevice != null) { + pcData = tagDevice.getPc(); + epcData = tagDevice.getAddress(); + resBankData = tagDevice.getRes(); + epcBankData = tagDevice.getEpc(); + tidBankData = tagDevice.getTid(); + userBankData = tagDevice.getUser(); + timeOfRead = tagDevice.getTimeOfRead(); MainActivity.mCs108Library4a.appendToLog("timeOfRead = " + timeOfRead ); + if (false) { + int index = timeOfRead.indexOf("."); + if (index >= 0) { + String string1 = timeOfRead.substring(0, index); + timeOfRead = string1; + MainActivity.mCs108Library4a.appendToLog("index = " + index + ", revised timeOfRead = " + timeOfRead ); + } + } + timeZone = tagDevice.getTimeZone(); + location = tagDevice.getLocation(); + compass = tagDevice.getCompass(); + phase = tagDevice.getPhase(); + channel = tagDevice.getChannel(); + } + + String objectTag; + objectTag = String.format("=\"%s\",", pcData); + objectTag += String.format("=\"%s\",", epcData); + + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.RESERVE_BANK.ordinal())) != 0) objectTag += String.format("=\"%s\",", resBankData); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.EPC_BANK.ordinal())) != 0) objectTag += String.format("=\"%s\",", epcBankData); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TID_BANK.ordinal())) != 0) objectTag += String.format("=\"%s\",", tidBankData); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.USER_BANK.ordinal())) != 0) objectTag += String.format("=\"%s\",", userBankData); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.PHASE.ordinal())) != 0) objectTag += String.format("%d,", phase); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.CHANNEL.ordinal())) != 0) objectTag += String.format("%d,", channel); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TIME.ordinal())) != 0) objectTag += String.format("=\"%s\",", timeOfRead); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TIMEZONE.ordinal())) != 0) objectTag += String.format("%s,", timeZone); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.LOCATION.ordinal())) != 0) objectTag += String.format("%s,", location); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.DIRECTION.ordinal())) != 0)objectTag += String.format("%s", compass); + objectTag += "\n"; + object += objectTag; + } + + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.OTHERS.ordinal())) != 0) { + object += "\nUser Description,this is example tag data\n"; + + object += String.format("RFID Reader Name,=\"%s\"\n", MainActivity.mCs108Library4a.getBluetoothICFirmwareName()); + object += String.format("RFID Reader Serial Number,=\"%s\"\n", MainActivity.mCs108Library4a.getHostProcessorICSerialNumber()); + object += String.format("RFID Reader Radio Serial Number,=\"%s\"\n", MainActivity.mCs108Library4a.getRadioSerial()); + if (true) { + object += String.format("RFID Reader Barcode Serial Number,=\"%s\"\n", MainActivity.mCs108Library4a.getBarcodeSerial()); + object += String.format("RFID Reader Bluetooth MAC address,=\"%s\"\n", MainActivity.mCs108Library4a.getBluetoothDeviceAddress()); + } + object += String.format("Smart Phone Name,=\"%s\"\n", Build.MODEL); + } + } + } catch (Exception ex) { } + return object; + } + public String save2File(String messageStr, boolean requestPermission) { String resultDisplay = ""; if (MainActivity.mCs108Library4a.getSaveFileEnable() == false) return "No saving file as it is disabled"; boolean writeExtPermission = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (mContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + mCs108Library4a.appendToLog("WRITE_EXTERNAL_STORAGE Permission is required !!!"); writeExtPermission = false; if (requestPermission) { MainActivity.permissionRequesting = true; requestPermissions((Activity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return null; } - } + } else mCs108Library4a.appendToLog("WRITE_EXTERNAL_STORAGE Permission is GRANTED !!!"); } + errorDisplay = null; if (writeExtPermission == false) { errorDisplay = "denied WRITE_EXTERNAL_STORAGE Permission !!!"; @@ -241,7 +394,7 @@ public String save2File(String messageStr, boolean requestPermission) { if (path.exists() == false) errorDisplay = "Error in making directory !!!"; else { String dateTime = new SimpleDateFormat("yyMMdd_HHmmss").format(new Date()); - String fileName = "cs108Java_" + dateTime + ".txt"; + String fileName = "cs108Java_" + dateTime + (mCs108Library4a.getSavingFormatSetting() == 0 ? ".txt" : ".csv"); File file = new File(path, fileName); if (file == null) errorDisplay = "Error in making directory !!!"; else { diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/ColdChainAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/ColdChainAdapter.java index 709a9a2..88f4d1f 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/ColdChainAdapter.java +++ b/app/src/main/java/com/csl/cs108ademoapp/adapters/ColdChainAdapter.java @@ -6,23 +6,28 @@ import androidx.viewpager.widget.PagerAdapter; import com.csl.cs108ademoapp.fragments.AccessColdChainFragment; +import com.csl.cs108ademoapp.fragments.AccessEm4325PassiveFragment; import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; public class ColdChainAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; + private final int NO_OF_TABS = 3; + public Fragment fragment0, fragment1, fragment2; @Override public Fragment getItem(int index) { Fragment fragment = null; switch (index) { case 1: + fragment = new AccessEm4325PassiveFragment(); + fragment1 = fragment; + break; + case 2: fragment = new AccessColdChainFragment(); - fragment0 = fragment; + fragment2 = fragment; break; case 0: fragment = InventoryRfidiMultiFragment.newInstance(true,"E280B"); - fragment1 = fragment; + fragment0 = fragment; break; default: fragment = null; diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/InventoryAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/InventoryAdapter.java index 4ab6848..c214a50 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/InventoryAdapter.java +++ b/app/src/main/java/com/csl/cs108ademoapp/adapters/InventoryAdapter.java @@ -20,7 +20,6 @@ public Fragment getItem(int index) { Fragment fragment = null; switch (index) { case 0: - MainActivity.mDid = null; fragment = InventoryRfidiMultiFragment.newInstance(false, null); fragment0 = fragment; break; 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 04c547f..078ba75 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java +++ b/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java @@ -136,7 +136,7 @@ public View getView(int position, View convertView, ViewGroup parent) { backport = reader.getBackport2(); if (backport > reader.INVALID_BACKPORT) strExtra += String.format("\nBP2=%d", backport); } else if (codeTempC > reader.INVALID_CODETEMPC) { //for Ctesius tags strExtra = ("T=" + String.format("%.1f", codeTempC) + (char) 0x00B0 + "C"); - } else if (reader.getDetails().contains("E2806894")) { //for code8 tags + } else if (brand != null) { //reader.getDetails().contains("E2806894")) { //for code8 tags strExtra = ((brand != null) ? ("Brand=" + brand) : ""); } else if (reader.getSensorData() < reader.INVALID_SENSORDATA) { strExtra = "SD=" + String.valueOf(reader.getSensorData()); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessAuraSenseFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessAuraSenseFragment.java index f3cadde..d18de7c 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessAuraSenseFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessAuraSenseFragment.java @@ -113,8 +113,6 @@ public void onClick(View v) { @Override public void onDestroy() { if (accessTask != null) accessTask.cancel(true); - MainActivity.mCs108Library4a.setSameCheck(true); - MainActivity.mCs108Library4a.restoreAfterTagSelect(); super.onDestroy(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessColdChainFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessColdChainFragment.java index cee070d..f0ef204 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessColdChainFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessColdChainFragment.java @@ -289,14 +289,18 @@ else if (taskRequest) { boolean invalid = processTickItems(); MainActivity.mCs108Library4a.appendToLog("processTickItems, invalid = " + invalid); if (bankProcessing++ != 0 && invalid) rerunRequest = false; - else { + else { + Cs108Connector.HostCommands hostCommand; + if (readWriteTypes == ReadWriteTypes.TEMPERATURE) hostCommand = Cs108Connector.HostCommands.CMD_GETSENSORDATA; + else if (operationRead) hostCommand = Cs108Connector.HostCommands.CMD_18K6CREAD; + else hostCommand = Cs108Connector.HostCommands.CMD_18K6CWRITE; accessTask = new AccessTask( (operationRead ? buttonRead : buttonWrite), null, invalid, editTextRWTagID.getText().toString(), 1, 32, editTextAccessRWAccPassword.getText().toString(), Integer.valueOf(editTextaccessRWAntennaPower.getText().toString()), - (operationRead ? Cs108Connector.HostCommands.CMD_18K6CREAD: Cs108Connector.HostCommands.CMD_18K6CWRITE), + hostCommand, 0, false, false,true, null, null, null, null, null); accessTask.execute(); @@ -360,7 +364,7 @@ boolean processResult() { else if (accessResult == null) { if (readWriteTypes == ReadWriteTypes.CONFIGURATION) { textViewConfigOk.setText("E"); checkBoxConfig.setChecked(false); - } else if (readWriteTypes == ReadWriteTypes.TEMPERATURE) { + } else if (readWriteTypes == ReadWriteTypes.TEMPERATURE && operationRead) { textViewTemperatureOk.setText("E"); checkBoxTemperature.setChecked(false); } else if (readWriteTypes == ReadWriteTypes.ENABLE) { textViewEnableOk.setText("E"); checkBoxEnable.setChecked(false); @@ -391,17 +395,26 @@ else if (accessResult == null) { editTextSamplingInterval.setText(String.valueOf(bValue2 & 0x3F)); } } - } else if (readWriteTypes == ReadWriteTypes.TEMPERATURE) { + } else if (readWriteTypes == ReadWriteTypes.TEMPERATURE && operationRead) { textViewTemperatureOk.setText("O"); checkBoxTemperature.setChecked(false); readWriteTypes = ReadWriteTypes.NULL; - if (accessResult.length() == 4 && operationRead) { + MainActivity.mCs108Library4a.appendToLog("accessResult of Temperature = " + accessResult); + + if (accessResult.length() >= 16) { + int indexBegin = accessResult.length() - 16; + String stringValue = accessResult.substring(indexBegin, indexBegin + 4); + MainActivity.mCs108Library4a.appendToLog("temperature part of Temperature accessResult = " + stringValue); + accessResult = stringValue; + } + if (accessResult.length() == 4) { byte bValue = Byte.parseByte(accessResult.substring(0, 1), 16); if ((bValue & 0x8) != 0) textViewBatteryAlarm.setVisibility(View.VISIBLE); else if ((bValue & 0x2) != 0) textViewOverAlarm.setVisibility(View.VISIBLE); else if ((bValue & 01) != 0) textViewUnderAlarm.setVisibility(View.VISIBLE); bValue = Byte.parseByte(accessResult.substring(1, 2), 16); - byte bValue2 = Byte.parseByte(accessResult.substring(2, 4), 16); - if ((bValue & 0x01) != 0 && bValue2 == 0) textViewTemperature.setText("Invalid"); + Integer iValue2 = Integer.parseInt(accessResult.substring(2, 4), 16); + iValue2 &= 0x1FF; + if ((bValue & 0x01) != 0 && iValue2 == 0) textViewTemperature.setText("Invalid"); else { String stringValue = getTemperatue(accessResult.substring(1, 4)); stringValue += (char) 0x00B0 + "C"; @@ -587,17 +600,27 @@ boolean processTickItems() { } } } else if (checkBoxTemperature.isChecked() == true) { - accOffset = 0x100; accSize = 1; readWriteTypes = ReadWriteTypes.TEMPERATURE; textViewTemperatureOk.setText(""); - if (operationRead) { - textViewTemperature = (TextView) getActivity().findViewById(R.id.accessCCTemperature); - textViewTemperature.setText(""); - textViewUnderAlarm = (TextView) getActivity().findViewById(R.id.accessCCUnderTempAlarm); - textViewUnderAlarm.setVisibility(View.INVISIBLE); - textViewOverAlarm = (TextView) getActivity().findViewById(R.id.accessCCOverTempAlarm); - textViewOverAlarm.setVisibility(View.INVISIBLE); - textViewBatteryAlarm = (TextView) getActivity().findViewById(R.id.accessCCBatteryAlarm); - textViewBatteryAlarm.setVisibility(View.INVISIBLE); - } else invalidRequest1 = true; + readWriteTypes = ReadWriteTypes.TEMPERATURE; + if (bankProcessing == 0) { + if (operationRead) { + textViewTemperature = (TextView) getActivity().findViewById(R.id.accessCCTemperature); + textViewTemperature.setText(""); + textViewUnderAlarm = (TextView) getActivity().findViewById(R.id.accessCCUnderTempAlarm); + textViewUnderAlarm.setVisibility(View.INVISIBLE); + textViewOverAlarm = (TextView) getActivity().findViewById(R.id.accessCCOverTempAlarm); + textViewOverAlarm.setVisibility(View.INVISIBLE); + textViewBatteryAlarm = (TextView) getActivity().findViewById(R.id.accessCCBatteryAlarm); + textViewBatteryAlarm.setVisibility(View.INVISIBLE); + textViewTemperatureOk.setText(""); + if (true) { + MainActivity.mCs108Library4a.macWrite(0x11F, 3); + return false; + } + accOffset = 0x100; accSize = 1; operationRead = false; + } else invalidRequest1 = true; + } else { + accOffset = 0x100; accSize = 1; operationRead = true; + } } else if (checkBoxEnable.isChecked() == true) { accOffset = 0x10D; accSize = 1; readWriteTypes = ReadWriteTypes.ENABLE; textViewEnableOk.setText(""); if (operationRead) spinnerEnable.setSelection(0); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java new file mode 100644 index 0000000..38305de --- /dev/null +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java @@ -0,0 +1,306 @@ +package com.csl.cs108ademoapp.fragments; + +import android.os.AsyncTask; +import android.os.Bundle; +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.LinearLayout; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import com.csl.cs108ademoapp.AccessTask; +import com.csl.cs108ademoapp.GenericTextWatcher; +import com.csl.cs108ademoapp.MainActivity; +import com.csl.cs108ademoapp.R; +import com.csl.cs108library4a.Cs108Connector; +import com.csl.cs108library4a.ReaderDevice; + +public class AccessEm4325PassiveFragment extends CommonFragment { + final boolean DEBUG = true; + EditText editTextRWTagID, editTextAccessRWAccPassword, editTextaccessRWAntennaPower; + + TextView textViewTemperature; + Button buttonRead; + + enum ReadWriteTypes { + NULL, TEMPERATURE + } + boolean operationRead = false; + ReadWriteTypes readWriteTypes; + + private AccessTask accessTask; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState, false); + return inflater.inflate(R.layout.fragment_access_em4325passive, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + editTextRWTagID = (EditText) getActivity().findViewById(R.id.accessCCPTagID); + editTextAccessRWAccPassword = (EditText) getActivity().findViewById(R.id.accessCCPAccPasswordValue); + editTextAccessRWAccPassword.addTextChangedListener(new GenericTextWatcher(editTextAccessRWAccPassword, 8)); + editTextAccessRWAccPassword.setText("00000000"); + + textViewTemperature = (TextView) getActivity().findViewById(R.id.accessCCPTemperature); + + editTextaccessRWAntennaPower = (EditText) getActivity().findViewById(R.id.accessCCPAntennaPower); + editTextaccessRWAntennaPower.setText(String.valueOf(300)); + + buttonRead = (Button) getActivity().findViewById(R.id.accessCCPReadButton); + buttonRead.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (isOperationRunning()) return; + readWriteTypes = ReadWriteTypes.NULL; + bRequestCheck = true; + operationRead = true; startAccessTask(); + } + }); + + setupTagID(); + MainActivity.mCs108Library4a.setSameCheck(false); + } + + @Override + public void onDestroy() { + if (accessTask != null) accessTask.cancel(true); + MainActivity.mCs108Library4a.setSameCheck(true); + MainActivity.mCs108Library4a.restoreAfterTagSelect(); + super.onDestroy(); + } + + boolean userVisibleHint = false; + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if(getUserVisibleHint()) { + userVisibleHint = true; + MainActivity.mCs108Library4a.appendToLog("AccessEm4325PassiveFragment is now VISIBLE"); + setupTagID(); + // setNotificationListener(); + } else { + userVisibleHint = false; + MainActivity.mCs108Library4a.appendToLog("AccessEm4325PassiveFragment is now INVISIBLE"); +// MainActivity.mCs108Library4a.setNotificationListener(null); + } + } + + public AccessEm4325PassiveFragment() { + super("AccessEm4325PassiveFragment"); + } + + void setupTagID() { + ReaderDevice tagSelected = MainActivity.tagSelected; + if (tagSelected != null) { + if (tagSelected.getSelected() == true) { + if (editTextRWTagID != null) editTextRWTagID.setText(tagSelected.getAddress()); + } + } + } + + boolean isOperationRunning() { + if (MainActivity.mCs108Library4a.isBleConnected() == false) { + Toast.makeText(MainActivity.mContext, R.string.toast_ble_not_connected, Toast.LENGTH_SHORT).show(); + return true; + } else if (MainActivity.mCs108Library4a.isRfidFailure()) { + Toast.makeText(MainActivity.mContext, "Rfid is disabled", Toast.LENGTH_SHORT).show(); + return true; + } else if (accessTask != null) { + if (accessTask.getStatus() == AsyncTask.Status.RUNNING) { + Toast.makeText(MainActivity.mContext, "Running acccess task. Please wait", Toast.LENGTH_SHORT).show(); + return true; + } + } + return false; + } + + void startAccessTask() { + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("startAccessTask()"); + if (updating == false) { + updating = true; bankProcessing = 0; + mHandler.removeCallbacks(updateRunnable); + mHandler.post(updateRunnable); + } + } + boolean updating = false; int bankProcessing = 0; + private final Runnable updateRunnable = new Runnable() { + @Override + public void run() { + boolean rerunRequest = false; boolean taskRequest = false; + if (accessTask == null) { + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessEm4325PassiveFragment().updateRunnable(): NULL accessReadWriteTask"); + taskRequest = true; + } else if (accessTask.getStatus() != AsyncTask.Status.FINISHED) { + rerunRequest = true; + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessEm4325PassiveFragment().updateRunnable(): accessReadWriteTask.getStatus() = " + accessTask.getStatus().toString()); + } else { + taskRequest = true; + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessEm4325PassiveFragment().updateRunnable(): FINISHED accessReadWriteTask"); + } + if (processResult()) { rerunRequest = true; MainActivity.mCs108Library4a.appendToLog("updateRunnable: processResult is TRUE with bankprocessing = " + bankProcessing);} + else if (taskRequest) { + boolean invalid = processTickItems(); + MainActivity.mCs108Library4a.appendToLog("updateRunnable: processTickItems Result = " + invalid + ", bankprocessing = " + bankProcessing); + if (bankProcessing++ != 0 && invalid) rerunRequest = false; + else { + Cs108Connector.HostCommands hostCommand; + if (readWriteTypes == ReadWriteTypes.TEMPERATURE && operationRead) hostCommand = Cs108Connector.HostCommands.CMD_GETSENSORDATA; + else if (operationRead) hostCommand = Cs108Connector.HostCommands.CMD_18K6CREAD; + else hostCommand = Cs108Connector.HostCommands.CMD_18K6CWRITE; + accessTask = new AccessTask( + buttonRead, null, + invalid, + editTextRWTagID.getText().toString(), 1, 32, + editTextAccessRWAccPassword.getText().toString(), + Integer.valueOf(editTextaccessRWAntennaPower.getText().toString()), + hostCommand, + 0, false, false,true, + null, null, null, null, null); + accessTask.execute(); + rerunRequest = true; + MainActivity.mCs108Library4a.appendToLog("accessTask is created"); + } + } + if (rerunRequest) { + mHandler.postDelayed(updateRunnable, 500); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AccessEm4325PassiveFragment().updateRunnable(): Restart"); + } + else updating = false; + MainActivity.mCs108Library4a.appendToLog("AccessEm4325PassiveFragment().updateRunnable(): Ending with updating = " + updating); + } + }; + + short setTemperature(float fTemperature) { + if (fTemperature > 63.75) fTemperature = (float) 63.75; + else if (fTemperature < -64) fTemperature = -64; + boolean bNegative = false; + if (fTemperature < 0) { bNegative = true; fTemperature = 0 - fTemperature; } + fTemperature += 0.125; fTemperature /= 0.25; + short retValue = (short)fTemperature; + if (bNegative) { retValue--; retValue &= 0xFF; retValue ^= 0xFF; retValue |= 0x100; } + return retValue; + } + String getTemperatue(String stringInput) { + byte bValue = Byte.parseByte(stringInput.substring(0,1), 16); + byte bValue2 = Byte.parseByte(stringInput.substring(1, 2), 16); bValue2 <<= 4; + byte bValue3 = Byte.parseByte(stringInput.substring(2, 3), 16); bValue2 |= bValue3; + String stringValue = ""; short sValue = (short)(bValue2 & 0xFF); + if ((bValue & 0x01) != 0) { stringValue = "-"; bValue2 ^= 0xFF; sValue = (short)(bValue2 & 0xFF); sValue++; } + stringValue += String.valueOf((sValue & 0x1FF) >> 2); + switch (sValue & 0x03) { + case 1: + stringValue += ".25"; + break; + case 2: + stringValue += ".50"; + break; + case 3: + stringValue += ".75"; + break; + } + return stringValue; + } + + + boolean bRequestCheck; + boolean processResult() { + String accessResult = null; + if (accessTask == null) return false; + else if (accessTask.getStatus() != AsyncTask.Status.FINISHED) return false; + else { + accessResult = accessTask.accessResult; + MainActivity.mCs108Library4a.appendToLog("accessResult 2 bankProcessing = " + bankProcessing + ", accessResult = " + accessTask.accessResult ); + if (accessResult == null) { + if (readWriteTypes == ReadWriteTypes.TEMPERATURE && operationRead) { + bRequestCheck = false; + } + } else { + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("accessResult = " + accessResult); + if (readWriteTypes == ReadWriteTypes.TEMPERATURE && operationRead == false) { + } else if (readWriteTypes == ReadWriteTypes.TEMPERATURE && operationRead) { + bRequestCheck = false; readWriteTypes = ReadWriteTypes.NULL; + MainActivity.mCs108Library4a.appendToLog("accessResult of Temperature = " + accessResult); + + if (accessResult.length() >= 16) { + int indexBegin = accessResult.length() - 16; + String stringValue = accessResult.substring(indexBegin, indexBegin + 4); + MainActivity.mCs108Library4a.appendToLog("temperature part of Temperature accessResult = " + stringValue); + accessResult = stringValue; //"00B5"; //stringValue; + } + if (accessResult.length() == 4) { + byte bValue = Byte.parseByte(accessResult.substring(1, 2), 16); + Integer iValue2 = Integer.parseInt(accessResult.substring(2, 4), 16); + iValue2 &= 0x1FF; + if ((bValue & 0x01) != 0 && iValue2 == 0) textViewTemperature.setText("Invalid"); + else { + String stringValue = getTemperatue(accessResult.substring(1, 4)); + stringValue += (char) 0x00B0 + "C"; + textViewTemperature.setText(stringValue); + } + } + } + } + accessTask = null; + return true; + } + } + boolean processTickItems() { + boolean invalidRequest1 = false; + int accSize = 0, accOffset = 0; + String writeData = ""; + + if (bRequestCheck) { + readWriteTypes = ReadWriteTypes.TEMPERATURE; + if (bankProcessing == 0) { + if (operationRead) { + textViewTemperature = (TextView) getActivity().findViewById(R.id.accessCCPTemperature); + textViewTemperature.setText(""); + accOffset = 0x10D; accSize = 1; operationRead = false; writeData = "0000"; + } else invalidRequest1 = true; + } else { + operationRead = true; + MainActivity.mCs108Library4a.macWrite(0x11F, 3); + return false; + } + } else { + invalidRequest1 = true; + } + + if (invalidRequest1 == false) { + if (MainActivity.mCs108Library4a.setAccessBank(3) == 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.setAccessWriteData(writeData) == false) { + invalidRequest1 = true; + } + } + } + return invalidRequest1; + } +} diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessFdmicroFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessFdmicroFragment.java index ef0ab73..7d0039b 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessFdmicroFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessFdmicroFragment.java @@ -212,7 +212,7 @@ public void onClick(View v) { } }); - MainActivity.mCs108Library4a.setSameCheck(false); + MainActivity.mCs108Library4a.setSameCheck(true); } @Override @@ -556,27 +556,28 @@ void doAccessTask(Cs108Connector.HostCommands hostCommand) { accessTask.execute(); } - Handler handler = new Handler(); boolean bLogging = false; int iOtherFlowCount = 0, iTimeNumber = 0, iTimeTotal = 0; + Handler handler = new Handler(); boolean bLogging = false; int iOtherFlowCount = 0, iTimeNumber = 0, iTimeTotal = 0, iDelayToStart = 0; private final Runnable updateRunnable = new Runnable() { + final boolean DEBUG = true; @Override public void run() { if (accessTask == null) return; - MainActivity.mCs108Library4a.appendToLog("accessTask.status = " + accessTask.getStatus().toString()); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + "accessTask.status = " + accessTask.getStatus().toString()); if (accessTask.getStatus() == AsyncTask.Status.RUNNING) { mHandler.postDelayed(updateRunnable, 100); return; } - MainActivity.mCs108Library4a.appendToLog(accessTask.accessResult + ": blogging with iOtherFlowCount = " + iOtherFlowCount); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + accessTask.accessResult + ": blogging with iOtherFlowCount = " + iOtherFlowCount); if ((operationReadTemperature || operationReadBattery || operationSetLogging || operationCheckLogging || operationGetLogging) && (iOtherFlowCount == 0)) { int iValue = 0; try { iValue = Integer.parseInt(accessTask.accessResult, 16); - MainActivity.mCs108Library4a.appendToLog(accessTask.accessResult + ": blogging with iValue = " + iValue); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + accessTask.accessResult + ": blogging with iValue = " + iValue); } catch (Exception ex) { } - MainActivity.mCs108Library4a.appendToLog(accessTask.accessResult + ": blogging with iValue after catch = " + iValue); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + accessTask.accessResult + ": blogging with iValue after catch = " + iValue); if ((iValue & 0x1000) != 0) { - MainActivity.mCs108Library4a.appendToLog(accessTask.accessResult + ": blogging A is true"); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + accessTask.accessResult + ": blogging A is true"); bLogging = true; if (operationCheckLogging == false && operationGetLogging == false) { iOtherFlowCount = 99; @@ -595,7 +596,7 @@ public void run() { doAccessTask(Cs108Connector.HostCommands.CMD_FDM_RDMEM); break; case 1: - MainActivity.mCs108Library4a.appendToLog("case 1: bLogging = " + bLogging + ", accessTask.accessResult = " + accessTask.accessResult); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("case 1: bLogging = " + bLogging + ", accessTask.accessResult = " + accessTask.accessResult); if (accessTask.accessResult != null) { Date date = null; long lDateTime = -1; @@ -638,7 +639,7 @@ public void run() { } break; case 2: - MainActivity.mCs108Library4a.appendToLog("bLogging = " + bLogging + ", accessTask.accessResult = " + accessTask.accessResult); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("bLogging = " + bLogging + ", accessTask.accessResult = " + accessTask.accessResult); if (bLogging) { operationGetLogging = false; int iValue = 0; @@ -654,23 +655,23 @@ public void run() { } else { String strTemp = accessTask.accessResult; iTimeTotal = Integer.parseInt(strTemp.substring(2, 4) + strTemp.substring(0, 2), 16); - MainActivity.mCs108Library4a.appendToLog("iTimeTotal is set to " + iTimeTotal + ", with strTemp = " + strTemp); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("iTimeTotal is set to " + iTimeTotal + ", with strTemp = " + strTemp); textViewLoggingValue1.append("status: " + accessTask.accessResult + "\n"); iTimeTotal++; } logData.iSampleSize = 0; default: - MainActivity.mCs108Library4a.appendToLog("iOtherFlowCount = " + iOtherFlowCount + ", accessTask.accessResult = " + accessTask.accessResult); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("iOtherFlowCount = " + iOtherFlowCount + ", accessTask.accessResult = " + accessTask.accessResult); if (iOtherFlowCount != 2) { String strMessage = ""; //accessTask.accessResult + ": "; String strAccessResult = accessTask.accessResult.substring(6, 8) + accessTask.accessResult.substring(4, 6) + accessTask.accessResult.substring(2, 4) + accessTask.accessResult.substring(0, 2); Long lValue = Long.parseLong(strAccessResult, 16); int iOddBit = 0; - MainActivity.mCs108Library4a.appendToLog(String.format("accessResult to lValue = %X", lValue)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog(String.format("accessResult to lValue = %X", lValue)); for (int i = 0; i < 32; i++) { if ((lValue & 1) != 0) { iOddBit++; - MainActivity.mCs108Library4a.appendToLog("accessResult, i=" + i + ", iOddbit=" + iOddBit); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("accessResult, i=" + i + ", iOddbit=" + iOddBit); } lValue = lValue >> 1; } @@ -692,7 +693,9 @@ public void run() { commandSelected(spinnerSelectCommand.getSelectedItemPosition()); } else { - MainActivity.mCs108Library4a.set_fdReadMem(0x1000 + (iOtherFlowCount - 2 + 1) * 4, 4); + int iValue = 0x1000 + (iOtherFlowCount - 2) * 4; + MainActivity.mCs108Library4a.set_fdReadMem(iValue, 4); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog(String.format("set_fdReadMem address = 0x%04x", iValue)); doAccessTask(Cs108Connector.HostCommands.CMD_FDM_RDMEM); } break; @@ -701,7 +704,7 @@ public void run() { } else if (operationCheckLogging) { switch (iOtherFlowCount) { case 0: - MainActivity.mCs108Library4a.appendToLog(accessTask.accessResult + ": blogging B is " + bLogging); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog(accessTask.accessResult + ": blogging B is " + bLogging); if (bLogging) { MainActivity.mCs108Library4a.set_fdRegAddr(0xc096); doAccessTask(Cs108Connector.HostCommands.CMD_FDM_RDREG); @@ -718,7 +721,7 @@ public void run() { } iOtherFlowCount++; } else if (operationSetLogging) { - MainActivity.mCs108Library4a.appendToLog("wallace.iOtherFlowCount = " + iOtherFlowCount + ", accessResult = " + accessTask.accessResult); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + "operationSetLogging: iOtherFlowCount = " + iOtherFlowCount + ", accessResult = " + accessTask.accessResult + ", resultError= " + accessTask.resultError); switch (iOtherFlowCount) { case 0: //0x4cb3,29d6 CheckBox checkBox = (CheckBox) getActivity().findViewById(R.id.accessFDenableLEDAutoFlash); @@ -726,11 +729,11 @@ public void run() { if (checkBox.isChecked()) { lValue |= 0x2000; lValue &= ~0x20; lValue &= 0xFFFFFFFF; - MainActivity.mCs108Library4a.appendToLog("lValue = " + String.format("%08x", lValue)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + "lValue = " + String.format("%08x", lValue)); } else { lValue &= ~0x2000; lValue |= 0x20; lValue &= 0xFFFFFFFF; - MainActivity.mCs108Library4a.appendToLog("lValue1 = " + String.format("%08x", lValue)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + "lValue1 = " + String.format("%08x", lValue)); } MainActivity.mCs108Library4a.set_fdWriteMem(0xb040, 4, lValue); //~user_cfg1,user_cfg1,~user_cfg0,user_cfg0: default as 0xd629b34c doAccessTask(Cs108Connector.HostCommands.CMD_FDM_WRMEM); @@ -745,11 +748,11 @@ public void run() { editTextCntLimit.setText(String.valueOf(iValue0)); String string1 = String.format("%04X", iValue0); - MainActivity.mCs108Library4a.appendToLog("accessResult: string1 = " + string1); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + "accessResult: string1 = " + string1); String string2 = string1.substring(2, 4) + string1.substring(0, 2) + "0000"; - MainActivity.mCs108Library4a.appendToLog("accessResult: string2 = " + string2); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + "accessResult: string2 = " + string2); int iValue = Integer.parseInt(string2, 16); - MainActivity.mCs108Library4a.appendToLog(String.format("accessResult: iValue = %X, iValue1 = %X", iValue0, iValue)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + String.format("accessResult: iValue = %X, iValue1 = %X", iValue0, iValue)); MainActivity.mCs108Library4a.set_fdWriteMem(0xb094, 4, iValue); //rtc_cnt_limit: default as 0x00000003 doAccessTask(Cs108Connector.HostCommands.CMD_FDM_WRMEM); @@ -763,8 +766,9 @@ public void run() { try { iValue = Integer.parseInt(editTextDelayStart.getText().toString()); } catch (Exception ex) { } + iDelayToStart = iValue; editTextDelayStart.setText(String.valueOf(iValue)); - MainActivity.mCs108Library4a.appendToLog(String.format("accessResult: iValue = %X", iValue)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + String.format("accessResult: iValue = %X", iValue)); MainActivity.mCs108Library4a.set_fdWrite(0xc084, iValue); //vdet_delay_cfg: default as 0xffff in minute doAccessTask(Cs108Connector.HostCommands.CMD_FDM_WRREG); @@ -776,7 +780,7 @@ public void run() { iValue = Integer.parseInt(editTextStep.getText().toString()); } catch (Exception ex) { } editTextStep.setText(String.valueOf(iValue)); - MainActivity.mCs108Library4a.appendToLog(String.format("accessResult: iValue = %X", iValue)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + String.format("accessResult: iValue = %X", iValue)); MainActivity.mCs108Library4a.set_fdWrite(0xc085, iValue); //vdet_step_cfg: default as 0xffff in seconds doAccessTask(Cs108Connector.HostCommands.CMD_FDM_WRREG); @@ -791,16 +795,26 @@ public void run() { doAccessTask(Cs108Connector.HostCommands.CMD_FDM_WRREG); break; case 7: - MainActivity.mCs108Library4a.set_fdCmdCfg(0); - doAccessTask(Cs108Connector.HostCommands.CMD_FDM_START_LOGGING); - break; - case 8: MainActivity.mCs108Library4a.set_fdRegAddr(0xc084); //vdet_delay_cfg: default as 0xffff in minute doAccessTask(Cs108Connector.HostCommands.CMD_FDM_RDREG); break; + case 8: + iValue = -1; + try { + iValue = Integer.parseInt(accessTask.accessResult); + } catch (Exception ex) { } + if (iValue != iDelayToStart) { + iOtherFlowCount = 99; + accessTask.accessResult += ": logging failure"; + textViewLoggingValue.setText(accessTask.accessResult); + break; + } + MainActivity.mCs108Library4a.set_fdCmdCfg(0); + doAccessTask(Cs108Connector.HostCommands.CMD_FDM_START_LOGGING); + break; case 9: Date date = new Date(); - MainActivity.mCs108Library4a.appendToLog("Current time is " + formatter.format(date)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + "Current time is " + formatter.format(date)); long longTemp = date.getTime() / 1000; Long longValue = ((longTemp & 0xFF) << 24); @@ -815,7 +829,7 @@ public void run() { longValue |= ((logData.minLogStartDelay & 0xFF00) << 8) ; longValue |= ((logData.secLogSampleInterval & 0XFF) << 8 ); longValue |= ((logData.secLogSampleInterval & 0xFF00) >> 8) ; - MainActivity.mCs108Library4a.appendToLog(String.format("longValue = %08x, minLogStartDelay = %04x, secLogSampleInterval = %04x", longValue, logData.minLogStartDelay, logData.secLogSampleInterval)); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: " + String.format("longValue = %08x, minLogStartDelay = %04x, secLogSampleInterval = %04x", longValue, logData.minLogStartDelay, logData.secLogSampleInterval)); MainActivity.mCs108Library4a.set_fdWriteMem(8, 4, longValue); //rtc_cnt_limit: default as 0x00000003 doAccessTask(Cs108Connector.HostCommands.CMD_FDM_WRMEM); break; @@ -932,7 +946,7 @@ else if (operationReadTemperature) { customPopupWindow.popupStart(strMessage, false); break; case 2: - MainActivity.mCs108Library4a.appendToLog("accessResult = " + accessTask.accessResult); + if (DEBUG) MainActivity.mCs108Library4a.appendToLog("accessResult = " + accessTask.accessResult); strMessage = accessTask.accessResult; CheckBox checkBoxGetTemperatureResultType = (CheckBox) getActivity().findViewById(R.id.accessFDGetTemperatureResultType); if (operationRead) { diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessImpinjFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessImpinjFragment.java index 9bc3e65..646a182 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessImpinjFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessImpinjFragment.java @@ -45,6 +45,7 @@ class Data2Restore { @Override public void onDestroy() { + MainActivity.mCs108Library4a.abortOperation(); MainActivity.mCs108Library4a.setSameCheck(true); MainActivity.mCs108Library4a.setTagGroup(MainActivity.mCs108Library4a.getQuerySelect(), data2Restore.iQuerySession, data2Restore.iQueryTarget); MainActivity.mCs108Library4a.setTagDelay((byte)data2Restore.tagDelay); 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 f4c3824..3f3b3d6 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessMicronFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessMicronFragment.java @@ -238,10 +238,15 @@ public void onClick(View v) { } }); - setupTagID(); MainActivity.mCs108Library4a.setSameCheck(false); } + @Override + public void onResume() { + super.onResume(); + setupTagID(); + } + @Override public void onDestroy() { if (accessTask != null) accessTask.cancel(true); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcode8Fragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcode8Fragment.java index b57d476..73082d9 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcode8Fragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcode8Fragment.java @@ -11,7 +11,7 @@ public class AccessUcode8Fragment extends CommonFragment { final boolean DEBUG = true; - RadioButton radioButtonSelectEpc, radioButtonSelectEpcTid, radioButtonSelectEpcBrand; + RadioButton radioButtonSelectEpc, radioButtonSelectEpcTid, radioButtonSelectEpcBrand, radioButtonSelectEpcBrandTidCheck; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -25,16 +25,14 @@ public void onActivityCreated(Bundle savedInstanceState) { radioButtonSelectEpc = (RadioButton) getActivity().findViewById(R.id.accessUC8SelectEpc); radioButtonSelectEpcTid = (RadioButton) getActivity().findViewById(R.id.accessUC8SelectEpcTid); - radioButtonSelectEpcBrand = (RadioButton) getActivity().findViewById(R.id.accessUC8SelectEpcBrand); + radioButtonSelectEpcBrand = (RadioButton) getActivity().findViewById(R.id.accessUC8SelectEpcBrand); radioButtonSelectEpcBrand.setChecked(true); + radioButtonSelectEpcBrandTidCheck = (RadioButton) getActivity().findViewById(R.id.accessUC8SelectEpcBrandTidCheck); MainActivity.mCs108Library4a.setSameCheck(false); } @Override public void onDestroy() { - MainActivity.mCs108Library4a.setSameCheck(true); - MainActivity.mCs108Library4a.setInvBrandId(false); - MainActivity.mCs108Library4a.restoreAfterTagSelect(); super.onDestroy(); } @@ -47,7 +45,7 @@ public void setUserVisibleHint(boolean isVisibleToUser) { MainActivity.mCs108Library4a.appendToLog("AccessUcode8Fragment is now VISIBLE"); // setNotificationListener(); } else { - if (radioButtonSelectEpc != null && radioButtonSelectEpcTid != null && radioButtonSelectEpcBrand != null) { + if (radioButtonSelectEpc != null && radioButtonSelectEpcTid != null && radioButtonSelectEpcBrand != null && radioButtonSelectEpcBrandTidCheck != null) { if (radioButtonSelectEpc.isChecked()) { MainActivity.mCs108Library4a.appendToLog("Selected EPC"); MainActivity.mDid = "E2806894A"; @@ -60,6 +58,10 @@ public void setUserVisibleHint(boolean isVisibleToUser) { MainActivity.mCs108Library4a.appendToLog("Selected EPC+BRAND"); MainActivity.mDid = "E2806894C"; } + if (radioButtonSelectEpcBrandTidCheck.isChecked()) { + MainActivity.mCs108Library4a.appendToLog("Selected EPC+BRAND"); + MainActivity.mDid = "E2806894d"; + } } userVisibleHint = false; MainActivity.mCs108Library4a.appendToLog("AccessUcode8Fragment is now INVISIBLE"); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java index 93e281b..c682526 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java @@ -247,14 +247,20 @@ public void onClick(View v) { MainActivity.mCs108Library4a.getAuthenticateReplyLength(); MainActivity.mCs108Library4a.getUntraceableEpcLength(); - setupTagID(); MainActivity.mCs108Library4a.setSameCheck(false); } + @Override + public void onResume() { + super.onResume(); + setupTagID(); + } + @Override public void onDestroy() { if (accessTask != null) accessTask.cancel(true); MainActivity.mCs108Library4a.setSameCheck(true); + //MainActivity.mCs108Library4a.appendToLog("onDestroy"); super.onDestroy(); } @@ -280,11 +286,16 @@ public AccessUcodeFragment() { void setupTagID() { ReaderDevice tagSelected = MainActivity.tagSelected; + MainActivity.mCs108Library4a.appendToLog("Start with tagSelected = " + (tagSelected == null ? "NULL" : (tagSelected.getSelected() + ", " + tagSelected.getAddress()))); boolean bSelected = false; if (tagSelected != null) { if (tagSelected.getSelected() == true) { bSelected = true; - if (editTextRWTagID != null) editTextRWTagID.setText(tagSelected.getAddress()); + //MainActivity.mCs108Library4a.appendToLog("editTextRWTagID = " + (editTextRWTagID == null ? "NULL" : "VALID")); + if (editTextRWTagID != null) { + //MainActivity.mCs108Library4a.appendToLog("editTextRWTagID.setTTEXT " + tagSelected.getAddress()); + editTextRWTagID.setText(tagSelected.getAddress()); + } String stringDetail = tagSelected.getDetails(); int indexUser = stringDetail.indexOf("USER="); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessXerxesLoggerFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessXerxesLoggerFragment.java index 84c7513..505d01c 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessXerxesLoggerFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessXerxesLoggerFragment.java @@ -153,10 +153,15 @@ public void onClick(View v) { } }); - setupTagID(); MainActivity.mCs108Library4a.setSameCheck(false); } + @Override + public void onResume() { + super.onResume(); + setupTagID(); + } + @Override public void onDestroy() { if (accessTask != null) accessTask.cancel(true); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AuraSenseFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AuraSenseFragment.java index adb4d1c..eebced5 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AuraSenseFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AuraSenseFragment.java @@ -106,9 +106,11 @@ public void onDestroyView() { @Override public void onDestroy() { - MainActivity.mCs108Library4a.setSelectCriteriaDisable(1); mAdapter.fragment0.onDestroy(); mAdapter.fragment1.onDestroy(); + MainActivity.mCs108Library4a.setSelectCriteriaDisable(1); + MainActivity.mCs108Library4a.setSameCheck(true); + MainActivity.mCs108Library4a.restoreAfterTagSelect(); super.onDestroy(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java index b440999..a04bec1 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java @@ -119,15 +119,15 @@ public void onDestroyView() { @Override public void onDestroy() { + if (mAdapter.fragment0 != null) if (mAdapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment0.onDestroy(); + if (mAdapter.fragment1 != null) if (mAdapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment1.onDestroy(); + if (mAdapter.fragment2 != null) if (mAdapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment2.onDestroy(); + if (mAdapter.fragment3 != null) if (mAdapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment3.onDestroy(); if (MainActivity.selectFor != -1) { MainActivity.mCs108Library4a.setSelectCriteriaDisable(1); MainActivity.mCs108Library4a.setSelectCriteriaDisable(2); MainActivity.selectFor = -1; } - if (mAdapter.fragment0 != null) if (mAdapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment0.onDestroy(); - if (mAdapter.fragment1 != null) if (mAdapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment1.onDestroy(); - if (mAdapter.fragment2 != null) if (mAdapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment2.onDestroy(); - if (mAdapter.fragment3 != null) if (mAdapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment3.onDestroy(); MainActivity.mCs108Library4a.restoreAfterTagSelect(); super.onDestroy(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java index 0653795..c664c9b 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java @@ -18,7 +18,7 @@ public class ColdChainFragment extends CommonFragment { private ViewPager viewPager; ColdChainAdapter mAdapter; - private String[] tabs = {"Scan", "Configuration"}; + private String[] tabs = {"Select Tag", "One-shot", "Logging"}; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -28,7 +28,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment1; + InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment0; switch (item.getItemId()) { case R.id.menuAction_1: fragment1.clearTagsList(); @@ -81,36 +81,41 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + if (mAdapter.fragment0 != null) mAdapter.fragment0.onPause(); + if (mAdapter.fragment1 != null) mAdapter.fragment1.onPause(); + if (mAdapter.fragment2 != null) mAdapter.fragment2.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + if (mAdapter.fragment0 != null) mAdapter.fragment0.onStop(); + if (mAdapter.fragment1 != null) mAdapter.fragment1.onStop(); + if (mAdapter.fragment2 != null) mAdapter.fragment2.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroyView(); + if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroyView(); + if (mAdapter.fragment2 != null) mAdapter.fragment2.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroy(); + if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroy(); + if (mAdapter.fragment2 != null) mAdapter.fragment2.onDestroy(); super.onDestroy(); } @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + if (mAdapter.fragment0 != null) mAdapter.fragment0.onDetach(); + if (mAdapter.fragment1 != null) mAdapter.fragment1.onDetach(); + if (mAdapter.fragment2 != null) mAdapter.fragment2.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java index bb40b66..f511bb4 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java @@ -41,11 +41,14 @@ public void onActivityCreated(Bundle savedInstanceState) { actionBar.setIcon(android.R.drawable.ic_menu_save); actionBar.setTitle(R.string.title_activity_home); } - mHandler.post(runnableConfiguring); + MainActivity.mDid = null; + if (MainActivity.sharedObjects.versioinWarningShown == false) + mHandler.post(runnableConfiguring); } @Override public void onStop() { + stopProgressDialog(); mHandler.removeCallbacks(runnableConfiguring); super.onStop(); } @@ -61,9 +64,9 @@ void stopProgressDialog() { Runnable runnableConfiguring = new Runnable() { @Override public void run() { - if (DEBUG) MainActivity.mCs108Library4a.appendToLog("AAA: runnableConfiguring(): mrfidToWriteSize = " + MainActivity.mCs108Library4a.mrfidToWriteSize()); + if (true) MainActivity.mCs108Library4a.appendToLog("AAA: runnableConfiguring(): mrfidToWriteSize = " + MainActivity.mCs108Library4a.mrfidToWriteSize()); boolean progressShown = false; - if (progressDialog != null) if (progressDialog.isShowing()) progressShown = true; + if (progressDialog != null) { if (progressDialog.isShowing()) progressShown = true; } if (MainActivity.mCs108Library4a.isBleConnected() == false) { if (progressShown) { stopProgressDialog(); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java index 9594816..a4a3818 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java @@ -269,7 +269,10 @@ public void onDestroy() { if (inventoryRfidTask != null) { if (DEBUG) MainActivity.mCs108Library4a.appendToLog("InventoryRfidiMultiFragment().onDestory(): VALID inventoryRfidTask"); inventoryRfidTask.taskCancelReason = InventoryRfidTask.TaskCancelRReason.DESTORY; + MainActivity.mCs108Library4a.abortOperation(); //added in case inventoryRiidTask is removed } + MainActivity.mCs108Library4a.setSameCheck(true); + MainActivity.mCs108Library4a.setInvBrandId(false); resetSelectData(); MainActivity.mCs108Library4a.setVibrateTime(vibrateTimeBackup); if (DEBUG) MainActivity.mCs108Library4a.appendToLog("InventoryRfidiMultiFragment().onDestory(): onDestory()"); @@ -371,6 +374,7 @@ void startInventoryTask() { int extra1Offset = 0, extra2Offset = 0; String mDid = this.mDid; + MainActivity.mCs108Library4a.appendToLog("Rin: mDid = " + mDid + ", MainActivity.mDid = " + MainActivity.mDid); if (mDid != null) { if (MainActivity.mDid != null && mDid.length() == 0) mDid = MainActivity.mDid; extra2Bank = 2; @@ -397,6 +401,13 @@ void startInventoryTask() { extra2Bank = 3; extra2Offset = 0x120; extra2Count = 1; + } else if (mDid.indexOf("E280B") == 0) { + extra1Bank = 3; + extra1Offset = 188; + extra1Count = 2; + //extra2Bank = 3; + //extra2Offset = 0x10d; + //extra2Count = 1; } else if (mDid.matches("E282402")) { extra1Bank = 0; extra1Offset = 11; @@ -443,8 +454,8 @@ void startInventoryTask() { } } else if (mDid.matches("E282403")) { if (MainActivity.selectFor != 3) { - MainActivity.mCs108Library4a.setSelectCriteria(1, true, 4, 2, 0, 3, 0xE0, ""); - MainActivity.mCs108Library4a.setSelectCriteria(2, true, 4, 2, 0, 3, 0xD0, "1F"); + MainActivity.mCs108Library4a.setSelectCriteria(1, true, 4, 2, 0, 3, 0xD0, "1F"); + MainActivity.mCs108Library4a.setSelectCriteria(2, true, 4, 2, 5, 3, 0xE0, ""); MainActivity.selectFor = 3; } } else if (mDid.matches("E282405")) { @@ -471,16 +482,18 @@ void startInventoryTask() { } else if (MainActivity.mDid.matches("E2806894B")) { Log.i(TAG, "HelloK: Find E2806894B"); MainActivity.mCs108Library4a.setInvBrandId(false); - MainActivity.mCs108Library4a.setSelectCriteria(1, true, 4, 2, 1, 0x203, "1", true); - if (false) bNeedSelectedTagByTID = false; - } else if (MainActivity.mDid.matches("E2806894C")) { - Log.i(TAG, "HelloK: Find E2806894C"); + MainActivity.mCs108Library4a.setSelectCriteria(0, true, 4, 0, 1, 0x203, "1", true); + MainActivity.mCs108Library4a.setSelectCriteria(1, true, 4, 2, 2, 0, "E2806894", false); + if (true) bNeedSelectedTagByTID = false; + } else if (MainActivity.mDid.matches("E2806894C") || MainActivity.mDid.matches("E2806894d")) { + Log.i(TAG, "HelloK: Find " + MainActivity.mDid); MainActivity.mCs108Library4a.setInvBrandId(true); - MainActivity.mCs108Library4a.setSelectCriteria(1, true, 4, 2, 1, 0x204, "1", true); - if (false) bNeedSelectedTagByTID = false; + MainActivity.mCs108Library4a.setSelectCriteria(0, true, 4, 0, 1, 0x204, "1", true); + MainActivity.mCs108Library4a.setSelectCriteria(1, true, 4, 2, 2, 0, "E2806894", false); + if (true) bNeedSelectedTagByTID = false; } } else if (mDid.indexOf("E28011") == 0) bNeedSelectedTagByTID = false; - Log.i(TAG, "HelloK: going to setSelectedTagByTID with mDid = " + mDid + " with extra1Bank = " + extra1Bank + ", extra2Bank = " + extra2Bank + ", bNeedSelectedTagByTID = " + bNeedSelectedTagByTID + ", bMultiBank = " + bMultiBank); + Log.i(TAG, "BleStreamOut: going to setSelectedTagByTID with mDid = " + mDid + " with extra1Bank = " + extra1Bank + ", extra2Bank = " + extra2Bank + ", bNeedSelectedTagByTID = " + bNeedSelectedTagByTID + ", checkBoxFilterFdTag = " + checkBoxFilterFdTag.isChecked() + ", bMultiBank = " + bMultiBank); if (bNeedSelectedTagByTID) { if (checkBoxFilterFdTag.isChecked()) MainActivity.mCs108Library4a.setSelectedTagByTID(mDid, -1); else { @@ -508,12 +521,14 @@ void startInventoryTask() { } if (bMultiBank == false) { + MainActivity.mCs108Library4a.restoreAfterTagSelect(); MainActivity.mCs108Library4a.startOperation(Cs108Library4A.OperationTypes.TAG_INVENTORY_COMPACT); inventoryRfidTask = new InventoryRfidTask(getContext(), -1, -1, 0, 0, 0, 0, false, MainActivity.mCs108Library4a.getInventoryBeep(), MainActivity.sharedObjects.tagsList, readerListAdapter, null, null, rfidRunTime, null, rfidVoltageLevel, rfidYieldView, button, rfidRateView); } else { + boolean inventoryUcode8_bc = mDid != null && mDid.matches("E2806894") && MainActivity.mDid != null && (MainActivity.mDid.matches("E2806894B") || MainActivity.mDid.matches("E2806894C")); if ((extra1Bank != -1 && extra1Count != 0) || (extra2Bank != -1 && extra2Count != 0)) { if (extra1Bank == -1 || extra1Count == 0) { extra1Bank = extra2Bank; @@ -525,15 +540,26 @@ void startInventoryTask() { } if (extra1Bank == 1) extra1Offset += 2; if (extra2Bank == 1) extra2Offset += 2; - if (true) { + MainActivity.mCs108Library4a.appendToLog("HelloK: mDid = " + mDid + ", MainActivity.mDid = " + MainActivity.mDid); + if (inventoryUcode8_bc == false) { + MainActivity.mCs108Library4a.appendToLog("BleStreamOut: Set Multibank"); MainActivity.mCs108Library4a.setTagRead(extra2Count != 0 && extra2Count != 0 ? 2 : 1); MainActivity.mCs108Library4a.setAccessBank(extra1Bank, extra2Bank); MainActivity.mCs108Library4a.setAccessOffset(extra1Offset, extra2Offset); MainActivity.mCs108Library4a.setAccessCount(extra1Count, extra2Count); + needResetData = true; + } else if (needResetData) { + MainActivity.mCs108Library4a.setTagRead(0); + MainActivity.mCs108Library4a.setAccessBank(1); + MainActivity.mCs108Library4a.setAccessOffset(0); + MainActivity.mCs108Library4a.setAccessCount(0); + needResetData = false; } - needResetData = true; } else resetSelectData(); MainActivity.mCs108Library4a.appendToLog("startInventoryTask: going to startOperation"); + if (inventoryUcode8_bc) { + MainActivity.mCs108Library4a.startOperation(Cs108Library4A.OperationTypes.TAG_INVENTORY_COMPACT); + } else MainActivity.mCs108Library4a.startOperation(Cs108Library4A.OperationTypes.TAG_INVENTORY); inventoryRfidTask = new InventoryRfidTask(getContext(), extra1Bank, extra2Bank, extra1Count, extra2Count, extra1Offset, extra2Offset, false, MainActivity.mCs108Library4a.getInventoryBeep(), diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java index ec802b5..127b080 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java @@ -103,13 +103,13 @@ public void onDestroyView() { @Override public void onDestroy() { + if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroy(); + if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroy(); if (MainActivity.selectFor != -1) { MainActivity.mCs108Library4a.setSelectCriteriaDisable(1); MainActivity.mCs108Library4a.setSelectCriteriaDisable(2); MainActivity.selectFor = -1; } - if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroy(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroy(); MainActivity.mCs108Library4a.restoreAfterTagSelect(); super.onDestroy(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java index 1aa921b..bf4da4b 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java @@ -1,15 +1,18 @@ package com.csl.cs108ademoapp.fragments; +import android.inputmethodservice.Keyboard; import android.os.Bundle; import android.os.Handler; import android.text.InputFilter; 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.LinearLayout; import android.widget.Spinner; import android.widget.TableRow; import android.widget.TextView; @@ -18,12 +21,14 @@ import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; import com.csl.cs108ademoapp.SettingTask; +import com.csl.cs108library4a.Cs108Library4A; public class SettingAdminFragment extends CommonFragment { private CheckBox checkBoxTriggerReporting, checkBoxInventoryBeep, checkBoxInventoryVibrate, checkBoxSaveFileEnable, checkBoxSaveCloudEnable, checkBoxSaveNewCloudEnable, checkBoxSaveAllCloudEnable; + private CheckBox checkBoxCsvColumnResBank, checkBoxCsvColumnEpcBank, checkBoxCsvColumnTidBank, checkBoxCsvColumnUserBank, checkBoxCsvColumnPhase, checkBoxCsvColumnChannel, checkBoxCsvColumnTime, checkBoxCsvColumnTimeZone, checkBoxCsvColumnLocation, checkBoxCsvColumnDirection, checkBoxCsvColumnOthers; private EditText editTextDeviceName, editTextCycleDelay, editTextTriggerReportingCount, editTextBeepCount, editTextVibrateTime, editTextVibrateWindow, editTextServer, editTextServerTimeout; private TextView textViewReaderModel; - private Spinner spinnerQueryBattery, spinnerQueryRssi, spinnerQueryVibrateMode; + private Spinner spinnerQueryBattery, spinnerQueryRssi, spinnerQueryVibrateMode, spinnerSavingFormat; private Button buttonCSLServer, button; final boolean sameCheck = true; @@ -32,6 +37,8 @@ public class SettingAdminFragment extends CommonFragment { int batteryDisplaySelect = -1; int rssiDisplaySelect = -1; int vibrateModeSelect = -1; + int savingFormatSelect = -1; + int csvColumnSelect = -1; String deviceName = ""; long cycleDelay = -1; long cycleDelayMin = 0; long cycleDelayMax = 2000; int iBeepCount = -1; int iBeepCountMin = 1; int iBeepCountMax = 100; @@ -83,6 +90,44 @@ public void onActivityCreated(Bundle savedInstanceState) { spinnerQueryVibrateMode.setAdapter(targetAdapter); } + spinnerSavingFormat = (Spinner) getActivity().findViewById(R.id.settingAdminSavingFormat); + { + ArrayAdapter targetAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.admin_savingformat_options, R.layout.custom_spinner_layout); + targetAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinnerSavingFormat.setAdapter(targetAdapter); + spinnerSavingFormat.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + LinearLayout linearLayout = (LinearLayout) getActivity().findViewById(R.id.settingAdminCSVColumnSelectLayout); + switch (i) { + case 1: + linearLayout.setVisibility(View.VISIBLE); + break; + default: + linearLayout.setVisibility(View.GONE); + break; + } + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + } + + checkBoxCsvColumnResBank = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnResBank); + checkBoxCsvColumnEpcBank = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnEpcBank); + checkBoxCsvColumnTidBank = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnTidBank); + checkBoxCsvColumnUserBank = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnUserBank); + checkBoxCsvColumnPhase = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnPhase); + checkBoxCsvColumnChannel = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnChannel); + checkBoxCsvColumnTime = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnTime); + checkBoxCsvColumnTimeZone = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnTimeZone); + checkBoxCsvColumnLocation = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnLocation); + checkBoxCsvColumnDirection = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnDirection); + checkBoxCsvColumnOthers = (CheckBox) getActivity().findViewById(R.id.settingAdminCSVColumnOthers); + TextView textViewAdminCycleDelayLabel = (TextView) getActivity().findViewById(R.id.settingAdminCycleDelayLabel); String stringAdminCycleDelayLabel = textViewAdminCycleDelayLabel.getText().toString(); stringAdminCycleDelayLabel += "(" + String.valueOf(cycleDelayMin) + "-" + String.valueOf(cycleDelayMax) + "ms)"; @@ -253,6 +298,21 @@ public void onClick(View v) { batteryDisplaySelect = spinnerQueryBattery.getSelectedItemPosition(); rssiDisplaySelect = spinnerQueryRssi.getSelectedItemPosition(); vibrateModeSelect = spinnerQueryVibrateMode.getSelectedItemPosition(); + savingFormatSelect = spinnerSavingFormat.getSelectedItemPosition(); + { + csvColumnSelect = 0; + if (checkBoxCsvColumnResBank.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.RESERVE_BANK.ordinal()); + if (checkBoxCsvColumnEpcBank.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.EPC_BANK.ordinal()); + if (checkBoxCsvColumnTidBank.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.TID_BANK.ordinal()); + if (checkBoxCsvColumnUserBank.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.USER_BANK.ordinal()); + if (checkBoxCsvColumnPhase.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.PHASE.ordinal()); + if (checkBoxCsvColumnChannel.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.CHANNEL.ordinal()); + if (checkBoxCsvColumnTime.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.TIME.ordinal()); + if (checkBoxCsvColumnTimeZone.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.TIMEZONE.ordinal()); + if (checkBoxCsvColumnLocation.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.LOCATION.ordinal()); + if (checkBoxCsvColumnDirection.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.DIRECTION.ordinal()); + if (checkBoxCsvColumnOthers.isChecked()) csvColumnSelect |= (0x01 << Cs108Library4A.CsvColumn.OTHERS.ordinal()); + } if (editTextCycleDelay != null) cycleDelay = Long.parseLong(editTextCycleDelay.getText().toString()); if (editTextTriggerReportingCount != null) sTriggerCount = Short.parseShort(editTextTriggerReportingCount.getText().toString()); if (editTextBeepCount != null) iBeepCount = Integer.parseInt(editTextBeepCount.getText().toString()); @@ -317,6 +377,21 @@ public void run() { spinnerQueryBattery.setSelection(MainActivity.mCs108Library4a.getBatteryDisplaySetting()); spinnerQueryRssi.setSelection(MainActivity.mCs108Library4a.getRssiDisplaySetting()); spinnerQueryVibrateMode.setSelection(MainActivity.mCs108Library4a.getVibrateModeSetting()); + spinnerSavingFormat.setSelection(MainActivity.mCs108Library4a.getSavingFormatSetting()); + { + int csvColumnSelect = MainActivity.mCs108Library4a.getCsvColumnSelectSetting(); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.RESERVE_BANK.ordinal())) != 0) checkBoxCsvColumnResBank.setChecked(true); else checkBoxCsvColumnResBank.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.EPC_BANK.ordinal())) != 0) checkBoxCsvColumnEpcBank.setChecked(true); else checkBoxCsvColumnEpcBank.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TID_BANK.ordinal())) != 0) checkBoxCsvColumnTidBank.setChecked(true); else checkBoxCsvColumnTidBank.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.USER_BANK.ordinal())) != 0) checkBoxCsvColumnUserBank.setChecked(true); else checkBoxCsvColumnUserBank.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.PHASE.ordinal())) != 0) checkBoxCsvColumnPhase.setChecked(true); else checkBoxCsvColumnPhase.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.CHANNEL.ordinal())) != 0) checkBoxCsvColumnChannel.setChecked(true); else checkBoxCsvColumnChannel.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TIME.ordinal())) != 0) checkBoxCsvColumnTime.setChecked(true); else checkBoxCsvColumnTime.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.TIMEZONE.ordinal())) != 0) checkBoxCsvColumnTimeZone.setChecked(true); else checkBoxCsvColumnTimeZone.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.LOCATION.ordinal())) != 0) checkBoxCsvColumnLocation.setChecked(true); else checkBoxCsvColumnLocation.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.DIRECTION.ordinal())) != 0) checkBoxCsvColumnDirection.setChecked(true); else checkBoxCsvColumnDirection.setChecked(false); + if ((csvColumnSelect & (0x01 << Cs108Library4A.CsvColumn.OTHERS.ordinal())) != 0) checkBoxCsvColumnOthers.setChecked(true); else checkBoxCsvColumnOthers.setChecked(false); + } if (editTextCycleDelay != null) editTextCycleDelay.setText(String.valueOf(MainActivity.mCs108Library4a.getCycleDelay())); if (editTextTriggerReportingCount != null) { int triggerReportingCount = MainActivity.mCs108Library4a.getTriggerReportingCount(); @@ -373,6 +448,16 @@ void settingUpdate() { if (MainActivity.mCs108Library4a.setVibrateModeSetting(vibrateModeSelect) == false) invalidRequest = true; } + if (invalidRequest == false && (MainActivity.mCs108Library4a.getSavingFormatSetting() != savingFormatSelect || sameCheck == false)) { + sameSetting = false; + if (MainActivity.mCs108Library4a.setSavingFormatSetting(savingFormatSelect) == false) + invalidRequest = true; + } + if (invalidRequest == false && (MainActivity.mCs108Library4a.getCsvColumnSelectSetting() != csvColumnSelect || sameCheck == false)) { + sameSetting = false; + if (MainActivity.mCs108Library4a.setCsvColumnSelectSetting(csvColumnSelect) == false) + invalidRequest = true; + } if (invalidRequest == false && editTextCycleDelay != null) { if (MainActivity.mCs108Library4a.getCycleDelay() != cycleDelay || sameCheck == false) { sameSetting = false; diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java index 5e7d3c1..7e4d1ff 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java @@ -103,9 +103,10 @@ public void onDestroyView() { @Override public void onDestroy() { - MainActivity.mCs108Library4a.setSelectCriteriaDisable(1); mAdapter.fragment0.onDestroy(); mAdapter.fragment1.onDestroy(); + MainActivity.mCs108Library4a.setSelectCriteriaDisable(1); + MainActivity.mCs108Library4a.restoreAfterTagSelect(); super.onDestroy(); } diff --git a/app/src/main/res/layout/fragment_access_coldchain.xml b/app/src/main/res/layout/fragment_access_coldchain.xml index 4f6953b..daec343 100644 --- a/app/src/main/res/layout/fragment_access_coldchain.xml +++ b/app/src/main/res/layout/fragment_access_coldchain.xml @@ -255,7 +255,7 @@ android:id="@+id/accessCCEnableTitle" android:layout_width="wrap_content" style="@style/style_normal_font" - android:text="BAP status: " /> + android:text="BAP mode: " /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +