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

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

?? comm.c

?? LP830 無線識別卡 讀寫程序demo
?? C
?? 第 1 頁 / 共 2 頁
字號:
// ****************************************************************************
//
// File Name:    comm.c
//
// Description: Handheld program serial communication routines. 
//
//  ORIGINATOR: Mark C. Lampkin. Lampkin Software Works,  (C)1994.
//              386 Merriweather
//              Grosse Pointe Farms, MI.  48236
//              (313) 884-8759
//              Version 1.2A
//
//  HISTORY
//    who     when     what
// -------- --------- ----------------------------------------------------
//  Geof    09-10-97  Took over. Added more baud rate settings and modem
//                    control register settings.
//  Geof    04-06-98  Moved om_buf_clr(), com_rec_buf(), and SendStream() 
//                    from hms800.c to this file.
//  Geof    11-18-98  Dump debug information to a file, like ABx Fast and ASCII.
//
// ****************************************************************************

#include <dos.h>
#include <ctype.h>
#include <conio.h>
#include <bios.h>
#include <io.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>
#include "typedef.h"
#include "handheld.h"    // For device type.
#include "comm.h"

#if PRINT_CMDS
#include <stdio.h>
#endif

#define CBS     16384   /* RS-232 input buffer size (a guess) */

#define COM1        1   /* port number parameters for comm_open() */
#define COM2        2

#define MDMDAT1     0x03F8  /* Address of modem port 1 data */
#define MDMSTS1     0x03FD  /* Address of modem port 1 status  */
#define MDMCOM1     0x03FB  /* Address of modem port 1 command */
#define MDMDAT2     0x02F8  /* Address of modem port 2 data */
#define MDMSTS2     0x02FD  /* Address of modem port 2 status */
#define MDMCOM2     0x02FB  /* Address of modem port 2 command */
#define MDMINTV     0x000C  /* Com 1 interrupt vector */
#define MDINTV2     0x000B  /* Com 2 interrupt vector */

#define MDMINTO     0x0EF   /* Mask to enable IRQ3 for port 1 */
#define MDMINTC     0x010   /* Mask to Disable IRQ4 for port 1 */

#define MDINTC2     0x008   /* Mask to Disable IRQ3 for port 2 */
#define MDINTO2     0x0F7   /* Mask to enable IRQ4 for port 2 */

#define INTCONT     0x0021  /* 8259 interrupt controller ICW2-3 */
#define INTCON1     0x0020  /* Address of 8259 ICW1 */

#if TEST_MUX32
BYTE now_mux_addr = MUX_ADDR; // If using MUX32 then this is the MUX32 address.
#endif

#if PRINT_CMDS
static BYTE prt_fname[] = "debug.txt";   // Dump debug information.
static FILE *debug_file;           // Point to debug file information, from the open.
#endif

static void interrupt (far *oldvec)();
static uint     intv;           /* interrupt number to usurp */

static int
    dat8250,                /* 8250 data register */
    stat8250,               /* 8250 line-status register */
    com8250,                /* 8250 line-control register */
    c_in_buf = 0,           /* count of characters received */
    xoffpt,                 /* amount of buffer that forces XOFF */
    xonpt,                  /* amount of buffer that unXOFFs */
    xonxoff = FALSE,        /* auto xon/xoff support flag */
    xofsnt  = FALSE;        /* XOFF transmitted flag */
    //xofrcv  = 0;          /* XOFF received flag */

static char
    en8259,                 /* 8259 IRQ enable mask */
    dis8259,                /* 8259 IRQ disable mask */
    buffer[CBS],            /* Communications circular buffer */
    *inptr = buffer,        /* input address of circular buffer */
    *outptr = buffer;       /* output address of circular buffer */
    work_buffer[256];       /* program 'in process' buffer */
    *pointer = work_buffer; /* address of working buffer */

/* Function Prototypes */
static void dobaud(long unsigned int);  

/* Functions */

void reset();
void start();
void stop();


