Bluetooth on Cocoa, OS X
ケータイでとった写真を自動でかきあつめて日付別にディレクトリにつっこみたかったので Bluetooth をいぢってみた。
いつものとおり RubyCocoa さん
require "osx/cocoa"
include OSX
NSBundle.bundleWithPath("/System/Library/Frameworks/IOBluetooth.framework").load
OSX.ns_import :IOBluetoothObject
OSX.ns_import :IOBluetoothDevice
OSX.ns_import :IOBluetoothOBEXSession
OSX.ns_import :OBEXFileTransferServices
#NSBundle.bundleWithPath("/System/Library/Frameworks/IOBluetoothUI.framework").load
#OSX.ns_import :IOBluetoothDeviceSelectorController
#p OSX::IOBluetoothDeviceSelectorController.deviceSelector.runModal
#
def log(*args)
OSX.NSLog(args.map {|o| o.inspect }.join("¥n")+"¥n")
end
class Main < NSObject
def init
self
end
def applicationDidFinishLaunching(aNotification)
IOBluetoothDevice.pairedDevices.each do |d|
log d.getAddressString.to_s
log d.getName.to_s
d.getServices.each do |s|
log s.getServiceName.to_s
end
end
target = "Nyece"
@device = IOBluetoothDevice.pairedDevices.find {|d| d.getName.to_s == target }
#@device.openConnection
@session = IOBluetoothOBEXSession.withDevice_channelID(@device, 10)
@ftp = OBEXFileTransferServices.alloc.initWithOBEXSession(@session)
@ftp.setDelegate(self)
log @ftp.delegate
log @ftp
log @ftp.isConnected?
log @ftp.connectToFTPService
end
def fileTransferServicesConnectionComplete_error(service, error)
log "FTP Connected"
log @ftp.currentPath
@ftp.retrieveFolderListing
end
def fileTransferServicesRetrieveFolderListingComplete_error_listing(service, error, listing)
log "ls complete"
log listing.to_a
log @ftp.disconnect
#@device.closeConnection
end
end
app = OSX::NSApplication.sharedApplication
app.setDelegate(Main.alloc.init)
trap('SIGINT') { exit 0 }
app.runが、BUS Error ( fileTransferServicesConnectionComplete_error の呼びだしで落ちてる ) うまくいかない。orz
obj-c で書いたほうがはやいだろうなぁ。でもなんかそれは負けた気がする。
わかったこと
- ファイルのやりとりは OBEX っていう転送プロトコルがつかわれる (IrDA と同じらしい)
- OBEXFileTransferServices は自分で openConnection しなくても勝手にひらいてくれる
- ファイルのやりとりいがいはたぶん OBEXSession を直接つかって open & delegate するのかな。
プロトコル調べるのがめんどい。
アプリケーションバンドル化してみたけどやぱ BUS Error で落ちる。むりか。