/* * 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;ishow = capab_show_value; attrs[i] = &kobj_attr->attr; log_error("created attribute [%s]", attribute_names[i]); } return true; }