亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sony lcd mcu driver.h

?? sony TFT-LCD 驅(qū)動(dòng)原理 sony TFT-LCD 驅(qū)動(dòng)原理 sony TFT-LCD 驅(qū)動(dòng)原理
?? H
字號(hào):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
#include <linux/sonypi.h>
#include <string.h>

extern "C" {
#include <xosd.h>
}

#include <iostream>

typedef enum {MUTE, VOLUME, BRIGHTNESS, VGAOUT, TVOUT, UP, DOWN, JOGPRESSED, TIMEOUT} Event;

class EventGenerator {
private:
  int sonypi;
  Display* display;
  int timeout;
  bool keyboardGrabbed;
  
public:
  EventGenerator(int sonypi, Display* display, int timeout)
    : sonypi(sonypi), display(display), timeout(timeout), keyboardGrabbed(false)
  {
    XAllowEvents(display, AsyncBoth, CurrentTime);
    XSelectInput(display, DefaultRootWindow(display), KeyPressMask);
  }

  Event getNextEvent() {
    while (true) {
      // select descriptors
      fd_set readset;
      FD_ZERO(&readset);
      FD_SET(sonypi, &readset);
      if (keyboardGrabbed) {
	FD_SET(ConnectionNumber(display), &readset);
      }
    
      // wait for event
      timeval t;
      t.tv_sec = timeout;
      t.tv_usec = 0;
      int s = select(FD_SETSIZE, &readset, 0, 0, &t);

      // timeout
      if (s == 0) {
	return TIMEOUT;
      }

      // input event
      else if (s > 0) {
	// X event
	if (keyboardGrabbed && FD_ISSET(ConnectionNumber(display), &readset)) {
	  XEvent e;
	  XNextEvent(display, &e);
	  switch (e.type) {
	  case KeyPress:
	    switch (XKeycodeToKeysym(display, e.xkey.keycode, 0)) {
	    case XK_Up: case XK_Right:
	      return UP;
	    case XK_Down: case XK_Left:
	      return DOWN;
	    }
	  }
	}

	// Sonypi event
	else if (FD_ISSET(sonypi, &readset)) {
	  unsigned char e;
	  read(sonypi, &e, sizeof(e));
	  switch (e) {
	  case SONYPI_EVENT_FNKEY_F3:
	    return MUTE;
	  case SONYPI_EVENT_FNKEY_F4:
	    return VOLUME;
	  case SONYPI_EVENT_FNKEY_F5:
	    return BRIGHTNESS;
	  case SONYPI_EVENT_FNKEY_F7:
	    return VGAOUT;
	  case SONYPI_EVENT_FNKEY_F8:
	    return TVOUT;
	  case SONYPI_EVENT_JOGDIAL_UP:
	    return UP;
	  case SONYPI_EVENT_JOGDIAL_DOWN:
	    return DOWN;
	  case SONYPI_EVENT_JOGDIAL_PRESSED:
	    return JOGPRESSED;
	  }
	}
      }
    }
  }

  void grabKeyboard() {
    if (keyboardGrabbed) return;

    XGrabKey(display, XKeysymToKeycode(display, XK_Up), 0,
	     DefaultRootWindow(display), False,
	     GrabModeAsync, GrabModeAsync);
    XGrabKey(display, XKeysymToKeycode(display, XK_Down), 0,
	     DefaultRootWindow(display), False,
	     GrabModeAsync, GrabModeAsync);
    XGrabKey(display, XKeysymToKeycode(display, XK_Left), 0,
	     DefaultRootWindow(display), False,
	     GrabModeAsync, GrabModeAsync);
    XGrabKey(display, XKeysymToKeycode(display, XK_Right), 0,
	     DefaultRootWindow(display), False,
	     GrabModeAsync, GrabModeAsync);
    XFlush(display);

    keyboardGrabbed = true;
  }

  void ungrabKeyboard() {
    if (!keyboardGrabbed) return;

    XUngrabKey(display, AnyKey, 0, DefaultRootWindow(display));
    XFlush(display);

    keyboardGrabbed = false;
  }
};

