public byte[] encode(SpineObject payload) {

    spine.datamodel.functions.AlarmSpineFunctionReq workPayLoad =
        (spine.datamodel.functions.AlarmSpineFunctionReq) payload;

    byte[] data = new byte[1 + 1 + 1 + 1 + 1 + 1 + 4 + 4 + 1];

    byte activationBinaryFlag = (workPayLoad.getActivationFlag()) ? (byte) 1 : 0;

    data[0] = SPINEFunctionConstants.ALARM;

    data[1] = activationBinaryFlag;
    data[2] = (byte) (12);

    data[3] = workPayLoad.getDataType();
    data[4] = workPayLoad.getSensor();
    data[5] = workPayLoad.getValueType();

    // lower Threshold
    data[6] = (byte) (workPayLoad.getLowerThreshold() >> 24);
    data[7] = (byte) (workPayLoad.getLowerThreshold() >> 16);
    data[8] = (byte) (workPayLoad.getLowerThreshold() >> 8);
    data[9] = (byte) (workPayLoad.getLowerThreshold());

    // upper Threshold
    data[10] = (byte) (workPayLoad.getUpperThreshold() >> 24);
    data[11] = (byte) (workPayLoad.getUpperThreshold() >> 16);
    data[12] = (byte) (workPayLoad.getUpperThreshold() >> 8);
    data[13] = (byte) (workPayLoad.getUpperThreshold());

    data[14] = workPayLoad.getAlarmType();

    return data;
  }