2021-04-14 18:23:12 +03:00
|
|
|
// +build softdevice,s113v7 softdevice,s132v6 softdevice,s140v6 softdevice,s140v7
|
2020-05-24 22:23:34 +03:00
|
|
|
|
|
|
|
package bluetooth
|
|
|
|
|
2021-04-14 18:23:12 +03:00
|
|
|
// This file defines the SoftDevice adapter for all nrf52-series chips.
|
|
|
|
|
2020-05-24 22:23:34 +03:00
|
|
|
/*
|
|
|
|
// Define SoftDevice functions as regular function declarations (not inline
|
|
|
|
// static functions).
|
|
|
|
#define SVCALL_AS_NORMAL_FUNCTION
|
|
|
|
|
|
|
|
#include "nrf_sdm.h"
|
2020-06-11 17:52:04 +03:00
|
|
|
#include "nrf_nvic.h"
|
2020-05-24 22:23:34 +03:00
|
|
|
#include "ble.h"
|
|
|
|
#include "ble_gap.h"
|
|
|
|
|
|
|
|
void assertHandler(void);
|
|
|
|
*/
|
|
|
|
import "C"
|
|
|
|
|
2020-08-01 19:39:34 +03:00
|
|
|
import (
|
|
|
|
"machine"
|
|
|
|
"unsafe"
|
|
|
|
)
|
2020-05-24 22:23:34 +03:00
|
|
|
|
|
|
|
//export assertHandler
|
|
|
|
func assertHandler() {
|
|
|
|
println("SoftDevice assert")
|
|
|
|
}
|
|
|
|
|
2020-08-01 19:39:34 +03:00
|
|
|
var clockConfigXtal C.nrf_clock_lf_cfg_t = C.nrf_clock_lf_cfg_t{
|
|
|
|
source: C.NRF_CLOCK_LF_SRC_XTAL,
|
|
|
|
rc_ctiv: 0,
|
|
|
|
rc_temp_ctiv: 0,
|
|
|
|
accuracy: C.NRF_CLOCK_LF_ACCURACY_250_PPM,
|
2020-05-24 22:23:34 +03:00
|
|
|
}
|
|
|
|
|
2021-04-14 19:02:41 +03:00
|
|
|
//go:extern __app_ram_base
|
|
|
|
var appRAMBase [0]uint32
|
|
|
|
|
2020-05-24 22:23:34 +03:00
|
|
|
func (a *Adapter) enable() error {
|
|
|
|
// Enable the SoftDevice.
|
2020-08-01 19:39:34 +03:00
|
|
|
var clockConfig *C.nrf_clock_lf_cfg_t
|
|
|
|
if machine.HasLowFrequencyCrystal {
|
|
|
|
clockConfig = &clockConfigXtal
|
|
|
|
}
|
|
|
|
errCode := C.sd_softdevice_enable(clockConfig, C.nrf_fault_handler_t(C.assertHandler))
|
2020-05-24 22:23:34 +03:00
|
|
|
if errCode != 0 {
|
|
|
|
return Error(errCode)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Enable the BLE stack.
|
2021-04-14 19:02:41 +03:00
|
|
|
appRAMBase := uint32(uintptr(unsafe.Pointer(&appRAMBase)))
|
2020-05-24 22:23:34 +03:00
|
|
|
errCode = C.sd_ble_enable(&appRAMBase)
|
|
|
|
return makeError(errCode)
|
|
|
|
}
|
2021-11-02 01:35:48 +03:00
|
|
|
|
|
|
|
func (a *Adapter) Address() (MACAddress, error) {
|
|
|
|
var addr C.ble_gap_addr_t
|
|
|
|
errCode := C.sd_ble_gap_addr_get(&addr)
|
|
|
|
if errCode != 0 {
|
|
|
|
return MACAddress{}, Error(errCode)
|
|
|
|
}
|
|
|
|
return MACAddress{MAC: addr.addr}, nil
|
|
|
|
}
|