91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

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

資源簡介

基于海思平臺Hi3559AV00的韋根輸入項目源碼。包含C源代碼,Makefile以及編譯說明。

推薦使用WGNET轉換器進行測試。

資源截圖

代碼片段和文件信息

#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;

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

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

//奇偶校驗通過,將韋根轉換為實際數據
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;

//雖然超時時間已到達,但還要等待維根數據傳送完畢才進行轉換
//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“);

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

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

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

//恢復中斷
enable_irqs();
}

stat

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????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


評論

共有 條評論