QLowEnergyService Class
QLowEnergyService 클래스는 블루투스 저에너지 장치의 개별 서비스를 나타냅니다. 더 보기...
Header: | #include <QLowEnergyService> |
qmake: | QT += bluetooth |
Inherits: | QObject |
공용 유형
(since 6.2) enum | DiscoveryMode { FullDiscovery, SkipValueDiscovery } |
enum | ServiceError { NoError, OperationError, CharacteristicReadError, CharacteristicWriteError, DescriptorReadError, …, UnknownError } |
enum | ServiceState { InvalidService, RemoteService, RemoteServiceDiscovering, RemoteServiceDiscovered, LocalService, …, ServiceDiscovered } |
enum | ServiceType { PrimaryService, IncludedService } |
flags | ServiceTypes |
enum | WriteMode { WriteWithResponse, WriteWithoutResponse, WriteSigned } |
공용 함수
virtual | ~QLowEnergyService() |
QLowEnergyCharacteristic | characteristic(const QBluetoothUuid &uuid) const |
QList<QLowEnergyCharacteristic> | characteristics() const |
bool | contains(const QLowEnergyCharacteristic &characteristic) const |
bool | contains(const QLowEnergyDescriptor &descriptor) const |
void | discoverDetails(QLowEnergyService::DiscoveryMode mode = FullDiscovery) |
QLowEnergyService::ServiceError | error() const |
QList<QBluetoothUuid> | includedServices() const |
void | readCharacteristic(const QLowEnergyCharacteristic &characteristic) |
void | readDescriptor(const QLowEnergyDescriptor &descriptor) |
QString | serviceName() const |
QBluetoothUuid | serviceUuid() const |
QLowEnergyService::ServiceState | state() const |
QLowEnergyService::ServiceTypes | type() const |
void | writeCharacteristic(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue, QLowEnergyService::WriteMode mode = WriteWithResponse) |
void | writeDescriptor(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue) |
Signals
void | characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue) |
void | characteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) |
void | characteristicWritten(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue) |
void | descriptorRead(const QLowEnergyDescriptor &descriptor, const QByteArray &value) |
void | descriptorWritten(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue) |
(since 6.2) void | errorOccurred(QLowEnergyService::ServiceError newError) |
void | stateChanged(QLowEnergyService::ServiceState newState) |
상세 설명
QLowEnergyService는 블루투스 저에너지 서비스의 세부 정보에 대한 액세스를 제공합니다. 이 클래스는 서비스 세부 정보의 검색 및 게시를 용이하게 하고, 포함된 데이터의 읽기 및 쓰기를 허용하며, 데이터 변경에 대한 알림을 제공합니다.
서비스 구조
Bluetooth 저에너지 주변 장치에는 여러 서비스가 포함될 수 있습니다. 각 서비스는 차례로 추가 서비스를 포함할 수 있습니다. 이 클래스는 주변 장치의 단일 서비스를 나타내며 QLowEnergyController::createServiceObject()를 통해 생성됩니다. type ()는 이 서비스가 기본(최상위) 서비스인지 또는 다른 서비스의 일부인지 여부를 나타냅니다. 각 서비스에는 하나 이상의 특성이 포함될 수 있으며 각 특성에는 설명자가 포함될 수 있습니다. 결과 구조는 다음 다이어그램과 같이 보일 수 있습니다:
특성은 주요 정보 전달자입니다. 여기에는 값에 대한 액세스 권한을 설명하는 value() 및 properties()이 있습니다. 포함된 설명자의 일반적인 목적은 특성의 특성을 추가로 정의하는 것입니다. 예를 들어, 값이 어떻게 해석되어야 하는지 또는 값 소비자에게 값 변경에 대해 알릴 수 있는지 여부를 지정할 수 있습니다.
서비스 상호 작용
서비스 개체가 처음 생성되면 그 세부 사항은 아직 발견되지 않습니다. 이는 현재 state()가 DiscoveryRequired 으로 표시되는 것으로 알 수 있습니다. serviceUuid () 및 serviceName()만 검색할 수 있습니다.
포함된 서비스, 특성 및 설명자의 검색은 discoverDetails()를 호출할 때 트리거됩니다. 검색하는 동안 state()는 DiscoveryRequired 에서 DiscoveringService 을 거쳐 최종 ServiceDiscovered 상태로 전환됩니다. 이 전환은 stateChanged() 신호를 통해 알립니다. 세부 정보가 알려지면 포함된 모든 특성, 설명자 및 포함된 서비스를 알 수 있으며 읽거나 쓸 수 있습니다.
특성과 설명자의 값은 각각 QLowEnergyCharacteristic 과 QLowEnergyDescriptor 을 통해 검색할 수 있습니다. 그러나 이러한 속성을 직접 읽거나 쓰려면 서비스 객체가 필요합니다. readCharacteristic () 함수는 특성 값을 다시 읽으려고 시도합니다. 초기 서비스 검색에서 이미 값을 얻었더라도 특성 값이 아무런 알림 없이 계속 변경되는 경우에는 이 호출이 필요할 수 있습니다. 예를 들어 연속 값을 제공하는 시간 특성을 들 수 있습니다. 읽기 시도가 성공하면 characteristicRead() 신호가 전송됩니다. 값을 읽지 못하면 CharacteristicReadError 신호가 트리거됩니다. writeCharacteristic() 함수는 주어진 특성에 새 값을 쓰려고 시도합니다. 쓰기 시도가 성공하면 characteristicWritten() 신호가 전송됩니다. 쓰기에 실패하면 CharacteristicWriteError. 디스크립터의 읽기 및 쓰기는 동일한 패턴을 따릅니다.
모든 시도는 하드웨어에서 디스크립터 또는 특성의 값을 읽거나 쓰려고 시도합니다. 즉, QLowEnergyCharacteristic::properties()와 같은 메타 정보는 일반적으로 읽기 및 쓰기 시 무시됩니다. 예를 들어, 메타 데이터 설명에 따라 해당 특성이 읽기 전용임에도 불구하고 writeCharacteristic()를 호출할 수 있습니다. 그 결과 쓰기 요청은 연결된 디바이스로 전달되며, 유효하지 않을 수 있는 요청에 응답하는 것은 디바이스의 몫입니다. 이 경우 반환된 디바이스 오류에 대한 응답으로 CharacteristicWriteError 이 전송됩니다. 이 동작은 잘못된 메타 정보를 보고하는 디바이스와의 상호 작용을 간소화합니다. 원격 장치로 요청을 전달할 수 없는 경우 OperationError 이 설정됩니다. 잠재적인 이유는 작성할 특성 객체가 현재 서비스에 속하지 않기 때문일 수 있습니다. 요약하면 두 가지 유형의 오류를 통해 로컬 및 원격 오류 사례를 빠르게 구분할 수 있습니다.
모든 요청은 선입선출 원칙에 따라 직렬화됩니다. 예를 들어, 이전 쓰기 요청이 완료되기 전에 두 번째 쓰기 요청을 발행하면 첫 번째 쓰기 요청이 완료될 때까지 지연됩니다.
참고: 현재 서명된 쓰기 또는 신뢰성 있는 쓰기 요청은 보낼 수 없습니다.
경우에 따라 주변 장치에서 중앙 장치가 수신하고자 하는 값 업데이트를 생성하는 경우가 있습니다. 특성이 이러한 알림을 지원하려면 QLowEnergyCharacteristic::Notify 또는 QLowEnergyCharacteristic::Indicate 속성과 QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration 유형의 설명자가 있어야 합니다. 이러한 조건이 충족되면 다음 코드 세그먼트에 표시된 것처럼 알림을 사용 설정할 수 있습니다:
//PreCondition: service details already discovered QLowEnergyCharacteristic batteryLevel = service->characteristic( QBluetoothUuid::CharacteristicType::BatteryLevel); if (!batteryLevel.isValid()) return; QLowEnergyDescriptor notification = batteryLevel.descriptor( QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); if (!notification.isValid()) return; // establish hook into notifications connect(service, SIGNAL(characteristicChanged(QLowEnergyCharacteristic,QByteArray)), this, SLOT(characteristicChanged(QLowEnergyCharacteristic,QByteArray))); // enable notification service->writeDescriptor(notification, QByteArray::fromHex("0100")); // disable notification //service->writeDescriptor(notification, QByteArray::fromHex("0000")); // wait until descriptorWritten() signal is emitted // to confirm successful write
이 예는 값이 변경될 때마다 중앙을 업데이트하는 배터리 잔량 특성을 보여줍니다. 알림은 characteristicChanged() 신호를 통해 제공됩니다. 이 메커니즘에 대한 자세한 내용은 블루투스 사양에서 확인할 수 있습니다.
서비스 데이터 공유
각 QLowEnergyService 인스턴스는 내부 상태 및 정보를 동일한 서비스의 다른 QLowEnergyService 인스턴스와 공유합니다. 한 인스턴스가 서비스 세부 정보 검색을 시작하면 나머지 모든 인스턴스가 자동으로 따라갑니다. 따라서 다음 스니펫은 항상 작동합니다:
QLowEnergyService *first, *second; QLowEnergyController control(remoteDevice); control.connectToDevice(); // waiting for connection first = control.createServiceObject(QBluetoothUuid::ServiceClassUuid::BatteryService); second = control.createServiceObject(QBluetoothUuid::ServiceClassUuid::BatteryService); Q_ASSERT(first->state() == QLowEnergyService::RemoteService); Q_ASSERT(first->state() == second->state()); first->discoverDetails(); Q_ASSERT(first->state() == QLowEnergyService::RemoteServiceDiscovering); Q_ASSERT(first->state() == second->state());
readCharacteristic(), readDescriptor(), writeCharacteristic(), writeDescriptor() 호출 또는 관련 QLowEnergyController 연결 끊기로 인한 서비스 무효화와 같은 다른 작업도 동일한 방식으로 공유됩니다.
QLowEnergyController, QLowEnergyCharacteristic, QLowEnergyDescriptor 를참조하세요 .
회원 유형 문서
[since 6.2]
enum QLowEnergyService::DiscoveryMode
이 열거형은 서비스 검색 모드를 나열합니다. 모든 모드는 서비스의 특성과 특성 설명자를 검색합니다. 모드는 특성 값과 설명자를 읽을지 여부가 다릅니다.
Constant | 값 | 설명 |
---|---|---|
QLowEnergyService::FullDiscovery | 0 | 전체 검색 중에 모든 특성이 검색됩니다. 모든 특성 값과 설명자가 읽혀집니다. |
QLowEnergyService::SkipValueDiscovery | 1 | 최소 검색 중에는 모든 특성이 검색됩니다. 특성 값과 디스크립터는 읽지 않습니다. |
이 열거형은 Qt 6.2에 도입되었습니다.
discoverDetails()도 참조하십시오 .
enum QLowEnergyService::ServiceError
이 열거형은 서비스가 존재하는 동안 발생할 수 있는 모든 오류 조건을 설명합니다. error () 함수는 마지막으로 발생한 오류를 반환합니다.
상수 | 값 | 설명 |
---|---|---|
QLowEnergyService::NoError | 0 | 오류가 발생하지 않았습니다. |
QLowEnergyService::OperationError | 1 | 서비스가 준비되지 않은 상태에서 작업을 시도했습니다. 예를 들어 서비스가 아직 ServiceDiscovered state ()에 있지 않은 상태에서 서비스에 쓰기를 시도했거나 주변 장치에 대한 연결이 끊어져 서비스가 유효하지 않은 경우일 수 있습니다. |
QLowEnergyService::CharacteristicReadError (since Qt 5.5) | 5 | 특성 값을 읽으려는 시도가 실패했습니다. 예를 들어 readCharacteristic()에 대한 호출에 대한 응답으로 트리거될 수 있습니다. |
QLowEnergyService::CharacteristicWriteError | 2 | 특성에 새 값을 쓰려는 시도가 실패했습니다. 예를 들어 읽기 전용 특성에 쓰기를 시도할 때 트리거될 수 있습니다. |
QLowEnergyService::DescriptorReadError (since Qt 5.5) | 6 | 설명자 값을 읽으려는 시도가 실패했습니다. 예를 들어 readDescriptor()에 대한 호출에 대한 응답으로 트리거될 수 있습니다. |
QLowEnergyService::DescriptorWriteError | 3 | 설명자 값에 새 값을 쓰려고 시도했습니다. 예를 들어 읽기 전용 디스크립터에 쓰려고 할 때 트리거될 수 있습니다. |
QLowEnergyService::UnknownError (since Qt 5.5) | 4 | 서비스와 상호 작용할 때 알 수 없는 오류가 발생했습니다. |
enum QLowEnergyService::ServiceState
이 열거형은 서비스 객체의 state()를 설명합니다.
상수 | 값 | 설명 |
---|---|---|
QLowEnergyService::InvalidService | 0 | 서비스는 기본 장치에 대한 연결이 끊어지면 유효하지 않게 될 수 있습니다. 연결이 끊어지더라도 마지막 정보는 유지됩니다. 유효하지 않은 서비스는 장치에 대한 연결이 다시 설정되더라도 더 이상 유효하지 않습니다. |
QLowEnergyService::RemoteService | 1 | 서비스 세부 정보는 discoverDetails()를 호출하여 확인할 수 있습니다. 신뢰할 수 있는 유일한 정보는 serviceUuid() 및 serviceName()입니다. |
QLowEnergyService::RemoteServiceDiscovering | 2 | 서비스 세부 정보를 검색 중입니다. |
QLowEnergyService::RemoteServiceDiscovered | 3 | 서비스 세부 정보가 검색되었습니다. |
QLowEnergyService::LocalService (since Qt 5.7) | 4 | 서비스가 peripheral role 의 컨트롤러 개체와 연결되어 있습니다. 이러한 서비스 개체는 상태를 변경하지 않습니다. |
QLowEnergyService::DiscoveryRequired | RemoteService | 사용되지 않습니다. RemoteService로 이름이 변경되었습니다. |
QLowEnergyService::DiscoveringService | RemoteServiceDiscovering | 사용되지 않습니다. RemoteServiceDiscovering으로 이름이 변경되었습니다. |
QLowEnergyService::ServiceDiscovered | RemoteServiceDiscovered | 폐지되었습니다. RemoteServiceDiscovered로 이름이 변경되었습니다. |
열거형 QLowEnergyService::ServiceType
플래그 QLowEnergyService::서비스 유형
이 열거형은 서비스 유형을 설명합니다.
Constant | 값 | 설명 |
---|---|---|
QLowEnergyService::PrimaryService | 0x0001 | 서비스는 최상위/기본 서비스입니다. 이 유형 플래그가 설정되지 않은 경우 서비스는 보조 서비스로 간주됩니다. 각 서비스는 IncludedService로 표시된 다른 서비스에 포함될 수 있습니다. |
QLowEnergyService::IncludedService | 0x0002 | 서비스가 다른 서비스에 포함되어 있습니다. 일부 플랫폼에서는 현재 서비스를 포함하는 서비스가 발견될 때까지 이 플래그를 확인할 수 없습니다. |
ServiceTypes 유형은 QFlags<ServiceType>에 대한 typedef입니다. 이 유형은 ServiceType 값의 OR 조합을 저장합니다.
enum QLowEnergyService::WriteMode
이 열거형은 특성 값을 쓸 때 사용할 모드를 설명합니다. 이 특성은 properties 을 통해 지원되는 쓰기 모드를 알립니다.
Constant | 값 | 설명 |
---|---|---|
QLowEnergyService::WriteWithResponse | 0 | 이 모드를 사용하여 특성을 쓰면 주변장치는 쓰기 확인을 전송합니다. 작업이 성공하면 characteristicWritten() 신호를 통해 확인을 전송합니다. 그렇지 않으면 CharacteristicWriteError 신호가 전송됩니다. 이 쓰기 모드를 지원하려면 특성에서 QLowEnergyCharacteristic::Write 속성을 설정해야 합니다. |
QLowEnergyService::WriteWithoutResponse | 1 | 이 모드를 사용하여 특성을 쓰면 원격 주변 장치에서 쓰기 확인을 보내지 않습니다. 작업의 성공 여부를 확인할 수 없으며 페이로드는 20바이트를 넘지 않아야 합니다. 특성이 이 쓰기 모드를 지원하려면 QLowEnergyCharacteristic::WriteNoResponse 속성을 설정해야 합니다. 이 모드의 장점은 다른 장치 상호 작용 사이에 발생할 수 있으므로 쓰기 작업이 더 빠르다는 것입니다. |
QLowEnergyService::WriteSigned (since Qt 5.7) | 2 | 이 모드를 사용하여 특성을 쓰면 원격 주변 장치는 쓰기 확인을 보내지 않습니다. 작업의 성공 여부는 확인할 수 없으며 페이로드는 8바이트보다 길지 않아야 합니다. 두 디바이스 사이에 본드가 존재해야 하며 링크가 암호화되어 있지 않아야 합니다. 특성에서 QLowEnergyCharacteristic::WriteSigned 속성이 이 쓰기 모드를 지원하도록 설정되어 있어야 합니다. 이 값은 현재 Android와 BlueZ 5 및 커널 버전 3.7 이상의 Linux에서만 지원됩니다. |
멤버 함수 문서
[virtual noexcept]
QLowEnergyService::~QLowEnergyService()
QLowEnergyService 인스턴스를 삭제합니다.
QLowEnergyCharacteristic QLowEnergyService::characteristic(const QBluetoothUuid &uuid) const
uuid 에 일치하는 특성을 반환하고, 그렇지 않으면 유효하지 않은 특성을 반환합니다.
이 서비스 인스턴스의 discoverDetails()가 아직 호출되지 않았거나 uuid 과 일치하는 특성이 없는 경우 반환된 특성은 유효하지 않습니다.
characteristics()도 참조하세요 .
[signal]
void QLowEnergyService::characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue)
연결된 컨트롤러 개체가 central 역할에 있는 경우, 이 신호는 주변 장치/장치 측의 이벤트에 의해 characteristic 값이 변경될 때 방출됩니다. 이 경우 신호 방출은 주변 장치의 변경 이벤트 이전에 특성의 ClientCharacteristicConfiguration 디스크립터를 통해 변경 알림이 활성화되었음을 의미합니다. 이 방법에 대한 자세한 내용은 above 에서 확인할 수 있습니다.
컨트롤러가 peripheral 역할에 있는 경우, 즉 서비스 개체가 QLowEnergyController::addService 을 통해 생성된 경우 GATT 클라이언트가 쓰기 요청 또는 명령을 사용하여 특성 값을 쓰면 신호가 전송됩니다.
newValue 매개변수에는 characteristic 의 업데이트된 값이 포함됩니다.
[signal]
void QLowEnergyService::characteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value)
이 신호는 characteristic 에 대한 읽기 요청이 value 을 성공적으로 반환할 때 발생합니다. 이 신호는 characteristicRead()를 호출하여 트리거될 수 있습니다. 읽기 작업에 성공하지 못하면 CharacteristicReadError 플래그를 사용하여 errorOccurred() 신호가 전송됩니다.
참고: 이 신호는 센트럴 역할 관련 사용 사례에 대해서만 발생합니다.
readCharacteristic()도 참조하세요 .
[signal]
void QLowEnergyService::characteristicWritten(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue)
이 신호는 characteristic 값이 newValue 으로 성공적으로 변경될 때 발생합니다. 변경은 writeCharacteristic() 호출을 통해 트리거되어야 합니다. 쓰기 작업이 성공하지 못하면 CharacteristicWriteError 플래그를 사용하여 errorOccurred() 신호가 전송됩니다.
쓰기 신호의 수신은 대상 장치가 쓰기할 값을 수신하고 쓰기 요청 상태를 다시 보고한다는 신호로 간주할 수 있습니다.
참고: WriteWithoutResponse 모드를 사용하여 writeCharacteristic()를 호출하는 경우 이 신호와 errorOccurred()는 절대 전송되지 않습니다.
참고: 이 신호는 중앙 역할 관련 사용 사례에서만 발생합니다.
writeCharacteristic()도 참조하세요 .
QList<QLowEnergyCharacteristic> QLowEnergyService::characteristics() const
이 QLowEnergyService
인스턴스와 관련된 모든 특성을 반환합니다.
이 서비스 인스턴스의 discoverDetails()가 아직 호출되지 않았거나 알려진 특성이 없는 경우 반환된 목록은 비어 있습니다.
characteristic(), state() 및 discoverDetails()도 참조하세요 .
bool QLowEnergyService::contains(const QLowEnergyCharacteristic &characteristic) const
characteristic 이 서비스에 속하는 경우 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
characteristics()에 characteristic 이 포함된 경우 특성은 서비스에 속합니다.
bool QLowEnergyService::contains(const QLowEnergyDescriptor &descriptor) const
descriptor 이 이 서비스에 속하는 경우 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
[signal]
void QLowEnergyService::descriptorRead(const QLowEnergyDescriptor &descriptor, const QByteArray &value)
이 신호는 descriptor 에 대한 읽기 요청이 value 을 성공적으로 반환할 때 발생합니다. 이 신호는 descriptorRead()를 호출하여 트리거될 수 있습니다. 읽기 작업이 성공하지 못하면 DescriptorReadError 플래그를 사용하여 errorOccurred() 신호가 전송됩니다.
참고: 이 신호는 센트럴 역할 관련 사용 사례에 대해서만 발생됩니다.
readDescriptor()도 참조하세요 .
[signal]
void QLowEnergyService::descriptorWritten(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue)
이 신호는 descriptor 값이 newValue 으로 성공적으로 변경될 때 발생합니다. 연결된 컨트롤러 객체가 central 역할에 있는 경우 writeDescriptor() 호출로 인해 변경된 것이 틀림없습니다. 그렇지 않으면 이 신호는 GATT 클라이언트에서 해당 설명자에 대한 쓰기 요청 또는 명령의 결과입니다.
writeDescriptor()도 참조하세요 .
void QLowEnergyService::discoverDetails(QLowEnergyService::DiscoveryMode mode = FullDiscovery)
서비스에 포함된 서비스, 특성 및 관련 설명자의 검색을 시작합니다.
검색 프로세스는 stateChanged() 신호를 통해 표시됩니다. 생성 후 서비스는 DiscoveryRequired 상태가 됩니다. discoverDetails()를 호출하면 DiscoveringService 로 전환됩니다. 세부 정보 검색이 완료되면 ServiceDiscovered 상태로 전환됩니다. 각 전환 시 stateChanged() 신호가 방출됩니다. 인자 mode 에 따라 FullDiscovery 또는 SkipValueDiscovery 이 수행됩니다. 어떤 경우든 모든 서비스와 특성이 검색됩니다. FullDiscovery 이 진행되어 모든 특성 값과 설명자를 읽습니다. SkipValueDiscovery 은 특성 값과 설명자를 읽지 않습니다. SkipValueDiscovery 에는 두 가지 장점이 있습니다. 첫째, 더 빠릅니다. 둘째, 특성 값이나 설명자를 읽을 수 있다고 잘못 광고하지만 그럼에도 불구하고 읽기를 허용하지 않는 일부 디바이스의 버그를 피할 수 있습니다. 이는 예측할 수 없는 동작을 유발할 수 있습니다. SkipValueDiscovery 이후 readCharacteristic() / readDescriptor()를 호출하고 성공적으로 완료될 때까지 기다렸다가 특성이나 설명자 값에 액세스해야 합니다.
mode 인자는 Qt 6.2에 도입되었습니다.
state()도 참조하십시오 .
QLowEnergyService::ServiceError QLowEnergyService::error() const
마지막으로 발생한 오류 또는 NoError 를 반환합니다.
[signal, since 6.2]
void QLowEnergyService::errorOccurred(QLowEnergyService::ServiceError newError)
이 신호는 오류가 발생하면 전송됩니다. newError 매개변수는 발생한 오류를 설명합니다.
이 함수는 Qt 6.2에 도입되었습니다.
QList<QBluetoothUuid> QLowEnergyService::includedServices() const
현재 서비스에 포함된 모든 서비스의 UUID를 반환합니다.
이 서비스 인스턴스의 discoverDetails()가 아직 호출되지 않았거나 알려진 특성이 없는 경우 반환된 목록은 비어 있습니다.
포함된 서비스에 또 다른 서비스가 포함되어 있을 수 있습니다. 이러한 두 번째 레벨 포함은 관련 첫 번째 레벨 QLowEnergyService 인스턴스를 통해 가져와야 합니다. 기술적으로 이는 순환 종속성을 생성할 수 있습니다.
QLowEnergyController::createServiceObject()를 사용하여 각 UUID에 대한 서비스 인스턴스를 가져와야 합니다.
createServiceObject()도 참조하세요 .
void QLowEnergyService::readCharacteristic(const QLowEnergyCharacteristic &characteristic)
characteristic 값을 읽습니다. 작업이 성공하면 characteristicRead() 신호가 전송되고, 그렇지 않으면 CharacteristicReadError 가 설정됩니다. 일반적으로 QLowEnergyCharacteristic::Read 속성이 설정되어 있으면 characteristic 를 읽을 수 있습니다.
동일한 원격 장치에 대한 모든 설명자 및 특성 요청은 직렬화됩니다. 동시에 여러 요청을 발행할 때는 큐가 사용됩니다. 대기열은 동일한 특성에 대한 중복된 읽기 요청을 제거하지 않습니다.
특성은 서비스가 ServiceDiscovered 상태이고 서비스에 속하는 경우에만 읽을 수 있습니다. 이러한 조건 중 하나가 해당되지 않으면 QLowEnergyService::OperationError 상태가 설정됩니다.
참고: QLowEnergyCharacteristic::properties()가 읽을 수 없는 속성을 보고함에도 불구하고 이 함수를 호출하면 항상 하드웨어에서 특성 값을 읽으려고 시도합니다. 하드웨어가 오류와 함께 반환하면 CharacteristicReadError 이 설정됩니다.
characteristicRead() 및 writeCharacteristic()도 참조하세요 .
void QLowEnergyService::readDescriptor(const QLowEnergyDescriptor &descriptor)
descriptor 의 값을 읽습니다. 작업이 성공하면 descriptorRead() 신호가 전송되고, 그렇지 않으면 DescriptorReadError 이 설정됩니다.
동일한 원격 장치에 대한 모든 설명자 및 특성 요청은 직렬화됩니다. 동시에 여러 요청을 발행할 때는 큐가 사용됩니다. 큐는 동일한 설명자에 대한 중복된 읽기 요청을 제거하지 않습니다.
설명자는 서비스가 ServiceDiscovered 상태이고 설명자가 서비스에 속해 있는 경우에만 읽을 수 있습니다. 이러한 조건 중 하나라도 해당되지 않으면 QLowEnergyService::OperationError 상태가 설정됩니다.
descriptorRead() 및 writeDescriptor()도 참조하세요 .
QString QLowEnergyService::serviceName() const
서비스 이름을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다.
반환된 이름은 serviceUuid()가 잘 알려진 UUID인 경우에만 검색할 수 있습니다.
QBluetoothUuid QLowEnergyService::serviceUuid() const
서비스의 UUID를 반환하고, 그렇지 않으면 null UUID를 반환합니다.
QLowEnergyService::ServiceState QLowEnergyService::state() const
서비스의 현재 상태를 반환합니다.
장치의 서비스가 처음으로 인스턴스화된 경우 개체의 상태는 DiscoveryRequired 입니다. 주변 장치에서 동일한 서비스를 가리키는 모든 서비스 개체의 상태는 항상 동일합니다. 이는 내부 객체 데이터의 공유 특성으로 인해 발생합니다. 따라서 첫 번째 인스턴스 이후에 생성되는 모든 서비스 객체 인스턴스는 이미 존재하는 인스턴스와 동일한 상태를 갖습니다.
QLowEnergyController 이 원격 장치에서 연결이 끊어지면 서비스는 유효하지 않게 됩니다. 유효하지 않은 서비스는 연결 해제 이벤트 당시의 내부 상태를 유지합니다. 이는 서비스 세부 정보가 발견되면 유효하지 않은 서비스에서도 검색할 수 있음을 의미합니다. 따라서 디바이스 연결이 설정되고 서비스 세부 정보가 검색된 후 디바이스가 즉시 연결 해제되어 다음 디바이스가 주변 디바이스에 연결할 수 있는 시나리오가 허용됩니다.
그러나 일반적인 상황에서는 서비스 및 세부 정보가 반복적으로 검색되지 않도록 연결을 유지해야 합니다. 검색에는 시간이 걸릴 수 있으며 클라이언트는 지속적인 변경 알림을 구독할 수 있습니다.
stateChanged()도 참조하세요 .
[signal]
void QLowEnergyService::stateChanged(QLowEnergyService::ServiceState newState)
이 신호는 서비스 상태가 변경될 때 발신됩니다. state ()을 통해서도 newState 를 검색할 수 있습니다.
state()도 참조하세요 .
QLowEnergyService::ServiceTypes QLowEnergyService::type() const
서비스 유형을 반환합니다.
참고: 유형 속성은 서비스가 ServiceDiscovered 상태에 도달할 때까지 신뢰할 수 없습니다. 이 필드는 PrimaryService 로 초기화됩니다.
참고: Android에서는 서비스가 기본 서비스인지 보조 서비스인지 확인할 수 없습니다. 따라서 모든 서비스에는 PrimaryService 플래그가 설정됩니다.
void QLowEnergyService::writeCharacteristic(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue, QLowEnergyService::WriteMode mode = WriteWithResponse)
characteristic 의 값으로 newValue 을 씁니다. 정확한 의미는 연결된 컨트롤러 객체의 역할에 따라 달라집니다.
중앙 역할
이 호출은 원격 주변 장치에 대한 쓰기 요청 또는 명령으로 이어집니다. 작업이 성공하면 characteristicWritten() 신호가 발생하고, 그렇지 않으면 CharacteristicWriteError 이 설정됩니다. 이 함수를 호출해도 현재 쓰기 요청 후 주변기기 자체에서 값을 다시 변경하지 않는 한 characteristicChanged() 신호가 트리거되지 않습니다.
mode 매개변수는 원격 장치에서 쓰기 확인을 전송할지 여부를 결정합니다. 쓰기 대상 characteristic 은 관련 쓰기 모드를 지원해야 합니다. 특성의 지원되는 쓰기 모드는 QLowEnergyCharacteristic::Write 및 QLowEnergyCharacteristic::WriteNoResponse 속성으로 표시됩니다.
동일한 원격 장치에 대한 모든 설명자 및 특성 쓰기 요청은 직렬화됩니다. 동시에 여러 개의 쓰기 요청을 발행할 때는 큐가 사용됩니다. 대기열은 동일한 특성에 대한 중복된 쓰기 요청을 제거하지 않습니다. 예를 들어 동일한 설명자가 A 값으로 설정되어 있고 바로 뒤에 B로 설정되어 있는 경우 두 개의 쓰기 요청이 주어진 순서대로 실행됩니다.
참고: 현재 블루투스 사양에 정의된 서명 또는 신뢰성 있는 쓰기는 사용할 수 없습니다.
이 서비스가 ServiceDiscovered 상태이고 해당 서비스에 속하는 경우에만 특성을 쓸 수 있습니다. 이러한 조건 중 하나가 사실이 아닌 경우 QLowEnergyService::OperationError 이 설정됩니다.
참고: QLowEnergyCharacteristic::properties()가 쓰기 불가능한 속성을 보고함에도 불구하고 이 함수를 호출하면 항상 하드웨어에 쓰기를 시도합니다. 마찬가지로, 특성이 WriteWithResponse 만 지원할 수 있지만 WriteWithoutResponse 도 하드웨어로 전송됩니다. 하드웨어가 오류와 함께 반환하면 CharacteristicWriteError 이 설정됩니다.
주변 역할
이 호출로 인해 특성 값이 로컬 데이터베이스에서 업데이트됩니다.
클라이언트가 현재 연결되어 있고 해당 특성에 대한 알림이나 표시를 사용 설정한 경우 해당 정보가 전송됩니다. 디바이스가 특성에 대한 알림 또는 표시를 사용 설정했고 해당 디바이스가 현재 연결되어 있지 않지만 로컬 디바이스 사이에 본드가 존재하면 다음에 다시 연결될 때 알림 또는 표시가 전송됩니다.
특성 값의 길이에 대한 제약 조건이 있고 newValue 이 해당 제약 조건을 준수하지 않는 경우 동작이 지정되지 않습니다.
참고: mode 인수는 주변 장치 모드에서 무시됩니다.
QLowEnergyService::characteristicWritten() 및 QLowEnergyService::readCharacteristic()도 참조하세요 .
void QLowEnergyService::writeDescriptor(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue)
descriptor 의 값으로 newValue 을 씁니다. 정확한 의미는 연결된 컨트롤러 객체의 역할에 따라 달라집니다.
중심 역할
이 함수를 호출하면 원격 장치에 쓰기 요청이 발생합니다. 작업이 성공하면 descriptorWritten() 신호가 전송되고, 그렇지 않으면 DescriptorWriteError 신호가 전송됩니다.
동일한 원격 장치에 대한 모든 설명자 및 특성 요청은 직렬화됩니다. 동시에 여러 개의 쓰기 요청을 발행할 때는 큐가 사용됩니다. 큐는 동일한 설명자에 대한 중복된 쓰기 요청을 제거하지 않습니다. 예를 들어 동일한 설명자를 값 A로 설정하고 바로 뒤에 B로 설정하면 두 개의 쓰기 요청이 주어진 순서대로 실행됩니다.
설명자는 이 서비스가 ServiceDiscovered 상태이고 서비스에 속한 경우에만 쓸 수 있습니다. 이 조건 중 하나라도 해당되지 않으면 QLowEnergyService::OperationError 상태가 설정됩니다.
주변 역할
값이 로컬 서비스 데이터베이스에 기록됩니다. newValue 의 내용이 descriptor 에 유효하지 않은 경우 동작이 지정되지 않습니다.
descriptorWritten() 및 readDescriptor()도 참조하세요 .
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.