diff --git a/src/main/java/net/irext/decode/service/businesslogic/DecodeLogic.java b/src/main/java/net/irext/decode/service/businesslogic/DecodeLogic.java index 7a9e1ea..e3ba88d 100644 --- a/src/main/java/net/irext/decode/service/businesslogic/DecodeLogic.java +++ b/src/main/java/net/irext/decode/service/businesslogic/DecodeLogic.java @@ -1,8 +1,10 @@ package net.irext.decode.service.businesslogic; import com.squareup.okhttp.*; +import net.irext.decode.sdk.bean.TemperatureRange; import net.irext.decode.service.cache.IDecodeSessionRepository; import net.irext.decode.service.cache.IIRBinaryRepository; +import net.irext.decode.service.model.ACParameters; import net.irext.decode.service.model.RemoteIndex; import net.irext.decode.service.utils.FileUtil; import net.irext.decode.service.utils.LoggerUtil; @@ -28,6 +30,7 @@ import java.security.MessageDigest; * Revision log: * 2018-12-08: created by strawmanbobi */ +@SuppressWarnings("Duplicates") public class DecodeLogic { private static final String TAG = DecodeLogic.class.getSimpleName(); @@ -96,7 +99,8 @@ public class DecodeLogic { return null; } - public int[] decode(RemoteIndex remoteIndex, ACStatus acStatus, int keyCode, int changeWindDirection) { + public int[] decode(RemoteIndex remoteIndex, ACStatus acStatus, + int keyCode, int changeWindDirection) { int[] decoded = null; if (null != remoteIndex) { int categoryId = remoteIndex.getCategoryId(); @@ -113,6 +117,34 @@ public class DecodeLogic { return null; } + public ACParameters getACParameters(RemoteIndex remoteIndex, int mode) { + if (null != remoteIndex) { + ACParameters acParameters = new ACParameters(); + int categoryId = remoteIndex.getCategoryId(); + int subCate = remoteIndex.getSubCate(); + byte[] binaryContent = remoteIndex.getBinaries(); + IRDecode irDecode = IRDecode.getInstance(); + int ret = irDecode.openBinary(categoryId, subCate, binaryContent, binaryContent.length); + if (0 == ret) { + int []supportedModes = irDecode.getACSupportedMode(); + acParameters.setSupportedModes(supportedModes); + if (1 == supportedModes[mode]) { + // if this mode is really supported by this AC, get other parameters + TemperatureRange temperatureRange = irDecode.getTemperatureRange(mode); + int[] supportedWindSpeed = irDecode.getACSupportedWindSpeed(mode); + int[] supportedSwing = irDecode.getACSupportedSwing(mode); + acParameters.setTempMax(temperatureRange.getTempMax()); + acParameters.setTempMin(temperatureRange.getTempMin()); + acParameters.setSupportedWindSpeed(supportedWindSpeed); + acParameters.setSupportedSwing(supportedSwing); + } + } + irDecode.closeBinary(); + return acParameters; + } + return null; + } + public void close(IDecodeSessionRepository decodeSessionRepository, String sessionId) { decodeSessionRepository.delete(sessionId); } diff --git a/src/main/java/net/irext/decode/service/model/ACParameters.java b/src/main/java/net/irext/decode/service/model/ACParameters.java new file mode 100644 index 0000000..6daa05f --- /dev/null +++ b/src/main/java/net/irext/decode/service/model/ACParameters.java @@ -0,0 +1,72 @@ +package net.irext.decode.service.model; + +/** + * Filename: ACParameters.java + * Revised: Date: 2019-02-14 + * Revision: Revision: 1.0 + *
+ * Description: AC parameters entity + *
+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +public class ACParameters { + private int tempMin; + private int tempMax; + private int [] supportedModes; + private int []supportedWindSpeed; + private int []supportedSwing; + + public ACParameters(int tempMin, int tempMax, int[] supportedModes, + int[] supportedWindSpeed, int[] supportedSwing) { + this.tempMin = tempMin; + this.tempMax = tempMax; + this.supportedModes = supportedModes; + this.supportedWindSpeed = supportedWindSpeed; + this.supportedSwing = supportedSwing; + } + + public ACParameters() { + + } + + public int getTempMin() { + return tempMin; + } + + public void setTempMin(int tempMin) { + this.tempMin = tempMin; + } + + public int getTempMax() { + return tempMax; + } + + public void setTempMax(int tempMax) { + this.tempMax = tempMax; + } + + public int[] getSupportedModes() { + return supportedModes; + } + + public void setSupportedModes(int[] supportedModes) { + this.supportedModes = supportedModes; + } + + public int[] getSupportedWindSpeed() { + return supportedWindSpeed; + } + + public void setSupportedWindSpeed(int[] supportedWindSpeed) { + this.supportedWindSpeed = supportedWindSpeed; + } + + public int[] getSupportedSwing() { + return supportedSwing; + } + + public void setSupportedSwing(int[] supportedSwing) { + this.supportedSwing = supportedSwing; + } +} diff --git a/src/main/java/net/irext/decode/service/request/GetACParametersRequest.java b/src/main/java/net/irext/decode/service/request/GetACParametersRequest.java new file mode 100644 index 0000000..11c2880 --- /dev/null +++ b/src/main/java/net/irext/decode/service/request/GetACParametersRequest.java @@ -0,0 +1,52 @@ +package net.irext.decode.service.request; + +/** + * Filename: GetACParametersRequest.java + * Revised: Date: 2017-05-16 + * Revision: Revision: 1.0 + *
+ * Description: HTTP decode online + *
+ * Revision log: + * 2019-02-14: created by strawmanbobi + */ +public class GetACParametersRequest { + + private int remoteIndexId; + private String sessionId; + private int mode; + + public GetACParametersRequest(int remoteIndexId, String sessionId, int mode) { + this.remoteIndexId = remoteIndexId; + this.sessionId = sessionId; + this.mode = mode; + } + + public GetACParametersRequest() { + + } + + public int getRemoteIndexId() { + return remoteIndexId; + } + + public void setRemoteIndexId(int remoteIndexId) { + this.remoteIndexId = remoteIndexId; + } + + public String getSessionId() { + return sessionId; + } + + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + + public int getMode() { + return mode; + } + + public void setMode(int mode) { + this.mode = mode; + } +} diff --git a/src/main/java/net/irext/decode/service/response/ACParametersResponse.java b/src/main/java/net/irext/decode/service/response/ACParametersResponse.java new file mode 100644 index 0000000..7278458 --- /dev/null +++ b/src/main/java/net/irext/decode/service/response/ACParametersResponse.java @@ -0,0 +1,36 @@ +package net.irext.decode.service.response; + +import net.irext.decode.service.model.ACParameters; + +/** + * Filename: ACParametersResponse.java + * Revised: Date: 2017-05-16 + * Revision: Revision: 1.0 + *
+ * Description: Air conditioner support parameters response + *
+ * Revision log: + * 2019-02-14: created by strawmanbobi + */ +public class ACParametersResponse extends ServiceResponse { + + ACParameters entity; + + public ACParametersResponse(Status status, ACParameters entity) { + super(status); + this.entity = entity; + } + + public ACParametersResponse() { + super(new Status()); + this.entity = null; + } + + public ACParameters getEntity() { + return entity; + } + + public void setEntity(ACParameters entity) { + this.entity = entity; + } +} \ No newline at end of file diff --git a/src/main/java/net/irext/decode/service/service/IRDecodeService.java b/src/main/java/net/irext/decode/service/restapi/IRDecodeService.java similarity index 71% rename from src/main/java/net/irext/decode/service/service/IRDecodeService.java rename to src/main/java/net/irext/decode/service/restapi/IRDecodeService.java index d6c596c..5981379 100644 --- a/src/main/java/net/irext/decode/service/service/IRDecodeService.java +++ b/src/main/java/net/irext/decode/service/restapi/IRDecodeService.java @@ -1,22 +1,21 @@ -package net.irext.decode.service.service; +package net.irext.decode.service.restapi; import net.irext.decode.service.businesslogic.DecodeLogic; import net.irext.decode.service.cache.IDecodeSessionRepository; import net.irext.decode.service.cache.IIRBinaryRepository; import net.irext.decode.service.mapper.RemoteIndexMapper; +import net.irext.decode.service.model.ACParameters; import net.irext.decode.service.model.DecodeSession; import net.irext.decode.service.model.RemoteIndex; import net.irext.decode.service.request.CloseRequest; import net.irext.decode.service.request.DecodeRequest; +import net.irext.decode.service.request.GetACParametersRequest; import net.irext.decode.service.request.OpenRequest; +import net.irext.decode.service.response.*; import net.irext.decode.service.utils.LoggerUtil; import net.irext.decode.service.utils.MD5Util; import net.irext.decode.service.businesslogic.IndexLogic; -import net.irext.decode.service.response.DecodeResponse; -import net.irext.decode.service.response.ServiceResponse; -import net.irext.decode.service.response.Status; -import net.irext.decode.service.response.StringResponse; -import net.irext.decode.service.service.base.AbstractBaseService; +import net.irext.decode.service.restapi.base.AbstractBaseService; import net.irext.decode.sdk.bean.ACStatus; import net.irext.decode.sdk.utils.Constants; import org.springframework.beans.factory.annotation.Autowired; @@ -105,46 +104,51 @@ public class IRDecodeService extends AbstractBaseService { } } + @PostMapping("/get_ac_parameters") + public ACParametersResponse getACParameters(@RequestBody GetACParametersRequest getACParametersRequest) { + try { + int remoteIndexId = getACParametersRequest.getRemoteIndexId(); + String sessionId = getACParametersRequest.getSessionId(); + int mode = getACParametersRequest.getMode(); + + RemoteIndex cachedRemoteIndex = getCachedRemoteIndex(sessionId, remoteIndexId); + ACParametersResponse response = new ACParametersResponse(); + + if (null == cachedRemoteIndex) { + response.setEntity(null); + response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION, + Constants.ERROR_CODE_INVALID_SESSION_TEXT)); + return response; + } + + ACParameters acParameters = DecodeLogic.getInstance().getACParameters(cachedRemoteIndex, mode); + + response.setStatus(new Status(Constants.ERROR_CODE_SUCCESS, Constants.ERROR_CODE_SUCESS_TEXT)); + response.setEntity(acParameters); + return response; + + } catch (Exception e) { + e.printStackTrace(); + return getExceptionResponse(ACParametersResponse.class); + } + } + @PostMapping("/decode") public DecodeResponse irDecode(@RequestBody DecodeRequest decodeRequest) { try { - int indexId = decodeRequest.getRemoteIndexId(); + int remoteIndexId = decodeRequest.getRemoteIndexId(); ACStatus acStatus = decodeRequest.getAcStatus(); int keyCode = decodeRequest.getKeyCode(); int changeWindDir = decodeRequest.getChangeWindDir(); String sessionId = decodeRequest.getSessionId(); - RemoteIndex cachedRemoteIndex = null; + RemoteIndex cachedRemoteIndex = getCachedRemoteIndex(sessionId, remoteIndexId);; DecodeResponse response = new DecodeResponse(); - if (null == sessionId) { - LoggerUtil.getInstance().trace(TAG, "sessionId is not given, abort"); + if (null == cachedRemoteIndex) { response.setEntity(null); response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION, Constants.ERROR_CODE_INVALID_SESSION_TEXT)); - } else { - Integer cachedRemoteIndexId = decodeSessionRepository.find(sessionId); - if (null == cachedRemoteIndexId) { - response.setEntity(null); - response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION, - Constants.ERROR_CODE_INVALID_SESSION_TEXT)); - } else { - cachedRemoteIndex = irBinaryRepository.find(cachedRemoteIndexId); - if (null == cachedRemoteIndex) { - response.setEntity(null); - response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION, - Constants.ERROR_CODE_INVALID_SESSION_TEXT)); - } else { - if (indexId != cachedRemoteIndex.getId()) { - response.setEntity(null); - response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION, - Constants.ERROR_CODE_INVALID_SESSION_TEXT)); - } - } - } - } - - if (response.getStatus().getCode() != Constants.ERROR_CODE_SUCCESS) { return response; } @@ -175,4 +179,23 @@ public class IRDecodeService extends AbstractBaseService { return getExceptionResponse(DecodeResponse.class); } } + + private RemoteIndex getCachedRemoteIndex(String sessionId, int remoteIndexId) { + RemoteIndex cachedRemoteIndex = null; + + if (null == sessionId) { + LoggerUtil.getInstance().trace(TAG, "sessionId is not given, abort"); + } else { + Integer cachedRemoteIndexId = decodeSessionRepository.find(sessionId); + if (null != cachedRemoteIndexId) { + cachedRemoteIndex = irBinaryRepository.find(cachedRemoteIndexId); + if (null != cachedRemoteIndex) { + if (remoteIndexId != cachedRemoteIndex.getId()) { + cachedRemoteIndex = null; + } + } + } + } + return cachedRemoteIndex; + } } diff --git a/src/main/java/net/irext/decode/service/service/base/AbstractBaseService.java b/src/main/java/net/irext/decode/service/restapi/base/AbstractBaseService.java similarity index 91% rename from src/main/java/net/irext/decode/service/service/base/AbstractBaseService.java rename to src/main/java/net/irext/decode/service/restapi/base/AbstractBaseService.java index f594109..4b7027e 100644 --- a/src/main/java/net/irext/decode/service/service/base/AbstractBaseService.java +++ b/src/main/java/net/irext/decode/service/restapi/base/AbstractBaseService.java @@ -1,4 +1,4 @@ -package net.irext.decode.service.service.base; +package net.irext.decode.service.restapi.base; import net.irext.decode.service.Constants; import net.irext.decode.service.response.ServiceResponse; @@ -11,7 +11,7 @@ import org.apache.commons.logging.LogFactory; * Revised: Date: 2017-04-27 * Revision: Revision: 1.0 *
- * Description: Base service abstract class implemented service interface + * Description: Base restapi abstract class implemented restapi interface *
* Revision log: * 2017-04-27: created by strawmanbobi