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

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

?? key_buffer.c

?? sparc硬件平臺(tái)上的鍵盤(pán)驅(qū)動(dòng)
?? C
字號(hào):
/************************************************************  Copyright (C), 2007,DTK Computer.  FileName: key_buffer.c  Author:   rome              Version : 1.0.0         Date:2007.03.21  Description:     鍵盤(pán)緩沖操作,在內(nèi)部處理了競(jìng)爭(zhēng)條件的情況。        Version:         DTK-EMMI-1.0.0  Function List:       1.key_buffer_new:鍵盤(pán)緩沖對(duì)象的創(chuàng)建。    2.key_buffer_clear:清除鍵盤(pán)緩沖內(nèi)容。    3.key_buffer_is_empty:緩沖對(duì)象內(nèi)部沒(méi)有加鎖的情況下判斷緩沖是否為空。    4.key_buffer_is_empty_unlock:緩沖對(duì)象內(nèi)部加鎖的情況下判斷緩沖是否為空。     5.key_buffer_put:把掃描碼放進(jìn)緩沖。    6.key_buffer_get:從緩沖獲取掃描碼,超時(shí)返回超時(shí)碼。  Macro List:    1.key_buffer_cycle_add:在 0到(KEY_BUFFER_LEN-1)的取值范圍內(nèi)循環(huán)加。    2.TRACE(x...):用于測(cè)試打印調(diào)試信息。  History:               <author>   <time>    <version >    <desc>      rome      2007/03/21  1.0.0     build this moudle  ***********************************************************/#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <time.h>#include <sys/time.h>#include <assert.h>#include "key_buffer.h"#include "mmi_lock.h"//#define KEY_BUFFER_LEN 16#define KEY_BUFFER_LEN 8 /* for test the simulate *//* 通過(guò) & 操作符使KeyBuffer中的index值的取值范圍為: 0---KEY_BUFFER_LEN - 1    注意KEY_BUFFER_LEN必需是 2 的 n 次方 */#define key_buffer_cycle_add(index)                   \         do                                           \         {                                            \          (index) = ((index) + 1) & (KEY_BUFFER_LEN - 1); \         } while(0)/* 下面的宏是測(cè)試用的 */#define KEY_BUFFER_TEST 1#ifdef KEY_BUFFER_TEST    #define TRACE(x...)    printf("KeyBuffer: " x)#else    #define TRACE(x...)   do {} while(0)#endifstruct _KeyBuffer{    mmi_mutex_t lock;    mmi_thread_cond_t cond;    D_INT8 waiter;    D_INT8 head;    D_INT8 tail;    char buf[KEY_BUFFER_LEN];};KeyBuffer *key_buffer_new(void){    KeyBuffer *key_buffer;    key_buffer = (KeyBuffer *)calloc(1, sizeof(struct _KeyBuffer));    key_buffer->head = key_buffer->tail = 0;    key_buffer->waiter = 0;    mmi_mutext_init(&key_buffer->lock, NULL);    mmi_thread_cond_init(&key_buffer->cond, NULL);    return key_buffer;}void key_buffer_destroy(KeyBuffer *key_buffer){    mmi_mutext_destroy(&key_buffer->lock);    mmi_thread_cond_destroy(&key_buffer->cond);        //memset(key_buffer, 0, sizeof(KeyBuffer));    free(key_buffer);}void key_buffer_clear(KeyBuffer *key_buffer){    mmi_mutex_lock(&key_buffer->lock);    key_buffer->head = key_buffer->tail = 0;    mmi_mutex_unlock(&key_buffer->lock);}D_BOOL key_buffer_is_empty(KeyBuffer *key_buffer){    D_BOOL is_empty;    mmi_mutex_lock(&key_buffer->lock);    is_empty = key_buffer_is_empty_unlock(key_buffer);    mmi_mutex_unlock(&key_buffer->lock);    return is_empty;}D_BOOL key_buffer_is_empty_unlock(KeyBuffer *key_buffer){    return key_buffer->head == key_buffer->tail;}void key_buffer_put(KeyBuffer *key_buffer, char ch){    mmi_mutex_lock(&key_buffer->lock);    key_buffer->buf[key_buffer->head] = ch;    key_buffer_cycle_add(key_buffer->head);    if (key_buffer->head == key_buffer->tail)    {        key_buffer_cycle_add(key_buffer->tail);    }    if (key_buffer->waiter > 0)    {        mmi_thread_cond_signal(&key_buffer->cond);    }#ifdef KEY_BUFFER_TEST    int head = (key_buffer->head >= key_buffer->tail)                ? key_buffer->head               : key_buffer->head + KEY_BUFFER_LEN;    int tail = key_buffer->tail;    TRACE("there is number %d char in the key buffer\n", head - tail);#endif    mmi_mutex_unlock(&key_buffer->lock);}D_INT16 key_buffer_get(KeyBuffer *key_buffer, D_INT8 timeout){    D_INT32 ret_waite = 0;    D_INT16 ret_ch;    mmi_mutex_lock(&key_buffer->lock);    if (timeout > 0)    {        struct timespec waite_time = {0};        struct timeval current_time;        gettimeofday(&current_time, NULL);        /* FIXME: 這里的時(shí)間處理看具體的硬件封裝接口 */        //clock_gettime(CLOCK_REALTIME, &waite_time);        waite_time.tv_sec = current_time.tv_sec;        waite_time.tv_sec += timeout;        while (key_buffer_is_empty_unlock(key_buffer) && 0 == ret_waite)        {            key_buffer->waiter++;             TRACE("there is %d waiting for key_buffer\n",key_buffer->waiter);             ret_waite = mmi_thread_cond_timedwait(&key_buffer->cond,                                                   &key_buffer->lock,                                                   &waite_time);            key_buffer->waiter--;             TRACE("there is %d waiting for key_buffer\n",key_buffer->waiter);         }    }    else    {        while (key_buffer_is_empty_unlock(key_buffer) && 0 == ret_waite)        {            key_buffer->waiter++;             TRACE("there is %d waiting for key_buffer\n",key_buffer->waiter);             ret_waite = mmi_thread_cond_wait(&key_buffer->cond, &key_buffer->lock);            key_buffer->waiter--;             TRACE("there is %d waiting for key_buffer\n",key_buffer->waiter);         }    }    if (0 == ret_waite) /* 正常返回 */    {        ret_ch = key_buffer->buf[key_buffer->tail];        key_buffer_cycle_add(key_buffer->tail);        mmi_mutex_unlock(&key_buffer->lock);        return ret_ch;    }    else    {        mmi_mutex_unlock(&key_buffer->lock);        if (timeout)        {            return GET_OVER_TIME;         }        printf("key_buffer_get error !!!\n");        assert(0); /* 在調(diào)試時(shí),出錯(cuò)停止 */        return GET_OVER_TIME;    }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天做天天摸天天爽国产一区| 91精品免费在线观看| 九九精品视频在线看| 亚洲小说欧美激情另类| 亚洲蜜桃精久久久久久久| 亚洲欧美国产77777| 亚洲日本青草视频在线怡红院| 国产精品视频一区二区三区不卡| 久久久久久毛片| 国产精品天干天干在观线| 国产精品成人一区二区艾草 | av电影一区二区| 成人av在线网| 一本大道久久a久久精二百| 91一区一区三区| 欧美日韩国产片| 日韩午夜电影在线观看| 久久精品视频在线免费观看| 亚洲国产精品成人综合| 亚洲情趣在线观看| 日本不卡123| 懂色av一区二区在线播放| 91亚洲国产成人精品一区二区三 | 91精品国产综合久久香蕉麻豆| 欧美午夜理伦三级在线观看| 日韩三级中文字幕| 欧美国产精品久久| 亚洲国产欧美日韩另类综合 | 国产精品国产三级国产| 樱花草国产18久久久久| 麻豆91精品91久久久的内涵| 国产一区二区不卡| 色偷偷久久人人79超碰人人澡| 3d成人动漫网站| 日本一区二区三区四区在线视频| 一区二区三区国产精华| 日韩精品乱码av一区二区| 岛国av在线一区| 欧美高清视频在线高清观看mv色露露十八 | 国产精品1区二区.| 欧美亚洲愉拍一区二区| 久久久www成人免费无遮挡大片| 亚洲欧美成人一区二区三区| 男女男精品视频网| 欧美中文字幕一区二区三区亚洲| 欧美大尺度电影在线| 亚洲视频一二三区| 国产精品18久久久久久vr | 亚洲国产精品久久久久婷婷884| 精品写真视频在线观看| 欧美体内she精视频| 国产欧美精品一区aⅴ影院| 蜜桃视频在线观看一区| 在线观看av不卡| 中文字幕一区二区三区色视频| 精品一区二区三区免费视频| 欧美日韩在线播放| 亚洲男人天堂av| 波多野结衣中文字幕一区| 精品免费视频一区二区| 男人的j进女人的j一区| 欧美日韩在线三区| 亚洲最新在线观看| 91香蕉视频mp4| 国产精品久久久久久久久免费相片| 精品系列免费在线观看| 欧美一级片在线| 午夜视频一区二区| 正在播放亚洲一区| 亚洲制服丝袜一区| 欧美做爰猛烈大尺度电影无法无天| 国产精品久久精品日日| 粉嫩在线一区二区三区视频| 精品动漫一区二区三区在线观看| 日韩不卡手机在线v区| 欧美日韩中字一区| 亚洲国产成人av网| 欧美一区二区三区喷汁尤物| 午夜精品一区在线观看| 91精品在线观看入口| 婷婷一区二区三区| 精品播放一区二区| 国产成人小视频| 国产精品不卡在线| 色婷婷av一区二区三区gif| 一区二区三区四区av| 欧美日韩一区二区在线观看视频 | 中文字幕一区二区日韩精品绯色 | 亚洲欧美日韩久久| 91国产视频在线观看| 日日欢夜夜爽一区| 日韩免费高清视频| 国产精品一区一区| 亚洲精品视频在线| 欧美日韩国产首页| 激情成人综合网| 国产精品久久毛片av大全日韩| 91在线视频播放| 亚洲国产精品视频| 精品粉嫩aⅴ一区二区三区四区| 丁香一区二区三区| 一区二区三区欧美日| 日韩一区二区高清| 本田岬高潮一区二区三区| 亚洲va欧美va国产va天堂影院| 精品久久久久久久人人人人传媒| 99久久精品情趣| 日韩av午夜在线观看| 中文字幕一区二区三区视频| 这里只有精品视频在线观看| fc2成人免费人成在线观看播放| 亚洲成人免费在线| 中文字幕精品一区| 欧美日韩二区三区| 国产成人精品影视| 天天综合色天天综合色h| 国产女人18水真多18精品一级做| 91电影在线观看| 国产成人免费视频| 日韩电影在线免费看| 亚洲人成精品久久久久久| 欧美本精品男人aⅴ天堂| 日本久久精品电影| 成人激情免费电影网址| 蜜臀91精品一区二区三区| 亚洲综合免费观看高清完整版在线| 日韩欧美亚洲另类制服综合在线| 色综合天天天天做夜夜夜夜做| 麻豆91精品91久久久的内涵| 亚洲影视资源网| 国产精品素人一区二区| 精品人在线二区三区| 欧美日韩免费高清一区色橹橹| 成人黄色777网| 国产综合成人久久大片91| 日韩精品欧美精品| 亚洲一区免费在线观看| 1000精品久久久久久久久| 久久亚洲精品小早川怜子| 日韩亚洲国产中文字幕欧美| 在线精品观看国产| 91国偷自产一区二区使用方法| 99久久免费视频.com| 成人h动漫精品一区二| 国产一区二区女| 精品一区二区三区蜜桃| 日韩不卡一区二区| 奇米一区二区三区| 日韩av二区在线播放| 日韩电影免费在线看| 午夜成人免费电影| 偷拍日韩校园综合在线| 丝袜美腿亚洲色图| 亚洲va欧美va天堂v国产综合| 一区二区三区日韩精品视频| 一区二区高清在线| 亚洲一区影音先锋| 午夜精品久久久久影视| 天天影视色香欲综合网老头| 亚洲一区自拍偷拍| 青青草一区二区三区| 久久成人18免费观看| 国产精品自拍网站| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 国产精品久久久久婷婷| 国产精品高潮呻吟| 亚洲精品你懂的| 天天综合色天天综合色h| 三级一区在线视频先锋| 久久精品国产久精国产| 国产米奇在线777精品观看| 国产91精品精华液一区二区三区| 成人福利视频在线看| 欧美综合视频在线观看| 日韩三级在线免费观看| 国产精品国产馆在线真实露脸| 亚洲综合一区二区| 老鸭窝一区二区久久精品| 国产福利电影一区二区三区| 99精品视频在线免费观看| 欧美日韩久久一区二区| 精品国产91久久久久久久妲己| 欧美—级在线免费片| 亚洲一区二区三区四区中文字幕| 青青草原综合久久大伊人精品优势| 国模少妇一区二区三区| 色狠狠综合天天综合综合| 日韩女优av电影| 亚洲人成网站影音先锋播放| 蜜桃av噜噜一区| 91在线你懂得| 久久女同互慰一区二区三区| 一区二区在线观看视频| 国产一区二区免费视频| 欧美日韩成人一区二区| 国产精品毛片大码女人| 久久99久久精品| 欧美日韩成人高清| 一区二区三区在线看| 成人开心网精品视频|