Daten aus CBCharacteristic auslesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • TheFuriousLion schrieb:

    Michael schrieb:

    In der Tabelle da spielt sich alles, was unter „Flags“ steht, im Byte 0 ab.
    Ah, jetzt ergibt vieles einen Sinn. :)
    Mich hat 'let reportData = UnsafePointer<UInt8>(data.bytes)' verwirrt, da ich dachte der Pointer zeigt auf nur ein Byte. Und ein Byte besteht bekanntlich ja aus 8 Bits. Kann der UnsafePointer<UInt8> aus mehreren Bytes bestehen? Und warum nimmt man überhaupt UInt8, wenn auch UInt16 vorkommen kann?

    UnsafePointer<UInt8> zeigt ja nur auf eine Speicherstelle, die als UInt8 interpretiert werden soll. UInt8 nimmt man hier, weil man ja auf ein einzelnes Byte zugreifen will. Bei UInt16 würdest du immer gleich zwei Bytes am Wickel haben.

    TheFuriousLion schrieb:

    Michael schrieb:

    Quellcode

    1. let bit0: UInt8 = byte0 & 0b00000001
    Ist das nicht auch ein Byte? Eines bei dem halt nur aufgrund des Bitweisen-UND-Operators nur ein Bit 1 ist?

    Ja, es gibt ja keinen Datentyp „Bit“. Deshalb muss man, wenn man einzelne Bits auswerten will mit den binären Verknüpfungen arbeiten.

    TheFuriousLion schrieb:

    Wenn ich den 'Sensor Contact Status' auslesen will, sehe der Code dann folgendermaßen aus?

    Quellcode

    1. if ((reportData[0] & 0b00000110) >> 1) == 3 {
    2. // Sensor Contact feature is supported and contact is detected
    3. }

    Genau. Alternativ könntest du auch das Schieben nach rechts weg lassen. Dann müsstest du halt mit 0, 2, 4 oder 6 vergleichen.
  • Angenommen, ich will den Gerätenamen aus der DeviceName-Characteristic (Link zur Seite) auslesen, müsste ich UnsafePointer<String> anstatt UnsafePointer<UInt8> verwenden?

    Immer wenn ich Flags als ersten Byte habe, muss ich einen UnsafePointer<UInt8> erstellen, da ich die Flags mit reportData[0] als einzelnen Byte haben will? Gibt jetzt beispielsweise reportData[1] den Typ utf8s zurück, muss ich var theString = String(reportData[1]) schreiben?

    gritsch schrieb:

    du musst schon beide bytes verwenden und danns wapen wenn es sich um uint16 handelt! so klappt das nicht!
    Auf was beziehst du dich?

    gritsch schrieb:

    mit 0b00000110 würdest du auf die ZWEI vorletzen bits "zugreifen"
    Was ja richtig ist, wenn ich den 'Sensor Contact Status' auslesen will, oder?