package echowand.info;

import echowand.util.Constraint;
import echowand.util.ConstraintShort;
import echowand.util.ConstraintUnion;

/**
 * 温度センサのデータ制約を表現する。
 * データの範囲は0xF554 - 0x7FFD (-273.2C - 3276.6C)となる。
 * オーバーフローコードとして0x8000、アンダーフローコードとして0x7FFFが利用される。
 * @author Yoshiki Makino
 */
public class PropertyConstraintTemperature implements Constraint {
    private static final short MIN_VALUE = (short)0xf554;
    private static final short MAX_VALUE = (short)0x7ffd;
    private static final short OVERFLOW = (short)0x8000;
    private static final short UNDERFLOW = (short)0x7fff;
    
    private ConstraintUnion constraint;
    
    /**
     * PropertyConstraintTemperatureを生成する。
     */
    public PropertyConstraintTemperature() {
        ConstraintShort normal = new ConstraintShort(MIN_VALUE, MAX_VALUE);
        
        ConstraintShort overflow = new ConstraintShort(OVERFLOW);
        ConstraintShort underflow = new ConstraintShort(UNDERFLOW);
        ConstraintUnion invalid = new ConstraintUnion(overflow, underflow);
        
        constraint = new ConstraintUnion(normal, invalid);
    }

    @Override
    public boolean isValid(byte[] data) {
        return constraint.isValid(data);
    }
    
    /**
     * PropertyConstraintTemperatureの文字列表現を返す。
     * @return PropertyConstraintTemperatureの文字列表現
     */
    @Override
    public String toString() {
        return constraint.toString();
    }
}

@@ -220,20 +220,20 @@
 %E3%82%B3%E3%83%BC%E3%83%89%E3%81%A8%E3%81%97%E3%81%A60x
-8000
+7FFF
 %E3%80%81%E3%82%A2%E3%83%B3%E3%83%80%E3%83%BC%E3%83%95%E3%83%AD%E3%83%BC
@@ -240,20 +240,20 @@
 %E3%82%B3%E3%83%BC%E3%83%89%E3%81%A8%E3%81%97%E3%81%A60x
-7FFF
+8000
 %E3%81%8C%E5%88%A9%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82%0A
@@ -516,20 +516,20 @@
 short)0x
-8000
+7fff
 ;%0A    pr
@@ -570,28 +570,28 @@
  = (short)0x
-7fff
+8000
 ;%0A    %0A    p

Fix a bug where underflow and overflow values in PropertyConstraintTemperature are incorrect.