diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2006-10-04 23:06:10 +0000 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2006-10-04 23:06:10 +0000 |
commit | f379471f3a551f89cbc4554941423895b1e56325 (patch) | |
tree | f33643b4e8c8a368df3eef9f656315abfcbda9de /hcid/storage.c | |
parent | 646a24a13d9ec1acffc52d7c8dba0efed1d2da1a (diff) |
More D-Bus Test interface implementation
Diffstat (limited to 'hcid/storage.c')
-rw-r--r-- | hcid/storage.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/hcid/storage.c b/hcid/storage.c index ade97641..f321ab35 100644 --- a/hcid/storage.c +++ b/hcid/storage.c @@ -267,6 +267,70 @@ int read_device_name(bdaddr_t *local, bdaddr_t *peer, char *name) return 0; } +int write_l2cap_info(bdaddr_t *local, bdaddr_t *peer, + uint16_t mtu_result, uint16_t mtu, + uint16_t mask_result, uint32_t mask) +{ + char filename[PATH_MAX + 1], addr[18], str[18]; + + if (mask_result) + snprintf(str, sizeof(str), "%d -1", mtu_result ? -1 : mtu); + else + snprintf(str, sizeof(str), "%d 0x%08x", mtu_result ? -1 : mtu, mask); + + create_filename(filename, PATH_MAX, local, "l2cap"); + + create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + + ba2str(peer, addr); + return textfile_put(filename, addr, str); +} + +int read_l2cap_info(bdaddr_t *local, bdaddr_t *peer, + uint16_t *mtu_result, uint16_t *mtu, + uint16_t *mask_result, uint32_t *mask) +{ + char filename[PATH_MAX + 1], addr[18], *str, *space, *msk; + + create_filename(filename, PATH_MAX, local, "l2cap"); + + ba2str(peer, addr); + str = textfile_get(filename, addr); + if (!str) + return -ENOENT; + + space = strchr(str, ' '); + if (!space) { + free(str); + return -ENOENT; + } + + msk = space + 1; + *space = '\0'; + + if (mtu_result && mtu) { + if (str[0] == '-') + *mtu_result = 0x0001; + else { + *mtu_result = 0; + *mtu = (uint16_t) strtol(str, NULL, 0); + } + } + + if (mask_result && mask) { + if (msk[0] == '-') + *mask_result = 0x0001; + else { + *mask_result = 0; + *mask = (uint32_t) strtol(msk, NULL, 16); + } + } + + free(str); + + return 0; +} + int write_version_info(bdaddr_t *local, bdaddr_t *peer, uint16_t manufacturer, uint8_t lmp_ver, uint16_t lmp_subver) { char filename[PATH_MAX + 1], addr[18], str[16]; |