// ****************************************************************************
// Serial interrupt routine, to actual receive data from the COM port.
//
// Input:        NONE.
// Return:       NONE.
// Side effects: Receive buffer and pointer are updated.
void interrupt serint(void)
{
    *inptr++ = inportb(dat8250);    /* Store character in buffer */
    c_in_buf++;                     /* and increment count */

    if (xonxoff)  {                 /* if xon/xoff auto-support is on */
        if ((c_in_buf > xoffpt) && !xofsnt)  {

            /* buffer nearly full */

            comm_putc(XOFF);        /* send an XOFF */
            xofsnt = TRUE;          /* and say so */
        }
    }

    disable();                      /* ints off for ptr change */
    if (inptr == &buffer[CBS])      /* wrap buffer input pointer if end */
        inptr = buffer;

    enable();
    outportb(0x20, 0x20);           /* Generic EOI to 8259 */
}

/* installs comm interrupts */

// ****************************************************************************
// Set the UART's control register selection.  What UART is open for this 
// COM port?  Setup to access it.
//
// Input:        Port number.
// Return:       BOOLEAN - TRUE of valid port number.
//                       - FALSE if not valid port number.
// Side effects: Global variables are setup for this COM port.
static unsigned char what_port(int port_number)
{
    uint    be = biosequip();       /* to get # installed serial ports */

    be <<= 4;                       /* shift-wrap high bits off */
    be >>= 13;                      /* shift down to low bits */

    if (be >= port_number)  
    {
        if (port_number == 1)  
        {
            dat8250  = MDMDAT1;
            stat8250 = MDMSTS1;
            com8250  = MDMCOM1;
            dis8259  = MDMINTC;
            en8259   = MDMINTO;
            intv     = MDMINTV;
        } else if (port_number == 2)  
        {
            dat8250  = MDMDAT2;
            stat8250 = MDMSTS2;
            com8250  = MDMCOM2;
            dis8259  = MDINTC2;
            en8259   = MDINTO2;
            intv     = MDINTV2;
        }
    } else
        return(FALSE);
    return(TRUE);
}


// ****************************************************************************
// configure this PC's COM port to a new baud rate.
//
// Input:        New baud rate value.
// Return:       NONE.
// Side effects: NONE.
static void dobaud(long unsigned int  baudrate)
{
    uchar   portval, blo, bhi;

    switch (baudrate)  {    /* Baud rate LSB's and MSB's */
    case 50:     bhi = 0x9;  blo = 0x00;  break;
    case 75:     bhi = 0x6;  blo = 0x00;  break;
    case 110:    bhi = 0x4;  blo = 0x17;  break;
    case 150:    bhi = 0x3;  blo = 0x00;  break;
    case 300:    bhi = 0x1;  blo = 0x80;  break;
    case 600:    bhi = 0x0;  blo = 0xC0;  break;
    case 1200:   bhi = 0x0;  blo = 0x60;  break;
    case 1800:   bhi = 0x0;  blo = 0x40;  break;
    case 2000:   bhi = 0x0;  blo = 0x3A;  break;
    case 2400:   bhi = 0x0;  blo = 0x30;  break;
    case 4800:   bhi = 0x0;  blo = 0x18;  break;
    case 9600:   bhi = 0x0;  blo = 0x0C;  break;
    case 19200:  bhi = 0x0;  blo = 0x06;  break;
    case 38400:  bhi = 0x0;  blo = 0x03;  break;
    case 57600:  bhi = 0x0;  blo = 0x02;  break;
    case 115200: bhi = 0x0;  blo = 0x01;  break;
    default:
        return;
    }

    portval = inportb(com8250);         /* read Line-Control Reg val */
    outportb(com8250, portval | 0x80);  /* set high bit for baud init */
    outportb(dat8250, blo);             /* Send LSB for baud rate */
    outportb(dat8250+1, bhi);           /* Send MSB for baud rate */
    outportb(com8250, portval);         /* Reset initial value at LCR */
}

