summaryrefslogtreecommitdiff
path: root/io-module/mts_capab.c
blob: 35a91c60ddda5ad9fb4a5b830d33c68328bd9fb3 (plain)
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;
}