android.bluetooth.BluetoothGatt#GATT_INVALID_OFFSET源码实例Demo

下面列出了android.bluetooth.BluetoothGatt#GATT_INVALID_OFFSET 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
public int writeCharacteristic(BluetoothGattCharacteristic characteristic, int offset, byte[] value) {
  if (offset != 0) {
    return BluetoothGatt.GATT_INVALID_OFFSET;
  }
  // Heart Rate control point is a 8bit characteristic
  if (value.length != 1) {
    return BluetoothGatt.GATT_INVALID_ATTRIBUTE_LENGTH;
  }
  if ((value[0] & 1) == 1) {
    getActivity().runOnUiThread(new Runnable() {
      @Override
      public void run() {
        mHeartRateMeasurementCharacteristic.setValue(INITIAL_EXPENDED_ENERGY,
            EXPENDED_ENERGY_FORMAT, /* offset */ 2);
        mEditTextEnergyExpended.setText(Integer.toString(INITIAL_EXPENDED_ENERGY));
      }
    });
  }
  return BluetoothGatt.GATT_SUCCESS;
}
 
源代码2 项目: Android-BLE-Library   文件: BleManagerHandler.java
private void sendResponse(@NonNull final BluetoothGattServer server,
						  @NonNull final BluetoothDevice device, final int status,
						  final int requestId, final int offset,
						  @Nullable final byte[] response) {
	String msg;
	switch (status) {
		case BluetoothGatt.GATT_SUCCESS: 				msg = "GATT_SUCCESS"; break;
		case BluetoothGatt.GATT_REQUEST_NOT_SUPPORTED: 	msg = "GATT_REQUEST_NOT_SUPPORTED"; break;
		case BluetoothGatt.GATT_INVALID_OFFSET: 		msg = "GATT_INVALID_OFFSET"; break;
		default: throw new InvalidParameterException();
	}
	log(Log.DEBUG, "server.sendResponse(" + msg + ", offset=" + offset + ", value=" + ParserUtils.parseDebug(response) + ")");
	server.sendResponse(device, requestId, status, offset, response);
	log(Log.VERBOSE, "[Server] Response sent");
}
 
源代码3 项目: bleYan   文件: BleUtils.java
public static String getGattStatus(int status) {
    switch (status) {
        case BluetoothGatt.GATT_SUCCESS:
            return "GATT_SUCCESS";

        case BluetoothGatt.GATT_READ_NOT_PERMITTED:
            return "GATT_READ_NOT_PERMITTED";

        case BluetoothGatt.GATT_WRITE_NOT_PERMITTED:
            return "GATT_WRITE_NOT_PERMITTED";

        case BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION:
            return "GATT_INSUFFICIENT_AUTHENTICATION";

        case BluetoothGatt.GATT_REQUEST_NOT_SUPPORTED:
            return "GATT_REQUEST_NOT_SUPPORTED";

        case BluetoothGatt.GATT_INSUFFICIENT_ENCRYPTION:
            return "GATT_INSUFFICIENT_ENCRYPTION";

        case BluetoothGatt.GATT_INVALID_OFFSET:
            return "GATT_INVALID_OFFSET";

        case BluetoothGatt.GATT_INVALID_ATTRIBUTE_LENGTH:
            return "GATT_INVALID_ATTRIBUTE_LENGTH";

        case BluetoothGatt.GATT_FAILURE:
            return "GATT_FAILURE";

        default:
            return "STATE_UNKNOWN: " + status;
    }
}
 
@Override
public int writeCharacteristic(BluetoothGattCharacteristic characteristic, int offset, byte[] value) {
  if (offset != 0) {
    return BluetoothGatt.GATT_INVALID_OFFSET;
  }
  // Measurement Interval is a 16bit characteristic
  if (value.length != 2) {
    return BluetoothGatt.GATT_INVALID_ATTRIBUTE_LENGTH;
  }
  ByteBuffer byteBuffer = ByteBuffer.wrap(value);
  byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
  final int newMeasurementIntervalValue = byteBuffer.getShort();
  if (!isValidMeasurementIntervalValue(newMeasurementIntervalValue)) {
    return BluetoothGatt.GATT_FAILURE;
  }
  getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMeasurementIntervalCharacteristic.setValue(newMeasurementIntervalValue,
          MEASUREMENT_INTERVAL_FORMAT,
          /* offset */ 0);
      if (mMeasurementIntervalCCCDescriptor.getValue() == BluetoothGattDescriptor.ENABLE_INDICATION_VALUE) {
        resetTimer(newMeasurementIntervalValue);
        mTextViewNotifications.setText(R.string.notificationsEnabled);
      }
    }
  });
  return BluetoothGatt.GATT_SUCCESS;
}
 
