1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/*
* capab.c
*
* Created on: Dec 1, 2016
* Author: jklug
*/
static ssize_t capab_show_value(struct kobject *kobj, struct kobj_attribute *attr, char *buf) {
ssize_t value;
if (! strcmp(attr->attr.name, "gps"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_GPS) != 0);
else if (! strcmp(attr->attr.name, "din"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_DIN) != 0);
else if (! strcmp(attr->attr.name, "dout"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_DOUT) != 0);
else if (! strcmp(attr->attr.name, "adc"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_ADC) != 0);
else if (! strcmp(attr->attr.name, "bluetooth"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_BLUETOOTH) != 0);
else if (! strcmp(attr->attr.name, "wifi"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_WIFI) != 0);
else if (! strcmp(attr->attr.name, "wifi_bt"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_WIFI_BT) != 0);
else if (! strcmp(attr->attr.name, "gnss"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_GNSS) != 0);
else if (! strcmp(attr->attr.name, "lora"))
value = snprintf(buf, 32, "%lu\n", DEVICE_CAPA(id_eeprom.capa, CAPA_LORA) != 0);
else {
log_error("attribute [%s] not found", attr->attr.name);
value = -1;
}
return value;
}
static char *attribute_names[] = {
"gps",
"din",
"dout",
"adc",
"bluetooth",
"wifi",
"wifi_bt",
"gnss",
"lora",
};
static bool capab_add_attributes(struct attribute** attrs) {
struct kobj_attribute* kobj_attr;
int i;
int count = sizeof(attribute_names)/sizeof(attribute_names[0]);
// We must keep the number of attributes in sync
BUG_ON(CAPA_COUNT != count);
log_info("capab_add_attributes, add %d attributes",count);
for(i=0;i<count;i++) {
kobj_attr = create_attribute(attribute_names[i], MTS_ATTR_MODE_RO);
if (! kobj_attr) {
log_error("failed to create attribute [%s]", attribute_names[i]);
return false;
}
kobj_attr->show = capab_show_value;
attrs[i] = &kobj_attr->attr;
log_error("created attribute [%s]", attribute_names[i]);
}
return true;
}
|