diff options
Diffstat (limited to 'third_party/blurmac/src/framework.rs')
-rw-r--r-- | third_party/blurmac/src/framework.rs | 490 |
1 files changed, 490 insertions, 0 deletions
diff --git a/third_party/blurmac/src/framework.rs b/third_party/blurmac/src/framework.rs new file mode 100644 index 00000000000..a441b9ecb18 --- /dev/null +++ b/third_party/blurmac/src/framework.rs @@ -0,0 +1,490 @@ +// Copyright (c) 2017 Akos Kiss. +// +// Licensed under the BSD 3-Clause License +// <LICENSE.md or https://opensource.org/licenses/BSD-3-Clause>. +// This file may not be copied, modified, or distributed except +// according to those terms. + +use std::os::raw::{c_char, c_int, c_uint}; + +use objc::runtime::{Class, Object, BOOL}; + +#[allow(non_upper_case_globals)] +pub const nil: *mut Object = 0 as *mut Object; + +pub mod ns { + use super::*; + + // NSObject + + pub fn object_copy(nsobject: *mut Object) -> *mut Object { + unsafe { + let copy: *mut Object = msg_send![nsobject, copy]; + copy + } + } + + // NSNumber + + pub fn number_withbool(value: BOOL) -> *mut Object { + unsafe { + let nsnumber: *mut Object = + msg_send![Class::get("NSNumber").unwrap(), numberWithBool: value]; + nsnumber + } + } + + pub fn number_withunsignedlonglong(value: u64) -> *mut Object { + unsafe { + let nsnumber: *mut Object = msg_send![ + Class::get("NSNumber").unwrap(), + numberWithUnsignedLongLong: value + ]; + nsnumber + } + } + + pub fn number_unsignedlonglongvalue(nsnumber: *mut Object) -> u64 { + unsafe { + let value: u64 = msg_send![nsnumber, unsignedLongLongValue]; + value + } + } + + // NSString + + pub fn string(cstring: *const c_char) -> *mut Object /* NSString* */ { + unsafe { + let nsstring: *mut Object = msg_send![ + Class::get("NSString").unwrap(), + stringWithUTF8String: cstring + ]; + nsstring + } + } + + pub fn string_utf8string(nsstring: *mut Object) -> *const c_char { + unsafe { + let utf8string: *const c_char = msg_send![nsstring, UTF8String]; + utf8string + } + } + + // NSArray + + pub fn array_count(nsarray: *mut Object) -> c_uint { + unsafe { + let count: c_uint = msg_send![nsarray, count]; + count + } + } + + pub fn array_objectatindex(nsarray: *mut Object, index: c_uint) -> *mut Object { + unsafe { + let object: *mut Object = msg_send![nsarray, objectAtIndex: index]; + object + } + } + + // NSDictionary + + pub fn dictionary_allkeys(nsdict: *mut Object) -> *mut Object /* NSArray* */ { + unsafe { + let keys: *mut Object = msg_send![nsdict, allKeys]; + keys + } + } + + pub fn dictionary_objectforkey(nsdict: *mut Object, key: *mut Object) -> *mut Object { + unsafe { + let object: *mut Object = msg_send![nsdict, objectForKey: key]; + object + } + } + + // NSMutableDictionary : NSDictionary + + pub fn mutabledictionary() -> *mut Object { + unsafe { + let nsmutdict: *mut Object = + msg_send![Class::get("NSMutableDictionary").unwrap(), dictionaryWithCapacity:0]; + nsmutdict + } + } + + pub fn mutabledictionary_removeobjectforkey(nsmutdict: *mut Object, key: *mut Object) { + unsafe { + let () = msg_send![nsmutdict, removeObjectForKey: key]; + } + } + + pub fn mutabledictionary_setobject_forkey( + nsmutdict: *mut Object, + object: *mut Object, + key: *mut Object, + ) { + unsafe { + let () = msg_send![nsmutdict, setObject:object forKey:key]; + } + } + + // NSData + + pub fn data(bytes: *const u8, length: c_uint) -> *mut Object /* NSData* */ { + unsafe { + let data: *mut Object = + msg_send![Class::get("NSData").unwrap(), dataWithBytes:bytes length:length]; + data + } + } + + pub fn data_length(nsdata: *mut Object) -> c_uint { + unsafe { + let length: c_uint = msg_send![nsdata, length]; + length + } + } + + pub fn data_bytes(nsdata: *mut Object) -> *const u8 { + unsafe { + let bytes: *const u8 = msg_send![nsdata, bytes]; + bytes + } + } + + // NSUUID + + pub fn uuid_uuidstring(nsuuid: *mut Object) -> *mut Object /* NSString* */ { + unsafe { + let uuidstring: *mut Object = msg_send![nsuuid, UUIDString]; + uuidstring + } + } +} + +pub mod io { + use super::*; + + #[link(name = "IOBluetooth", kind = "framework")] + extern "C" { + pub fn IOBluetoothPreferenceGetControllerPowerState() -> c_int; + pub fn IOBluetoothPreferenceSetControllerPowerState(state: c_int); + + pub fn IOBluetoothPreferenceGetDiscoverableState() -> c_int; + pub fn IOBluetoothPreferenceSetDiscoverableState(state: c_int); + } + + // IOBluetoothHostController + + pub fn bluetoothhostcontroller_defaultcontroller() -> *mut Object /* IOBluetoothHostController* */ + { + unsafe { + let defaultcontroller: *mut Object = msg_send![ + Class::get("IOBluetoothHostController").unwrap(), + defaultController + ]; + defaultcontroller + } + } + + pub fn bluetoothhostcontroller_nameasstring(iobthc: *mut Object) -> *mut Object /* NSString* */ + { + unsafe { + let name: *mut Object = msg_send![iobthc, nameAsString]; + name + } + } + + pub fn bluetoothhostcontroller_addressasstring(iobthc: *mut Object) -> *mut Object /* NSString* */ + { + unsafe { + let address: *mut Object = msg_send![iobthc, addressAsString]; + address + } + } + + pub fn bluetoothhostcontroller_classofdevice(iobthc: *mut Object) -> u32 { + unsafe { + let classofdevice: u32 = msg_send![iobthc, classOfDevice]; + classofdevice + } + } + + // IOBluetoothPreference... + + pub fn bluetoothpreferencegetcontrollerpowerstate() -> c_int { + unsafe { IOBluetoothPreferenceGetControllerPowerState() } + } + + pub fn bluetoothpreferencesetcontrollerpowerstate(state: c_int) { + unsafe { + IOBluetoothPreferenceSetControllerPowerState(state); + } + } + + pub fn bluetoothpreferencegetdiscoverablestate() -> c_int { + unsafe { IOBluetoothPreferenceGetDiscoverableState() } + } + + pub fn bluetoothpreferencesetdiscoverablestate(state: c_int) { + unsafe { + IOBluetoothPreferenceSetDiscoverableState(state); + } + } +} + +pub mod cb { + use super::*; + + mod link { + use super::*; + + #[link(name = "CoreBluetooth", kind = "framework")] + extern "C" { + pub static CBAdvertisementDataServiceUUIDsKey: *mut Object; + + pub static CBCentralManagerScanOptionAllowDuplicatesKey: *mut Object; + } + } + + // CBCentralManager + + pub fn centralmanager(delegate: *mut Object, /*CBCentralManagerDelegate* */) -> *mut Object /*CBCentralManager* */ + { + unsafe { + let cbcentralmanager: *mut Object = + msg_send![Class::get("CBCentralManager").unwrap(), alloc]; + let () = msg_send![cbcentralmanager, initWithDelegate:delegate queue:nil]; + cbcentralmanager + } + } + + pub fn centralmanager_scanforperipherals_options( + cbcentralmanager: *mut Object, + options: *mut Object, /* NSDictionary<NSString*,id> */ + ) { + unsafe { + let () = + msg_send![cbcentralmanager, scanForPeripheralsWithServices:nil options:options]; + } + } + + pub fn centralmanager_stopscan(cbcentralmanager: *mut Object) { + unsafe { + let () = msg_send![cbcentralmanager, stopScan]; + } + } + + pub fn centralmanager_connectperipheral( + cbcentralmanager: *mut Object, + peripheral: *mut Object, /* CBPeripheral* */ + ) { + unsafe { + let () = msg_send![cbcentralmanager, connectPeripheral:peripheral options:nil]; + } + } + + pub fn centralmanager_cancelperipheralconnection( + cbcentralmanager: *mut Object, + peripheral: *mut Object, /* CBPeripheral* */ + ) { + unsafe { + let () = msg_send![cbcentralmanager, cancelPeripheralConnection: peripheral]; + } + } + + // CBPeer + + pub fn peer_identifier(cbpeer: *mut Object) -> *mut Object /* NSUUID* */ { + unsafe { + let identifier: *mut Object = msg_send![cbpeer, identifier]; + identifier + } + } + + // CBPeripheral : CBPeer + + pub fn peripheral_name(cbperipheral: *mut Object) -> *mut Object /* NSString* */ { + unsafe { + let name: *mut Object = msg_send![cbperipheral, name]; + name + } + } + + pub fn peripheral_state(cbperipheral: *mut Object) -> c_int { + unsafe { + let state: c_int = msg_send![cbperipheral, state]; + state + } + } + + pub fn peripheral_setdelegate( + cbperipheral: *mut Object, + delegate: *mut Object, /* CBPeripheralDelegate* */ + ) { + unsafe { + let () = msg_send![cbperipheral, setDelegate: delegate]; + } + } + + pub fn peripheral_discoverservices(cbperipheral: *mut Object) { + unsafe { + let () = msg_send![cbperipheral, discoverServices: nil]; + } + } + + pub fn peripheral_discoverincludedservicesforservice( + cbperipheral: *mut Object, + service: *mut Object, /* CBService* */ + ) { + unsafe { + let () = msg_send![cbperipheral, discoverIncludedServices:nil forService:service]; + } + } + + pub fn peripheral_services(cbperipheral: *mut Object) -> *mut Object /* NSArray<CBService*>* */ + { + unsafe { + let services: *mut Object = msg_send![cbperipheral, services]; + services + } + } + + pub fn peripheral_discovercharacteristicsforservice( + cbperipheral: *mut Object, + service: *mut Object, /* CBService* */ + ) { + unsafe { + let () = msg_send![cbperipheral, discoverCharacteristics:nil forService:service]; + } + } + + pub fn peripheral_readvalueforcharacteristic( + cbperipheral: *mut Object, + characteristic: *mut Object, /* CBCharacteristic* */ + ) { + unsafe { + let () = msg_send![cbperipheral, readValueForCharacteristic: characteristic]; + } + } + + pub fn peripheral_writevalue_forcharacteristic( + cbperipheral: *mut Object, + value: *mut Object, /* NSData* */ + characteristic: *mut Object, /* CBCharacteristic* */ + ) { + unsafe { + let () = + msg_send![cbperipheral, writeValue:value forCharacteristic:characteristic type:0]; + // CBCharacteristicWriteWithResponse from CBPeripheral.h + } + } + + pub fn peripheral_setnotifyvalue_forcharacteristic( + cbperipheral: *mut Object, + value: BOOL, + characteristic: *mut Object, /* CBCharacteristic* */ + ) { + unsafe { + let () = msg_send![cbperipheral, setNotifyValue:value forCharacteristic:characteristic]; + } + } + + pub fn peripheral_discoverdescriptorsforcharacteristic( + cbperipheral: *mut Object, + characteristic: *mut Object, /* CBCharacteristic* */ + ) { + unsafe { + let () = msg_send![ + cbperipheral, + discoverDescriptorsForCharacteristic: characteristic + ]; + } + } + + // CBPeripheralState = NSInteger from CBPeripheral.h + + pub const PERIPHERALSTATE_CONNECTED: c_int = 2; // CBPeripheralStateConnected + + // CBAttribute + + pub fn attribute_uuid(cbattribute: *mut Object) -> *mut Object /* CBUUID* */ { + unsafe { + let uuid: *mut Object = msg_send![cbattribute, UUID]; + uuid + } + } + + // CBService : CBAttribute + + // pub fn service_isprimary(cbservice: *mut Object) -> BOOL { + // unsafe { + // let isprimary: BOOL = msg_send![cbservice, isPrimary]; + // isprimary + // } + // } + + pub fn service_includedservices(cbservice: *mut Object) -> *mut Object /* NSArray<CBService*>* */ + { + unsafe { + let includedservices: *mut Object = msg_send![cbservice, includedServices]; + includedservices + } + } + + pub fn service_characteristics(cbservice: *mut Object) -> *mut Object /* NSArray<CBCharacteristic*>* */ + { + unsafe { + let characteristics: *mut Object = msg_send![cbservice, characteristics]; + characteristics + } + } + + // CBCharacteristic : CBAttribute + + pub fn characteristic_isnotifying(cbcharacteristic: *mut Object) -> BOOL { + unsafe { + let isnotifying: BOOL = msg_send![cbcharacteristic, isNotifying]; + isnotifying + } + } + + pub fn characteristic_value(cbcharacteristic: *mut Object) -> *mut Object /* NSData* */ { + unsafe { + let value: *mut Object = msg_send![cbcharacteristic, value]; + value + } + } + + pub fn characteristic_properties(cbcharacteristic: *mut Object) -> c_uint { + unsafe { + let properties: c_uint = msg_send![cbcharacteristic, properties]; + properties + } + } + + // CBCharacteristicProperties = NSUInteger from CBCharacteristic.h + + pub const CHARACTERISTICPROPERTY_BROADCAST: c_uint = 0x01; // CBCharacteristicPropertyBroadcast + pub const CHARACTERISTICPROPERTY_READ: c_uint = 0x02; // CBCharacteristicPropertyRead + pub const CHARACTERISTICPROPERTY_WRITEWITHOUTRESPONSE: c_uint = 0x04; // CBCharacteristicPropertyWriteWithoutResponse + pub const CHARACTERISTICPROPERTY_WRITE: c_uint = 0x08; // CBCharacteristicPropertyWrite + pub const CHARACTERISTICPROPERTY_NOTIFY: c_uint = 0x10; // CBCharacteristicPropertyNotify + pub const CHARACTERISTICPROPERTY_INDICATE: c_uint = 0x20; // CBCharacteristicPropertyIndicate + pub const CHARACTERISTICPROPERTY_AUTHENTICATEDSIGNEDWRITES: c_uint = 0x40; // CBCharacteristicPropertyAuthenticatedSignedWrites + + // CBUUID + + pub fn uuid_uuidstring(cbuuid: *mut Object) -> *mut Object /* NSString* */ { + unsafe { + let uuidstring: *mut Object = msg_send![cbuuid, UUIDString]; + uuidstring + } + } + + // CBCentralManagerScanOption...Key + + // CBAdvertisementData...Key + pub use self::link::CBAdvertisementDataServiceUUIDsKey as ADVERTISEMENTDATASERVICEUUIDSKEY; + pub use self::link::CBCentralManagerScanOptionAllowDuplicatesKey as CENTRALMANAGERSCANOPTIONALLOWDUPLICATESKEY; +} |