OpenECHO
 All Classes Namespaces Files Functions Variables
OdorSensor.java
Go to the documentation of this file.
1 /*
2  * Copyright 2012 Sony Computer Science Laboratories, Inc. <info@kadecot.net>
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.sonycsl.echo.eoj.device.sensor;
17 
25 
26 public abstract class OdorSensor extends DeviceObject {
27 
28  public static final short ECHO_CLASS_CODE = (short)0x0020;
29 
30  public static final byte EPC_DETECTION_THRESHOLD_LEVEL = (byte)0xB0;
31  public static final byte EPC_ODOR_DETECTION_STATUS = (byte)0xB1;
32  public static final byte EPC_MEASURED_ODOR_VALUE = (byte)0xE0;
33 
34  @Override
35  protected void setupPropertyMaps() {
36  super.setupPropertyMaps();
37 
42  }
43 
44  @Override
45  public void onNew() {
46  super.onNew();
47  Echo.getEventListener().onNewOdorSensor(this);
48  }
49 
50  @Override
51  public short getEchoClassCode() {
52  return ECHO_CLASS_CODE;
53  }
54 
79  protected boolean setOperationStatus(byte[] edt) {return false;}
104  protected abstract byte[] getOperationStatus();
127  protected boolean setDetectionThresholdLevel(byte[] edt) {return false;}
150  protected byte[] getDetectionThresholdLevel() {return null;}
173  protected boolean isValidDetectionThresholdLevel(byte[] edt) {
174  if(edt == null || !(edt.length == 1)) return false;
175  return true;
176  }
200  protected byte[] getOdorDetectionStatus() {return null;}
224  protected boolean isValidOdorDetectionStatus(byte[] edt) {
225  if(edt == null || !(edt.length == 1)) return false;
226  return true;
227  }
250  protected abstract byte[] getMeasuredOdorValue();
273  protected boolean isValidMeasuredOdorValue(byte[] edt) {
274  if(edt == null || !(edt.length == 1)) return false;
275  return true;
276  }
277 
278  @Override
279  protected synchronized boolean setProperty(EchoProperty property) {
280  boolean success = super.setProperty(property);
281  if(success) return success;
282 
283  switch(property.epc) {
285  default : return false;
286  }
287  }
288 
289  @Override
290  protected synchronized byte[] getProperty(byte epc) {
291  byte[] edt = super.getProperty(epc);
292  if(edt != null) return edt;
293 
294  switch(epc) {
298  default : return null;
299  }
300  }
301 
302  @Override
303  protected synchronized boolean isValidProperty(EchoProperty property) {
304  boolean valid = super.isValidProperty(property);
305  if(valid) return valid;
306 
307  switch(property.epc) {
310  case EPC_MEASURED_ODOR_VALUE : return isValidMeasuredOdorValue(property.edt);
311  default : return false;
312  }
313  }
314 
315  @Override
316  public Setter set() {
317  return set(true);
318  }
319 
320  @Override
321  public Setter set(boolean responseRequired) {
322  return new Setter(getEchoClassCode(), getInstanceCode()
323  , getNode().getAddressStr(), responseRequired);
324  }
325 
326  @Override
327  public Getter get() {
328  return new Getter(getEchoClassCode(), getInstanceCode()
329  , getNode().getAddressStr());
330  }
331 
332  @Override
333  public Informer inform() {
334  return inform(isSelfObject());
335  }
336 
337  @Override
338  protected Informer inform(boolean multicast) {
339  String address;
340  if(multicast) {
342  } else {
343  address = getNode().getAddressStr();
344  }
345  return new Informer(getEchoClassCode(), getInstanceCode()
346  , address, isSelfObject());
347  }
348 
349  public static class Receiver extends DeviceObject.Receiver {
350 
351  @Override
352  protected boolean onSetProperty(EchoObject eoj, short tid, byte esv,
353  EchoProperty property, boolean success) {
354  boolean ret = super.onSetProperty(eoj, tid, esv, property, success);
355  if(ret) return true;
356 
357  switch(property.epc) {
359  onSetDetectionThresholdLevel(eoj, tid, esv, property, success);
360  return true;
361  default :
362  return false;
363  }
364  }
365 
366  @Override
367  protected boolean onGetProperty(EchoObject eoj, short tid, byte esv,
368  EchoProperty property, boolean success) {
369  boolean ret = super.onGetProperty(eoj, tid, esv, property, success);
370  if(ret) return true;
371 
372  switch(property.epc) {
374  onGetDetectionThresholdLevel(eoj, tid, esv, property, success);
375  return true;
377  onGetOdorDetectionStatus(eoj, tid, esv, property, success);
378  return true;
380  onGetMeasuredOdorValue(eoj, tid, esv, property, success);
381  return true;
382  default :
383  return false;
384  }
385  }
386 
409  protected void onSetDetectionThresholdLevel(EchoObject eoj, short tid, byte esv, EchoProperty property, boolean success) {}
432  protected void onGetDetectionThresholdLevel(EchoObject eoj, short tid, byte esv, EchoProperty property, boolean success) {}
456  protected void onGetOdorDetectionStatus(EchoObject eoj, short tid, byte esv, EchoProperty property, boolean success) {}
479  protected void onGetMeasuredOdorValue(EchoObject eoj, short tid, byte esv, EchoProperty property, boolean success) {}
480  }
481 
482  public static class Setter extends DeviceObject.Setter {
483  public Setter(short dstEchoClassCode, byte dstEchoInstanceCode
484  , String dstEchoAddress, boolean responseRequired) {
485  super(dstEchoClassCode, dstEchoInstanceCode
486  , dstEchoAddress, responseRequired);
487  }
488 
489  @Override
490  public Setter reqSetProperty(byte epc, byte[] edt) {
491  return (Setter)super.reqSetProperty(epc, edt);
492  }
493 
494  @Override
495  public Setter reqSetOperationStatus(byte[] edt) {
496  return (Setter)super.reqSetOperationStatus(edt);
497  }
498  @Override
499  public Setter reqSetInstallationLocation(byte[] edt) {
500  return (Setter)super.reqSetInstallationLocation(edt);
501  }
502  @Override
503  public Setter reqSetCurrentLimitSetting(byte[] edt) {
504  return (Setter)super.reqSetCurrentLimitSetting(edt);
505  }
506  @Override
507  public Setter reqSetPowerSavingOperationSetting(byte[] edt) {
508  return (Setter)super.reqSetPowerSavingOperationSetting(edt);
509  }
510  @Override
511  public Setter reqSetRemoteControlSetting(byte[] edt) {
512  return (Setter)super.reqSetRemoteControlSetting(edt);
513  }
514  @Override
515  public Setter reqSetCurrentTimeSetting(byte[] edt) {
516  return (Setter)super.reqSetCurrentTimeSetting(edt);
517  }
518  @Override
519  public Setter reqSetCurrentDateSetting(byte[] edt) {
520  return (Setter)super.reqSetCurrentDateSetting(edt);
521  }
522  @Override
523  public Setter reqSetPowerLimitSetting(byte[] edt) {
524  return (Setter)super.reqSetPowerLimitSetting(edt);
525  }
526 
549  public Setter reqSetDetectionThresholdLevel(byte[] edt) {
550  reqSetProperty(EPC_DETECTION_THRESHOLD_LEVEL, edt);
551  return this;
552  }
553  }
554 
555  public static class Getter extends DeviceObject.Getter {
556  public Getter(short dstEchoClassCode, byte dstEchoInstanceCode
557  , String dstEchoAddress) {
558  super(dstEchoClassCode, dstEchoInstanceCode
559  , dstEchoAddress);
560  }
561 
562  @Override
563  public Getter reqGetProperty(byte epc) {
564  return (Getter)super.reqGetProperty(epc);
565  }
566 
567  @Override
568  public Getter reqGetOperationStatus() {
569  return (Getter)super.reqGetOperationStatus();
570  }
571  @Override
572  public Getter reqGetInstallationLocation() {
573  return (Getter)super.reqGetInstallationLocation();
574  }
575  @Override
576  public Getter reqGetStandardVersionInformation() {
577  return (Getter)super.reqGetStandardVersionInformation();
578  }
579  @Override
580  public Getter reqGetIdentificationNumber() {
581  return (Getter)super.reqGetIdentificationNumber();
582  }
583  @Override
584  public Getter reqGetMeasuredInstantaneousPowerConsumption() {
585  return (Getter)super.reqGetMeasuredInstantaneousPowerConsumption();
586  }
587  @Override
588  public Getter reqGetMeasuredCumulativePowerConsumption() {
589  return (Getter)super.reqGetMeasuredCumulativePowerConsumption();
590  }
591  @Override
592  public Getter reqGetManufacturersFaultCode() {
593  return (Getter)super.reqGetManufacturersFaultCode();
594  }
595  @Override
596  public Getter reqGetCurrentLimitSetting() {
597  return (Getter)super.reqGetCurrentLimitSetting();
598  }
599  @Override
600  public Getter reqGetFaultStatus() {
601  return (Getter)super.reqGetFaultStatus();
602  }
603  @Override
604  public Getter reqGetFaultDescription() {
605  return (Getter)super.reqGetFaultDescription();
606  }
607  @Override
608  public Getter reqGetManufacturerCode() {
609  return (Getter)super.reqGetManufacturerCode();
610  }
611  @Override
612  public Getter reqGetBusinessFacilityCode() {
613  return (Getter)super.reqGetBusinessFacilityCode();
614  }
615  @Override
616  public Getter reqGetProductCode() {
617  return (Getter)super.reqGetProductCode();
618  }
619  @Override
620  public Getter reqGetProductionNumber() {
621  return (Getter)super.reqGetProductionNumber();
622  }
623  @Override
624  public Getter reqGetProductionDate() {
625  return (Getter)super.reqGetProductionDate();
626  }
627  @Override
628  public Getter reqGetPowerSavingOperationSetting() {
629  return (Getter)super.reqGetPowerSavingOperationSetting();
630  }
631  @Override
632  public Getter reqGetRemoteControlSetting() {
633  return (Getter)super.reqGetRemoteControlSetting();
634  }
635  @Override
636  public Getter reqGetCurrentTimeSetting() {
637  return (Getter)super.reqGetCurrentTimeSetting();
638  }
639  @Override
640  public Getter reqGetCurrentDateSetting() {
641  return (Getter)super.reqGetCurrentDateSetting();
642  }
643  @Override
644  public Getter reqGetPowerLimitSetting() {
645  return (Getter)super.reqGetPowerLimitSetting();
646  }
647  @Override
648  public Getter reqGetCumulativeOperatingTime() {
649  return (Getter)super.reqGetCumulativeOperatingTime();
650  }
651  @Override
652  public Getter reqGetStatusChangeAnnouncementPropertyMap() {
653  return (Getter)super.reqGetStatusChangeAnnouncementPropertyMap();
654  }
655  @Override
656  public Getter reqGetSetPropertyMap() {
657  return (Getter)super.reqGetSetPropertyMap();
658  }
659  @Override
660  public Getter reqGetGetPropertyMap() {
661  return (Getter)super.reqGetGetPropertyMap();
662  }
663 
686  public Getter reqGetDetectionThresholdLevel() {
687  reqGetProperty(EPC_DETECTION_THRESHOLD_LEVEL);
688  return this;
689  }
713  public Getter reqGetOdorDetectionStatus() {
714  reqGetProperty(EPC_ODOR_DETECTION_STATUS);
715  return this;
716  }
739  public Getter reqGetMeasuredOdorValue() {
740  reqGetProperty(EPC_MEASURED_ODOR_VALUE);
741  return this;
742  }
743  }
744 
745  public static class Informer extends DeviceObject.Informer {
746  public Informer(short echoClassCode, byte echoInstanceCode
747  , String dstEchoAddress, boolean isSelfObject) {
748  super(echoClassCode, echoInstanceCode
749  , dstEchoAddress, isSelfObject);
750  }
751 
752  @Override
753  public Informer reqInformProperty(byte epc) {
754  return (Informer)super.reqInformProperty(epc);
755  }
756  @Override
757  public Informer reqInformOperationStatus() {
758  return (Informer)super.reqInformOperationStatus();
759  }
760  @Override
761  public Informer reqInformInstallationLocation() {
762  return (Informer)super.reqInformInstallationLocation();
763  }
764  @Override
765  public Informer reqInformStandardVersionInformation() {
766  return (Informer)super.reqInformStandardVersionInformation();
767  }
768  @Override
769  public Informer reqInformIdentificationNumber() {
770  return (Informer)super.reqInformIdentificationNumber();
771  }
772  @Override
773  public Informer reqInformMeasuredInstantaneousPowerConsumption() {
774  return (Informer)super.reqInformMeasuredInstantaneousPowerConsumption();
775  }
776  @Override
777  public Informer reqInformMeasuredCumulativePowerConsumption() {
778  return (Informer)super.reqInformMeasuredCumulativePowerConsumption();
779  }
780  @Override
781  public Informer reqInformManufacturersFaultCode() {
782  return (Informer)super.reqInformManufacturersFaultCode();
783  }
784  @Override
785  public Informer reqInformCurrentLimitSetting() {
786  return (Informer)super.reqInformCurrentLimitSetting();
787  }
788  @Override
789  public Informer reqInformFaultStatus() {
790  return (Informer)super.reqInformFaultStatus();
791  }
792  @Override
793  public Informer reqInformFaultDescription() {
794  return (Informer)super.reqInformFaultDescription();
795  }
796  @Override
797  public Informer reqInformManufacturerCode() {
798  return (Informer)super.reqInformManufacturerCode();
799  }
800  @Override
801  public Informer reqInformBusinessFacilityCode() {
802  return (Informer)super.reqInformBusinessFacilityCode();
803  }
804  @Override
805  public Informer reqInformProductCode() {
806  return (Informer)super.reqInformProductCode();
807  }
808  @Override
809  public Informer reqInformProductionNumber() {
810  return (Informer)super.reqInformProductionNumber();
811  }
812  @Override
813  public Informer reqInformProductionDate() {
814  return (Informer)super.reqInformProductionDate();
815  }
816  @Override
817  public Informer reqInformPowerSavingOperationSetting() {
818  return (Informer)super.reqInformPowerSavingOperationSetting();
819  }
820  @Override
821  public Informer reqInformRemoteControlSetting() {
822  return (Informer)super.reqInformRemoteControlSetting();
823  }
824  @Override
825  public Informer reqInformCurrentTimeSetting() {
826  return (Informer)super.reqInformCurrentTimeSetting();
827  }
828  @Override
829  public Informer reqInformCurrentDateSetting() {
830  return (Informer)super.reqInformCurrentDateSetting();
831  }
832  @Override
833  public Informer reqInformPowerLimitSetting() {
834  return (Informer)super.reqInformPowerLimitSetting();
835  }
836  @Override
837  public Informer reqInformCumulativeOperatingTime() {
838  return (Informer)super.reqInformCumulativeOperatingTime();
839  }
840  @Override
841  public Informer reqInformStatusChangeAnnouncementPropertyMap() {
842  return (Informer)super.reqInformStatusChangeAnnouncementPropertyMap();
843  }
844  @Override
845  public Informer reqInformSetPropertyMap() {
846  return (Informer)super.reqInformSetPropertyMap();
847  }
848  @Override
849  public Informer reqInformGetPropertyMap() {
850  return (Informer)super.reqInformGetPropertyMap();
851  }
852 
875  public Informer reqInformDetectionThresholdLevel() {
876  reqInformProperty(EPC_DETECTION_THRESHOLD_LEVEL);
877  return this;
878  }
902  public Informer reqInformOdorDetectionStatus() {
903  reqInformProperty(EPC_ODOR_DETECTION_STATUS);
904  return this;
905  }
928  public Informer reqInformMeasuredOdorValue() {
929  reqInformProperty(EPC_MEASURED_ODOR_VALUE);
930  return this;
931  }
932  }
933 
934  public static class Proxy extends OdorSensor {
935  public Proxy(byte instanceCode) {
936  super();
937  mEchoInstanceCode = instanceCode;
938  }
939  @Override
940  public byte getInstanceCode() {
941  return mEchoInstanceCode;
942  }
943  @Override
944  protected byte[] getOperationStatus() {return null;}
945  @Override
946  protected boolean setInstallationLocation(byte[] edt) {return false;}
947  @Override
948  protected byte[] getInstallationLocation() {return null;}
949  @Override
950  protected byte[] getStandardVersionInformation() {return null;}
951  @Override
952  protected byte[] getFaultStatus() {return null;}
953  @Override
954  protected byte[] getManufacturerCode() {return null;}
955  @Override
956  protected byte[] getMeasuredOdorValue() {return null;}
957  }
958 
959  public static Setter setG() {
960  return setG((byte)0);
961  }
962 
963  public static Setter setG(byte instanceCode) {
964  return setG(instanceCode, true);
965  }
966 
967  public static Setter setG(boolean responseRequired) {
968  return setG((byte)0, responseRequired);
969  }
970 
971  public static Setter setG(byte instanceCode, boolean responseRequired) {
972  return new Setter(ECHO_CLASS_CODE, instanceCode
973  , EchoSocket.MULTICAST_ADDRESS, responseRequired);
974  }
975 
976  public static Getter getG() {
977  return getG((byte)0);
978  }
979 
980  public static Getter getG(byte instanceCode) {
981  return new Getter(ECHO_CLASS_CODE, instanceCode
983  }
984 
985  public static Informer informG() {
986  return informG((byte)0);
987  }
988 
989  public static Informer informG(byte instanceCode) {
990  return new Informer(ECHO_CLASS_CODE, instanceCode
991  , EchoSocket.MULTICAST_ADDRESS, false);
992  }
993 
994 }
synchronized boolean isValidProperty(EchoProperty property)
static Informer informG(byte instanceCode)
static Getter getG(byte instanceCode)
final void removeSetProperty(byte epc)
Definition: EchoObject.java:98
final void addStatusChangeAnnouncementProperty(byte epc)
Definition: EchoObject.java:71
final void addGetProperty(byte epc)
static Setter setG(byte instanceCode)
static Setter setG(boolean responseRequired)
static Setter setG(byte instanceCode, boolean responseRequired)
synchronized byte[] getProperty(byte epc)
synchronized boolean setProperty(EchoProperty property)
abstract boolean setInstallationLocation(byte[] edt)
static final String MULTICAST_ADDRESS
Definition: EchoSocket.java:53
Setter set(boolean responseRequired)