freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式程序設(shè)計(jì)課程設(shè)計(jì)五篇-資料下載頁(yè)

2024-11-19 00:27本頁(yè)面
  

【正文】 file *filp, char *buffer, size_t count, loff_t *ppos)、觸摸屏設(shè)備驅(qū)動(dòng)的輪詢與異步通知在觸摸屏設(shè)備驅(qū)動(dòng)中,通過(guò)s3c2410_ts_poll()函數(shù)實(shí)現(xiàn)了輪詢接口,這個(gè)函數(shù)的實(shí)現(xiàn)非常簡(jiǎn)單。它將等待隊(duì)列添加到poll_table,當(dāng)緩沖區(qū)有數(shù)據(jù)時(shí),返回資源可讀取標(biāo)志,否則返回0 觸摸屏設(shè)備驅(qū)動(dòng)的poll()函數(shù)static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)而為了實(shí)現(xiàn)觸摸屏設(shè)備驅(qū)動(dòng)對(duì)應(yīng)用程序的異步通知,設(shè)備驅(qū)動(dòng)中要實(shí)現(xiàn)s3c2410_ts_fasync()函數(shù) 觸摸屏設(shè)備驅(qū)動(dòng)的fasync()函數(shù)static int s3c2410_ts_fasync(int fd, struct file *filp, int mode):/* * * * touchScreen driver for SAMSUNG S3C2410 * * Author: Janghoon Lyu * Date : $Date: 2002/06/04 07:11:00 $ * * $Revision: $ * * Based on * * This file is subject to the terms and conditions of the GNU General Public * the file COPYING in the main directory of this archive * for more details.* * History: * * 20020527: Janghoon Lyu *PM 內(nèi)靛啊 甸絹啊 樂(lè)變 竅瘤父 拋膠飄 登瘤 臼疽瀾.* */include include include include include include include include include include include include ifdef CONFIG_PM include endif/* debug macros */ undef DEBUG ifdef DEBUG define DPRINTK(x...)printk(“s3c2410ts: ” x)else define DPRINTK(x...)endifdefine PEN_UP 0define PEN_DOWN 1 define PEN_FLEETING 2 define MAX_TS_BUF 16 /* how many do we want to buffer */undef USE_ASYNC 1 define DEVICE_NAME “s3c2410ts” define TSRAW_MINOR 1typedef struct { unsigned int penStatus。/* PEN_UP, PEN_DOWN, PEN_SAMPLE */ TS_RET buf[MAX_TS_BUF]。/* protect against overrun */ unsigned int head, tail。/* head and tail for queued events */ wait_queue_head_t wq。spinlock_t lock。ifdef USE_ASYNC struct fasync_struct *aq。endif ifdef CONFIG_PM struct pm_dev *pm_dev。endif } TS_DEV。static TS_DEV tsdev。define BUF_HEAD([])define BUF_TAIL([])define INCBUF(x,mod)((++(x))amp。((mod)1))static int tsMajor = 0。static void(*tsEvent)(void)。define HOOK_FOR_DRAG ifdef HOOK_FOR_DRAG define TS_TIMER_DELAY(HZ/100)/* 10 ms */ static struct timer_list ts_timer。endifdefine wait_down_int(){ ADCTSC = DOWN_INT | XP_PULL_UP_EN |XP_AIN | XM_HIZ | YP_AIN | YM_GND |XP_PST(WAIT_INT_MODE)。} define wait_up_int(){ ADCTSC = UP_INT | XP_PULL_UP_EN | XP_AIN | XM_HIZ |YP_AIN | YM_GND | XP_PST(WAIT_INT_MODE)。} define mode_x_axis(){ ADCTSC = XP_EXTVLT | XM_GND | YP_AIN | YM_HIZ |XP_PULL_UP_DIS | XP_PST(X_AXIS_MODE)。} define mode_x_axis_n(){ ADCTSC = XP_EXTVLT | XM_GND | YP_AIN | YM_HIZ |XP_PULL_UP_DIS | XP_PST(NOP_MODE)。} define mode_y_axis(){ ADCTSC = XP_AIN | XM_HIZ | YP_EXTVLT | YM_GND |XP_PULL_UP_DIS | XP_PST(Y_AXIS_MODE)。} define start_adc_x(){ ADCCON = PRESCALE_EN | PRSCVL(49)|ADC_INPUT(ADC_IN5)| ADC_START_BY_RD_EN |ADC_NORMAL_MODE。ADCDAT0。} define start_adc_y(){ ADCCON = PRESCALE_EN | PRSCVL(49)|ADC_INPUT(ADC_IN7)| ADC_START_BY_RD_EN |ADC_NORMAL_MODE。ADCDAT1。} define disable_ts_adc(){ ADCCON amp。= ~(ADCCON_READ_START)。}static int adc_state = 0。static int x, y。/* touch screen coorinates */static void tsEvent_raw(void){ if( == PEN_DOWN){ = x。 = y。 = PEN_DOWN。ifdef HOOK_FOR_DRAG = jiffies + TS_TIMER_DELAY。add_timer(amp。ts_timer)。endif } else { ifdef HOOK_FOR_DRAGdel_timer(amp。ts_timer)。endif = 0。 = 0。 = PEN_UP。} = INCBUF(, MAX_TS_BUF)。wake_up_interruptible(amp。())。ifdef USE_ASYNC if()kill_fasync(amp。(), SIGIO, POLL_IN)。endififdef CONFIG_PM pm_access()。endif }static int tsRead(TS_RET * ts_ret){ spin_lock_irq(amp。())。ts_retx = 。ts_rety = 。ts_retpressure = 。 = INCBUF(, MAX_TS_BUF)。spin_unlock_irq(amp。())。return sizeof(TS_RET)。}static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count, loff_t *ppos){ TS_RET ts_ret。retry: if(!= ){int count。count = tsRead(amp。ts_ret)。if(count)copy_to_user(buffer,(char *)amp。ts_ret, count)。return count。} else {if(filpf_flags amp。 O_NONBLOCK)returnEAGAIN。interruptible_sleep_on(amp。())。if(signal_pending(current))returnERESTARTSYS。goto retry。}return sizeof(TS_RET)。}ifdef USE_ASYNC static int s3c2410_ts_fasync(int fd, struct file *filp, int mode){ return fasync_helper(fd, filp, mode, amp。())。} endifstatic unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait){ poll_wait(filp, amp。(), wait)。return( == )? 0 :(POLLIN | POLLRDNORM)。}static inline void start_ts_adc(void){ adc_state = 0。mode_x_axis()。start_adc_x()。}static inline void s3c2410_get_XY(void){ if(adc_state == 0){adc_state = 1。disable_ts_adc()。y =(ADCDAT0 amp。 0x3ff)。mode_y_axis()。start_adc_y()。} else if(adc_state == 1){adc_state = 0。disable_ts_adc()。x =(ADCDAT1 amp。 0x3ff)。 = PEN_DOWN。DPRINTK(“PEN DOWN: x: %08d, y: %08dn”, x, y)。wait_up_int()。tsEvent()。} }static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg){ if 0 DPRINTK(“Occured Touch Screen Interruptn”)。DPRINTK(“SUBSRCPND = 0x%08lxn”, SUBSRCPND)。endif spin_lock_irq(amp。())。if( == PEN_UP)s3c2410_get_XY()。ifdef HOOK_FOR_DRAG else s3c2410_get_XY()。endif spin_unlock_irq(amp。())。}static void s3c2410_isr_tc(int irq, void *dev_id, struct pt_regs *reg){ if 0 DPRINTK(“Occured Touch Screen Interruptn”)。DPRINTK(“SUBSRCPND = 0x%08lxn”, SUBSRCPND)。endif spin_lock_irq(amp。())。if( == PEN_UP){ start_ts_adc()。} else { = PEN_UP。DPRINTK(“PEN UP: x: %08d, y: %08dn”, x, y)。wait_down_int()。tsEvent()。} spin_unlock_irq(amp。())。}ifdef HOOK_FOR_DRAG static void ts_timer_handler(unsigned long data){ spin_lock_irq(amp。())。if( == PEN_DOWN){start_ts_adc()。} spin_unlock_irq(amp。())。} endifstatic int s3c2410_ts_open(struct inode *inode, struct file *filp){ = = 0。 = PEN_UP。ifdef HOOK_FOR_DRAG init_timer(amp。ts_timer)。 = ts_timer_handler。endif tsEvent = tsEvent_raw。init_waitqueue_head(amp。())。MOD_INC_USE_COUNT。return 0。}static int s3c2410_ts_release(struct inode *inode, struct file *filp){ ifdef HOOK_FOR_DRAG del_timer(amp。ts_timer)。endif MOD_DEC_USE_COUNT。return 0。}static struct file_operations s3c2410_fops = { owner: THIS_MODULE, open: s3c2410_ts_open, read: s3c2410_ts_read,release: s3c2410_ts_release,ifdef USE_ASYNC fasync: s3c2410_ts_fasync, endif poll: s3c2410_ts_poll, }。void tsEvent_dummy(void){} ifdef CONFIG_PM static int s3c2410_ts_pm_callback(struct pm
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1