xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-11
  • 語言: 其他
  • 標(biāo)簽: Wiegand??Hi3559??

資源簡(jiǎn)介

基于海思平臺(tái)Hi3559AV00的韋根輸入項(xiàng)目源碼。包含C源代碼,Makefile以及編譯說明。

推薦使用WGNET轉(zhuǎn)換器進(jìn)行測(cè)試。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
//#include?
#include?
#include?
#include?


#define?WIEGAND_MAJOR 250
#define?TIMER_DELAY HZ/8
#define?DEVICE_NAME “wiegand_in“?

#define?GPIO12_4 (12?*?8?+?4)
#define?GPIO12_2 (12?*?8?+?2)
#define?WG_DATA0 GPIO12_4
#define?WG_DATA1 GPIO12_2


static?int?wiegand_dev_major?=?WIEGAND_MAJOR;
static?bool?dev_open_flag?=?false;
static?bool?overflow_flag?=?false;

struct?wiegand_dev
{
char?wiegand[34];?//wiegand-34
unsigned?int?data;?//actual?data
unsigned?int?count;?//global?counter
struct?cdev?cdev;
struct?semaphore?sem;
struct?completion?receive_completion;
struct?timer_list?wiegand_timer;
struct?work_struct?pen_event_work;
struct?workqueue_struct?*ts_workqueue;
int?gpio_d0;
int?gpio_d1;
int?d0_irq;
int?d1_irq;
};
struct?wiegand_dev?*wiegand_in_devp?=?NULL;


//使能中斷
static?void?enable_irqs(void)
{
enable_irq(wiegand_in_devp->d0_irq);
enable_irq(wiegand_in_devp->d1_irq);
}

//禁止中斷
static?void?disable_irqs(void)
{
disable_irq(wiegand_in_devp->d0_irq);
disable_irq(wiegand_in_devp->d1_irq);
}

static?char?convert_data(void)
{
int?i;
int?even?=?0;
int?odd?=?0;

//偶校驗(yàn)
for(i=1;?i<=16;?i++)
{
if(wiegand_in_devp->wiegand[i]?==?1)
even++;
}
//偶校驗(yàn)不通過的情況
//偶校驗(yàn):當(dāng)實(shí)際數(shù)據(jù)中1的個(gè)數(shù)為偶數(shù)的時(shí)候,這個(gè)校驗(yàn)位就是0,否則這個(gè)校驗(yàn)位就是1
if(even%2?!=?wiegand_in_devp->wiegand[0])
{
wiegand_in_devp->count?=?0;
goto?error;
}

//奇校驗(yàn)
for(i=17;?i<=32;?i++)
{
if(wiegand_in_devp->wiegand[i]?==?1)
odd++;
}
//奇校驗(yàn)不通過的情況
//奇校驗(yàn):當(dāng)實(shí)際數(shù)據(jù)中1的個(gè)數(shù)為偶數(shù)的時(shí)候,這個(gè)校驗(yàn)位就是1,否則這個(gè)校驗(yàn)位就是0
if(odd%2?==?wiegand_in_devp->wiegand[33])
{
wiegand_in_devp->count?=?0;
goto?error;
}

//奇偶校驗(yàn)通過,將韋根轉(zhuǎn)換為實(shí)際數(shù)據(jù)
wiegand_in_devp->data?=?0;
for(i=1;?i<=32;?i++)
{
wiegand_in_devp->data?<<=?1;
wiegand_in_devp->data?|=?wiegand_in_devp->wiegand[i];
}

wiegand_in_devp->count?=?0;

printk(“data?is:?%#x\n“?wiegand_in_devp->data);

return?0;

error:
printk(“parity?efficacy?error\n“);
return?-1;
}

static?void?wiegand_do_timer(unsigned?long?arg)
{
int?i?=?0;

//雖然超時(shí)時(shí)間已到達(dá),但還要等待維根數(shù)據(jù)傳送完畢才進(jìn)行轉(zhuǎn)換
//wait_for_completion(&(wiegand_in_devp->receive_completion));

printk(“%d\n“?wiegand_in_devp->count);

for(i=0;?icount;?i++)
printk(“%d?“?wiegand_in_devp->wiegand[i]);
printk(“\n“);

//如果不是數(shù)據(jù)位不是34(由于中斷中有限制,實(shí)際上不會(huì)超過,只能小于34),則返回全F代表出錯(cuò)
if(wiegand_in_devp->count?!=?34)
{
wiegand_in_devp->count?=?0;
wiegand_in_devp->data?=?0xFFFFFFFF;?//全F代表出錯(cuò)
up(&wiegand_in_devp->sem);
overflow_flag?=?false;
return;
}

//關(guān)閉外部中斷,防止wiegand_data在轉(zhuǎn)換期間發(fā)生變化
disable_irqs();

//如果轉(zhuǎn)換錯(cuò)誤,則返回全F代表出錯(cuò)
if(convert_data()?!=?0)
{
wiegand_in_devp->data?=?0xFFFFFFFF;?//全F代表出錯(cuò)
}
overflow_flag?=?false;
up(&wiegand_in_devp->sem);

//恢復(fù)中斷
enable_irqs();
}

stat

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----

?????文件???????2253??2020-02-27?14:45??wiegand_in\drv\Makefile

?????文件????????381??2020-02-27?14:48??wiegand_in\drv\readme.txt

?????文件??????10702??2020-03-02?17:14??wiegand_in\drv\wiegand_in.c

?????目錄??????????0??2020-03-02?17:46??wiegand_in\drv

?????目錄??????????0??2020-02-27?14:45??wiegand_in

-----------?---------??----------?-----??----

????????????????13336????????????????????5


評(píng)論

共有 條評(píng)論