/
usb_moded-ssu.c
115 lines (99 loc) · 3.36 KB
1
/**
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
* @file usb_moded-ssu.c
*
* Copyright (C) 2016-2018 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
*/
22
23
#include "usb_moded-ssu.h"
24
25
26
#include "usb_moded-log.h"
27
28
29
30
31
#include <stdlib.h>
#include <string.h>
#include <ssusysinfo.h>
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* ========================================================================= *
* Prototypes
* ========================================================================= */
/* -- ssu -- */
static void ssu_free_handle (void);
static ssusysinfo_t *ssu_get_handle (void);
gchar *ssu_get_manufacturer_name(void);
gchar *ssu_get_product_name (void);
/* ========================================================================= *
* Data
* ========================================================================= */
47
48
/** Cached ssu-sysinfo handle */
static ssusysinfo_t *ssu_instance = 0;
49
50
51
/** Flag for ssu-sysinfo instance has been initialized */
static gboolean ssu_intialized = FALSE;
52
53
54
55
56
/* ========================================================================= *
* Functions
* ========================================================================= */
57
58
/** Atexit callback for releasing cached ssu-sysinfo handle */
static void ssu_free_handle(void)
59
{
60
61
/* Make sure instance does not get created on exit path */
ssu_intialized = TRUE;
62
63
64
65
66
/* Release existing instance */
ssusysinfo_delete(ssu_instance),
ssu_instance = 0;
}
67
68
/** Helper for obtaining ssu-sysinfo handle on demand
69
*
70
* @return ssu-sysinfo, or NULL in case of errors
71
*/
72
static ssusysinfo_t *ssu_get_handle(void)
73
{
74
75
76
77
78
79
80
/* Attempt only once */
if( !ssu_intialized ) {
ssu_intialized = TRUE;
ssu_instance = ssusysinfo_create();
atexit(ssu_free_handle);
}
return ssu_instance;
81
82
}
83
/** Read device manufacturer name from the SSU configuration
84
85
86
87
88
89
90
91
*
* 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)
{
92
93
94
95
96
97
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;
98
99
}
100
/** Read device model name from the SSU configuration
101
102
103
104
105
106
107
108
*
* 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)
{
109
110
111
112
113
114
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;
115
}