class VolumeController {
private:
  xosd* osd;
  int volume, mutedVolume;
  
  int getVolume() {
    FILE *pin;
    char buf[100];

    pin = popen("aumix -vq", "r");
    fgets(buf, sizeof(buf) - 1, pin);
    pclose(pin);
    
    return atoi(buf + 4);
  }

  void setVolume(int v) {
    char buf[100];

    sprintf(buf, "aumix -v%d", v);
    system(buf);
  }

  void displayVolume(int v) {
    xosd_display(osd, 0, XOSD_string, "Volume");
    xosd_display(osd, 1, XOSD_percentage, v);
  }

public:
  VolumeController(xosd* osd)
    : osd(osd) {
  }

  void show() {
    volume = getVolume();
    displayVolume(volume);
  }

  void up() {
    volume += 10;
    if (volume > 100) volume = 100;
    setVolume(volume);
    displayVolume(volume);
  }

  void down() {
    volume -= 10;
    if (volume < 0) volume = 0;
    setVolume(volume);
    displayVolume(volume);
  }

  void mute() {
    volume = getVolume();
    if (volume > 0) mutedVolume = 0;

    if (mutedVolume == 0) {
      mutedVolume = volume;
      volume = 0;
    } else {
      volume = mutedVolume;
      mutedVolume = 0;
    }

    setVolume(volume);
    displayVolume(volume);
  }
};


class BrightnessController {
private:
  xosd* osd;
  int brightness;

  int getBrightness() {
    FILE *pin0, *pin;
    char buf[100];
    
    /* Read brightness twice due to a bug in spicctrl */
    pin0 = popen("spicctrl -B", "r");
    pclose(pin0);

    pin = popen("spicctrl -B", "r");
    fgets(buf, sizeof(buf) - 1, pin);
    pclose(pin);

    return atoi(buf) * 100 / 255;;
  }

  void setBrightness(int b) {
    char buf[100];
    
    sprintf(buf, "spicctrl -b %d", b * 255 / 100);
    system(buf);
  }

  void displayBrightness(int b) {
    xosd_display(osd, 0, XOSD_string, "Brightness");
    xosd_display(osd, 1, XOSD_percentage, b);
  }

public:
  BrightnessController(xosd* osd)
    : osd(osd) {
  }

  void show() {
    brightness = getBrightness();
    displayBrightness(brightness);
  }

  void up() {
    brightness += 10;
    if (brightness > 100) brightness = 100;
    setBrightness(brightness);
    displayBrightness(brightness);
  }

  void down() {
    brightness -= 10;
    if (brightness < 0) brightness = 0;
    setBrightness(brightness);
    displayBrightness(brightness);
  }
};

class VideoController {
private:
  static const int LCD = 1;
  static const int VGA = 2;
  static const int TV  = 4;

  xosd* osd;

  int getVideo() {
    FILE *pin;
    char buf[100];
    int out = 0;

    pin = popen("atitvout -f active", "r");

    while (fgets(buf, sizeof(buf) - 1, pin)) {
      if (strncmp(buf, "LCD", 3) == 0) {
	out |= LCD;
      }
      if (strncmp(buf, "CRT", 3) == 0) {
	out |= VGA;
      }
      if (strncmp(buf, "TV", 2) == 0) {
	out |= TV;
      }
    }

    pclose(pin);

    return out;
  }

  void setVideo(int out) {
    char buf[100];

    switch (out) {
    case LCD | VGA | TV:
      sprintf(buf, "atitvout -f lct");
      break;
    case LCD | VGA:
      sprintf(buf, "atitvout -f lc");
      break;
    case LCD | TV:
      sprintf(buf, "atitvout -f lt");
      break;
    case VGA | TV:
      sprintf(buf, "atitvout -f ct");
      break;
    case LCD:
      sprintf(buf, "atitvout -f l");
      break;
    case VGA:
      sprintf(buf, "atitvout -f c");
      break;
    case TV:
      sprintf(buf, "atitvout -f t");
      break;
    default:
      return;
    }

    system(buf);
  }

