SHA256
1
0
forked from pool/acpica

- Add possibility to see changes via new -s param: -r [ -s sleep ]

OBS-URL: https://build.opensuse.org/package/show/hardware/acpica?expand=0&rev=22
This commit is contained in:
Thomas Renninger 2011-02-24 15:32:20 +00:00 committed by Git OBS Bridge
parent 177de706e6
commit 74ab343264
3 changed files with 58 additions and 25 deletions

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Thu Feb 24 15:31:07 UTC 2011 - trenn@novell.com
- Add possibility to see changes via new -s param: -r [ -s sleep ]
-------------------------------------------------------------------
Fri Jan 14 15:01:06 UTC 2011 - trenn@novell.com

View File

@ -1,7 +1,7 @@
#
# spec file for package acpica (Version 20101013)
# spec file for package acpica
#
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed

View File

@ -28,6 +28,7 @@
*/
static int read_mode = -1;
static int sleep_time;
static int write_byte_offset = -1;
static int read_byte_offset = -1;
static uint8_t write_value = -1;
@ -35,16 +36,18 @@ static uint8_t write_value = -1;
void usage(char progname[], int exit_status)
{
printf("Usage:\n");
printf("1) %s -r\n", basename(progname));
printf("1) %s -r [-s sleep]\n", basename(progname));
printf("2) %s -b byte_offset\n", basename(progname));
printf("3) %s -w byte_offset -v value\n\n", basename(progname));
puts("\t-r or --read -- Dump EC registers");
puts("\t-b or --byte byte_offset -- Read value "
puts("\t-r [-s sleep] : Dump EC registers");
puts("\t If sleep is given, sleep x seconds,");
puts("\t re-read EC registers and show changes");
puts("\t-b offset : Read value"
" at byte_offset (in hex)");
puts("\t-w or --write byte_offset -v or --value value -- "
puts("\t-w offset -v value : "
"Write value at byte_offset");
puts("\t-h or --help -- Print this help\n\n");
puts("\t-h : Print this help\n\n");
puts("Offsets and values are in hexadecimal number sytem.");
puts("The offset and value must be between 0 and 0xff.");
exit(exit_status);
@ -53,21 +56,8 @@ void usage(char progname[], int exit_status)
void parse_opts(int argc, char *argv[])
{
int c;
struct option long_options[] = {
{"read", 0, 0, 'r'},
{"byte", 0, 0, 'b'},
{"write", 1, 0, 'w'},
{"value", 1, 0, 'v'},
{"help", 0, 0, 'h'},
{0, 0, 0, 0}
};
while (1) {
c = getopt_long(argc, argv, "rb:w:v:h",
long_options, NULL);
if (c == -1)
break;
while ((c = getopt(argc, argv, "rs:b:w:v:h")) != -1) {
switch (c) {
case 'r':
@ -75,6 +65,17 @@ void parse_opts(int argc, char *argv[])
usage (argv[0], EXIT_FAILURE);
read_mode = 1;
break;
case 's':
if (read_mode != -1 && read_mode != 1)
usage (argv[0], EXIT_FAILURE);
sleep_time = atoi(optarg);
if (sleep_time <= 0) {
sleep_time = 0;
usage(argv[0], EXIT_FAILURE);
printf("Bad sleep time: %s\n", optarg);
}
break;
case 'b':
if (read_mode != -1)
usage (argv[0], EXIT_FAILURE);
@ -127,6 +128,7 @@ void parse_opts(int argc, char *argv[])
void dump_ec(int fd)
{
char buf[EC_SPACE_SIZE];
char buf2[EC_SPACE_SIZE];
int byte_off, bytes_read;
bytes_read = read(fd, buf, EC_SPACE_SIZE);
@ -137,14 +139,40 @@ void dump_ec(int fd)
if (bytes_read != EC_SPACE_SIZE)
fprintf(stderr, "Could only read %d bytes\n", bytes_read);
printf("\t00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
printf(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
for (byte_off = 0; byte_off < bytes_read; byte_off++) {
if ((byte_off % 16) == 0)
printf("\n%.2X: \t", byte_off);
printf("%.2x ", (uint8_t)buf[byte_off]);
printf("\n%.2X: ", byte_off);
printf(" %.2x ", (uint8_t)buf[byte_off]);
}
printf("\n");
if (!sleep_time)
return;
printf("\n");
lseek(fd, 0, SEEK_SET);
sleep(sleep_time);
bytes_read = read(fd, buf2, EC_SPACE_SIZE);
if (bytes_read == -1)
err(EXIT_FAILURE, "Could not read from %s\n", SYSFS_PATH);
if (bytes_read != EC_SPACE_SIZE)
fprintf(stderr, "Could only read %d bytes\n", bytes_read);
printf(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
for (byte_off = 0; byte_off < bytes_read; byte_off++) {
if ((byte_off % 16) == 0)
printf("\n%.2X: ", byte_off);
if (buf[byte_off] == buf2[byte_off])
printf(" %.2x ", (uint8_t)buf2[byte_off]);
else
printf("*%.2x ", (uint8_t)buf2[byte_off]);
}
printf("\n");
sync();
}
void read_ec_val(int fd, int byte_offset)