Was entsprechen die Felder von `event_type` und` event_data` in der auf dem ACPI NetLink Multicast gesendeten DatenstrukLinux

Linux verstehen
Anonymous
 Was entsprechen die Felder von `event_type` und` event_data` in der auf dem ACPI NetLink Multicast gesendeten Datenstruk

Post by Anonymous »

Ich habe mit dem ACPI NetLink unter Linux experimentiert. Hauptsächlich abonniere ich die ACPI_MC_Group , um ACPI -Ereignisbenachrichtigungen unter Verwendung von LIBNL und einigen von ACPID2 definierten Datenträgern zu erhalten. Während die Felder von Device_Class und bus_id ziemlich selbstverständlich sind, kann ich nirgendwo finden, was die Felder Event_type und event_data entsprechen (d. H. Es gibt kein Enum, der die ganzzahligen Werte ihrer semantischen Bedeutung zuordnen würde). Nach meinen Tests konnte ich am meisten herausfinden, dass Event_type 128 auf dem AC_ADAPTER (un) das Ladegerät mit Event_Data 0 entspricht, was den Unplug und 1 bedeutet, aber das ist es, aber das ist ...

Code: Select all

#include 
#include 
#include 
#include "acpi_genetlink.h"
#include 
#include 
#include 

static int acpi_handler(struct nl_msg* msg, void *data) {
struct nlmsghdr *msghdr = nlmsg_hdr(msg);
struct nlattr *attrs[ACPI_GENL_ATTR_MAX + 1];
genlmsg_parse(msghdr, 0, attrs, ACPI_GENL_ATTR_MAX, NULL);
struct acpi_genl_event *event = nla_data(attrs[ACPI_GENL_ATTR_MAX]);
printf("NOTIFICATION:\n");
printf("\tdevice class: %s\n"
"\tbus id:       %s\n"
"\tevent type:   %u\n"
"\tevent data:   %u\n"
, event->device_class, event->bus_id, event->type, event->data);
return NL_OK;
}

int main (void) {
struct nl_sock *sock = nl_socket_alloc();
genl_connect(sock);
nl_socket_disable_seq_check(sock);
int acpi_mc_group = genl_ctrl_resolve_grp(sock, ACPI_EVENT_FAMILY_NAME, ACPI_EVENT_MCAST_GROUP_NAME);
nl_socket_add_membership(sock, acpi_mc_group);
nl_socket_modify_cb(sock, NL_CB_VALID, NL_CB_CUSTOM, acpi_handler, NULL);

while (1) {
nl_recvmsgs_default(sock);
}

nl_close(sock);
nl_socket_free(sock);
}
mit acpi_genetlink.h wird schamlos aus ACPID2 :
kopiert.

Code: Select all

#ifndef __ACPI_GENETLINK_H__
#define __ACPI_GENETLINK_H__ 1

#include 

struct acpi_genl_event {
char device_class[20];
char bus_id[15];
__u32 type;
__u32 data;
};

/* attributes of acpi_genl_family */
enum {
ACPI_GENL_ATTR_UNSPEC,
ACPI_GENL_ATTR_EVENT,   /* ACPI event info needed by user space */
__ACPI_GENL_ATTR_MAX,
};
#define ACPI_GENL_ATTR_MAX (__ACPI_GENL_ATTR_MAX - 1)

/* commands supported by the acpi_genl_family */
enum {
ACPI_GENL_CMD_UNSPEC,
ACPI_GENL_CMD_EVENT,    /* kernel->user notifications for ACPI events */
__ACPI_GENL_CMD_MAX,
};
#define ACPI_GENL_CMD_MAX (__ACPI_GENL_CMD_MAX - 1)
#define GENL_MAX_FAM_OPS        256
#define GENL_MAX_FAM_GRPS       256

#define ACPI_EVENT_FAMILY_NAME      "acpi_event"
#define ACPI_EVENT_MCAST_GROUP_NAME "acpi_mc_group"

#endif

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post