// ****************************************************************************
// data read (dread), read data from the circular buffer
//
// Input:        Pointer to buffer to fill.
//               Number of BYTEs wonted.
//               Number of seconds to wait for the desired BYTEs.
// Return:       NONE.
// Side effects: NONE.
static int dread(BYTE *buffer, WORD wanted, WORD seconds)
{
   register int    i;
   long            start;
   int             pending, elapsed;

   start = time((long *)NULL);
   for (;;)  
   {
      pending = comm_avail();
      if (pending >= wanted)  // got enough in the buffer?
      {       
#if PRINT_CMDS
         fprintf(debug_file, "Received: ");
#endif
         for (i = 0; i < wanted; i++)
#if PRINT_CMDS
            fprintf(debug_file, "%02x ", *buffer++ = comm_getc());
         fprintf(debug_file, "\n");
#else
            *buffer++ = comm_getc();
#endif
         return TRUE;
      } else  
      {
         elapsed = time((long *)NULL) - start;
         if (elapsed >= seconds)
            return FALSE;
      }
   }
}

#if FALSE
// ****************************************************************************
// Put a srting out the COM port.
//
// Input:        String pointer.
// Return:       NONE.
// Side effects: NONE.
static void comm_puts(BYTE *s_message) 
{
    uchar   x;

    while(*s_message > 0) 
    {
       x = *s_message++;
       comm_putc(x);
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡av在线网| 国产精品一级黄| 亚洲欧美一区二区三区极速播放 | 香蕉影视欧美成人| 亚洲综合在线观看视频| 亚洲免费观看在线观看| 亚洲激情图片小说视频| 夜夜揉揉日日人人青青一国产精品| 日韩美女视频一区二区 | 韩国精品主播一区二区在线观看 | 午夜av一区二区三区| 日韩精品乱码免费| 麻豆国产91在线播放| 国产精品77777竹菊影视小说| 成人99免费视频| 欧美午夜一区二区三区免费大片| 精品视频在线免费看| 日韩欧美视频一区| 国产精品人人做人人爽人人添| 国产精品美女一区二区在线观看| 亚洲日本中文字幕区| 亚洲国产视频一区二区| 日本一区中文字幕| 国产精品一区二区在线观看不卡 | 日韩成人一级大片| 国产一二精品视频| 99久久国产综合精品女不卡| 欧美性受极品xxxx喷水| 日韩欧美精品三级| 日韩一区在线播放| 美国十次了思思久久精品导航| 国产一区二区三区蝌蚪| 91玉足脚交白嫩脚丫在线播放| 欧美色精品在线视频| 精品国产伦一区二区三区观看体验| 国产精品美女久久福利网站| 午夜免费久久看| 成人免费视频播放| 91精品黄色片免费大全| 国产精品久久久久久久久免费丝袜 | 国产一区二区视频在线| 91色porny蝌蚪| 欧美大肚乱孕交hd孕妇| 一区二区三区欧美在线观看| 国产福利精品导航| 欧美日韩日日骚| 椎名由奈av一区二区三区| 国内成人自拍视频| 欧美高清激情brazzers| 亚洲视频每日更新| 国产91精品入口| 欧美xxxxx牲另类人与| 亚洲一区二区三区爽爽爽爽爽| 亚洲成人高清在线| 国产一区二区在线观看免费 | 日韩avvvv在线播放| 丁香六月综合激情| 日韩美女视频在线| 亚洲高清免费观看 | 亚洲成人免费av| 不卡一区二区在线| 国产亚洲女人久久久久毛片| 日本不卡在线视频| 欧美日韩精品一区视频| 亚洲综合小说图片| 91丨九色丨蝌蚪丨老版| 最新国产成人在线观看| 成人午夜免费电影| 国产精品女人毛片| av在线不卡观看免费观看| 国产日韩欧美在线一区| 国产91丝袜在线播放| 国产日韩欧美精品电影三级在线| 国产在线国偷精品免费看| 精品国产乱码久久久久久久久| 奇米精品一区二区三区四区 | www激情久久| 激情六月婷婷久久| 久久先锋影音av鲁色资源| 精品一区在线看| 久久久久国产一区二区三区四区| 久久av中文字幕片| 亚洲国产精品成人综合| 99久久综合99久久综合网站| 亚洲色欲色欲www在线观看| 99re这里都是精品| 亚洲一区二区综合| 91精品国产乱| 精品一区二区三区在线播放视频| 久久精品一区二区三区不卡牛牛| 国产成人a级片| 亚洲人成精品久久久久| 欧美日韩国产成人在线免费| 日本欧美一区二区三区乱码| 精品国内二区三区| 成人18精品视频| 亚洲成人免费看| 2017欧美狠狠色| 99免费精品视频| 奇米在线7777在线精品| 国产喷白浆一区二区三区| 91原创在线视频| 日韩av在线发布| 国产精品福利在线播放| 欧美高清一级片在线| 国产精品 欧美精品| 亚洲综合色自拍一区| 欧美精品一区二区三区高清aⅴ | 日本韩国欧美在线| 久草中文综合在线| 亚洲免费视频成人| 制服丝袜av成人在线看| 国产**成人网毛片九色| 亚洲成人av一区二区| 国产女人水真多18毛片18精品视频| 一本久久综合亚洲鲁鲁五月天| 麻豆成人av在线| 一区二区日韩av| 中文字幕不卡在线观看| 欧美一区二区三区爱爱| 99久久精品国产网站| 国产一区二区三区香蕉| 亚洲高清免费一级二级三级| 国产视频一区在线播放| 日韩一级精品视频在线观看| 91免费看片在线观看| 韩国视频一区二区| 奇米影视一区二区三区| 一区二区三区成人| 中文字幕在线不卡一区二区三区| 欧美一区欧美二区| 欧洲一区在线观看| 色婷婷一区二区三区四区| 国产白丝网站精品污在线入口| 日韩中文字幕亚洲一区二区va在线| 亚洲色图制服诱惑| 亚洲色图视频网站| 欧美国产综合色视频| 精品久久国产字幕高潮| 91精品国产综合久久精品麻豆 | 国产精品18久久久久久久久 | 日韩视频免费观看高清完整版 | 亚洲综合激情小说| 亚洲精选视频在线| 亚洲色图制服丝袜| 日韩伦理免费电影| 中文字幕佐山爱一区二区免费| 国产精品丝袜一区| 国产精品美女久久久久高潮| 国产欧美一二三区| 国产欧美精品一区二区三区四区| 久久综合九色综合97婷婷| 精品国产一区二区三区久久久蜜月 | 久久精品亚洲精品国产欧美| 精品日韩在线观看| 久久一夜天堂av一区二区三区| 精品国产一区二区三区四区四| 日韩免费在线观看| 久久久精品tv| 亚洲桃色在线一区| 一区二区三区波多野结衣在线观看 | 亚洲欧美一区二区三区国产精品 | 久久se精品一区精品二区| 久草精品在线观看| 成人精品一区二区三区四区| 成人动漫中文字幕| 色菇凉天天综合网| 51精品视频一区二区三区| 精品国产一区二区三区av性色| 久久精品在这里| 亚洲精品成人天堂一二三| 五月激情综合网| 国产精品一区专区| 一道本成人在线| 日韩一级免费观看| 国产精品麻豆一区二区| 亚洲国产aⅴ天堂久久| 久久国产乱子精品免费女| 国产高清在线精品| 欧美日韩免费视频| 久久久久国产成人精品亚洲午夜| 亚洲人成小说网站色在线| 日韩电影网1区2区| 粉嫩绯色av一区二区在线观看| 色婷婷国产精品久久包臀| 精品国产91洋老外米糕| √…a在线天堂一区| 久久电影网电视剧免费观看| 99精品视频在线观看免费| 91精品国产高清一区二区三区蜜臀| 欧美经典一区二区| 亚洲第一搞黄网站| 国产成人精品免费在线| 制服丝袜亚洲播放| 亚洲欧洲一区二区三区| 激情综合色丁香一区二区| 色欧美日韩亚洲| 欧美激情一区二区三区在线| 日韩经典一区二区| 色又黄又爽网站www久久|