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

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

?? winuart.c

?? 在ARM7和UC/OSII的平臺(tái)上實(shí)現(xiàn)了GPS自動(dòng)報(bào)站的功能,涉及GPS模塊LEA_4S的驅(qū)動(dòng),位置速尋算法,語(yǔ)音芯片ISD4004的錄放音驅(qū)動(dòng),LED頁(yè)面管理等等.從啟動(dòng)代碼到操作系統(tǒng)的移植以及到業(yè)
?? C
字號(hào):
/* winuart.c

 Copyright 1991-1996 by NetPort Software
 Copyright 1997-2001 by InterNIche Technologies Inc.

   This implements a UART driver for PPP on Windows. The underlying
microsoft drivers are pretty bad, but hopefully good enough for a
demo.

*/


/* Microsoft Can't even get their sad-sack C code includes to compile 
 * cleanly, even with their own compiler. Disable the warnings here 
 * so that we can include windows.h without problems.
 */

#pragma warning(disable: 4244 4310 4115)
#include <windows.h>

#undef FAR
#include "ipport.h"

#ifdef USE_COMPORT

#include "winuart.h"
#include "nvparms.h"


int comport;   /* the "default" com port (for ..\modem\mdmport.c) */


/* table for mapping logical UART units to PC Com ports */
int comport_map[MAXUNITS]; /* map logical units to PC com ports */

struct com_win com_ports[MAXCOMMS];


/* uart_init() - PC UART init entry point. Fully installs & enables
the UART, including exit_hook() for closing.

Returns 0 if OK, else non-zero.
*/

char comfile[] = {"//./COM1" };     /* COM device name for CreateFile() */

int
uart_init(int unit)
{
int   comport;   /* com1, com2, etc. - get from NV parms */
int   err;
struct com_win * com;         /* our window comm manager struct */
COMMTIMEOUTS timeouts;        /* more crusty windows stuff */
DCB      dcb;                 /* ... */


   /* sanity check parameters */
   if(unit < 0 || unit > MAXUNITS)
      return -1;

   comport = comportcfg.comport+'0'; /* convert 0x01 to '1' */
   if(comport < '1' || comport > (MAXCOMMS+'0') )
   {
      dprintf("pcuart: bad comport: %c\n", comport);
      return ENP_LOGIC;
   }
   comfile[7] = (char)comport;  /* patch "COMX" device name */
   comport -= '1';      /* make comport into comport_map index */

   /* On windows the first unit to set up gets the comport from nvparms,
    * the next unit (if any) gets the other com port. We only use the
    * two standard ones on this port.
    */
   if(unit == 0)
      comport_map[unit] = comport;
   else     /* second unit, use other comport */
   {
      if(comport == 0)
         comport_map[unit] = comport = 1;
      else
         comport_map[unit] = comport = 0;
   }

   com = &com_ports[comport];

   if(com->uart_open == unit - 1)  /* it's open, nothing to do */
   {
      dtrap();    /* shouldn't happen anymore */
      return 0;   /* return "up" code */
   }

   /* Windozey UART API prentends it's a file (it seems they 
    * only borrow the stupid ideas from UNIX) - so call 
    * CreateFile() with no share, no security:
    */
   com->dev = CreateFile(comfile, GENERIC_READ|GENERIC_WRITE, 
      0, 0, OPEN_EXISTING, 0, NULL);

   if(com->dev == INVALID_HANDLE_VALUE)
   {
      err = GetLastError();
      dprintf("Error %d opening windows serial device\n", err);
      return ENP_LOGIC;
   }

   err = GetCommState(com->dev, &dcb);
   if(err == FALSE)  /* check boolean return */
   {
      dtrap();       /* Can this happen? */
      return ENP_LOGIC;
   }

   /* usually defaults to baud 1200, no parity, 8 data bits, 1 stop bit
    * DTR ENABLE. Set up what modems generally work well with:
    */
   dcb.BaudRate = CBR_57600;
   dcb.ByteSize = 8;
   dcb.fBinary = TRUE;
   dcb.Parity = NOPARITY;
   dcb.StopBits = ONESTOPBIT;

   err = SetCommState(com->dev, &dcb);
   if(err == FALSE)  /* check boolean return */
   {
      dtrap();       /* Comm port setup failed... */
      err = GetLastError();
      return ENP_LOGIC;
   }

   err = GetCommTimeouts(com->dev, &timeouts);
   if(err == FALSE)  /* check boolean return */
   {
      dtrap();       /* Can this happen? */
      return ENP_LOGIC;
   }

   com->baudrate = dcb.BaudRate;    /* record baud in local struct */

   timeouts.ReadIntervalTimeout = MAXDWORD;   /* immediate read return */

   err = SetCommTimeouts(com->dev, &timeouts);
   if(err == FALSE)  /* check boolean return */
   {
      dtrap();       /* Can this happen? */
      return ENP_LOGIC;
   }

   com->uart_open = unit - 1;
   exit_hook(uart_closehook);

   return 0;   /* OK return */
}


