1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
//this example starts discovery on adapter
//after discovery process GetDevices method
//returns list of discovered devices
//then with the help of mac address
//connectivity starts
//once sensors are connected it will
//fetch sensor name,manufacturer detail,
//firmware version, hardware version, model
//and sensor data...
package obex_push_example
import (
"sync"
"time"
"github.com/muka/go-bluetooth/api"
"github.com/muka/go-bluetooth/bluez/profile/obex"
log "github.com/sirupsen/logrus"
)
var wg sync.WaitGroup
func Run(targetAddress, filePath, adapterID string) error {
a, err := api.GetAdapter(adapterID)
if err != nil {
return err
}
dev, err := a.GetDeviceByAddress(targetAddress)
if err != nil {
return err
}
log.Debugf("device %s (%s)", dev.Properties.Name, dev.Properties.Address)
if dev == nil {
return err
}
props, err := dev.GetProperties()
if err != nil {
return err
}
if !props.Paired {
log.Debug("not paired")
err = dev.Pair()
if err != nil {
return err
}
} else {
log.Debug("already paired")
}
sessionArgs := map[string]interface{}{}
sessionArgs["Target"] = "opp"
obexClient := obex.NewObexClient1()
tries := 1
maxRetry := 20
var sessionPath string
for tries < maxRetry {
log.Debug("Create Session...")
sessionPath, err = obexClient.CreateSession(targetAddress, sessionArgs)
if err == nil {
break
}
tries++
if err != nil {
return err
}
}
if tries >= maxRetry {
log.Fatal("Max tries reached")
}
log.Debug("Session created: ", sessionPath)
obexSession := obex.NewObexSession1(sessionPath)
sessionProps, err := obexSession.GetProperties()
if err != nil {
return err
}
log.Debug("Source : ", sessionProps.Source)
log.Debug("Destination : ", sessionProps.Destination)
log.Debug("Channel : ", sessionProps.Channel)
log.Debug("Target : ", sessionProps.Target)
log.Debug("Root : ", sessionProps.Root)
log.Debug("Init transmission on ", sessionPath)
obexObjectPush := obex.NewObjectPush1(sessionPath)
log.Debug("Send File: ", filePath)
transPath, transProps, err := obexObjectPush.SendFile(filePath)
if err != nil {
return err
}
log.Debug("Transmission initiated: ", transPath)
log.Debug("Status : ", transProps.Status)
log.Debug("Session : ", transProps.Session)
log.Debug("Name : ", transProps.Name)
log.Debug("Type : ", transProps.Type)
log.Debug("Time : ", transProps.Time)
log.Debug("Size : ", transProps.Size)
log.Debug("Transferred : ", transProps.Transferred)
log.Debug("Filename : ", transProps.Filename)
for transProps.Transferred < transProps.Size {
time.Sleep(1 * time.Second)
obexTransfer := obex.NewObexTransfer1(transPath)
transProps, err = obexTransfer.GetProperties()
if err != nil {
return err
}
transferedPercent := (100 / float64(transProps.Size)) * float64(transProps.Transferred)
log.Debug("Progress : ", transferedPercent)
}
obexClient.RemoveSession(sessionPath)
log.Debug(sessionPath)
return nil
}
|