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

  • 大小: 8KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-23
  • 語言: 其他
  • 標簽: linux??RFID??

資源簡介

維根協議驅動程序,linux平臺下測試可用,采用中斷方式讀取數據,RFID學習必備,助你快速搞定RFID驅動

資源截圖

代碼片段和文件信息

/*wiegand?協議驅動代碼*/
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?

#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?

#include?
#include?

#define?WIEGAND_MAJOR?243????????

//delay?33ms?to?convert?data
#define?TIMER_DELAY?HZ/30

#define?DEVICE_NAME?“wiegand“?
?
bool?TIMEER_FLAG?=?false;???
bool?RF_OPEN_FLAG?=?false;

struct?wiegand_dev
{
char?wiegand[26];????//Wiegand?Data?26Bits
int?hid;
int?pid;
//unsigned?char?state;?
int?count;????//Global?Counter
struct?cdev?cdev;
struct?semaphore?sem;
struct?completion?receive_completion;
struct?timer_list?wiegand_timer;
};

static?struct?wiegand_dev?*rf_card;

//應該除了初始化外,只能有這一個地方能夠將rf_card->count置為0,其余地方置為0皆不合法
static?char?convert_data(void)
{
int?ievenodd;

//奇校驗
???? even?=?0;
???? for(i?=?1;?i????? {
? if(rf_card->wiegand[i]?==?1)
?? even?=?(~even)?&?0x01;?
???? }
????? if(even?!=?rf_card->wiegand[0])
????? ?{
rf_card->count?=?0;
goto?error;
?????? }
//偶校驗??
??? ?odd?=?1;
???? for(i?=?13;?i???? {
????if(rf_card->wiegand[i]?==?1) ?
odd?=?(~odd)&?0x01; ??????
????? }
????? if(odd?!=?rf_card->wiegand[25])
?????? {
rf_card->count?=?0;
???????goto?error;
????? ?}

//奇偶校驗通過
rf_card->hid?=?0;
for(i?=?1?;i<=12;i++)//hid轉換
rf_card->hid?=??rf_card->hid?<wiegand[i];

rf_card->pid?=?0;
for(i?=?13?;i<=25;i++)//pid轉換
rf_card->pid?=??rf_card->pid?<wiegand[i];
??
???? rf_card->count?=?0;
return?0;

error:
printk(“Parity?Efficacy?Error!\n“);
return?-1;
}

static?void?wiegand_do_timer(unsigned?long?arg)
{
printk(“%s:wait?wieg_data?completed\n“__func__);
wait_for_completion(&(rf_card->receive_completion));//等待維根數據傳送完畢才進行轉換

disable_irq(IRQ_EINT(17));
disable_irq(IRQ_EINT(18));//防止wieg_data在轉換期間發生變化

convert_data();
up(&rf_card->sem);

printk(“%s:complete?convert?wieg_datahid?=?%dpid?=?%d?\n“__func__rf_card->hidrf_card->pid);

TIMEER_FLAG?=?false;

enable_irq(IRQ_EINT(17));
enable_irq(IRQ_EINT(18));
}

static?void?enable_irqs(void)
{
enable_irq(IRQ_EINT(17));
enable_irq(IRQ_EINT(18));

printk(“%s:the?irq?is?setup!\n“__func__);
}

static?irqreturn_t?wiegand_irq0(int?irq?void?*dev_id)
{
disable_irq_nosync(IRQ_EINT(17));
? printk(“%s:IN\n“__func__);??
udelay(5);

if(gpio_get_value(S3C64XX_GPL(9))?==?0)
{
??? rf_card->wiegand[rf_card->count]?=?0;
??? printk(“%s:wiegand[%d]?=?%d\n“__func__rf_card->countrf_card->wiegand[rf_card->count]);
rf_card->count?++;
udelay(300);
}?
else?
goto?end;

enable_irq(IRQ_EINT(17));

if(rf_card->count?==?1)
init_completion(&(rf_card->receive_completion));
else?i

評論

共有 條評論