/*  void uart_putc(unit, char) - puts a byte out serial port.

    Returns 0 in AX if OK, else -1 if RDY timeout.
*/

int
uart_putc(int unit, u_char outchar)
{
struct com_win * com;
u_long   done;
int      err;

   if(unit < 0 || unit > MAXUNITS)
      return -1;

   com = &com_ports[comport_map[unit]];
   /* punt if the uart is not initialized. This means we have
    * to consider 0 an invalid handle value, although technically 
    * it seems to be legal. 
    */
   if((com->dev == INVALID_HANDLE_VALUE) ||
      (com->dev == 0))
   {
      return -1;
   }

   err = WriteFile(com->dev, &outchar, 1, &done, NULL);
   if((err == 0) || (done != 1))
   {
      dtrap()
      return -1;
   }

   com->uart_out++;

   return 0;
}


/*	uart_getc() - get the next character from the uart input buffer.
 Returns a 16 or 32 bit value. If a char is ready, the upper  bits are zero
 and the lower 8 bits have the byte value. If no char is ready, all bits
 are SET (ie, 16 bit value is 0xFFFF)
*/

int
uart_getc(int unit)
{
int      err;
int      retchar;
u_long   rlen;
struct com_win * com;

   if(unit < 0 || unit > MAXUNITS)
      return -1;

   com = &com_ports[comport_map[unit]];
   if(com->dev == INVALID_HANDLE_VALUE)
   {
      return -1;
   }

   rlen = 0;
   err = ReadFile(com->dev, &retchar, 1, &rlen, NULL);
   if(err == 0)      /* test boolean return */
   {
      err = GetLastError();
      if(rlen != 0)
      {
         dtrap();
      }

      switch (err)
      {
      case 0x03e4:   /* Overlapped I/O event is not in a signaled state */
      case 0x03e5:   /* Overlapped I/O operation is in progress. */
      case 0x0006:   /* Bad Handle */
         break;
      default:
         dprintf("UART ReadFile error %d\n", err);
         break;
      }
      return -1;
   }
   if(rlen != 1)
   {
      return -1;
   }
   com->uart_gets++;
   return (retchar & 0x000000FF);
}


/* uart_ready() - Returns true (0xFFFF) if UART is ready to send 
 a character, FALSE (0) if not. This allows a non-blocking UART send
 routine to be written in C.
*/

int
uart_ready(int unit)
{
struct com_win * com;

   if(unit < 0 || unit > MAXUNITS)
      return -1;

   com = &com_ports[comport_map[unit]];
   if(com->dev == INVALID_HANDLE_VALUE)
      return FALSE;
   else
      return TRUE;
}

/* void uart_close(void) - shut down UART
*/

void uart_close(int unit)
{
struct com_win * com;

   if(unit < 0 || unit > MAXUNITS)
   {
      dtrap();
      return;
   }

   com = &com_ports[comport_map[unit]];
   CloseHandle(com->dev);  /* best effort */

   /* clean up com_port struct */
   com->uart_open = unit;
   com->dev = INVALID_HANDLE_VALUE;
}



/* exit_hook to close all uarts. We close them all becasue we have no 
mechanism to pass a unit parameter through exit_hook 
*/

void
uart_closehook()
{
int unit;
struct com_win * com;

   dprintf("uart: closing com ports\n");
   for(unit = 0; unit < MAXUNITS; unit++)
   {
      com = &com_ports[comport_map[unit]];
      if(com->uart_open != unit - 1)
         continue;
      uart_close(unit);
      dprintf("uart: closed com%d\n", comport_map[unit] + 1);
   }
}

#ifdef NET_STATS

