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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usblcd.c

?? 嵌入式linux下液晶編程院代碼, 可以在LINUX2.4內核下運行
?? C
字號:
/* $Id: USBLCD.c,v 1.17 2003/09/11 04:09:53 reinelt Exp $ * * Driver for USBLCD ( see http://www.usblcd.de ) * This Driver is based on HD44780.c * * Copyright 2002 by Robin Adams, Adams IT Services ( info@usblcd.de ) * Copyright 1999, 2000 by Michael Reinelt (reinelt@eunet.at) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * * $Log: USBLCD.c,v $ * Revision 1.17  2003/09/11 04:09:53  reinelt * minor cleanups * * Revision 1.16  2003/09/10 03:48:23  reinelt * Icons for M50530, new processing scheme (Ticks.Text...) * * Revision 1.15  2003/09/09 11:47:47  reinelt * basic icon support for HD44780 * * Revision 1.14  2003/09/09 06:54:43  reinelt * new function 'cfg_number()' * * Revision 1.13  2003/09/09 05:30:34  reinelt * even more icons stuff * * Revision 1.12  2003/08/24 05:17:58  reinelt * liblcd4linux patch from Patrick Schemitz * * Revision 1.11  2003/08/16 07:31:35  reinelt * double buffering in all drivers * * Revision 1.10  2003/07/24 04:48:09  reinelt * 'soft clear' needed for virtual rows * * Revision 1.9  2003/04/04 06:01:59  reinelt * new parallel port abstraction scheme * * Revision 1.8  2003/02/22 07:53:10  reinelt * cfg_get(key,defval) * * Revision 1.7  2002/08/19 09:11:34  reinelt * changed HD44780 to use generic bar functions * * Revision 1.6  2002/08/19 07:52:19  reinelt * corrected type declaration of (*defchar)() * * Revision 1.5  2002/08/19 07:36:29  reinelt * * finished bar.c, USBLCD is the first driver that uses the generic bar functions * * Revision 1.4  2002/08/19 04:41:20  reinelt * introduced bar.c, moved bar stuff from display.h to bar.h * * Revision 1.3  2002/08/18 08:11:11  reinelt * USBLCD buffered I/O * * Revision 1.2  2002/08/17 14:14:21  reinelt * * USBLCD fixes * * Revision 1.0  2002/07/08 12:16:10  radams * * first version of the USBLCD driver * *//*  * * exported fuctions: * * struct LCD UDBLCD[] * */#include "config.h"#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <time.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/stat.h>#include <sys/time.h>#include "debug.h"#include "cfg.h"#include "display.h"#include "icon.h"#include "bar.h"#define GET_HARD_VERSION	1#define GET_DRV_VERSION		2#define XRES 5#define YRES 8#define CHARS 8static LCD Lcd;static char *Port=NULL;static int usblcd_file;static int Icons;static char *FrameBuffer1=NULL;static char *FrameBuffer2=NULL;static unsigned char *Buffer;static unsigned char *BufPtr;static void USBLCD_send (){  // struct timeval now, end;  // gettimeofday (&now, NULL);    write(usblcd_file,Buffer,BufPtr-Buffer);  // gettimeofday (&end, NULL);  // debug ("send %d: %d usec (%d usec/byte)", BufPtr-Buffer, 1000000*(end.tv_sec-now.tv_sec)+end.tv_usec-now.tv_usec, (1000000*(end.tv_sec-now.tv_sec)+end.tv_usec-now.tv_usec)/(BufPtr-Buffer));  BufPtr=Buffer;}static void USBLCD_command (unsigned char cmd){  *BufPtr++='\0';  *BufPtr++=cmd;}static void USBLCD_write (char *string, int len){  while (len--) {    if(*string==0) *BufPtr++=*string;    *BufPtr++=*string++;  }}static int USBLCD_open (void){  char buf[128];  int major,minor;  usblcd_file=open(Port,O_WRONLY);  if (usblcd_file==-1) {    error ("USBLCD: open(%s) failed: %s", Port, strerror(errno));    return -1;  }    memset(buf,0,sizeof(buf));  if (ioctl(usblcd_file,GET_DRV_VERSION, buf)!=0) {    error ("USBLCD: ioctl() failed, could not get Driver Version!");    return -2;  }  debug("Driver Version: %s",buf);  if (sscanf(buf,"USBLCD Driver Version %d.%d",&major,&minor)!=2) {    error("USBLCD: could not read Driver Version!");    return -4;  }  if (major!=1) {    error("USBLCD: Driver Version not supported!");    return -4;  }  memset(buf,0,sizeof(buf));  if (ioctl(usblcd_file,GET_HARD_VERSION, buf)!=0) {    error ("USBLCD: ioctl() failed, could not get Hardware Version!");    return -3;  }  debug("Hardware Version: %s",buf);  if (sscanf(buf,"%d.%d",&major,&minor)!=2) {    error("USBLCD: could not read Hardware Version!");    return -4;  };  if (major!=1) {    error("USBLCD: Hardware Version not supported!");    return -4;  }    BufPtr=Buffer;  USBLCD_command (0x29); // 8 Bit mode, 1/16 duty cycle, 5x8 font  USBLCD_command (0x08); // Display off, cursor off, blink off  USBLCD_command (0x0c); // Display on, cursor off, blink off  USBLCD_command (0x06); // curser moves to right, no shift  return 0;}static void USBLCD_define_char (int ascii, char *buffer){  USBLCD_command (0x40|8*ascii);  USBLCD_write (buffer, 8);}int USBLCD_clear (int full){  memset (FrameBuffer1, ' ', Lcd.rows*Lcd.cols*sizeof(char));  icon_clear();  bar_clear();    if (full) {    memset (FrameBuffer2, ' ', Lcd.rows*Lcd.cols*sizeof(char));    USBLCD_command (0x01); // clear display  }    return 0;}int USBLCD_init (LCD *Self){  int rows=-1, cols=-1 ;  char *port, *s;  if (Port) {    free(Port);    Port=NULL;  }  if ((port=cfg_get("Port",NULL))==NULL || *port=='\0') {    error ("USBLCD: no 'Port' entry in %s", cfg_source());    return -1;  }  if (port[0]=='/') {    Port=strdup(port);  } else {    Port=(char *)malloc(5/*/dev/ */+strlen(port)+1);    sprintf(Port,"/dev/%s",port);  }  debug ("using device %s ", Port);  s=cfg_get("Size",NULL);  if (s==NULL || *s=='\0') {    error ("USBLCD: no 'Size' entry in %s", cfg_source());    return -1;  }  if (sscanf(s,"%dx%d",&cols,&rows)!=2 || rows<1 || cols<1) {    error ("USBLCD: bad size '%s'",s);    return -1;  }  Self->rows=rows;  Self->cols=cols;  Lcd=*Self;    // Init the command buffer  Buffer = (char*)malloc(1024);  if (Buffer==NULL) {    error ("USBLCD: coommand buffer could not be allocated: malloc() failed");    return -1;  }    // Init the framebuffers  FrameBuffer1 = (char*)malloc(Lcd.cols*Lcd.rows*sizeof(char));  FrameBuffer2 = (char*)malloc(Lcd.cols*Lcd.rows*sizeof(char));  if (FrameBuffer1==NULL || FrameBuffer2==NULL) {    error ("USBLCD: framebuffer could not be allocated: malloc() failed");    return -1;  }  if (USBLCD_open()!=0)    return -1;    if (cfg_number("Icons", 0, 0, CHARS, &Icons)<0) return -1;  if (Icons>0) {    debug ("reserving %d of %d user-defined characters for icons", Icons, CHARS);    icon_init(Lcd.rows, Lcd.cols, XRES, YRES, CHARS, Icons, USBLCD_define_char);    Self->icons=Icons;    Lcd.icons=Icons;  }    bar_init(rows, cols, XRES, YRES, CHARS-Icons);  bar_add_segment(  0,  0,255, 32); // ASCII  32 = blank  bar_add_segment(255,255,255,255); // ASCII 255 = block  USBLCD_clear(1);  USBLCD_send();  return 0;}void USBLCD_goto (int row, int col){  int pos=(row%2)*64+(row/2)*20+col;  USBLCD_command (0x80|pos);}int USBLCD_put (int row, int col, char *text){  char *p=FrameBuffer1+row*Lcd.cols+col;  char *t=text;    while (*t && col++<=Lcd.cols) {    *p++=*t++;  }  return 0;}int USBLCD_bar (int type, int row, int col, int max, int len1, int len2){  return bar_draw (type, row, col, max, len1, len2);}int USBLCD_icon (int num, int seq, int row, int col){  return icon_draw (num, seq, row, col);}int USBLCD_flush (void){  int row, col, pos1, pos2;  int c, equal;  bar_process(USBLCD_define_char);  for (row=0; row<Lcd.rows; row++) {    for (col=0; col<Lcd.cols; col++) {      c=bar_peek(row, col);      if (c==-1) c=icon_peek(row, col);      if (c!=-1) {	FrameBuffer1[row*Lcd.cols+col]=(char)c;      }    }    for (col=0; col<Lcd.cols; col++) {      if (FrameBuffer1[row*Lcd.cols+col]==FrameBuffer2[row*Lcd.cols+col]) continue;      USBLCD_goto (row, col);      for (pos1=col++, pos2=pos1, equal=0; col<Lcd.cols; col++) {	if (FrameBuffer1[row*Lcd.cols+col]==FrameBuffer2[row*Lcd.cols+col]) {	  // If we find just one equal byte, we don't break, because this 	  // would require a goto, which takes one byte, too.	  if (++equal>2) break;	} else {	  pos2=col;	  equal=0;	}      }      USBLCD_write (FrameBuffer1+row*Lcd.cols+pos1, pos2-pos1+1);    }  }  USBLCD_send();  memcpy (FrameBuffer2, FrameBuffer1, Lcd.rows*Lcd.cols*sizeof(char));  return 0;}int USBLCD_quit (void){  info("USBLCD: shutting down.");  USBLCD_send();  debug ("closing port %s", Port);  close(usblcd_file);  if (Buffer) {    free(Buffer);    Buffer=NULL;  }  if (FrameBuffer1) {    free(FrameBuffer1);    FrameBuffer1=NULL;  }  if (FrameBuffer2) {    free(FrameBuffer2);    FrameBuffer2=NULL;  }  return 0;}LCD USBLCD[] = {  { name: "USBLCD",    rows:  0,    cols:  0,    xres:  XRES,    yres:  YRES,    bars:  BAR_L | BAR_R | BAR_U | BAR_D | BAR_H2,    icons: 0,    gpos:  0,    init:  USBLCD_init,    clear: USBLCD_clear,    put:   USBLCD_put,    bar:   USBLCD_bar,    icon:  USBLCD_icon,    gpo:   NULL,    flush: USBLCD_flush,    quit:  USBLCD_quit   },  { NULL }};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区电影在线观看| 中文字幕一区二区三区蜜月| 在线免费观看不卡av| 成人污视频在线观看| 国产激情一区二区三区| 国产老女人精品毛片久久| 国产毛片一区二区| 风间由美一区二区av101| 国产99久久久国产精品潘金| 国产大片一区二区| 99久久精品国产麻豆演员表| 99re66热这里只有精品3直播 | 久久女同互慰一区二区三区| 337p亚洲精品色噜噜| 在线成人高清不卡| 精品捆绑美女sm三区| 欧美激情一区不卡| 亚洲私人影院在线观看| 一区二区三区四区国产精品| 偷偷要91色婷婷| 精品无人码麻豆乱码1区2区| 床上的激情91.| 91国偷自产一区二区使用方法| 欧美人xxxx| 精品福利一区二区三区免费视频| 欧美国产综合色视频| 一区二区三区在线视频免费| 午夜不卡av免费| 国产91精品入口| 在线一区二区三区四区五区| 56国语精品自产拍在线观看| 亚洲国产成人午夜在线一区| 亚洲一区二区3| 国产黄色成人av| 色成人在线视频| 日韩视频一区二区在线观看| 国产精品三级在线观看| 日韩高清一区二区| 99re8在线精品视频免费播放| 日韩欧美中文字幕一区| 亚洲婷婷综合色高清在线| 免费观看一级特黄欧美大片| 成人自拍视频在线观看| 欧美一级片在线看| 亚洲天堂精品在线观看| 国产在线一区观看| 欧美日韩精品专区| 亚洲天堂a在线| 国产精品1区二区.| 欧美日韩亚洲综合| 国产精品精品国产色婷婷| 裸体一区二区三区| 欧美日韩在线播| 国产精品传媒在线| 国产河南妇女毛片精品久久久| 欧美浪妇xxxx高跟鞋交| 亚洲精品久久嫩草网站秘色| 国产高清久久久| 26uuuu精品一区二区| 视频在线在亚洲| 欧美主播一区二区三区| 中文字幕一区二区三区四区不卡| 国产麻豆91精品| 精品日韩成人av| 日韩高清在线观看| 91精品国产美女浴室洗澡无遮挡| 亚洲精品一卡二卡| 91麻豆蜜桃一区二区三区| 国产日韩欧美制服另类| 国产激情精品久久久第一区二区| 精品日韩欧美一区二区| 久久99久久99| 欧美精品一区二区三区四区| 久久99精品久久久| 精品久久久网站| 国产一区二区三区免费| 久久综合狠狠综合| 国产精品一区二区你懂的| 久久综合九色综合97_久久久| 久久精品国产精品亚洲综合| 精品免费日韩av| 韩国精品一区二区| 久久久精品日韩欧美| 国产成a人亚洲精品| 日本一区二区三区在线观看| 成人精品在线视频观看| √…a在线天堂一区| 欧日韩精品视频| 日韩有码一区二区三区| 日韩精品中文字幕一区二区三区 | 青娱乐精品视频在线| 日韩一区二区三区四区| 国产一区二区调教| 中文字幕一区二区三区在线观看| 91久久精品一区二区| 日韩av电影免费观看高清完整版| 日韩一区二区三区四区五区六区 | 136国产福利精品导航| 欧美亚一区二区| 免费成人av在线| 国产日本欧洲亚洲| 日本精品裸体写真集在线观看| 视频一区中文字幕国产| 久久色在线观看| 91久久精品网| 国产在线播放一区| 亚洲美女视频一区| 日韩一区二区在线看| 99久久国产综合精品麻豆 | 精品少妇一区二区三区日产乱码| 丁香亚洲综合激情啪啪综合| 一区二区不卡在线播放| 精品国产一区二区三区久久影院 | 欧美日韩国产精选| 国产精华液一区二区三区| 一区二区三区国产| 欧美精品一区二区三区在线播放| 色国产综合视频| 国产在线一区观看| 五月综合激情网| 18涩涩午夜精品.www| 精品日韩成人av| 欧美老女人在线| 色香蕉久久蜜桃| 风间由美性色一区二区三区| 爽好久久久欧美精品| 亚洲欧美一区二区三区孕妇| 久久综合久久99| 在线电影院国产精品| 一本色道久久综合狠狠躁的推荐 | 亚洲一区二区三区四区中文字幕| 精品国产成人系列| 欧美肥胖老妇做爰| 欧美主播一区二区三区| jvid福利写真一区二区三区| 国产在线精品一区二区夜色| 亚洲福利视频导航| 一区二区三区精品视频在线| 综合色天天鬼久久鬼色| 中文字幕av一区二区三区免费看| 欧美一区二区三区思思人| 欧美日韩一区成人| 在线一区二区三区四区五区 | 国产精品久久久99| 中文一区在线播放| 日本一区二区三区dvd视频在线| 欧美一三区三区四区免费在线看| 欧美综合欧美视频| 欧美亚洲一区三区| 欧美视频三区在线播放| 欧美亚洲精品一区| 欧美日韩精品欧美日韩精品一综合| 91亚洲精品久久久蜜桃网站 | 国产精品你懂的在线欣赏| 久久精品人人做人人综合 | 久久综合综合久久综合| 天涯成人国产亚洲精品一区av| 亚洲一区二区三区四区的 | 精品一区二区三区免费视频| 美腿丝袜在线亚洲一区 | 亚洲美女视频一区| 亚洲黄色免费电影| 亚洲成人av中文| 日韩激情av在线| 国模少妇一区二区三区| 高清不卡在线观看av| 成人免费毛片app| 91视频免费播放| 欧美日韩国产小视频在线观看| 欧美绝品在线观看成人午夜影视| 精品污污网站免费看| 91精品欧美久久久久久动漫| 精品国产91乱码一区二区三区 | 精品一区二区三区免费毛片爱| 国产麻豆精品在线观看| 北条麻妃一区二区三区| 色婷婷久久久综合中文字幕| 欧美亚洲自拍偷拍| 久久蜜桃av一区精品变态类天堂| 欧美激情中文字幕一区二区| 亚洲综合色自拍一区| 美女在线观看视频一区二区| 懂色av一区二区三区免费观看| 欧美无砖专区一中文字| 欧美本精品男人aⅴ天堂| 国产精品久久久久久久久免费丝袜| 亚洲伦理在线免费看| 久久国产精品色| 91性感美女视频| 精品免费日韩av| 亚洲成人你懂的| 国产99久久久国产精品潘金| 欧美精品高清视频| 国产精品白丝在线| 日本美女一区二区三区视频| 成人午夜激情片| 欧美一区二区三区小说| 亚洲三级免费电影| 国产精品1区二区.| 欧美电影免费观看高清完整版在线观看 |