am f3c8eb83: Merge "Remove dead tools."
* commit 'f3c8eb838db02a5fc215e178e4eb319831894d48': Remove dead tools.
This commit is contained in:
commit
59acfee63f
7 changed files with 0 additions and 756 deletions
|
|
@ -216,11 +216,6 @@ LOCAL_SHARED_LIBRARIES := \
|
||||||
libcutils \
|
libcutils \
|
||||||
libselinux \
|
libselinux \
|
||||||
|
|
||||||
# libusbhost is only used by lsusb, and that isn't usually included in toolbox.
|
|
||||||
# The linker strips out all the unused library code in the normal case.
|
|
||||||
LOCAL_STATIC_LIBRARIES := \
|
|
||||||
libusbhost \
|
|
||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES := $(patsubst %,libtoolbox_%,$(BSD_TOOLS))
|
LOCAL_WHOLE_STATIC_LIBRARIES := $(patsubst %,libtoolbox_%,$(BSD_TOOLS))
|
||||||
|
|
||||||
LOCAL_MODULE := toolbox
|
LOCAL_MODULE := toolbox
|
||||||
|
|
|
||||||
190
toolbox/alarm.c
190
toolbox/alarm.c
|
|
@ -1,190 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <asm/ioctl.h>
|
|
||||||
//#include <linux/rtc.h>
|
|
||||||
#include <linux/android_alarm.h>
|
|
||||||
|
|
||||||
int alarm_main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
int res;
|
|
||||||
struct tm tm;
|
|
||||||
time_t t;
|
|
||||||
struct timespec ts;
|
|
||||||
// struct rtc_time rtc_time;
|
|
||||||
char strbuf[26];
|
|
||||||
int afd;
|
|
||||||
int nfd;
|
|
||||||
// struct timeval timeout = { 0, 0 };
|
|
||||||
int wait = 0;
|
|
||||||
fd_set rfds;
|
|
||||||
const char wake_lock_id[] = "alarm_test";
|
|
||||||
int waitalarmmask = 0;
|
|
||||||
|
|
||||||
int useutc = 0;
|
|
||||||
android_alarm_type_t alarmtype_low = ANDROID_ALARM_RTC_WAKEUP;
|
|
||||||
android_alarm_type_t alarmtype_high = ANDROID_ALARM_RTC_WAKEUP;
|
|
||||||
android_alarm_type_t alarmtype = 0;
|
|
||||||
|
|
||||||
do {
|
|
||||||
//c = getopt(argc, argv, "uw:");
|
|
||||||
c = getopt(argc, argv, "uwat:");
|
|
||||||
if (c == EOF)
|
|
||||||
break;
|
|
||||||
switch (c) {
|
|
||||||
case 'u':
|
|
||||||
useutc = 1;
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
alarmtype_low = alarmtype_high = strtol(optarg, NULL, 0);
|
|
||||||
break;
|
|
||||||
case 'a':
|
|
||||||
alarmtype_low = ANDROID_ALARM_RTC_WAKEUP;
|
|
||||||
alarmtype_high = ANDROID_ALARM_TYPE_COUNT - 1;
|
|
||||||
break;
|
|
||||||
case 'w':
|
|
||||||
//timeout.tv_sec = strtol(optarg, NULL, 0);
|
|
||||||
wait = 1;
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
fprintf(stderr, "%s: invalid option -%c\n",
|
|
||||||
argv[0], optopt);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
} while (1);
|
|
||||||
if(optind + 2 < argc) {
|
|
||||||
fprintf(stderr,"%s [-uwa] [-t type] [seconds]\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
afd = open("/dev/alarm", O_RDWR);
|
|
||||||
if(afd < 0) {
|
|
||||||
fprintf(stderr, "Unable to open rtc: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(optind == argc) {
|
|
||||||
for(alarmtype = alarmtype_low; alarmtype <= alarmtype_high; alarmtype++) {
|
|
||||||
waitalarmmask |= 1U << alarmtype;
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
res = ioctl(fd, RTC_ALM_READ, &tm);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "Unable to read alarm: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
t = timegm(&tm);
|
|
||||||
if(useutc)
|
|
||||||
gmtime_r(&t, &tm);
|
|
||||||
else
|
|
||||||
localtime_r(&t, &tm);
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
asctime_r(&tm, strbuf);
|
|
||||||
printf("%s", strbuf);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else if(optind + 1 == argc) {
|
|
||||||
#if 0
|
|
||||||
res = ioctl(fd, RTC_RD_TIME, &tm);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "Unable to set alarm: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
asctime_r(&tm, strbuf);
|
|
||||||
printf("Now: %s", strbuf);
|
|
||||||
time(&tv.tv_sec);
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
time(&ts.tv_sec);
|
|
||||||
ts.tv_nsec = 0;
|
|
||||||
|
|
||||||
//strptime(argv[optind], NULL, &tm);
|
|
||||||
//tv.tv_sec = mktime(&tm);
|
|
||||||
//tv.tv_usec = 0;
|
|
||||||
#endif
|
|
||||||
for(alarmtype = alarmtype_low; alarmtype <= alarmtype_high; alarmtype++) {
|
|
||||||
waitalarmmask |= 1U << alarmtype;
|
|
||||||
res = ioctl(afd, ANDROID_ALARM_GET_TIME(alarmtype), &ts);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "Unable to get current time: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
ts.tv_sec += strtol(argv[optind], NULL, 0);
|
|
||||||
//strtotimeval(argv[optind], &tv);
|
|
||||||
gmtime_r(&ts.tv_sec, &tm);
|
|
||||||
printf("time %s -> %ld.%09ld\n", argv[optind], ts.tv_sec, ts.tv_nsec);
|
|
||||||
asctime_r(&tm, strbuf);
|
|
||||||
printf("Requested %s", strbuf);
|
|
||||||
|
|
||||||
res = ioctl(afd, ANDROID_ALARM_SET(alarmtype), &ts);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "Unable to set alarm: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
res = ioctl(fd, RTC_ALM_SET, &tm);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "Unable to set alarm: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
res = ioctl(fd, RTC_AIE_ON);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "Unable to enable alarm: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fprintf(stderr,"%s [-u] [date]\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(wait) {
|
|
||||||
while(waitalarmmask) {
|
|
||||||
printf("wait for alarm %x\n", waitalarmmask);
|
|
||||||
res = ioctl(afd, ANDROID_ALARM_WAIT);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "alarm wait failed\n");
|
|
||||||
}
|
|
||||||
printf("got alarm %x\n", res);
|
|
||||||
waitalarmmask &= ~res;
|
|
||||||
nfd = open("/sys/android_power/acquire_full_wake_lock", O_RDWR);
|
|
||||||
write(nfd, wake_lock_id, sizeof(wake_lock_id) - 1);
|
|
||||||
close(nfd);
|
|
||||||
//sleep(5);
|
|
||||||
nfd = open("/sys/android_power/release_wake_lock", O_RDWR);
|
|
||||||
write(nfd, wake_lock_id, sizeof(wake_lock_id) - 1);
|
|
||||||
close(nfd);
|
|
||||||
}
|
|
||||||
printf("done\n");
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
FD_ZERO(&rfds);
|
|
||||||
FD_SET(fd, &rfds);
|
|
||||||
res = select(fd + 1, &rfds, NULL, NULL, &timeout);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "select failed: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if(res > 0) {
|
|
||||||
int event;
|
|
||||||
read(fd, &event, sizeof(event));
|
|
||||||
fprintf(stderr, "got %x\n", event);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fprintf(stderr, "timeout waiting for alarm\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
close(afd);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
int exists_main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
struct stat s;
|
|
||||||
|
|
||||||
if(argc < 2) return 1;
|
|
||||||
|
|
||||||
if(stat(argv[1], &s)) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
227
toolbox/lsusb.c
227
toolbox/lsusb.c
|
|
@ -1,227 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2010 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <endian.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <usbhost/usbhost.h>
|
|
||||||
|
|
||||||
static int verbose = 0;
|
|
||||||
static char str_buff[4096];
|
|
||||||
|
|
||||||
static const char *get_str(struct usb_device *dev, int id)
|
|
||||||
{
|
|
||||||
char *str = usb_device_get_string(dev, id);
|
|
||||||
|
|
||||||
if (id && str) {
|
|
||||||
strlcpy(str_buff, str, sizeof(str_buff));
|
|
||||||
free(str);
|
|
||||||
} else {
|
|
||||||
snprintf(str_buff, sizeof(str_buff), "%02x", id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return str_buff;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void lsusb_parse_device_descriptor(struct usb_device *dev,
|
|
||||||
struct usb_device_descriptor *desc)
|
|
||||||
{
|
|
||||||
printf(" Device Descriptor\n");
|
|
||||||
printf("\tbcdUSB: %04x\n", letoh16(desc->bcdUSB));
|
|
||||||
printf("\tbDeviceClass: %02x\n", desc->bDeviceClass);
|
|
||||||
printf("\tbDeviceSubClass: %02x\n", desc->bDeviceSubClass);
|
|
||||||
printf("\tbDeviceProtocol: %02x\n", desc->bDeviceProtocol);
|
|
||||||
printf("\tbMaxPacketSize0: %02x\n", desc->bMaxPacketSize0);
|
|
||||||
printf("\tidVendor: %04x\n", letoh16(desc->idVendor));
|
|
||||||
printf("\tidProduct: %04x\n", letoh16(desc->idProduct));
|
|
||||||
printf("\tbcdDevice: %04x\n", letoh16(desc->bcdDevice));
|
|
||||||
printf("\tiManufacturer: %s\n", get_str(dev, desc->iManufacturer));
|
|
||||||
printf("\tiProduct: %s\n", get_str(dev, desc->iProduct));
|
|
||||||
printf("\tiSerialNumber: %s\n", get_str(dev,desc->iSerialNumber));
|
|
||||||
printf("\tbNumConfiguration: %02x\n", desc->bNumConfigurations);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lsusb_parse_config_descriptor(struct usb_device *dev,
|
|
||||||
struct usb_config_descriptor *desc)
|
|
||||||
{
|
|
||||||
printf(" Config Descriptor\n");
|
|
||||||
printf("\twTotalLength: %04x\n", letoh16(desc->wTotalLength));
|
|
||||||
printf("\tbNumInterfaces: %02x\n", desc->bNumInterfaces);
|
|
||||||
printf("\tbConfigurationValue: %02x\n", desc->bConfigurationValue);
|
|
||||||
printf("\tiConfiguration: %s\n", get_str(dev, desc->iConfiguration));
|
|
||||||
printf("\tbmAttributes: %02x\n", desc->bmAttributes);
|
|
||||||
printf("\tbMaxPower: %d mA\n", desc->bMaxPower * 2);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lsusb_parse_interface_descriptor(struct usb_device *dev,
|
|
||||||
struct usb_interface_descriptor *desc)
|
|
||||||
{
|
|
||||||
printf(" Interface Descriptor\n");
|
|
||||||
printf("\tbInterfaceNumber: %02x\n", desc->bInterfaceNumber);
|
|
||||||
printf("\tbAlternateSetting: %02x\n", desc->bAlternateSetting);
|
|
||||||
printf("\tbNumEndpoints: %02x\n", desc->bNumEndpoints);
|
|
||||||
printf("\tbInterfaceClass: %02x\n", desc->bInterfaceClass);
|
|
||||||
printf("\tbInterfaceSubClass: %02x\n", desc->bInterfaceSubClass);
|
|
||||||
printf("\tbInterfaceProtocol: %02x\n", desc->bInterfaceProtocol);
|
|
||||||
printf("\tiInterface: %s\n", get_str(dev, desc->iInterface));
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lsusb_parse_endpoint_descriptor(struct usb_device *dev,
|
|
||||||
struct usb_endpoint_descriptor *desc)
|
|
||||||
{
|
|
||||||
printf(" Endpoint Descriptor\n");
|
|
||||||
printf("\tbEndpointAddress: %02x\n", desc->bEndpointAddress);
|
|
||||||
printf("\tbmAttributes: %02x\n", desc->bmAttributes);
|
|
||||||
printf("\twMaxPacketSize: %02x\n", letoh16(desc->wMaxPacketSize));
|
|
||||||
printf("\tbInterval: %02x\n", desc->bInterval);
|
|
||||||
printf("\tbRefresh: %02x\n", desc->bRefresh);
|
|
||||||
printf("\tbSynchAddress: %02x\n", desc->bSynchAddress);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lsusb_dump_descriptor(struct usb_device *dev,
|
|
||||||
struct usb_descriptor_header *desc)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
printf(" Descriptor type %02x\n", desc->bDescriptorType);
|
|
||||||
|
|
||||||
for (i = 0; i < desc->bLength; i++ ) {
|
|
||||||
if ((i % 16) == 0)
|
|
||||||
printf("\t%02x:", i);
|
|
||||||
printf(" %02x", ((uint8_t *)desc)[i]);
|
|
||||||
if ((i % 16) == 15)
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((i % 16) != 0)
|
|
||||||
printf("\n");
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lsusb_parse_descriptor(struct usb_device *dev,
|
|
||||||
struct usb_descriptor_header *desc)
|
|
||||||
{
|
|
||||||
switch (desc->bDescriptorType) {
|
|
||||||
case USB_DT_DEVICE:
|
|
||||||
lsusb_parse_device_descriptor(dev, (struct usb_device_descriptor *) desc);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case USB_DT_CONFIG:
|
|
||||||
lsusb_parse_config_descriptor(dev, (struct usb_config_descriptor *) desc);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case USB_DT_INTERFACE:
|
|
||||||
lsusb_parse_interface_descriptor(dev, (struct usb_interface_descriptor *) desc);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case USB_DT_ENDPOINT:
|
|
||||||
lsusb_parse_endpoint_descriptor(dev, (struct usb_endpoint_descriptor *) desc);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
lsusb_dump_descriptor(dev, desc);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int lsusb_device_added(const char *dev_name, void *client_data)
|
|
||||||
{
|
|
||||||
struct usb_device *dev = usb_device_open(dev_name);
|
|
||||||
|
|
||||||
if (!dev) {
|
|
||||||
fprintf(stderr, "can't open device %s: %s\n", dev_name, strerror(errno));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (verbose) {
|
|
||||||
struct usb_descriptor_iter iter;
|
|
||||||
struct usb_descriptor_header *desc;
|
|
||||||
|
|
||||||
printf("%s:\n", dev_name);
|
|
||||||
|
|
||||||
usb_descriptor_iter_init(dev, &iter);
|
|
||||||
|
|
||||||
while ((desc = usb_descriptor_iter_next(&iter)) != NULL)
|
|
||||||
lsusb_parse_descriptor(dev, desc);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
uint16_t vid, pid;
|
|
||||||
char *mfg_name, *product_name, *serial;
|
|
||||||
|
|
||||||
vid = usb_device_get_vendor_id(dev);
|
|
||||||
pid = usb_device_get_product_id(dev);
|
|
||||||
mfg_name = usb_device_get_manufacturer_name(dev);
|
|
||||||
product_name = usb_device_get_product_name(dev);
|
|
||||||
serial = usb_device_get_serial(dev);
|
|
||||||
|
|
||||||
printf("%s: %04x:%04x %s %s %s\n", dev_name, vid, pid,
|
|
||||||
mfg_name, product_name, serial);
|
|
||||||
|
|
||||||
free(mfg_name);
|
|
||||||
free(product_name);
|
|
||||||
free(serial);
|
|
||||||
}
|
|
||||||
|
|
||||||
usb_device_close(dev);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int lsusb_device_removed(const char *dev_name, void *client_data)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int lsusb_discovery_done(void *client_data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int lsusb_main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
struct usb_host_context *ctx;
|
|
||||||
|
|
||||||
if (argc == 2 && !strcmp(argv[1], "-v"))
|
|
||||||
verbose = 1;
|
|
||||||
|
|
||||||
ctx = usb_host_init();
|
|
||||||
if (!ctx) {
|
|
||||||
perror("usb_host_init:");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
usb_host_run(ctx,
|
|
||||||
lsusb_device_added,
|
|
||||||
lsusb_device_removed,
|
|
||||||
lsusb_discovery_done,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
usb_host_cleanup(ctx);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <termios.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <linux/fb.h>
|
|
||||||
|
|
||||||
|
|
||||||
int rotatefb_main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
char *fbdev = "/dev/graphics/fb0";
|
|
||||||
int rotation = 0;
|
|
||||||
int fd;
|
|
||||||
int res;
|
|
||||||
struct fb_var_screeninfo fbinfo;
|
|
||||||
|
|
||||||
do {
|
|
||||||
c = getopt(argc, argv, "d:");
|
|
||||||
if (c == EOF)
|
|
||||||
break;
|
|
||||||
switch (c) {
|
|
||||||
case 'd':
|
|
||||||
fbdev = optarg;
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
fprintf(stderr, "%s: invalid option -%c\n",
|
|
||||||
argv[0], optopt);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
} while (1);
|
|
||||||
|
|
||||||
if(optind + 1 != argc) {
|
|
||||||
fprintf(stderr, "%s: specify rotation\n", argv[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
rotation = atoi(argv[optind]);
|
|
||||||
|
|
||||||
fd = open(fbdev, O_RDWR);
|
|
||||||
if(fd < 0) {
|
|
||||||
fprintf(stderr, "cannot open %s\n", fbdev);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = ioctl(fd, FBIOGET_VSCREENINFO, &fbinfo);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "failed to get fbinfo: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if((fbinfo.rotate ^ rotation) & 1) {
|
|
||||||
unsigned int xres = fbinfo.yres;
|
|
||||||
fbinfo.yres = fbinfo.xres;
|
|
||||||
fbinfo.xres = xres;
|
|
||||||
fbinfo.xres_virtual = fbinfo.xres;
|
|
||||||
fbinfo.yres_virtual = fbinfo.yres * 2;
|
|
||||||
if(fbinfo.yoffset == xres)
|
|
||||||
fbinfo.yoffset = fbinfo.yres;
|
|
||||||
}
|
|
||||||
fbinfo.rotate = rotation;
|
|
||||||
res = ioctl(fd, FBIOPUT_VSCREENINFO, &fbinfo);
|
|
||||||
if(res < 0) {
|
|
||||||
fprintf(stderr, "failed to set fbinfo: %s\n", strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,89 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <linux/kd.h>
|
|
||||||
#include <linux/vt.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
static void setkey_usage(char *argv[])
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s [-t <table>] [-k <index>] [-v value] [-r] [-h]\n"
|
|
||||||
" -t <table> Select table\n"
|
|
||||||
" -k <index> Select key\n"
|
|
||||||
" -v <value> Set entry\n"
|
|
||||||
" -r Read current entry\n"
|
|
||||||
" -h Print help\n", argv[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TTYDEV "/dev/tty0"
|
|
||||||
|
|
||||||
int setkey_main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
struct kbentry kbe;
|
|
||||||
int did_something = 0;
|
|
||||||
|
|
||||||
kbe.kb_table = 0;
|
|
||||||
kbe.kb_index = -1;
|
|
||||||
kbe.kb_value = 0;
|
|
||||||
|
|
||||||
fd = open(TTYDEV, O_RDWR | O_SYNC);
|
|
||||||
if (fd < 0) {
|
|
||||||
fprintf(stderr, "open %s: %s\n", TTYDEV, strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
int c, ret;
|
|
||||||
|
|
||||||
c = getopt(argc, argv, "t:k:v:hr");
|
|
||||||
if (c == EOF)
|
|
||||||
break;
|
|
||||||
|
|
||||||
switch (c) {
|
|
||||||
case 't':
|
|
||||||
kbe.kb_table = strtol(optarg, NULL, 0);
|
|
||||||
break;
|
|
||||||
case 'k':
|
|
||||||
kbe.kb_index = strtol(optarg, NULL, 0);
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
kbe.kb_value = strtol(optarg, NULL, 0);
|
|
||||||
ret = ioctl(fd, KDSKBENT, &kbe);
|
|
||||||
if (ret < 0) {
|
|
||||||
fprintf(stderr, "KDSKBENT %d %d %d failed: %s\n",
|
|
||||||
kbe.kb_table, kbe.kb_index, kbe.kb_value,
|
|
||||||
strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
did_something = 1;
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
ret = ioctl(fd, KDGKBENT, &kbe);
|
|
||||||
if (ret < 0) {
|
|
||||||
fprintf(stderr, "KDGKBENT %d %d failed: %s\n",
|
|
||||||
kbe.kb_table, kbe.kb_index, strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
printf("0x%x 0x%x 0x%x\n",
|
|
||||||
kbe.kb_table, kbe.kb_index, kbe.kb_value);
|
|
||||||
did_something = 1;
|
|
||||||
break;
|
|
||||||
case 'h':
|
|
||||||
setkey_usage(argv);
|
|
||||||
return 1;
|
|
||||||
case '?':
|
|
||||||
fprintf(stderr, "%s: invalid option -%c\n",
|
|
||||||
argv[0], optopt);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} while (1);
|
|
||||||
|
|
||||||
if(optind != argc || !did_something) {
|
|
||||||
setkey_usage(argv);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
158
toolbox/syren.c
158
toolbox/syren.c
|
|
@ -1,158 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <malloc.h>
|
|
||||||
|
|
||||||
/* ioctl crap */
|
|
||||||
#define SYREN_RD 101
|
|
||||||
#define SYREN_WR 102
|
|
||||||
#define SYREN_OLD_RD 108
|
|
||||||
#define SYREN_OLD_WR 109
|
|
||||||
|
|
||||||
struct syren_io_args {
|
|
||||||
unsigned long page;
|
|
||||||
unsigned long addr;
|
|
||||||
unsigned long value;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
u_char page;
|
|
||||||
u_char addr;
|
|
||||||
const char *name;
|
|
||||||
} syren_reg;
|
|
||||||
|
|
||||||
static syren_reg registers[] = {
|
|
||||||
{ 0, 0x04, "TOGBR1" },
|
|
||||||
{ 0, 0x05, "TOGBR2" },
|
|
||||||
{ 0, 0x06, "VBDCTRL" },
|
|
||||||
{ 1, 0x07, "VBUCTRL" },
|
|
||||||
{ 1, 0x08, "VBCTRL" },
|
|
||||||
{ 1, 0x09, "PWDNRG" },
|
|
||||||
{ 1, 0x0a, "VBPOP" },
|
|
||||||
{ 1, 0x0b, "VBCTRL2" },
|
|
||||||
{ 1, 0x0f, "VAUDCTRL" },
|
|
||||||
{ 1, 0x10, "VAUSCTRL" },
|
|
||||||
{ 1, 0x11, "VAUOCTRL" },
|
|
||||||
{ 1, 0x12, "VAUDPLL" },
|
|
||||||
{ 1, 0x17, "VRPCSIMR" },
|
|
||||||
{ 0, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static syren_reg *find_reg(const char *name)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; registers[i].name != 0; i++) {
|
|
||||||
if (!strcasecmp(registers[i].name, name))
|
|
||||||
return ®isters[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int usage(void)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "usage: syren [r/w] [REGNAME | page:addr] (value)\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
syren_main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
int cmd = -1;
|
|
||||||
syren_reg *r;
|
|
||||||
struct syren_io_args sio;
|
|
||||||
char name[32];
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
if (argc < 3) {
|
|
||||||
return usage();
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(argv[1][0]) {
|
|
||||||
case 'r':
|
|
||||||
cmd = SYREN_RD;
|
|
||||||
break;
|
|
||||||
case 'w':
|
|
||||||
cmd = SYREN_WR;
|
|
||||||
break;
|
|
||||||
case 'R':
|
|
||||||
cmd = SYREN_OLD_RD;
|
|
||||||
break;
|
|
||||||
case 'W':
|
|
||||||
cmd = SYREN_OLD_WR;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return usage();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd == SYREN_WR || cmd == SYREN_OLD_WR) {
|
|
||||||
if (argc < 4)
|
|
||||||
return usage();
|
|
||||||
sio.value = strtoul(argv[3], 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fd = open("/dev/eac", O_RDONLY);
|
|
||||||
if (fd < 0) {
|
|
||||||
fprintf(stderr, "can't open /dev/eac\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcasecmp(argv[2], "all") == 0) {
|
|
||||||
int i;
|
|
||||||
if (cmd != SYREN_RD && cmd != SYREN_OLD_RD) {
|
|
||||||
fprintf(stderr, "can only read all registers\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; registers[i].name; i++) {
|
|
||||||
sio.page = registers[i].page;
|
|
||||||
sio.addr = registers[i].addr;
|
|
||||||
if (ioctl(fd, cmd, &sio) < 0) {
|
|
||||||
fprintf(stderr, "%s: error\n", registers[i].name);
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "%s: %04x\n", registers[i].name, sio.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = find_reg(argv[2]);
|
|
||||||
if (r == NULL) {
|
|
||||||
if(strlen(argv[2]) >= sizeof(name)){
|
|
||||||
fprintf(stderr, "REGNAME too long\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
strlcpy(name, argv[2], sizeof(name));
|
|
||||||
char *addr_str = strchr(argv[2], ':');
|
|
||||||
if (addr_str == NULL)
|
|
||||||
return usage();
|
|
||||||
*addr_str++ = 0;
|
|
||||||
sio.page = strtoul(argv[2], 0, 0);
|
|
||||||
sio.addr = strtoul(addr_str, 0, 0);
|
|
||||||
} else {
|
|
||||||
strlcpy(name, r->name, sizeof(name));
|
|
||||||
sio.page = r->page;
|
|
||||||
sio.addr = r->addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(fd, cmd, &sio) < 0) {
|
|
||||||
fprintf(stderr, "ioctl(%d) failed\n", cmd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd == SYREN_RD || cmd == SYREN_OLD_RD) {
|
|
||||||
printf("%s: %04x\n", name, sio.value);
|
|
||||||
} else {
|
|
||||||
printf("wrote %04x to %s\n", sio.value, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue