blob: c4d677b434502632d3d146ce97eb917e3f3d0d86 [file] [log] [blame]
package darwin
import (
"github.com/raff/goble/xpc"
)
// xpc command IDs are OS X version specific, so we will use a map
// to be able to handle arbitrary versions
var (
cmdInit,
cmdAdvertiseStart,
cmdAdvertiseStop,
cmdScanningStart,
cmdScanningStop,
cmdServicesAdd,
cmdServicesRemove,
cmdSendData,
cmdSubscribed,
cmdConnect,
cmdDisconnect,
cmdReadRSSI,
cmdDiscoverServices,
cmdDiscoverIncludedServices,
cmdDiscoverCharacteristics,
cmdReadCharacteristic,
cmdWriteCharacteristic,
cmdSubscribeCharacteristic,
cmdDiscoverDescriptors,
cmdReadDescriptor,
cmdWriteDescriptor,
evtStateChanged,
evtAdvertisingStarted,
evtAdvertisingStopped,
evtServiceAdded,
evtReadRequest,
evtWriteRequest,
evtSubscribe,
evtUnsubscribe,
evtConfirmation,
evtPeripheralDiscovered,
evtPeripheralConnected,
evtPeripheralDisconnected,
evtATTMTU,
evtRSSIRead,
evtServiceDiscovered,
evtIncludedServicesDiscovered,
evtCharacteristicsDiscovered,
evtCharacteristicRead,
evtCharacteristicWritten,
evtNotificationValueSet,
evtDescriptorsDiscovered,
evtDescriptorRead,
evtDescriptorWritten,
evtSlaveConnectionComplete,
evtMasterConnectionComplete int
)
var serviceID string
func initXpcIDs() error {
var utsname xpc.Utsname
err := xpc.Uname(&utsname)
if err != nil {
return err
}
cmdInit = 1
if utsname.Release < "17." {
// yosemite
cmdAdvertiseStart = 8
cmdAdvertiseStop = 9
cmdServicesAdd = 10
cmdServicesRemove = 12
cmdSendData = 13
cmdSubscribed = 15
cmdScanningStart = 29
cmdScanningStop = 30
cmdConnect = 31
cmdDisconnect = 32
cmdReadRSSI = 44
cmdDiscoverServices = 45
cmdDiscoverIncludedServices = 60
cmdDiscoverCharacteristics = 62
cmdReadCharacteristic = 65
cmdWriteCharacteristic = 66
cmdSubscribeCharacteristic = 68
cmdDiscoverDescriptors = 70
cmdReadDescriptor = 77
cmdWriteDescriptor = 78
evtStateChanged = 6
evtAdvertisingStarted = 16
evtAdvertisingStopped = 17
evtServiceAdded = 18
evtReadRequest = 19
evtWriteRequest = 20
evtSubscribe = 21
evtUnsubscribe = 22
evtConfirmation = 23
evtPeripheralDiscovered = 37
evtPeripheralConnected = 38
evtPeripheralDisconnected = 40
evtATTMTU = 53
evtRSSIRead = 55
evtServiceDiscovered = 56
evtIncludedServicesDiscovered = 63
evtCharacteristicsDiscovered = 64
evtCharacteristicRead = 71
evtCharacteristicWritten = 72
evtNotificationValueSet = 74
evtDescriptorsDiscovered = 76
evtDescriptorRead = 79
evtDescriptorWritten = 80
evtSlaveConnectionComplete = 81
evtMasterConnectionComplete = 82
serviceID = "com.apple.blued"
} else {
// high sierra
cmdSendData = 21
cmdSubscribed = 22
cmdAdvertiseStart = 16
cmdAdvertiseStop = 17
cmdServicesAdd = 18
cmdServicesRemove = 19
cmdScanningStart = 44
cmdScanningStop = 45
cmdConnect = 46
cmdDisconnect = 47
cmdReadRSSI = 61
cmdDiscoverServices = 62
cmdDiscoverIncludedServices = 74
cmdDiscoverCharacteristics = 75
cmdReadCharacteristic = 78
cmdWriteCharacteristic = 79
cmdSubscribeCharacteristic = 81
cmdDiscoverDescriptors = 82
cmdReadDescriptor = 88
cmdWriteDescriptor = 89
evtStateChanged = 4
evtPeripheralDiscovered = 48
evtPeripheralConnected = 49
evtPeripheralDisconnected = 50
evtRSSIRead = 71
evtServiceDiscovered = 72
evtCharacteristicsDiscovered = 77
evtCharacteristicRead = 83
evtCharacteristicWritten = 84
evtNotificationValueSet = 86
evtDescriptorsDiscovered = 87
evtDescriptorRead = 90
evtDescriptorWritten = 91
evtAdvertisingStarted = 27
evtAdvertisingStopped = 28
evtServiceAdded = 29
evtReadRequest = 30
evtWriteRequest = 31
evtSubscribe = 32
evtUnsubscribe = 33
evtConfirmation = 34
evtATTMTU = 57
evtSlaveConnectionComplete = 60 // should be called params update
evtMasterConnectionComplete = 59 //not confident
evtIncludedServicesDiscovered = 76
serviceID = "com.apple.bluetoothd"
}
return nil
}