  void displayVideo(int v) {
    switch (v) {
    case LCD | VGA | TV:
      xosd_display(osd, 0, XOSD_string, "LCD + VGA + TV");
      break;
    case LCD | VGA:
      xosd_display(osd, 0, XOSD_string, "LCD + VGA");
      break;
    case LCD | TV:
      xosd_display(osd, 0, XOSD_string, "LCD + TV");
      break;
    case VGA | TV:
      xosd_display(osd, 0, XOSD_string, "VGA + TV");
      break;
    case LCD:
      xosd_display(osd, 0, XOSD_string, "LCD");
      break;
    case VGA:
      xosd_display(osd, 0, XOSD_string, "VGA");
      break;
    case TV:
      xosd_display(osd, 0, XOSD_string, "TV");
      break;
    default:
      return;
    }
    
    xosd_display(osd, 1, XOSD_string, "");
  }

public:
  VideoController(xosd* osd)
    : osd(osd) {
  }

  void toggleVGA() {
    int output, test;
    output = getVideo();     /* current state */

    if (output < 0)          /* can't set video out */
      return;

    if (output & LCD) {
      if (output & VGA) {    /* LCD + VGA is active */
	output &= ~LCD;      /* turn LCD off */
      }
      else {                 /* only LCD is active */
	output |= VGA;       /* turn VGA on */
      }
    }
    else {
      if (output & VGA) {    /* only VGA is active */
	output |= LCD;       /* turn LCD on and VGA off */
	output &= ~VGA;
      }
      else {                 /* neither LCD nor VGA is active */
	output |= LCD;       /* turn LCD on */
      }
    }

    setVideo(output);           /* try to set new output */

    test = getVideo();          /* check new state */
    if (test != output) {       /* no success, try easier configuration */
      if (output & VGA) {
	setVideo(VGA);
      }
      else {
	setVideo(LCD);
      }
      test = getVideo();
    }

    displayVideo(test);
  }

  void toggleTV() {
    int output, test;
    output = getVideo();     /* current state */

    if (output < 0)          /* can't set video out */
      return;

    if (output & LCD) {
      if (output & TV) {    /* LCD + TV is active */
	output &= ~LCD;      /* turn LCD off */
      }
      else {                 /* only LCD is active */
	output |= TV;       /* turn TV on */
      }
    }
    else {
      if (output & TV) {    /* only TV is active */
	output |= LCD;       /* turn LCD on and TV off */
	output &= ~TV;
      }
      else {                 /* neither LCD nor TV is active */
	output |= LCD;       /* turn LCD on */
      }
    }

    setVideo(output);           /* try to set new output */

    test = getVideo();          /* check new state */
    if (test != output) {       /* no success, try easier configuration */
      if (output & TV) {
	setVideo(TV);
      }
      else {
	setVideo(LCD);
      }
      test = getVideo();
    }

    displayVideo(test);
  }

};