int
uart_stats(void * pio, int unit)
{
   int comport;
   int      err;
   struct com_win * com;
   DCB dcb;
   char * sbits;     /* stop bits string */
   char ptypes[5] = { 'N', 'O', 'E', 'M', 'S' };   /* parity types */

   comport = comport_map[unit];
   com = &com_ports[comport];
   if(com->uart_unit != unit)
   {
      dtrap();
   }

   ns_printf(pio, "   Win32 COM device status; handle:%x unit:%d:\n",
      com->dev, unit);
   ns_printf(pio,"Com port is Com%d\n", comport+1);
   ns_printf(pio, "uart_gets: %ld, uart_puts:%ld, set baud: %ld\n",
      com->uart_gets, com->uart_out, com->baudrate);
   ns_printf(pio,"send timeouts: %u\n", com->uart_tmo);

   err = GetCommState(com->dev, &dcb);

   switch(dcb.StopBits)    /* set string for stop bits */
   {
      case 0:
         sbits = "1";
         break;
      case 1:
         sbits = "1.5";
         break;
      case 2:
         sbits = "2";
         break;
      default:
         sbits = "foo";
   };
   ns_printf(pio, "actual Baudrate:%d, Parity %c, data bits %d, stop bits %s\n",
      dcb.BaudRate, ptypes[dcb.Parity], dcb.ByteSize, sbits);

   ns_printf(pio, "FLAGS: Binary Mode %d, parity enable %d, handshaking: CTS %d, DSR %d\n",
      dcb.fBinary, dcb.fParity, dcb.fOutxCtsFlow, dcb.fOutxDsrFlow);

   ns_printf(pio, "FLAGS: DTR Flow %d, DSR Sensitivity %d, TX when Xoff %d, Err Replacement %d\n",
      dcb.fDtrControl, dcb.fDsrSensitivity, dcb.fTXContinueOnXoff, dcb.fErrorChar);

   ns_printf(pio, "FLAGS: Null stripping %d, Rts Flow control %d, Abort on Error %d\n",
      dcb.fNull, dcb.fRtsControl, dcb.fAbortOnError);

   if(dcb.fOutX ||dcb.fInX)
   {
      ns_printf(pio, "fOutX:%d, fInX:%d\n",  dcb.fOutX, dcb.fInX);
      ns_printf(pio, "X-ON char:0x%x, X-OFF char:0x%x, Thresholds, XON %d, XOFF %d\n",
      dcb.XonLim, dcb.XoffLim, dcb.XonChar, dcb.XoffChar);
   }

   return 0;
}

#endif   /* NET_STATS */


#endif /* USE_COMPORT */



