package com.solderbyte.openfit.protocol; import java.util.Iterator; import java.util.List; import com.solderbyte.openfit.util.OpenFitDataType; import com.solderbyte.openfit.util.OpenFitDataTypeAndString; import com.solderbyte.openfit.util.OpenFitVariableDataComposer; public class OpenFitNotificationProtocol { public static Boolean SUPPORT_QUICK_REPLY = false; public static Boolean SHOW_ON_DEVICE = false; public static Boolean HAS_IMAGE = false; public static Boolean INCOMING_CALL_FLAG = true; public byte[] createMessageProtocol(int msgType, long msgId, List<OpenFitDataTypeAndString> msgData, long timeStamp) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer();; oDatacomposer.writeByte((byte)msgType); oDatacomposer.writeLong(msgId); StringBuilder oStringBuilder = new StringBuilder(); Iterator<OpenFitDataTypeAndString> oIterator = msgData.iterator(); while(oIterator.hasNext()) { OpenFitDataTypeAndString localDataTypeAndString = (OpenFitDataTypeAndString)oIterator.next(); byte[] oByte = OpenFitVariableDataComposer.convertToByteArray(localDataTypeAndString.getData()); if(localDataTypeAndString.getDataType() == OpenFitDataType.BYTE) { oDatacomposer.writeByte((byte)oByte.length); } if(localDataTypeAndString.getDataType() == OpenFitDataType.SHORT) { oDatacomposer.writeShort((short)oByte.length); } oStringBuilder.append(oByte.length).append(" "); oDatacomposer.writeBytes(oByte); } oDatacomposer.writeBoolean(SHOW_ON_DEVICE); oDatacomposer.writeByte((byte)0); OpenFitVariableDataComposer.writeTimeInfo(oDatacomposer, timeStamp); return oDatacomposer.toByteArray(); } public static byte[] createNotificationProtocol(int msgType, long msgId, List<OpenFitDataTypeAndString> msgData, long timeStamp) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer(); oDatacomposer.writeByte((byte)msgType); oDatacomposer.writeLong(msgId); StringBuilder oStringBuilder = new StringBuilder(); Iterator<OpenFitDataTypeAndString> oIterator = msgData.iterator(); while(oIterator.hasNext()) { OpenFitDataTypeAndString oDataString = (OpenFitDataTypeAndString)oIterator.next(); byte[] oByte = OpenFitVariableDataComposer.convertToByteArray(oDataString.getData()); if(oDataString.getDataType() == OpenFitDataType.BYTE) { oDatacomposer.writeByte((byte)oByte.length); } if(oDataString.getDataType() == OpenFitDataType.SHORT) { oDatacomposer.writeShort((short)oByte.length); } oStringBuilder.append(oByte.length).append(" "); oDatacomposer.writeBytes(oByte); } oDatacomposer.writeByte((byte)0); OpenFitVariableDataComposer.writeTimeInfo(oDatacomposer, timeStamp); return oDatacomposer.toByteArray(); } public static byte[] createEmailProtocol(int msgType, long msgId, List<OpenFitDataTypeAndString> msgData, long timeStamp) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer(); oDatacomposer.writeByte((byte)msgType); oDatacomposer.writeLong(msgId); StringBuilder oStringBuilder = new StringBuilder(); Iterator<OpenFitDataTypeAndString> oIterator = msgData.iterator(); while(oIterator.hasNext()) { OpenFitDataTypeAndString oDataString = (OpenFitDataTypeAndString)oIterator.next(); byte[] oByte = OpenFitVariableDataComposer.convertToByteArray(oDataString.getData()); if(oDataString.getDataType() == OpenFitDataType.BYTE) { oDatacomposer.writeByte((byte)oByte.length); } if(oDataString.getDataType() == OpenFitDataType.SHORT) { oDatacomposer.writeShort((short)oByte.length); } oStringBuilder.append(oByte.length).append(" "); oDatacomposer.writeBytes(oByte); } // number of attached files num << 1 oDatacomposer.writeByte((byte)0); oDatacomposer.writeBoolean(SUPPORT_QUICK_REPLY); oDatacomposer.writeBoolean(HAS_IMAGE); OpenFitVariableDataComposer.writeTimeInfo(oDatacomposer, timeStamp); return oDatacomposer.toByteArray(); } public static byte[] createIncomingCallProtocol(int msgType, long msgId, List<OpenFitDataTypeAndString> msgData, long timeStamp) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer(); oDatacomposer.writeByte((byte)msgType); oDatacomposer.writeLong(msgId); if(INCOMING_CALL_FLAG) { oDatacomposer.writeByte((byte)0); } else { oDatacomposer.writeByte((byte)1); } StringBuilder oStringBuilder = new StringBuilder(); Iterator<OpenFitDataTypeAndString> oIterator = msgData.iterator(); while(oIterator.hasNext()) { OpenFitDataTypeAndString oDataString = (OpenFitDataTypeAndString)oIterator.next(); byte[] oByte = OpenFitVariableDataComposer.convertToByteArray(oDataString.getData()); if(oDataString.getDataType() == OpenFitDataType.BYTE) { oDatacomposer.writeByte((byte)oByte.length); } if(oDataString.getDataType() == OpenFitDataType.SHORT) { oDatacomposer.writeShort((short)oByte.length); } oStringBuilder.append(oByte.length).append(" "); oDatacomposer.writeBytes(oByte); } OpenFitVariableDataComposer.writeTimeInfo(oDatacomposer, timeStamp); return oDatacomposer.toByteArray(); } public static byte[] createMediaTrackProtocol(int msgType, String msgData) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer(); oDatacomposer.writeByte((byte)msgType); OpenFitVariableDataComposer.writeStringWithOneByteLength(oDatacomposer, msgData); return oDatacomposer.toByteArray(); } public static byte[] createAlarmProtocol(int msgType, long msgId, List<OpenFitDataTypeAndString> msgData, long timeStamp) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer(); oDatacomposer.writeByte((byte)msgType); oDatacomposer.writeLong(msgId); StringBuilder oStringBuilder = new StringBuilder(); Iterator<OpenFitDataTypeAndString> oIterator = msgData.iterator(); while(oIterator.hasNext()) { OpenFitDataTypeAndString oDataString = (OpenFitDataTypeAndString)oIterator.next(); byte[] oByte = OpenFitVariableDataComposer.convertToByteArray(oDataString.getData()); if(oDataString.getDataType() == OpenFitDataType.BYTE) { oDatacomposer.writeByte((byte)oByte.length); } if(oDataString.getDataType() == OpenFitDataType.SHORT) { oDatacomposer.writeShort((short)oByte.length); } oStringBuilder.append(oByte.length).append(" "); oDatacomposer.writeBytes(oByte); } //OpenFitVariableDataComposer.writeTimeInfo(oDatacomposer, timeStamp); oDatacomposer.writeInt((int) timeStamp); // snooze or dissmiss oDatacomposer.writeInt(0); return oDatacomposer.toByteArray(); } public static byte[] createWeatherProtocol(int msgType, long msgId, String msgData, int icon, long timeStamp) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer(); oDatacomposer.writeByte((byte)msgType); oDatacomposer.writeLong(msgId); byte[] oByte = OpenFitVariableDataComposer.convertToByteArray(msgData); oDatacomposer.writeByte((byte)oByte.length); oDatacomposer.writeBytes(oByte); oDatacomposer.writeInt(icon); OpenFitVariableDataComposer.writeTimeInfo(oDatacomposer, timeStamp); return oDatacomposer.toByteArray(); } public static byte[] createWeatherClockProtocol(int msgType, List<OpenFitDataTypeAndString> msgData, int temp, int unit, int icon, long timeStamp) { OpenFitVariableDataComposer oDatacomposer = new OpenFitVariableDataComposer(); oDatacomposer.writeByte((byte)msgType); StringBuilder oStringBuilder = new StringBuilder(); Iterator<OpenFitDataTypeAndString> oIterator = msgData.iterator(); while(oIterator.hasNext()) { OpenFitDataTypeAndString oDataString = (OpenFitDataTypeAndString)oIterator.next(); byte[] oByte = OpenFitVariableDataComposer.convertToByteArray(oDataString.getData()); if(oDataString.getDataType() == OpenFitDataType.BYTE) { oDatacomposer.writeByte((byte)oByte.length); } if(oDataString.getDataType() == OpenFitDataType.SHORT) { oDatacomposer.writeShort((short)oByte.length); } oStringBuilder.append(oByte.length).append(" "); oDatacomposer.writeBytes(oByte); } oDatacomposer.writeByte((byte)icon); oDatacomposer.writeInt(temp); oDatacomposer.writeByte((byte)unit); oDatacomposer.writeByte((byte)0); oDatacomposer.writeInt((int) timeStamp); //OpenFitVariableDataComposer.writeTimeInfo(oDatacomposer, timeStamp); oDatacomposer.writeInt((int) timeStamp); return oDatacomposer.toByteArray(); } }