@@ -27,6 +27,7 @@ type Address struct {
27
27
type Advertisement struct {
28
28
interval Duration
29
29
isAdvertising volatile.Register8
30
+ typ uint8
30
31
}
31
32
32
33
var defaultAdvertisement Advertisement
@@ -53,6 +54,17 @@ func (a *Advertisement) Configure(options AdvertisementOptions) error {
53
54
return errAdvertisementPacketTooBig
54
55
}
55
56
57
+ switch options .AdvertisementType {
58
+ case AdvertisingTypeInd :
59
+ a .typ = C .BLE_GAP_ADV_TYPE_ADV_IND
60
+ case AdvertisingTypeDirectInd :
61
+ a .typ = C .BLE_GAP_ADV_TYPE_ADV_DIRECT_IND
62
+ case AdvertisingTypeScanInd :
63
+ a .typ = C .BLE_GAP_ADV_TYPE_ADV_SCAN_IND
64
+ case AdvertisingTypeNonConnInd :
65
+ a .typ = C .BLE_GAP_ADV_TYPE_ADV_NONCONN_IND
66
+ }
67
+
56
68
errCode := C .sd_ble_gap_adv_data_set ((* C .uint8_t )(unsafe .Pointer (& payload .data [0 ])), C .uint8_t (payload .len ), nil , 0 )
57
69
a .interval = options .Interval
58
70
return makeError (errCode )
@@ -76,10 +88,23 @@ func (a *Advertisement) Stop() error {
76
88
// is lost.
77
89
func (a * Advertisement ) start () C.uint32_t {
78
90
params := C.ble_gap_adv_params_t {
79
- _type : C . BLE_GAP_ADV_TYPE_ADV_IND ,
91
+ _type : a . typ ,
80
92
fp : C .BLE_GAP_ADV_FP_ANY ,
81
93
interval : C .uint16_t (a .interval ),
82
94
timeout : 0 , // no timeout
83
95
}
84
96
return C .sd_ble_gap_adv_start_noescape (params )
85
97
}
98
+
99
+ // SetRandomAddress sets the random address to be used for advertising.
100
+ func (a * Adapter ) SetRandomAddress (mac MAC ) error {
101
+ var addr C.ble_gap_addr_t
102
+ addr .addr = makeSDAddress (mac )
103
+ addr .addr_type = C .BLE_GAP_ADDR_TYPE_RANDOM_STATIC
104
+
105
+ errCode := C .sd_ble_gap_address_set (C .BLE_GAP_ADDR_CYCLE_MODE_NONE , & addr )
106
+ if errCode != 0 {
107
+ return Error (errCode )
108
+ }
109
+ return nil
110
+ }
0 commit comments