?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区中文字幕| 久久久久国产精品麻豆ai换脸| 欧美一卡二卡三卡| 久久综合久久鬼色中文字| 久久精品欧美日韩| 亚洲免费三区一区二区| 性欧美疯狂xxxxbbbb| 久久精品国产第一区二区三区| 国产传媒久久文化传媒| 欧美在线视频不卡| 久久日韩粉嫩一区二区三区| 成人欧美一区二区三区在线播放| 亚洲成av人片在www色猫咪| 国产乱码精品一区二区三区五月婷| 波波电影院一区二区三区| 欧美日韩高清一区二区三区| 久久综合色婷婷| 亚洲综合成人在线| 国模娜娜一区二区三区| 欧美综合色免费| 久久综合久久综合亚洲| 亚洲一区二区欧美| 国产成人免费在线视频| 在线综合视频播放| 国产精品乱码一区二区三区软件| 日韩在线一区二区三区| 大陆成人av片| 日韩一区二区电影| 一区二区三区资源| 国产精品456露脸| 91精品午夜视频| 亚洲人成影院在线观看| 狠狠色丁香婷婷综合| 欧美久久久影院| 中文字幕一区二区三区色视频| 久国产精品韩国三级视频| 日本韩国欧美在线| 国产精品嫩草99a| 久久97超碰色| 欧美一区二区三区影视| 一区二区三区在线观看视频| 粉嫩一区二区三区性色av| 日韩亚洲欧美成人一区| 怡红院av一区二区三区| 成人精品免费视频| 2020国产精品久久精品美国| 午夜欧美视频在线观看| 色婷婷国产精品综合在线观看| 国产午夜精品在线观看| 免费观看日韩电影| 欧美精品第1页| 亚洲福中文字幕伊人影院| 97国产一区二区| 欧美国产日韩一二三区| 国产精品538一区二区在线| 日韩精品综合一本久道在线视频| 亚洲第一福利视频在线| 色偷偷久久人人79超碰人人澡| 中文字幕av不卡| 国产一区二区精品久久91| 精品国产伦一区二区三区观看方式| 日韩精品视频网| 欧美日韩国产a| 午夜精品久久一牛影视| 欧美日韩在线观看一区二区| 一区二区三区免费| 色婷婷亚洲综合| 亚洲黄一区二区三区| 91在线视频免费91| 自拍视频在线观看一区二区| 成人av网站在线| 1区2区3区国产精品| 99久久精品国产网站| 欧美国产精品v| 成人免费看的视频| 国产精品久久久久天堂| 99r国产精品| 亚洲欧美日韩精品久久久久| 色综合久久久久久久久| 亚洲自拍偷拍欧美| 欧美福利视频一区| 日本成人在线不卡视频| 日韩欧美一区在线观看| 久久精品免费看| 久久婷婷国产综合国色天香| 国产精品一色哟哟哟| 欧美精彩视频一区二区三区| 99视频精品在线| 亚洲免费电影在线| 欧美视频一区二区在线观看| 视频一区视频二区中文字幕| 日韩欧美中文一区二区| 国产二区国产一区在线观看| 国产精品你懂的在线欣赏| 91免费精品国自产拍在线不卡| 亚洲人一二三区| 欧美日韩中文另类| 免费在线观看一区二区三区| 久久欧美中文字幕| 不卡一区在线观看| 一区二区高清免费观看影视大全| 欧美日韩精品免费| 狠狠色伊人亚洲综合成人| 亚洲国产精品二十页| 91免费小视频| 日韩成人av影视| 国产日韩欧美精品电影三级在线| a级高清视频欧美日韩| 亚洲一区二区av电影| 欧美变态tickling挠脚心| 成人一道本在线| 亚洲福中文字幕伊人影院| 亚洲精品在线免费观看视频| 成人av在线资源| 午夜精品久久久久久久久| 久久久久久久久岛国免费| 99久久精品免费精品国产| 日韩电影在线一区二区三区| 国产亚洲精品久| 欧美中文字幕一区二区三区亚洲| 日本在线观看不卡视频| 久久蜜桃一区二区| 在线观看欧美精品| 九色综合狠狠综合久久| 亚洲欧洲一区二区在线播放| 欧美军同video69gay| 大胆欧美人体老妇| 爽好久久久欧美精品| 国产精品久久国产精麻豆99网站| 欧美婷婷六月丁香综合色| 国产精品18久久久久久久久久久久| 亚洲人成网站色在线观看| 精品入口麻豆88视频| 91国产免费观看| 国产成人超碰人人澡人人澡| 日韩高清不卡一区| 亚洲人成电影网站色mp4| 日韩一级在线观看| 日本久久精品电影| 国产精品亚洲第一| 日本伊人色综合网| 亚洲天堂免费看| 国产亚洲短视频| 91精品国产麻豆| 色噜噜狠狠成人中文综合| 狠狠色丁香婷综合久久| 亚洲午夜成aⅴ人片| 国产精品欧美综合在线| 日韩欧美一级片| 欧美调教femdomvk| 99久久精品一区二区| 国产麻豆欧美日韩一区| 午夜久久久影院| 亚洲狼人国产精品| 国产视频一区在线播放| 欧美一区二区三区思思人| 色综合久久久网| 不卡av电影在线播放| 激情综合网天天干| 午夜国产不卡在线观看视频| 亚洲免费观看高清完整版在线| 国产午夜精品一区二区三区视频| 日韩欧美一区二区在线视频| 欧美日韩一区三区| 色欧美日韩亚洲| 色综合亚洲欧洲| 成人av免费在线播放| 国产精品99久久久久久久vr| 看片网站欧美日韩| 另类小说欧美激情| 日韩国产精品91| 一区二区三区欧美亚洲| 中文字幕在线不卡一区| 国产亚洲一本大道中文在线| 日韩亚洲国产中文字幕欧美| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲国产日韩综合久久精品| 国产精品视频一二三区| 国产亚洲欧美一级| 久久久精品中文字幕麻豆发布| 欧美一区二区三区日韩视频| 337p亚洲精品色噜噜噜| 欧美视频在线观看一区二区| 欧洲一区在线电影| 欧美少妇一区二区| 欧美日韩国产影片| 欧美一区二区在线播放| 欧美一区二区在线不卡| 日韩色视频在线观看| 精品伦理精品一区| 久久久蜜臀国产一区二区| 久久亚洲影视婷婷| 国产欧美精品一区aⅴ影院| 国产精品美女一区二区在线观看| 国产精品天美传媒| 亚洲日本一区二区| 亚洲国产成人va在线观看天堂| 亚洲成人自拍偷拍| 美腿丝袜在线亚洲一区| 国产原创一区二区|