int main() {
  // open /dev/sonypi
  int sonypi = open("/dev/sonypi", O_RDONLY);

  // open display
  Display* display = XOpenDisplay(NULL);

  EventGenerator g(sonypi, display, 2);
  xosd* osd = xosd_init("-*-helvetica-*-r-*-*-40-*-*-*-*-*-*-*", "LawnGreen", -1, XOSD_bottom, 0, 2, 2);
  VolumeController volume(osd);
  BrightnessController brightness(osd);
  VideoController video(osd);

  enum {IDLE, VOLUME, BRIGHTNESS} mode = IDLE;

  while (true) {
    Event e = g.getNextEvent();
    switch (e) {
    
    case MUTE:
      mode = VOLUME;
      g.grabKeyboard();
      volume.mute();
      break;

    case VOLUME:
      mode = VOLUME;
      g.grabKeyboard();
      volume.show();
      break;
      
    case BRIGHTNESS:
      mode = BRIGHTNESS;
      g.grabKeyboard();
      brightness.show();
      break;

    case VGAOUT:
      mode = IDLE;
      g.ungrabKeyboard();
      video.toggleVGA();
      break;

    case TVOUT:
      mode = IDLE;
      g.ungrabKeyboard();
      video.toggleTV();
      break;

    case UP:
      switch (mode) {
      case IDLE:
	XTestGrabControl(display, True);
	XTestFakeButtonEvent(display, 4, True, CurrentTime);
	XTestFakeButtonEvent(display, 4, False, 30);
	XSync(display, False);
	XTestGrabControl(display, False);
	break;
      case VOLUME:
	volume.up();
	break;
      case BRIGHTNESS:
	brightness.up();
	break;
      }
      break;

    case DOWN:
      switch (mode) {
      case IDLE:
	XTestGrabControl(display, True);
	XTestFakeButtonEvent(display, 5, True, CurrentTime);
	XTestFakeButtonEvent(display, 5, False, 30);
	XSync(display, False);
	XTestGrabControl(display, False);
	break;
      case VOLUME:
	volume.down();
	break;
      case BRIGHTNESS:
	brightness.down();
	break;
      }
      break;

    case JOGPRESSED:
      XTestGrabControl(display, True);
      XTestFakeButtonEvent(display, 2, True, CurrentTime);
      XTestFakeButtonEvent(display, 2, False, 30);
      XSync(display, False);
      XTestGrabControl(display, False);
      break;

    case TIMEOUT:
      mode = IDLE;
      g.ungrabKeyboard();
      xosd_hide(osd);
      break;
    }

  }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频一区在线观看| 国产精品自拍三区| 欧美精彩视频一区二区三区| 色综合久久久久综合体| 国产精品一区在线观看乱码| 亚洲国产你懂的| 国产精品色哟哟| 日韩视频国产视频| 欧美亚洲免费在线一区| 国产精品99久久久久| 日本不卡在线视频| 亚洲精品老司机| 久久精品人人做人人爽人人| 欧美一区二区三区影视| 色综合咪咪久久| 国产一区二区影院| 七七婷婷婷婷精品国产| 一级女性全黄久久生活片免费| 中文字幕久久午夜不卡| 久久综合成人精品亚洲另类欧美 | 亚洲一区二区三区四区不卡| 欧美激情综合在线| 精品av久久707| 欧美不卡一区二区三区| 6080国产精品一区二区| 欧美午夜精品免费| 一本色道久久综合亚洲精品按摩 | 欧美一区二区三区在| 欧美体内she精高潮| 在线这里只有精品| 97精品电影院| 91猫先生在线| 色网站国产精品| 色94色欧美sute亚洲线路一ni | 亚洲伦在线观看| 国产精品国产精品国产专区不蜜| 久久久精品黄色| 久久精品男人的天堂| 日本一区二区免费在线观看视频| 国产亚洲精品7777| 中文字幕二三区不卡| 国产精品久久久久久户外露出| 亚洲国产精品精华液ab| 亚洲国产精品成人久久综合一区| 国产欧美日韩一区二区三区在线观看| 久久久久97国产精华液好用吗| 久久青草欧美一区二区三区| 久久先锋影音av鲁色资源网| 国产日韩高清在线| 国产精品国产三级国产有无不卡| 中文一区二区在线观看| 国产精品天干天干在观线| 中文字幕中文字幕一区| 亚洲美女视频一区| 午夜成人免费电影| 久久国产精品72免费观看| 国内不卡的二区三区中文字幕 | 久久久亚洲午夜电影| 中文字幕第一区| 亚洲美女电影在线| 日韩中文字幕亚洲一区二区va在线| 理论电影国产精品| 国产成人久久精品77777最新版本| www.亚洲色图| 欧美日韩一区二区三区四区五区| 91精品国产欧美日韩| 久久久综合精品| 一区二区三区在线高清| 日韩精品五月天| 成人一区二区在线观看| 欧美在线免费播放| 欧美tickling挠脚心丨vk| 国产精品伦理在线| 午夜精品久久久久久久久久| 激情久久五月天| 91视频在线看| 日韩欧美在线123| 中国av一区二区三区| 亚洲一区二区3| 国产美女久久久久| 欧美性大战xxxxx久久久| 亚洲精品一区二区三区精华液| 亚洲天堂福利av| 久久成人免费网| 91小视频在线| 久久网站热最新地址| 一区二区三区四区蜜桃| 国产麻豆精品视频| 欧美日韩亚洲综合| 国产精品网友自拍| 久久99热99| 91久久线看在观草草青青| 精品国产3级a| 五月婷婷综合在线| 成人动漫中文字幕| 日韩精品一区在线观看| 亚洲一区在线观看网站| 国产成人精品一区二区三区四区 | 在线观看www91| 久久综合九色综合97_久久久| 亚洲电影第三页| 成人国产在线观看| 精品久久久久99| 日日噜噜夜夜狠狠视频欧美人| 99re免费视频精品全部| 337p粉嫩大胆噜噜噜噜噜91av| 午夜精品在线视频一区| 99re热视频这里只精品| 国产日韩欧美在线一区| 青青草伊人久久| 欧美男女性生活在线直播观看| 国产精品第13页| 床上的激情91.| 久久综合久久综合久久综合| 日本欧美肥老太交大片| 欧美日韩日日摸| 亚洲综合免费观看高清完整版| 不卡在线观看av| 国产亚洲精品免费| 国产老女人精品毛片久久| 日韩一区二区三区电影在线观看 | 蜜桃av噜噜一区二区三区小说| 欧美在线视频日韩| 夜夜嗨av一区二区三区网页| 成人午夜激情在线| 日本一区二区动态图| 国产ts人妖一区二区| 久久嫩草精品久久久久| 久久国产婷婷国产香蕉| 欧美电影免费观看完整版| 日韩成人午夜精品| 欧美裸体bbwbbwbbw| 三级久久三级久久久| 欧美日韩中文国产| 视频一区国产视频| 3atv在线一区二区三区| 午夜精品久久久久久久蜜桃app| 欧美久久久影院| 日本欧美在线观看| 精品美女在线播放| 国产剧情在线观看一区二区| 精品欧美乱码久久久久久| 久久成人免费日本黄色| 久久综合色综合88| 国产凹凸在线观看一区二区| 中文字幕va一区二区三区| 91碰在线视频| 一区二区免费视频| 91麻豆精品国产91久久久更新时间| 五月天精品一区二区三区| 欧美一级片在线| 国产在线精品国自产拍免费| 国产日韩视频一区二区三区| 99久久99久久免费精品蜜臀| 亚洲精品视频在线观看免费| 欧美日韩在线三级| 麻豆视频一区二区| 国产欧美日韩久久| 色视频一区二区| 青青草97国产精品免费观看 | 亚洲国产精品久久人人爱| 在线综合+亚洲+欧美中文字幕| 麻豆成人av在线| 久久精品视频网| 日本韩国欧美在线| 欧美aaa在线| 国产精品乱码一区二三区小蝌蚪| 在线观看亚洲a| 久久成人综合网| 亚洲色图视频网| 91精品国产黑色紧身裤美女| 国产伦精品一区二区三区免费迷| 中文字幕日韩一区二区| 8x福利精品第一导航| 国产黄色精品网站| 性做久久久久久久久| 26uuu亚洲婷婷狠狠天堂| 在线观看国产日韩| 国产乱国产乱300精品| 亚洲午夜久久久久久久久久久| 日韩美女在线视频| 色综合久久久久久久久久久| 美脚の诱脚舐め脚责91| 亚洲乱码日产精品bd| 精品精品国产高清a毛片牛牛| 99久久夜色精品国产网站| 美腿丝袜在线亚洲一区| 18欧美乱大交hd1984| 精品久久久久av影院| 欧美亚洲综合在线| 国产高清视频一区| 日韩国产欧美在线视频| 亚洲女同ⅹxx女同tv| 26uuu另类欧美| 9191成人精品久久| 色视频一区二区| 成人开心网精品视频| 精品一区二区三区免费视频| 一区二区国产盗摄色噜噜| 国产欧美一区二区三区在线老狼|