مختصر تعارف
ٹیکنالوجی کی ترقی کے ساتھ سمارٹ ہوم زیادہ سے زیادہ عام ہوتا جا رہا ہے، اس مضمون میں ذہین رسائی کنٹرول پروجیکٹ کے حفاظتی پہلوؤں پر توجہ دی جائے گی۔
یہ مضمون استعمال کرتا ہے۔ پتھر کی ٹچ اسکرین ریلے اور MFRC522 ماڈیول کو کنٹرول کرنے کے لیے MCU کو کمانڈ بھیجنے کے لیے۔
کارڈ ریڈنگ کا اصول: RFID-RC522 ماڈیول چلا کر، شناختی کارڈ کے قریب شناختی کارڈ کی شناخت کریں، اور پھر اس بات کا تعین کریں کہ آیا ID لفظ typical کے ڈیٹا بیس میں موجود ہے، ID لفظ کی مخصوص قدر ہے، اگر اس کے ذریعے تصدیق کا وجود ، اور پھر متعلقہ نام پرنٹ کریں، اور پھر برقی مقناطیسی تالا کو اسی طرح چلائیں۔
مطلوبہ مواد
- ESP32
- KOB الیکٹرانک لاک
- ریلے
- پتھر STWI070WT-01 ٹچ پینل ڈسپلے
- MFRC522 ماڈیول
فنکشن کا احساس ہوا۔
- کارڈ رجسٹریشن.
- صارف نام اور پاس ورڈ رجسٹریشن۔
- الیکٹرانک لاک کو غیر مقفل کرنے کے لیے کارڈ سوائپ کریں۔
- الیکٹرانک لاک کو غیر مقفل کرنے کے لیے صارف کا نام اور پاس ورڈ۔
اہم ہارڈ ویئر کی تفصیل
آریفآئڈی ماڈیول
اس ماڈیول کو براہ راست مختلف ریڈر ماڈیولز میں لوڈ کیا جا سکتا ہے۔ یہ صرف چند تاروں کے ساتھ SPI انٹرفیس کے ذریعے 3.3V کے وولٹیج کا استعمال کرتا ہے۔ سی پی یو مدر بورڈ کے ساتھ براہ راست جڑا ہوا، ماڈیول فاصلاتی کارڈ ریڈر کے طور پر ایک مستحکم اور قابل اعتماد انداز میں کام کر سکتا ہے۔
STWI070WT-01 کو TFT مانیٹر اور ٹچ کنٹرولر کے طور پر تصور کیا گیا ہے۔ اس میں پروسیسر، کنٹرول پروگرام، ڈرائیور، فلیش میموری، RS232/RS422/RS485/TTL/LAN پورٹ، Wi-Fi/Bluetooth، ٹچ اسکرین، پاور سپلائی وغیرہ شامل ہیں، لہذا یہ طاقتور اور آسان پر مبنی ایک مکمل ڈسپلے سسٹم ہے۔ آپریٹنگ سسٹم، جسے کسی بھی MCU کے ذریعے کنٹرول کیا جا سکتا ہے۔
GUI ڈیزائن
کوڈ شیئرنگ
mfrc522 درآمد کریں۔
درآمد کا وقت
درآمد _thread
OS درآمد نام سے
مشین سے درآمد پن، UART
# pyb درآمد UART سے
#مشین درآمد کریں۔
suos = پن(32,Pin.OUT)
uart2 = UART(2, baudrate=115200, rx=16,tx=17,timeout=10)
ESP32_HSPI_CLOCK = 14
ESP32_HSPI_SLAVE_SELECT = 15
ESP32_HSPI_MISO = 12
ESP32_HSPI_MOSI = 13
ESP32_MFRC522_RST = 5
rx3 = []
rx_name = []
user_id_flag = غلط
password_flag = غلط
temp_id = ”
temp_mima = ”
personnel_id = {'zbw':[236,230,169,47],'lbw':[19,165,93,4]}
personnel_ps = {'zbw':'zbw3366′,'lbw':'lbwnb'}
admin_password = ('yyds')
button_cmd = [16,1]
edit1_cmd = [16,112]
edit2_cmd = [16,113]
edit3_cmd = [16,114]
اگر uname()[0] == 'esp32':
rdr = mfrc522.MFRC522(ESP32_HSPI_CLOCK, ESP32_HSPI_MOSI, ESP32_HSPI_MISO, ESP32_MFRC522_RST, ESP32_HSPI_SLAVE_SELECT)
def do_write():
کوشش کریں:
(stat, tag_type) = rdr.request(rdr.REQIDL)
اگر اسٹیٹ == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
اگر اسٹیٹ == rdr.OK:
پرنٹ ("نئے کارڈ کا پتہ چلا")
پرنٹ (" - ٹیگ کی قسم: 0x%02x" % tag_type)
پرنٹ کریں
پرنٹ کریں("")
اگر rdr.select_tag(raw_uid) == rdr.OK:
کلید = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
stat = rdr.write(8, b”\x00\x53\x00\x54\x00\x4F\x00\x4E\x00\x45\x0a\x0b\x0c\x0d\x0e\x0f”)
rdr.stop_crypto1()
اگر اسٹیٹ == rdr.OK:
پرنٹ ("کارڈ پر لکھا گیا ڈیٹا")
اور:
پرنٹ ("کارڈ پر ڈیٹا لکھنے میں ناکام")
اور:
پرنٹ ("تصدیق کی خرابی")
اور:
پرنٹ ("ٹیگ منتخب کرنے میں ناکام")
سوائے کلیدی تختہ:
پرنٹ ("لکھنے کی غلطی")
def do_read():
جبکہ سچ:
کوشش کریں:
(stat, tag_type) = rdr.request(rdr.REQIDL)
اگر اسٹیٹ == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
اگر اسٹیٹ == rdr.OK:
پرنٹ ("نئے کارڈ کا پتہ چلا")
پرنٹ (" - ٹیگ کی قسم: 0x%02x" % tag_type)
پرنٹ کریں
پرنٹ (raw_uid[0]، raw_uid[1]، raw_uid[2]، raw_uid[3])
پرنٹ کریں("")
اگر rdr.select_tag(raw_uid) == rdr.OK:
کلید = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
پرنٹ ("ایڈریس 8 ڈیٹا: %s" % rdr.read(8))
personnel_id میں ps کے لیے:
اگر raw_uid[0:4:1] == personnel_id.get(ps):
suos.value(1)
پرنٹ (پی ایس)
uart_write(ps, *raw_uid[0:4:1])
ٹائم نیند (3)
uart2.sendbreak()
توڑ
rdr.stop_crypto1()
ٹائم نیند (3)
suos.value(0)
اور:
پرنٹ ("تصدیق کی خرابی")
اور:
پرنٹ ("ٹیگ منتخب کرنے میں ناکام")
اگر uart2.any()>1:
rx2 = []
data_name2 = ”
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = فہرست (بن_ڈیٹا)
rx1 میں آئٹم کے لیے:
rx2.append(chr(item))
پرنٹ (rx2)
اگر rx1 [3:5:1] == بٹن_cmd:
ڈیٹا_نام_لین = rx1[6] – 1
ڈیٹا_نام = rx2[7:data_name_len+7:1]
data_name2 = ”.join(data_name)
پرنٹ(ڈیٹا_نام2)
اگر data_name2 == 'back3':
واپسی
سوائے کلیدی تختہ:
پرنٹ ("پڑھنے کی غلطی")
def do_read2 (idd):
پرنٹ (idd)
جبکہ سچ:
کوشش کریں:
(stat, tag_type) = rdr.request(rdr.REQIDL)
اگر اسٹیٹ == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
اگر اسٹیٹ == rdr.OK:
پرنٹ ("نئے کارڈ کا پتہ چلا")
پرنٹ (" - ٹیگ کی قسم: 0x%02x" % tag_type)
پرنٹ کریں
پرنٹ (raw_uid[0]، raw_uid[1]، raw_uid[2]، raw_uid[3])
پرنٹ کریں("")
اگر rdr.select_tag(raw_uid) == rdr.OK:
کلید = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
پرنٹ ("ایڈریس 8 ڈیٹا: %s" % rdr.read(8))
personnel_id[idd] = raw_uid[0:4:1]
uart_write3(*raw_uid[0:4:1])
rdr.stop_crypto1()
اور:
پرنٹ ("تصدیق کی خرابی")
اور:
پرنٹ ("ٹیگ منتخب کرنے میں ناکام")
اگر uart2.any()>1:
rx2 = []
data_name2 = ”
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = فہرست (بن_ڈیٹا)
rx1 میں آئٹم کے لیے:
rx2.append(chr(item))
اگر rx1 [3:5:1] == بٹن_cmd:
ڈیٹا_نام_لین = rx1[6] – 1
ڈیٹا_نام = rx2[7:data_name_len+7:1]
data_name2 = ”.join(data_name)
پرنٹ(ڈیٹا_نام2)
اگر data_name2 == 'back1':
واپسی
سوائے کلیدی تختہ:
پرنٹ ("پڑھنے کی غلطی")
def uart_write(متن، *ids):
# پرنٹ (متن، *آئی ڈی)
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardname1″,”text”:”'+str(text)+'”}>ET' )
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardid1″,”text”:”'+str(ids)+'”}>ET' )
uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock1″,"visible":true}>ET')
ٹائم نیند (3)
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardname1″,”text”:”””}>ET')
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardid1″,”text”:”””}>ET')
uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock1″,"visible":false}>ET')
def uart_write2 (متن، متن 2):
uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+text+'"}>ET')
ٹائم نیند (3)
uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+text2+'"}>ET')
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”edit2″,”text”:”””}>ET')
def uart_write3(*id2):
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardid”,”text”:”'+str(id2)+'”}>ET' )
ٹائم نیند (3)
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardid”,”text”:”””}>ET')
def uart_write4 (متن، متن 2):
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”login”,”text”:”'+text+'”}>ET')
ٹائم نیند (1)
uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"login","text":"'+text2+'"}>ET')
ٹائم نیند (1)
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”edit3″,”text”:”””}>ET')
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”edit4″,”text”:”””}>ET')
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”edit7″,”text”:”””}>ET')
def uart_write5():
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardid”,”text”:”'+str(id2)+'”}>ET' )
ٹائم نیند (3)
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”cardid”,”text”:”””}>ET')
def card_zhuce():
جبکہ سچ:
اگر uart2.any():
user_id = ”
پاس ورڈ = "
rx2 = []
rx_num = 0
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = فہرست (بن_ڈیٹا)
rx1 میں آئٹم کے لیے:
rx2.append(chr(item))
rx_num += 1
ڈیٹا_اینڈ = rx_num-5
data_id_st = rx2[8:13:1]
data_id_st2 = ”.join(data_id_st)
پرنٹ (ڈیٹا_آئی ڈی_st2)
اگر data_id_st2 == 'ترمیم 1':
data_id_st3 = rx2[15:data_end:1]
data_id_st4 = ”.join(data_id_st3)
پرنٹ (ڈیٹا_آئی ڈی_st4)
if data_id_st4 != ”:
نام = سچ
elif data_id_st2 == 'ترمیم2':
data_id_st5 = rx2[15:data_end:1]
data_id_st6 = ”.join(data_id_st5)
اگر data_id_st6 == admin_password:
ایڈمن = سچ
uart_write2('تصدیق گزر گئی!'،'براہ کرم کارڈ رکھیں!')
do_read2(data_id_st4)
واپسی
def mima_zuce():
temp_id3 = ”
temp_mima3 = ”
جبکہ سچ:
اگر uart2.any():
user_id = ”
پاس ورڈ = "
rx2 = []
rx_num = 0
# ڈیٹا_اینڈ = 0
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = فہرست (بن_ڈیٹا)
rx1 میں آئٹم کے لیے:
rx2.append(chr(item))
rx_num += 1
# اگر (rx2[rx_num] == 'T') اور (rx2[rx_num-1] == 'E') اور (rx2[rx_num-2] == '>'):
# وقفہ
ڈیٹا_اینڈ = rx_num-5
data_id_st = rx2[8:13:1]
data_id_st2 = ”.join(data_id_st)
پرنٹ (ڈیٹا_آئی ڈی_st2)
اگر rx1 [3:5:1] == بٹن_cmd:
ڈیٹا_نام_لین = rx1[6] – 1
ڈیٹا_نام = rx2[7:data_name_len+7:1]
data_name2 = ”.join(data_name)
پرنٹ(ڈیٹا_نام2)
اگر data_name2 == 'back2':
واپسی
اگر data_id_st2 == 'ترمیم 3':
data_id_st3 = rx2[15:data_end:1]
data_id_st4 = ”.join(data_id_st3)
پرنٹ (ڈیٹا_آئی ڈی_st4)
user_id_flag = سچ
temp_id3 = ڈیٹا_id_st4
# personnel_ps[temp_id] = raw_uid[0:4:1]
elif data_id_st2 == 'ترمیم4':
data_id_st5 = rx2[15:data_end:1]
data_id_st6 = ”.join(data_id_st5)
پرنٹ (ڈیٹا_آئی ڈی_st6)
# if personnel_ps.get(temp_id) == data_id_st6:
password_flag = سچ
temp_mima3 = ڈیٹا_id_st6
# personnel_ps[temp_id] = پاس ورڈ_پرچم
# پرنٹ(rx2,user_id_flag,password_flag)
elif data_id_st2 == 'ترمیم7':
data_id_st5 = rx2[15:data_end:1]
data_id_st6 = ”.join(data_id_st5)
اگر (data_id_st6 == admin_password) اور (password_flag == True) اور (user_id_flag == True):
ایڈمن = سچ
personnel_ps[temp_id3] = temp_mima3
password_flag = غلط
user_id_flag = غلط
uart_write4('تصدیق گزر گئی!'،'لاگ ان کامیاب رہا!')
def password_loin():
temp_id2 = ”
temp_mima = ”
جبکہ سچ:
اگر uart2.any():
user_id = ”
پاس ورڈ = "
rx2 = []
rx_num = 0
# ڈیٹا_اینڈ = 0
bin_data = uart2.read(40)
uart2.sendbreak()
rx1 = فہرست (بن_ڈیٹا)
rx1 میں آئٹم کے لیے:
rx2.append(chr(item))
rx_num += 1
# اگر (rx2[rx_num] == 'T') اور (rx2[rx_num-1] == 'E') اور (rx2[rx_num-2] == '>'):
# وقفہ
ڈیٹا_اینڈ = rx_num-5
data_id_st = rx2[8:13:1]
data_id_st2 = ”.join(data_id_st)
پرنٹ (ڈیٹا_آئی ڈی_st2)
اگر rx1 [3:5:1] == بٹن_cmd:
ڈیٹا_نام_لین = rx1[6] – 1
ڈیٹا_نام = rx2[7:data_name_len+7:1]
data_name2 = ”.join(data_name)
پرنٹ(ڈیٹا_نام2)
اگر data_name2 == 'back4':
واپسی
اگر data_id_st2 == 'ترمیم 5':
data_id_st3 = rx2[15:data_end:1]
data_id_st4 = ”.join(data_id_st3)
پرنٹ (ڈیٹا_آئی ڈی_st4)
اگر personnel_ps میں ڈیٹا_id_st4:
user_id_flag = سچ
temp_id2 = ڈیٹا_id_st4
elif data_id_st2 == 'ترمیم6':
data_id_st5 = rx2[15:data_end:1]
data_id_st6 = ”.join(data_id_st5)
پرنٹ (ڈیٹا_آئی ڈی_st6)
پرنٹ (temp_id2)
پرنٹ (personnel_ps)
اگر personnel_ps.get(temp_id2) == data_id_st6:
password_flag = سچ
# پرنٹ(rx2,user_id_flag,password_flag)
پرنٹ (یوزر_آئی ڈی_پرچم، پاس ورڈ_پرچم)
اگر (password_flag == True) اور (user_id_flag == True):
uart_write(temp_id2,temp_id2)
password_flag = غلط
user_id_flag = غلط
suos.value(1)
uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock2″,"visible":true}>ET')
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”edit5″,”text”:”””}>ET')
uart2.write('ST<{“cmd_code”:”set_text”,”type”:”label”,”widget”:”edit6″,”text”:”””}>ET')
ٹائم نیند (3)
# uart_write('طالب علم',")
suos.value(0)
uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock2″,"visible":false}>ET')
uart2.sendbreak()
جبکہ سچ:
اگر uart2.any()>1:
rx2 = []
data_name2 = ”
bin_data = uart2.read(40)
# وقت۔ نیند(1)
uart2.sendbreak()
# وقت۔ نیند(1)
rx1 = فہرست (بن_ڈیٹا)
rx1 میں آئٹم کے لیے:
rx2.append(chr(item))
پرنٹ (rx2)
اگر rx1 [3:5:1] == بٹن_cmd:
ڈیٹا_نام_لین = rx1[6] – 1
ڈیٹا_نام = rx2[7:data_name_len+7:1]
data_name2 = ”.join(data_name)
پرنٹ(ڈیٹا_نام2)
اگر data_name2 == 'card1':
card_zhuce()
elif data_name2 == 'پاس ورڈ1':
mima_zuce()
elif data_name2 == 'کارڈ2':
do_read()
elif data_name2 == 'پاس ورڈ2':
password_loin()
MFRC522.py
مشین درآمد پن، SPI سے
OS درآمد نام سے
کلاس MFRC522:
ٹھیک ہے = 0
NOTAGERR = 1
ERR = 2
REQIDL = 0x26
REQALL = 0x52
AUTHENT1A = 0x60
AUTHENT1B = 0x61
def __init__(self, sck, mosi, miso, rst, cs):
self.sck = پن (sck، Pin.OUT)
self.mosi = پن (mosi، Pin.OUT)
self.miso = پن (miso)
self.rst = پن (rst، Pin.OUT)
self.cs = پن(cs، Pin.OUT)
self.rst.value(0)
self.cs.value(1)
بورڈ = uname()[0]
اگر بورڈ == 'WiPy' یا بورڈ == 'LoPy' یا بورڈ == 'FiPy':
self.spi = SPI(0)
self.spi.init(SPI.MASTER, baudrate=1000000, pins=(self.sck, self.mosi, self.miso))
ایلیف بورڈ == 'esp32':
self.spi = SPI(baudrate=100000, polarity=0, stage=0, sck=self.sck, mosi=self.mosi, miso=self.miso)
self.spi.init()
اور:
Raise Runtime Error ("غیر تعاون یافتہ پلیٹ فارم")
self.rst.value(1)
self.init()
def _wreg(self, reg, val):
self.cs.value(0)
self.spi.write(b'%c' % int(0xff & ((reg << 1) & 0x7e)))
self.spi.write(b'%c' % int(0xff & val))
self.cs.value(1)
def _rreg(self, reg):
self.cs.value(0)
self.spi.write(b'%c' % int(0xff & (((reg << 1) & 0x7e) | 0x80)))
val = self.spi.read(1)
self.cs.value(1)
واپسی ویل[0]
def _sflags (خود، reg، ماسک):
self._wreg(reg, self._rreg(reg) | ماسک)
def _cflags (خود، reg، ماسک):
self._wreg(reg, self._rreg(reg) اور (~ماسک))
def _tocard(self, cmd, send):
recv = []
بٹس = irq_en = انتظار_irq = n = 0
stat = self.ERR
اگر cmd == 0x0E:
irq_en = 0x12
انتظار_irq = 0x10
elif cmd == 0x0C:
irq_en = 0x77
انتظار_irq = 0x30
self._wreg(0x02, irq_en | 0x80)
self._cflags(0x04, 0x80)
self._sflags(0x0A, 0x80)
self._wreg(0x01, 0x00)
سی بھیجنے کے لیے:
self._wreg(0x09, c)
self._wreg(0x01, cmd)
اگر cmd == 0x0C:
self._sflags(0x0D, 0x80)
میں = 2000
جبکہ سچ:
n = self._rreg(0x04)
i -= 1
اگر ~((i != 0) اور ~(n & 0x01) اور ~(n & wait_irq)):
توڑ
self._cflags(0x0D, 0x80)
اگر میں:
اگر (self._rreg(0x06) اور 0x1B) == 0x00:
stat = self.OK
اگر n & irq_en & 0x01:
stat = self.NOTAGERR
elif cmd == 0x0C:
n = self._rreg(0x0A)
lbits = self._rreg(0x0C) اور 0x07
اگر lbits != 0:
بٹس = (n – 1) * 8 + lbits
اور:
بٹس = n * 8
اگر n == 0:
N = 1
elif n > 16:
N = 16
رینج میں _ کے لیے(n):
recv.append(self._rreg(0x09))
اور:
stat = self.ERR
واپسی اسٹیٹ، recv، بٹس
def _crc (خود، ڈیٹا):
self._cflags(0x05, 0x04)
self._sflags(0x0A, 0x80)
ڈیٹا میں c کے لیے:
self._wreg(0x09, c)
self._wreg(0x01, 0x03)
i = 0xFF
جبکہ سچ:
n = self._rreg(0x05)
i -= 1
اگر نہیں (i != 0) اور نہیں (n & 0x04)):
توڑ
واپسی [self._rreg(0x22), self._rreg(0x21)]
def init(self):
self.reset()
self._wreg(0x2A, 0x8D)
self._wreg(0x2B, 0x3E)
self._wreg(0x2D, 30)
self._wreg(0x2C, 0)
self._wreg(0x15, 0x40)
self._wreg(0x11, 0x3D)
self.antenna_on()
ڈیف ری سیٹ (خود):
self._wreg(0x01, 0x0F)
def antenna_on(self, on=True):
اگر آن اور ~(self._rreg(0x14) اور 0x03):
self._sflags(0x14, 0x03)
اور:
self._cflags(0x14, 0x03)
def درخواست (خود، موڈ):
self._wreg(0x0D, 0x07)
(stat, recv, bits) = self._tocard(0x0C, [mode])
اگر (stat != self.OK) | (بٹس != 0x10):
stat = self.ERR
واپسی اسٹیٹ، بٹس
def anticoll (self):
ser_chk = 0
ser = [0x93, 0x20]
self._wreg(0x0D, 0x00)
(stat, recv, bits) = self._tocard(0x0C, ser)
اگر اسٹیٹ == self.OK:
اگر len(recv) == 5:
میں رینج میں (4،XNUMX):
ser_chk = ser_chk ^ recv[i]
اگر ser_chk != recv[4]:
stat = self.ERR
اور:
stat = self.ERR
واپسی اسٹیٹ، recv
ڈیف سلیکٹ_ٹیگ (خود، سر):
buf = [0x93, 0x70] + ser[:5]
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
واپسی self.OK if (stat == self.OK) اور (bits == 0x18) else self.ERR
def auth (self, mode, addr, sect, ser):
واپسی self._tocard(0x0E, [mode, addr] + sect + ser[:4])[0]
def stop_crypto1(self):
self._cflags(0x08, 0x08)
def read (self, addr):
ڈیٹا = [0x30، addr]
ڈیٹا += self._crc(ڈیٹا)
(stat, recv, _) = self._tocard(0x0C، ڈیٹا)
recv واپس کریں اگر stat == self.OK ورنہ کوئی نہیں۔
def لکھیں (خود، ایڈر، ڈیٹا):
buf = [0xA0, addr]
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
اگر نہیں (stat == self.OK) یا نہیں (bits == 4) یا نہیں ((recv[0] & 0x0F) == 0x0A):
stat = self.ERR
اور:
buf = []
میں رینج میں (16،XNUMX):
buf.append(data[i])
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
اگر نہیں (stat == self.OK) یا نہیں (bits == 4) یا نہیں ((recv[0] & 0x0F) == 0x0A):
stat = self.ERR
واپسی اسٹیٹ
ماخذ: پلیٹو ڈیٹا انٹیلی جنس