/
usb_moded-ssu.c
92 lines (79 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
@file usb_moded-ssu.c
Copyright (C) 2016 Jolla. All rights reserved.
@author: Simo Piiroinen <simo.piiroinen@jollamobile.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the Lesser GNU General Public License
version 2 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the Lesser GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
02110-1301 USA
*/
#include <glib.h>
24
#include <ssusysinfo.h>
25
26
27
#include "usb_moded-ssu.h"
#include "usb_moded-log.h"
28
29
/** Cached ssu-sysinfo handle */
static ssusysinfo_t *ssu_instance = 0;
31
32
/** Flag for ssu-sysinfo instance has been initialized */
static gboolean ssu_intialized = FALSE;
34
35
/** Atexit callback for releasing cached ssu-sysinfo handle */
static void ssu_free_handle(void)
37
38
/* Make sure instance does not get created on exit path */
ssu_intialized = TRUE;
40
41
42
43
/* Release existing instance */
ssusysinfo_delete(ssu_instance),
ssu_instance = 0;
}
45
/** Helper for obtaining ssu-sysinfo handle on demand
47
* @return ssu-sysinfo, or NULL in case of errors
49
static ssusysinfo_t *ssu_get_handle(void)
51
52
53
54
55
56
57
/* Attempt only once */
if( !ssu_intialized ) {
ssu_intialized = TRUE;
ssu_instance = ssusysinfo_create();
atexit(ssu_free_handle);
}
return ssu_instance;
60
/** Read device manufacturer name from the SSU configuration
61
62
63
64
65
66
67
68
*
* Caller must release non-null return value with g_free().
*
* @return human readable string, or NULL in case of errors
*/
gchar *
ssu_get_manufacturer_name(void)
{
69
70
71
72
73
74
gchar *res = 0;
const char *val = ssusysinfo_device_manufacturer(ssu_get_handle());
if( val && strcmp(val, "UNKNOWN") )
res = g_strdup(val);
log_debug("%s() -> %s", __FUNCTION__, res ?: "N/A");
return res;
77
/** Read device model name from the SSU configuration
78
79
80
81
82
83
84
85
*
* Caller must release non-null return value with g_free().
*
* @return human readable string, or NULL in case of errors
*/
gchar *
ssu_get_product_name(void)
{
86
87
88
89
90
91
gchar *res = 0;
const char *val = ssusysinfo_device_pretty_name(ssu_get_handle());
if( val && strcmp(val, "UNKNOWN") )
res = g_strdup(val);
log_debug("%s() -> %s", __FUNCTION__, res ?: "N/A");
return res;