1/*
2 * Copyright 2008-2009, Oliver Ruiz Dorantes, <oliver.ruiz.dorantes@gmail.com>
3 * Copyright 2012-2013, Tri-Edge AI <triedgeai@gmail.com>
4 * Copyright 2021, Haiku, Inc.
5 * Distributed under the terms of the MIT License.
6 *
7 * Authors:
8 * 		Fredrik Mod��en <fredrik_at_modeen.se>
9 */
10
11
12#include "BluetoothSettings.h"
13
14#include <SettingsMessage.h>
15
16
17BluetoothSettings::BluetoothSettings()
18	:
19	fSettingsMessage(B_USER_SETTINGS_DIRECTORY, "Bluetooth_settings")
20{
21	fCurrentSettings.pickeddevice = bdaddrUtils::NullAddress();
22	fCurrentSettings.localdeviceclass = DeviceClass();
23	fCurrentSettings.policy = 0;
24	fCurrentSettings.inquirytime = 15;
25}
26
27
28void
29BluetoothSettings::SetPickedDevice(bdaddr_t pickeddevice)
30{
31	fCurrentSettings.pickeddevice = pickeddevice;
32}
33
34
35void
36BluetoothSettings::SetLocalDeviceClass(DeviceClass localdeviceclass)
37{
38	fCurrentSettings.localdeviceclass = localdeviceclass;
39}
40
41
42void
43BluetoothSettings::SetPolicy(int32 policy)
44{
45	fCurrentSettings.policy = policy;
46}
47
48
49void
50BluetoothSettings::SetInquiryTime(int32 inquirytime)
51{
52	fCurrentSettings.inquirytime = inquirytime;
53}
54
55
56void
57BluetoothSettings::LoadSettings()
58{
59	bdaddr_t* addr;
60	ssize_t size;
61	status_t status = fSettingsMessage.FindData("BDAddress", B_RAW_TYPE,
62		(const void**)&addr, &size);
63	if (status == B_OK)
64		SetPickedDevice(*addr);
65	else
66		SetPickedDevice(bdaddrUtils::NullAddress());
67
68	DeviceClass* devclass;
69	status = fSettingsMessage.FindData("DeviceClass", B_RAW_TYPE,
70		(const void**)&devclass, &size);
71	if (status == B_OK)
72		SetLocalDeviceClass(*devclass);
73	else
74		SetLocalDeviceClass(DeviceClass());
75
76	SetPolicy(fSettingsMessage.GetValue("Policy", (int32)0));
77	SetInquiryTime(fSettingsMessage.GetValue("InquiryTime", (int32)15));
78}
79
80
81void
82BluetoothSettings::SaveSettings()
83{
84	fSettingsMessage.SetValue("DeviceClass", B_RAW_TYPE,
85		&fCurrentSettings.localdeviceclass, sizeof(DeviceClass));
86	fSettingsMessage.SetValue("BDAddress", B_RAW_TYPE, &fCurrentSettings.pickeddevice,
87		sizeof(bdaddr_t));
88	fSettingsMessage.SetValue("Policy", fCurrentSettings.policy);
89	fSettingsMessage.SetValue("InquiryTime", fCurrentSettings.inquirytime);
90
91	fSettingsMessage.Save();
92}
93