Gerätebenachrichtigungsantwort¶
⚠️ Achtung: Dieses Dokument beschreibt, wie man die API des SDKs verwendet, um Scanvorgänge durchzuführen, und bietet Beispielcode in C. Beachten Sie, dass die API synchron arbeitet und den Hauptthread blockieren kann.
⚠️ Achtung: Vor der Verwendung der API muss das Gerät erfolgreich verbunden sein.
1. Gerätebenachrichtigungsantwort¶
Die zu verwendenden Bluetooth-Dienste und -Merkmale UUIDs sind wie folgt:
Bluetooth | UUID |
---|---|
Service | 0x0000ff0000001000800000805f9b34fb |
Characteristic | 0x0000ff0100001000800000805f9b34fb |
Nach erfolgreicher Verbindung mit dem Gerät müssen Sie die Benachrichtigungen registrieren, um Nachrichten vom Gerät zu empfangen. Sie können die Benachrichtigungen mit der folgenden Methode analysieren:
const char* result = inateck_scanner_cmd_notify_data_result(data, data_length);
Das Ergebnis wird im JSON
-Format zurückgegeben. Wenn der Aufruf erfolgreich ist, gibt result
Folgendes zurück:
{
"notify_type": 0,
"notify_status": 1,
"notify_data": [0, 1, 2, 3],
}
Wenn der Aufruf fehlschlägt, gibt result
Folgendes zurück:
{
"notify_type": 0,
"notify_status": 0,
"notify_data": [],
}
Erklärung der Rückgabewerte:
notify_type
: Nachrichtentyp.0
bedeutet Scanergebnis,1
bedeutet Antwort auf den Einstellungsbefehl.notify_status
: Nachrichtenstatus.0
bedeutet, dass die Daten unvollständig sind und weitere Daten empfangen werden müssen;1
bedeutet, dass die Daten vollständig empfangen wurden und analysiert werden können;2
bedeutet, dass ein Fehler beim Empfang der Daten aufgetreten ist.notify_data
: Nachrichtendaten, Byte-Array. Wennnotify_status
0
ist, müssen dienotify_data
gespeichert werden, um sie bei Empfang neuer Daten zu den vorhandenennotify_data
hinzuzufügen und dann erneut die Methodeinateck_scanner_cmd_notify_data_result
zur Analyse aufzurufen.
2. Beispielcode¶
#include <stdio.h>
#include <string.h>
#include "inateck_scanner_cmd.h"
#define MAX_DATA_LENGTH 1024
unsigned char total_data[MAX_DATA_LENGTH];
int total_data_length = 0;
void notify_data_result(const unsigned char* data, int data_length) {
// Fügen Sie die empfangenen Daten an das Ende von total_data an
if (total_data_length + data_length < MAX_DATA_LENGTH) {
memcpy(total_data + total_data_length, data, data_length);
total_data_length += data_length;
} else {
printf("Datenlänge überschreitet die Puffergröße\n");
return;
}
const char* result = inateck_scanner_cmd_notify_data_result(total_data, total_data_length);
if (result) {
// Analysieren Sie das JSON-Ergebnis, bitte passen Sie die Analyse an Ihre Bedürfnisse an
int notify_status = ...; // Analysieren Sie notify_status
const unsigned char* notify_data = ...; // Analysieren Sie notify_data
int notify_data_length = ...; // Analysieren Sie die Länge von notify_data
int notify_type = ...; // Analysieren Sie notify_type
if (notify_status == 0) {
// Daten unvollständig, weitere Daten empfangen
// Weisen Sie notify_data total_data zu, warten Sie auf den Empfang neuer Daten und fügen Sie diese zu den vorhandenen total_data hinzu, und rufen Sie dann erneut die Methode inateck_scanner_cmd_notify_data_result zur Analyse auf
memcpy(total_data, notify_data, notify_data_length); // Verwenden Sie die Länge von notify_data
total_data_length = notify_data_length;
printf("Daten unvollständig, weitere Daten empfangen\n");
} else if (notify_status == 1) {
// Daten vollständig empfangen, können analysiert werden
if (notify_type == 0) {
// Scanergebnis
printf("Scanergebnis: %s\n", notify_data);
} else if (notify_type == 1) {
// Antwort auf den Einstellungsbefehl
printf("Benachrichtigungsergebnis: %s\n", notify_data);
}
// Daten löschen
total_data_length = 0;
} else {
// Fehler beim Empfang der Daten
printf("Benachrichtigungsfehler\n");
// Daten löschen
total_data_length = 0;
}
printf("Benachrichtigungsergebnis: %s\n", result);
}
}
int main() {
// Bluetooth-Gerät verbinden
// Benachrichtigungen registrieren
// Benachrichtigungen empfangen
return 0;
}