源代码5 项目: Android-BLE-Library   文件: BleManagerHandler.java
final void onCharacteristicWriteRequest(@NonNull final BluetoothGattServer server,
										@NonNull final BluetoothDevice device, final int requestId,
										@NonNull final BluetoothGattCharacteristic characteristic,
										final boolean preparedWrite, final boolean responseNeeded,
										final int offset, @NonNull final byte[] value) {
	log(Log.DEBUG, "[Server callback] Write " + (responseNeeded ? "request" : "command")
			+ " to characteristic " + characteristic.getUuid()
			+ " (requestId=" + requestId + ", prepareWrite=" + preparedWrite + ", responseNeeded="
			+ responseNeeded + ", offset: " + offset + ", value=" + ParserUtils.parseDebug(value) + ")");
	if (offset == 0) {
		final String type = responseNeeded ? "WRITE REQUEST" : "WRITE COMMAND";
		final String option = preparedWrite ? "Prepare " : "";
		log(Log.INFO, "[Server] " + option + type + " for characteristic " + characteristic.getUuid()
				+ " received, value: " + ParserUtils.parse(value));
	}

	if (responseNeeded) {
		sendResponse(server, device, BluetoothGatt.GATT_SUCCESS, requestId, offset, value);
	}

	// If Prepare Write or Long Write is sent, store the data in a temporary queue until it's executed.
	if (preparedWrite) {
		if (preparedValues == null) {
			preparedValues = new LinkedList<>();
		}
		if (offset == 0) {
			// Add new value to the operations.
			preparedValues.offer(new Pair<>(characteristic, value));
		} else {
			// Concatenate the value to the end of previous value, if the previous request was
			// also for the same characteristic.
			final Pair<Object, byte[]> last = preparedValues.peekLast();
			if (last != null && characteristic.equals(last.first)) {
				preparedValues.pollLast();
				preparedValues.offer(new Pair<>(characteristic, Bytes.concat(last.second, value, offset)));
			} else {
				prepareError = BluetoothGatt.GATT_INVALID_OFFSET;
			}
		}
	} else {
		// Otherwise, save the data immediately.
		if (assignAndNotify(device, characteristic, value) || checkCondition()) {
			nextRequest(true);
		}
	}
}
 
源代码6 项目: Android-BLE-Library   文件: BleManagerHandler.java
final void onDescriptorWriteRequest(@NonNull final BluetoothGattServer server,
									@NonNull final BluetoothDevice device, final int requestId,
									@NonNull final BluetoothGattDescriptor descriptor,
									final boolean preparedWrite, final boolean responseNeeded,
									final int offset, @NonNull final byte[] value) {
	log(Log.DEBUG, "[Server callback] Write " + (responseNeeded ? "request" : "command")
			+ " to descriptor " + descriptor.getUuid()
			+ " (requestId=" + requestId + ", prepareWrite=" + preparedWrite + ", responseNeeded="
			+ responseNeeded + ", offset: " + offset + ", value=" + ParserUtils.parseDebug(value) + ")");
	if (offset == 0) {
		final String type = responseNeeded ? "WRITE REQUEST" : "WRITE COMMAND";
		final String option = preparedWrite ? "Prepare " : "";
		log(Log.INFO, "[Server] " + option + type + " request for descriptor " + descriptor.getUuid()
				+ " received, value: " + ParserUtils.parse(value));
	}

	if (responseNeeded) {
		sendResponse(server, device, BluetoothGatt.GATT_SUCCESS, requestId, offset, value);
	}

	// If Prepare Write or Long Write is sent, store the data in a temporary queue until it's executed.
	if (preparedWrite) {
		if (preparedValues == null) {
			preparedValues = new LinkedList<>();
		}
		if (offset == 0) {
			// Add new value to the operations.
			preparedValues.offer(new Pair<>(descriptor, value));
		} else {
			// Concatenate the value to the end of previous value, if the previous request was
			// also for the same descriptor.
			final Pair<Object, byte[]> last = preparedValues.peekLast();
			if (last != null && descriptor.equals(last.first)) {
				preparedValues.pollLast();
				preparedValues.offer(new Pair<>(descriptor, Bytes.concat(last.second, value, offset)));
			} else {
				prepareError = BluetoothGatt.GATT_INVALID_OFFSET;
			}
		}
	} else {
		// Otherwise, save the data immediately.
		if (assignAndNotify(device, descriptor, value) || checkCondition()) {
			nextRequest(true);
		}
	}
}