diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.gitignore b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.gitignore
new file mode 100644
index 0000000..03db30a
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.gitignore
@@ -0,0 +1,5 @@
+/.DS_Store
+/Fingerprint/resources/SF_DSS/image
+/.idea/workspace.xml
+/Fingerprint/resources/.DS_Store
+/Fingerprint/resources/SF_DSS/.DS_Store
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/SF_DeviceSecuritySystem.iml b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/SF_DeviceSecuritySystem.iml
new file mode 100644
index 0000000..6711606
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/SF_DeviceSecuritySystem.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/misc.xml b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/misc.xml
new file mode 100644
index 0000000..19f5faa
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/modules.xml b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/modules.xml
new file mode 100644
index 0000000..d9b2185
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/vcs.xml b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/DSSystem.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/DSSystem.py
new file mode 100644
index 0000000..98a5301
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/DSSystem.py
@@ -0,0 +1,1065 @@
+#!/usr/bin/env python3
+
+'''
+GUI For Device Security System
+'''
+# Import For GUI
+import tkinter
+from tkinter import *
+# Import GPIO For Lock Control
+import RPi.GPIO as GPIO
+# Import PiCamera and datetime For Camera Usage
+from picamera import PiCamera
+#import datetime
+# Import fingerpi,time For Fingerprint Sensor
+import fingerpi as fp
+import time
+#import for DB
+import config #execute query with config.executeQuery(SQLCOMMAND)
+import serial #for USB connection to NFC
+import hashlib # for pincode md5 comparison
+# Import for NFC
+import serial
+import config
+from datetime import datetime
+from datetime import date
+ser = serial.Serial('/dev/ttyACM0', 115200, timeout = 10, writeTimeout = 10)
+
+# Initialize Fingerprint Sensor, GPIO,Camera
+f = fp.FingerPi()
+f.Open()
+f.CmosLed(False)
+GPIO.setmode(GPIO.BCM)
+GPIO.setwarnings(False)
+LOCK = 4
+camera = PiCamera()
+
+# GUI main frame setting
+top = tkinter.Tk() # GUI top
+######################## Dan, If you want full screen, put the following two lines back.
+#top.attributes("-fullscreen", True) # Full screen
+#top.overrideredirect(1) # Distable close, minimize, and maximize
+
+# GUI Default Variables
+WIDTH = 800 # Screen Width
+HEIGHT = 480 # Screnn Height
+CharcoalGray = '#3b3c43'
+top.config(bg = CharcoalGray )
+DEFAULTBG = top.cget("bg") # Default background color
+TextColor = '#fbc600' # Synchrony Gold
+DEFAULTFONT = "Times 15" # Defualt font
+
+# Globle variables
+Employee_ID = 999999999 # Default Employee_ID
+loglist = [] # For log
+curr = 0 # For log
+
+
+
+'''
+Helper Functions
+'''
+def updateText(t,s):
+ t.insert(INSERT,s)
+ t.pack()
+ top.update()
+def updateEntry(t,s):
+ t.delete(0,END)
+ t.insert(0,s)
+ top.update()
+def updateTextGrid(t,s):
+ t.insert(INSERT,s)
+ t.grid(row = 0, ipadx = 120,column = 0,columnspan=2)
+ top.update()
+def takePic():
+ date = datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
+ camera.resolution = (400,300)
+ camera.framerate = (15)
+ camera.capture("LogImage/%s.jpg" % date)
+def pinUnlock(t):
+ GPIO.setup(LOCK, GPIO.OUT)
+ GPIO.output(LOCK, True)
+ s = "Unlock\n"
+ updateEntry(t,s)
+ i = 5
+ while i > 0:
+ updateEntry(t,str(i))
+ i = i -1
+ time.sleep(1)
+ GPIO.output(LOCK, False)
+ s = "Lock\n"
+ updateEntry(t,s)
+
+'''
+Fingerprint Sensor -- Functions
+'''
+def fingerUnlock(t):
+ global Employee_ID
+ takePic()
+ f.CmosLed(True)
+ s = "Place your finger on the scanner\n"
+ t.delete('1.0',END)
+ updateText(t,s)
+ f.WaitForFinger(False)
+ cap1 = f.CaptureFinger(best_image = False)
+ if (cap1[0]['ACK'] == False):
+ s = "No Image captured \n"
+ updateText(t,s)
+ return
+ rp = f.Identify()
+ s = "Remove your finger \n"
+ updateText(t,s)
+ f.WaitForFinger(True)
+ f.CmosLed(False)
+ if (rp[0]['ACK']):
+ fingerID = rp[0]['Parameter'] # int Type
+ #####################################################################
+ #
+ # Here we need to use fingerID to findout Employee_ID in database
+ # and create a timestamp for system log, Need Employee_ID returned!
+ #
+ finsql='SELECT Admin_ID from admin WHERE Finger_Registered_Flag = "%d" AND (FINGER_ID="%d" OR FINGER_ID_2="%d" OR FINGER_ID_3="%d")'
+ val = config.executeQuery(finsql %(1,fingerID,fingerID,fingerID));
+ if(val): #found in database
+ timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+ Employee_ID = val[0]["Admin_ID"] #list of dictionaries, set Employee ID
+ #Create log
+ logsql='INSERT INTO log(Employee_ID,AccessTime)VALUES("%d","%s")'%(Employee_ID,timestamp)
+ config.executeQuery(logsql);
+
+ #####################################################################
+ s = "The finger ID is "
+ s = s + str(fingerID) + "\n"
+ updateText(t,s)
+ GPIO.setup(LOCK, GPIO.OUT)
+ GPIO.output(LOCK, True)
+ s = "Unlock\n"
+ updateText(t,s)
+ i = 5
+ while i > 0:
+ s = str(i) + "\n"
+ updateText(t,s)
+ i = i -1
+ time.sleep(1)
+ GPIO.output(LOCK, False)
+ s = "Lock\n"
+ updateText(t,s)
+ t.delete('1.0',END)
+ t.insert(INSERT, "Click Start to Unlock")
+ t.pack()
+ top.update()
+ else:
+ s = "Finger is not registered \n"
+ updateText(t,s)
+ return False
+ f.CmosLed(False)
+ return True
+
+def removeFingerIDs(fingerIDs,t):
+ for id in fingerIDs:
+ if id is not None and id < 200:
+ status = f.CheckEnrolled(id)[0]['ACK']
+ if (not status):
+ s = "ID "+str(id)+" is not registered."
+ updateEntry(t,s)
+ continue
+ else:
+ rp = f.DeleteId(id)
+ if(rp[0]['ACK']):
+ s = "ID "+str(id)+" is deleted."
+ updateEntry(t,s)
+ else:
+ s = str(rp[0]['Parameter']) + " error!"
+ updateEntry(t,s)
+ else:
+ s = "ID " + str(id) + " is not valid."
+ updateEntry(t,s)
+ time.sleep(1)
+ return
+
+# function that return enroll count
+def enroll_count():
+ count = f.GetEnrollCount()[0]['Parameter']
+ return int(count)
+
+def IdEnrolled(id):
+ status = f.CheckEnrolled(id)[0]['ACK']
+ if (status):
+ return True
+ else:
+ return False
+
+def printEnroll(id, t):
+ t.delete('1.0',END)
+ f.CmosLed(True)
+ status = f.EnrollStart(id)
+ if not status[0]['ACK']:
+ s = "Error! Try Again. Error code: "+str(status[0]['Parameter']) + "\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+
+ s = "1.Place your finger on the scanner\n"
+ updateTextGrid(t,s)
+ f.WaitForFinger(False)
+ cap1 = f.CaptureFinger(best_image = True)
+ if (cap1[0]['ACK'] == False):
+ s = "1. No Image captured\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+ status1 = f.Enroll1()
+ if not status1[0]['ACK']:
+ s = "Error! Try Again. Error code: "+str(status1[0]['Parameter']) + "\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+ s = "1. Remove your finger\n"
+ updateTextGrid(t,s)
+ f.WaitForFinger(True)
+ s ="2.Place same finger on the scanner\n"
+ updateTextGrid(t,s)
+ f.WaitForFinger(False)
+ cap2 = f.CaptureFinger(best_image = True)
+ if (cap2[0]['ACK'] == False):
+ s = "2. No Image captured\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+ status2 = f.Enroll2()
+ if not status2[0]['ACK']:
+ s = "Error! Try Again. Error code: "+str(status2[0]['Parameter']) + "\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+ s = "2. Remove your finger\n"
+ updateTextGrid(t,s)
+ f.WaitForFinger(True)
+
+ s = "3.Place same finger on the scanner\n"
+ updateTextGrid(t,s)
+ f.WaitForFinger(False)
+ cap3 = f.CaptureFinger(best_image = True)
+ if (cap3[0]['ACK'] == False):
+ s = "3. No Image captured\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+ status3 = f.Enroll3()
+ if not status3[0]['ACK']:
+ if (status3[0]['Parameter'] == 0):
+ s = "Finger is already registered\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+ else:
+ s = "Error! Try Again. Error code: "+str(status2[0]['Parameter']) + "\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return False
+ else:
+ s = "3. Remove your finger\n"
+ updateTextGrid(t,s)
+ f.WaitForFinger(True)
+ s = "Enroll success\n"
+ updateTextGrid(t,s)
+ f.CmosLed(False)
+ return True
+
+
+'''
+GUI--Start Frame
+====================================================================================================
+'''
+# Trigger Functions
+def unlockTrigger():
+ startFrame.pack_forget()
+ unlockOptionsFrame.pack()
+def settingTrigger():
+ takePic()
+ startFrame.pack_forget()
+ # Need to Add pinSettingBackTrigger and pinSubmitTrigger
+ numBackButton.config(command = lambda:pinSettingBackTrigger(usrInpt))
+ numSubmitButton.config(command = lambda:pinSubmitTrigger(usrInpt,outputText))
+ numberPadFrame.pack()
+ outputText.delete(0,END)
+ outputText.insert(0,"Enter Your Pin Code")
+ top.update()
+# Start Frame Building
+startFrame = Frame(width = WIDTH, height = HEIGHT)
+startFrame.pack_propagate(0)
+# Start Frame Variables
+ # Unlock Button With Image
+unlockButton = Button(startFrame, text = "Unlock", bg=DEFAULTBG,activebackground=DEFAULTBG, command = unlockTrigger)
+unlockImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/indexPage/unlock_button.gif")
+unlockButton.config(image=unlockImage,width="100",height="100")
+ # Setting Button With Image
+settingButton = Button(startFrame, text = "Setting", bg=DEFAULTBG,activebackground=DEFAULTBG,command = settingTrigger)
+settingImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/indexPage/setting_button.gif")
+settingButton.config(image=settingImage,width="100",height="100")
+# Display Start Frame
+startFrame.pack(fill= BOTH, expand = True)
+unlockButton.pack(side = LEFT, fill = BOTH,expand = 1)
+settingButton.pack(side = RIGHT, fill = BOTH,expand = 1)
+
+'''
+GUI--Unlock Options Frame
+====================================================================================================
+'''
+# Trigger Functions
+
+ # For Entering Admin ID to Unlock the Door
+def pinIDBackTrigger(u):
+ u.delete(0, END)
+ numberPadFrame.pack_forget()
+ unlockOptionsFrame.pack()
+def pinIDSubmitTrigger(u,t):
+ global Employee_ID
+ Employee_ID = int(u.get())
+
+ u.delete(0, END)
+ t.delete(0,END)
+ t.insert(0,Employee_ID)
+ numberPadFrame.pack_forget()
+ numBackButton.config(command = lambda:pinUnlockBackTrigger(usrInpt))
+ numSubmitButton.config(command = lambda:pinUnlockSubmitTrigger(usrInpt,outputText))
+ numberPadFrame.pack()
+ outputText.delete(0,END)
+ outputText.insert(0,"Enter your Pin Code")
+ top.update()
+ # For Entering Admin Pincode to Unlock the Door
+def pinUnlockBackTrigger(u):
+ u.delete(0, END)
+ numberPadFrame.pack_forget()
+ unlockOptionsFrame.pack()
+def pinUnlockSubmitTrigger(u,t):
+ takePic()
+ pin = u.get()
+ u.delete(0, END)
+ t.delete(0,END)
+ #####################################################################
+ #
+ # We need function that take Employee_ID and pin as parameter
+ # search Database return True or False to accept the pin or reject
+ #
+ pinsql = 'SELECT Pincode from admin WHERE Admin_ID = "%d"'%(Employee_ID)
+ val = config.executeQuery(pinsql) #the md5 hash in the db
+ #print(val)
+ valPin = val[0]['Pincode']
+ pinmsg = hashlib.md5()
+ pinmsg.update(pin.encode("utf-8"))
+ checkPin = pinmsg.hexdigest() ## the md5 hash of the input
+ #print(valPin)
+ #print(checkPin)
+ result = checkPin==valPin #check equality of input to the DB value
+ #####################################################################
+
+ if result:
+ pinUnlock(t)
+ #####################################################################
+ #
+ # Update Datebase Log
+ timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+ logsql='INSERT INTO log(Employee_ID,AccessTime)VALUES("%d","%s")'%(Employee_ID,timestamp)
+ config.executeQuery(logsql)
+ #####################################################################
+ numberPadFrame.pack_forget()
+ deviceFrame.pack()
+ else:
+ updateEntry(t,"Invalid ID or Pin")
+ time.sleep(2)
+ numberPadFrame.pack_forget()
+ startFrame.pack()
+
+
+
+def fingerTrigger():
+ unlockOptionsFrame.pack_forget()
+ fingerFrame.pack()
+def pinTrigger():
+ unlockOptionsFrame.pack_forget()
+ # Need to Add pinIDBackTrigger and pinIDSubmitTrigger
+ numBackButton.config(command = lambda:pinIDBackTrigger(usrInpt))
+ numSubmitButton.config(command = lambda:pinIDSubmitTrigger(usrInpt,outputText))
+ numberPadFrame.pack()
+ outputText.delete(0,END)
+ outputText.insert(0,"Enter your employee ID")
+ top.update()
+
+def optionsBackTrigger():
+ unlockOptionsFrame.pack_forget()
+ startFrame.pack()
+# Frame Building
+unlockOptionsFrame = Frame(width = WIDTH, height = HEIGHT)
+unlockOptionsFrame.pack_propagate(0)
+# Frame Variables
+fingerButton = Button(unlockOptionsFrame, text = "Use Fingerprint", bg=DEFAULTBG,activebackground=DEFAULTBG, command = fingerTrigger)
+fingerButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/unlockOptionsFrame/fingerprint.gif")
+fingerButton.config(image=fingerButtonImage)
+pinButton = Button(unlockOptionsFrame, text = "Use Pin Code", bg=DEFAULTBG,activebackground=DEFAULTBG, command = pinTrigger)
+pinButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/unlockOptionsFrame/password.gif")
+pinButton.config(image=pinButtonImage)
+optionsBackButton = Button(unlockOptionsFrame, text = "Back", bg=DEFAULTBG,activebackground=DEFAULTBG, command = optionsBackTrigger)
+optionsBackButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/unlockOptionsFrame/back.gif")
+optionsBackButton.config(image=optionsBackButtonImage)
+# Display Frame
+fingerButton.pack(fill=BOTH, expand=1)
+pinButton.pack(fill=BOTH, expand=1)
+optionsBackButton.pack(fill=BOTH, expand=1)
+
+'''
+GUI--Finger Print Unlock Frame
+====================================================================================================
+'''
+# Trigger Functions
+def fingerStartTrigger(t):
+ s = "Start finger print scanner"
+ t.delete('1.0',END)
+ t.insert(INSERT, s)
+ t.pack()
+ if fingerUnlock(t):
+ fingerFrame.pack_forget()
+ deviceFrame.pack()
+def fingerBackTrigger(t):
+ t.delete('1.0',END)
+ t.insert(INSERT, "Click Start to Unlock")
+ t.pack()
+ f.CmosLed(False)
+ fingerFrame.pack_forget()
+ unlockOptionsFrame.pack()
+# Frame Building
+fingerFrame = Frame(width = WIDTH, height = HEIGHT)
+fingerFrame.pack_propagate(0)
+# Frame Variables
+ # Text Box For Unlock Status
+fingerString = "Click Start to Unlock"
+fingerText = Text(fingerFrame, bg=DEFAULTBG,fg=TextColor)
+fingerText.delete('1.0',END)
+fingerText.insert(INSERT, fingerString)
+ # Start Button
+fingerStartButton = Button(fingerFrame, text= "Start", bg=DEFAULTBG, activebackground=DEFAULTBG,command = lambda:fingerStartTrigger(fingerText))
+fingerStartButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/fingerUnlockFrame/start_2.gif")
+#Resize#
+fingerStartButton.config(image=fingerStartButtonImage)
+ # Back Button
+fingerBackButton = Button(fingerFrame, text= "Back", bg=DEFAULTBG,activebackground=DEFAULTBG, command = lambda:fingerBackTrigger(fingerText))
+fingerBackButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/fingerUnlockFrame/back_2.gif")
+#Resize#
+fingerBackButton.config(image=fingerBackButtonImage)
+# Display Frame
+fingerText.pack(ipadx = 120)
+fingerStartButton.pack(fill=BOTH, expand=1)
+fingerBackButton.pack(fill=BOTH, expand=1)
+
+'''
+GUI--Number Pad Frame
+====================================================================================================
+Default number pad frame
+Use for diffrent place by replacing the diffrent command for submit button and back button
+'''
+# Trigger Functions
+def hitNum(u, n):
+ if u.get() == "":
+ u.delete(0, END)
+ u.insert(0, n)
+ else:
+ u.insert(END, n)
+
+def deleteTrigger(u):
+ u.delete(0, END)
+ u.insert(0, "")
+# Frame Building
+numberPadFrame = Frame(width = WIDTH, height = HEIGHT)
+numberPadFrame.pack_propagate(0)
+# Frame Variables
+iPadX = 0
+iPadY = 0
+ # Input Text Box
+usrInpt = Entry(numberPadFrame)
+usrInpt.insert(0, "")
+ # Output Text Box
+outputString = ""
+outputText = Entry(numberPadFrame,bg=DEFAULTBG,fg=TextColor)
+outputText.insert(0,outputString)
+ # Button From 0 to 9
+zeroButton = Button(numberPadFrame, text = "0", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "0"))
+oneButton = Button(numberPadFrame, text = "1", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "1"))
+twoButton = Button(numberPadFrame, text = "2", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "2"))
+threeButton = Button(numberPadFrame, text = "3", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "3"))
+fourButton = Button(numberPadFrame, text = "4", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "4"))
+fiveButton = Button(numberPadFrame, text = "5", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "5"))
+sixButton = Button(numberPadFrame, text = "6", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "6"))
+sevenButton = Button(numberPadFrame, text = "7", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "7"))
+eightButton = Button(numberPadFrame, text = "8", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "8"))
+nineButton = Button(numberPadFrame, text = "9", bg=DEFAULTBG, font = DEFAULTFONT, command = lambda:hitNum(usrInpt, "9"))
+ # Other Buttons
+deleteButton = Button(numberPadFrame, text="Delete", bg=DEFAULTBG, command=lambda:deleteTrigger(usrInpt))
+numBackButton = Button(numberPadFrame, text = "Back", bg=DEFAULTBG)
+numSubmitButton = Button(numberPadFrame, text = "Submit", bg=DEFAULTBG)
+ #Image
+zeroButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/0.gif")
+oneButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/1.gif")
+twoButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/2.gif")
+threeButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/3.gif")
+fourButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/4.gif")
+fiveButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/5.gif")
+sixButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/6.gif")
+sevenButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/7.gif")
+eightButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/8.gif")
+nineButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/9.gif")
+deleteButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/clear.gif")
+numBackButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/back.gif")
+numSubmitButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/numberPadFrame/confirm.gif")
+
+#Resize#
+zeroButton.config(image=zeroButtonImage)
+oneButton.config(image=oneButtonImage)
+twoButton.config(image=twoButtonImage)
+threeButton.config(image=threeButtonImage)
+fourButton.config(image=fourButtonImage)
+fiveButton.config(image=fiveButtonImage)
+sixButton.config(image=sixButtonImage)
+sevenButton.config(image=sevenButtonImage)
+eightButton.config(image=eightButtonImage)
+nineButton.config(image=nineButtonImage)
+deleteButton.config(image=deleteButtonImage)
+numBackButton.config(image=numBackButtonImage)
+numSubmitButton.config(image=numSubmitButtonImage)
+
+# Display Frame
+usrInpt.grid(row=0, column=1, ipadx=50, ipady=38)
+outputText.grid(row=0, column=2,ipadx=50,ipady=38)
+ # 0 - 9 Button
+
+zeroButton.grid(row=4, column=1, ipady=iPadY, sticky=N+S+E+W)
+oneButton.grid(row=1, column=0, ipady=iPadY, sticky=N+S+E+W)
+twoButton.grid(row=1, column=1,ipady=iPadY, sticky=N+S+E+W)
+threeButton.grid(row=1, column=2,ipady=iPadY, sticky=N+S+E+W)
+fourButton.grid(row=2, column=0, ipady=iPadY, sticky=N+S+E+W)
+fiveButton.grid(row=2, column=1, ipady=iPadY, sticky=N+S+E+W)
+sixButton.grid(row=2, column=2, ipady=iPadY, sticky=N+S+E+W)
+sevenButton.grid(row=3, column=0, ipady=iPadY, sticky=N+S+E+W)
+eightButton.grid(row=3, column=1, ipady=iPadY, sticky=N+S+E+W)
+nineButton.grid(row=3, column=2, ipady=iPadY, sticky=N+S+E+W)
+ # Other Button
+numBackButton.grid(row=0, column =0, ipadx=iPadX, ipady=iPadY, sticky=N+S+E+W)
+deleteButton.grid(row=4, column=0, ipadx=iPadX, ipady=iPadY, sticky=N+S+E+W)
+numSubmitButton.grid(row=4, column=2, ipadx=iPadX, ipady=iPadY, sticky=N+S+E+W)
+
+'''
+GUI--Device Frame
+====================================================================================================
+For Device To Check in or Check out
+
+'''
+def sessionmaker(t, s): #Adds a session into db, returns the NFC of the device scanned
+ t.delete('1.0',END)
+ updateTextGrid(t,s)
+ nfcVal = ''
+ while(nfcVal=='' or nfcVal==None):
+ nfcVal = str(ser.readline())
+ nfcVal = nfcVal[2:-5]
+ s = nfcVal + "\n"
+ updateTextGrid(t,s)
+ date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+ NFCsql='INSERT INTO sessions (PersonID, AccessTime, NFCID) VALUES("%d","%s","%s")'%(Employee_ID,date,nfcVal)
+ config.executeQuery(NFCsql)
+ return nfcVal
+def showDeviceName(nfcID, t):
+ sql = 'SELECT * from devices where NFC_ID ="%s"'%(nfcID)
+ val = config.executeQuery(sql)
+ if val:
+ name = val[0]['Device_Name'] + "\n"
+ updateTextGrid(t,name)
+ return True
+ else:
+ s = "This device is not in the system"
+ updateTextGrid(t,s)
+ return False
+
+def updateDevice(intoLocker, nfcID,t): #updates the attributes of the device
+ if not showDeviceName(nfcID, t):
+ return
+ sqll = []
+ sqll.append('UPDATE devices SET ' )
+ if intoLocker:
+ sqll.append('Location = "%d", Renter = NULL, Ticket_ID = NULL, Borrow_Date=NULL, Permanent = NULL, Return_Date="%s", Status ="Available"')
+ else:# take out of locker
+ chksql = 'SELECT * from devices where NFC_ID ="%s"'%(nfcID)
+ chkVal = config.executeQuery(chksql)
+ print(chkVal)
+ if chkVal:
+ if(chkVal[0]["Status"]=="Ready to Ship"):
+ if chkVal[0]['Permanent'] == 0:
+ sqll.append('Status="Shipped"')
+ else :
+ sqll.append('Status="On Loan"')
+ else:
+ chkVal = False
+ sqll.append('WHERE NFC_ID = "%s"')
+ sql = ''.join(sqll) #The Query is joined here.
+ curDate = date.today().strftime('%Y-%m-%d')
+ if intoLocker: #query variables depend on direction of movement
+ val = config.executeQuery(sql %(1,curDate,nfcID))
+ if val:
+ s = "Checkin Sucess!\n"
+ updateTextGrid(t,s)
+ elif chkVal:
+ val = config.executeQuery(sql %(nfcID))
+ if val:
+ s = "Checkout Sucess!\n"
+ updateTextGrid(t,s)
+ else: #wrong device, do not modify device table, warn user
+ s = "Warnning! The device is not scheduled to be shipped"
+ updateTextGrid(t,s)
+
+# Trigger Functions
+def deviceCheckinTrigger(t):
+ #####################################################################
+ s = "Place your device to check in.\nThe NFC scanner will stop working in 10 senconds.\n"
+ updateDevice(True, sessionmaker(t , s),t)
+
+ #####################################################################
+ return
+def deviceCheckoutTrigger(t):
+ #####################################################################
+
+ s="Place your device to check out.\nThe NFC scanner will stop working in 10 senconds.\n"
+
+ updateDevice(False, sessionmaker(t,s), t)
+
+ #####################################################################
+ return
+def deviceBackTrigger(t):
+ global Employee_ID
+ t.delete('1.0',END)
+ t.insert(INSERT, "Device check in or check out\n")
+ Employee_ID = 999999999 # Reset Employee_ID be default
+ deviceFrame.pack_forget()
+ startFrame.pack()
+# Frame Building
+deviceFrame = Frame(width = WIDTH, height = HEIGHT)
+deviceFrame.pack_propagate(0)
+# Frame Variables
+string = "Device check in or check out"
+deviceText = Text(deviceFrame, bg=DEFAULTBG, fg=TextColor)
+deviceText.insert(INSERT,string)
+checkinButton = Button(deviceFrame,text = "Check In", bg=DEFAULTBG,activebackground=DEFAULTBG,command = lambda:deviceCheckinTrigger(deviceText))
+checkoutButton = Button(deviceFrame, text = "Check Out", bg=DEFAULTBG,activebackground=DEFAULTBG,command = lambda:deviceCheckoutTrigger(deviceText))
+deviceBackButton = Button(deviceFrame, text = "Back", bg=DEFAULTBG, activebackground=DEFAULTBG,command = lambda:deviceBackTrigger(deviceText))
+# image for frame button
+checkinButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/DeviceFrame/check_in_2.gif")
+checkinButton.config(image=checkinButtonImage)
+checkoutButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/DeviceFrame/check_out_2.gif")
+checkoutButton.config(image=checkoutButtonImage)
+deviceBackButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/DeviceFrame/back_2.gif")
+deviceBackButton.config(image=deviceBackButtonImage)
+# Display Frame
+deviceText.grid(row = 0, ipadx = 120,column = 0,columnspan=2)
+checkinButton.grid(row = 1, column = 0,ipadx = 80,ipady=10, sticky=W+E+N+S)
+checkoutButton.grid(row = 1, column = 1,ipadx = 80,ipady=10,sticky=W+E+N+S)
+deviceBackButton.grid(row = 2, column = 0,columnspan = 2,ipady=10,sticky=W+E+N+S)
+
+'''
+GUI--Setting Options Frame
+====================================================================================================
+'''
+# Trigger Functions
+ # For Entering Admin Pincode to Enter Setting Page
+def pinSettingBackTrigger(u):
+ u.delete(0, END)
+ numberPadFrame.pack_forget()
+ startFrame.pack()
+def pinSubmitTrigger(u,t):
+ pin = u.get()
+ u.delete(0, END)
+ #####################################################################
+ #
+ # Fuction that take pin as prameter to search if there is a match
+ # return ture or False
+ #
+ pinmsg = hashlib.md5()
+ pinmsg.update(str(pin).encode("utf-8"))
+ msg = pinmsg.hexdigest()
+ #print(msg)
+ pinsql = 'SELECT * from admin WHERE Pincode = "%s"'%(msg)
+ val = config.executeQuery(pinsql) #the md5 hash in the db
+ #print(val)
+ result = False
+ #print(len(val))
+ if len(val) != 0:
+ result = True
+ #####################################################################
+ if result:
+ numberPadFrame.pack_forget()
+ settingOptionsFrame.pack()
+ else:
+ updateEntry(t,"Invalid Pin")
+ time.sleep(2)
+ numberPadFrame.pack_forget()
+ startFrame.pack()
+
+ # For Entering Admin ID to Enroll Finger Print
+def fingerEnrollBackTrigger(u):
+ u.delete(0, END)
+ numberPadFrame.pack_forget()
+ startFrame.pack()
+
+def fingerEnrollSubmitTrigger(u,t):
+ global Employee_ID
+ Employee_ID = int(u.get())
+ u.delete(0, END)
+ #####################################################################
+ #
+ # Fuction that take Employee_ID as prameter to search if there is a match
+ # return ture or False
+ #
+ #ID Exists AND FLAG+1 AND FINGS ALL FILL then TRUe otherwise False
+ result = True
+ finsql='SELECT * from admin WHERE Admin_ID = "%d"'%(Employee_ID)
+ #print(finsql)
+ adminfings = config.executeQuery(finsql )
+ #print(adminfings)
+ if adminfings[0] and adminfings[0]["Finger_Registered_Flag"]==1:
+ if adminfings[0]["Finger_ID"]!= None and adminfings[0]["Finger_ID_2"]!= None and adminfings[0]["Finger_ID_3"]!= None:
+ result = False
+ #####################################################################
+ if result:
+ numberPadFrame.pack_forget()
+ fingerEnrollFrame.pack()
+ else:
+ updateEntry(t, "Invalid ID or Already Enrolled.")
+ time.sleep(2)
+ numberPadFrame.pack_forget()
+ settingOptionsFrame.pack()
+ #fingerEnrollFrame.pack()
+
+ # For Entering Admin ID to Remove Admin
+def fingerDeleteBackTrigger(u):
+ u.delete(0, END)
+ numberPadFrame.pack_forget()
+ settingOptionsFrame.pack()
+def fingerDeleteSubmitTrigger(u,t):
+ AdminID = int(u.get())
+ u.delete(0, END)
+ #####################################################################
+ #
+ # Fuction that take AdminID as prameter to search if there is a match
+ # if Match, and flag be 1, return array of fingerID
+ #
+ finsql='SELECT * from admin WHERE Admin_ID = "%d"'
+ adminfings = config.executeQuery(finsql %(AdminID))
+ fingerIDs = []
+ if adminfings[0] and adminfings[0]["Finger_Registered_Flag"]==1:
+ fingerIDs.append(adminfings[0]["Finger_ID"])
+ fingerIDs.append(adminfings[0]["Finger_ID_2"])
+ fingerIDs.append(adminfings[0]["Finger_ID_3"])
+ #####################################################################
+ #fingerIDs = [200,201,202] # Need to be return value
+ removeFingerIDs(fingerIDs,t)
+ ## if success Delete here
+
+ rmsql = 'UPDATE admin SET Finger_Registered_Flag = "%d" WHERE Admin_ID = "%d"'
+ config.executeQuery(rmsql %(0, AdminID)) #set finger registered flag to 0, wipe the Admin_IDs.
+ rmsql = 'DELETE from fingerprint WHERE Finger_ID = "%d"'
+ for fid in fingerIDs:
+ config.executeQuery(rmsql %(fid)) #remove fingerID from the fingerprint table, corresponding attributes in admin are set to null from foreign key relation
+ numberPadFrame.pack_forget()
+ settingOptionsFrame.pack()
+
+def logTrigger():
+ global loglist
+ loglist = getLog()
+ settingOptionsFrame.pack_forget()
+ logFrame.pack()
+def addPrintTrigger():
+ numBackButton.config(command = lambda:fingerEnrollBackTrigger(usrInpt))
+ numSubmitButton.config(command = lambda:fingerEnrollSubmitTrigger(usrInpt,outputText))
+ settingOptionsFrame.pack_forget()
+ numberPadFrame.pack()
+ outputText.delete(0,END)
+ outputText.insert(0,"Enter Your Admin ID To enroll")
+ top.update()
+def deletePrintTrigger():
+ settingOptionsFrame.pack_forget()
+ numBackButton.config(command = lambda:fingerDeleteBackTrigger(usrInpt))
+ numSubmitButton.config(command = lambda:fingerDeleteSubmitTrigger(usrInpt,outputText))
+ numberPadFrame.pack()
+ outputText.delete(0,END)
+ outputText.insert(0,"Enter Admin ID To Delete")
+ top.update()
+def exitTrigger():
+ f.CmosLed(False)
+ top.destroy()
+def settingBackTrigger():
+ settingOptionsFrame.pack_forget()
+ startFrame.pack()
+# Frame Building
+settingOptionsFrame = Frame(width = WIDTH, height = HEIGHT)
+settingOptionsFrame.pack_propagate(0)
+# Frame Variables
+logButton = Button(settingOptionsFrame, text = "Log", bg=DEFAULTBG, activebackground=DEFAULTBG,command = logTrigger)
+addPrintButton = Button(settingOptionsFrame, text = "Add Fingerprints", bg=DEFAULTBG,activebackground=DEFAULTBG, command = addPrintTrigger)
+deletePrintButton = Button(settingOptionsFrame, text = "Delete Admins", bg=DEFAULTBG,activebackground=DEFAULTBG, command = deletePrintTrigger)
+exitButton = Button(settingOptionsFrame, text = "Exit Application", bg=DEFAULTBG, activebackground=DEFAULTBG,command = exitTrigger)
+settingBackButton = Button(settingOptionsFrame, text = "Back", bg=DEFAULTBG,activebackground=DEFAULTBG, command = settingBackTrigger)
+# Image for setting options
+logButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/settingFrame/log.gif")
+logButton.config(image=logButtonImage)
+addPrintButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/settingFrame/fingerprint.gif")
+addPrintButton.config(image=addPrintButtonImage)
+deletePrintButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/settingFrame/Dadmins.gif")
+deletePrintButton.config(image=deletePrintButtonImage)
+exitButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/settingFrame/exit.gif")
+exitButton.config(image=exitButtonImage)
+settingBackButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/settingFrame/back.gif")
+settingBackButton.config(image=settingBackButtonImage)
+# Display Frame
+logButton.pack(fill=BOTH, expand=1)
+addPrintButton.pack(fill=BOTH, expand=1)
+deletePrintButton.pack(fill=BOTH, expand=1)
+exitButton.pack(fill=BOTH, expand=1)
+settingBackButton.pack(fill=BOTH, expand=1)
+
+'''
+GUI--Log Frame
+====================================================================================================
+'''
+
+# database
+def getLog():
+ logsql = 'SELECT * from log'
+ sessionsql = 'SELECT sessions.*, devices.Device_Name from sessions INNER JOIN devices ON sessions.NFCID = devices.NFC_ID'
+ logdata = config.executeQuery(logsql)
+ sessiondata = config.executeQuery(sessionsql)
+ for session in sessiondata:
+ logdata.append(session)
+ logdata.sort(key=lambda item:item['AccessTime'], reverse=True)
+ loglist = []
+ for dct in logdata:
+ if len(dct)==3:
+ s = "{:20s}".format(dct["AccessTime"].strftime('%Y-%m-%d %H:%M:%S'))+ "(Door opened) | Employee ID: {:9d}".format(dct["Employee_ID"])
+ elif len(dct)>3:
+ s = "{:20s}".format(dct["AccessTime"].strftime('%Y-%m-%d %H:%M:%S'))+ "(Device Scanned) | Employee ID: {:9d}".format(dct["PersonID"]) +" | Device ID: {:16s}".format(dct["NFCID"])+" | Name : {:20s}".format(dct["Device_Name"])
+ loglist.append(s)
+ loglist.append("\n")
+ #teststring = ''.join(loglist)
+ #print (loglist)
+ return loglist
+
+def log45():
+ global curr
+ #print(curr)
+ if curr + 1 > len(loglist) or curr < 0:
+ return "There is no more records"
+ ls = []
+ for i in range(curr, curr+46):
+ if i > len(loglist) -1:
+ break
+ ls.append(loglist[i])
+ string = ''.join(ls)
+ #print(string)
+ return string
+
+def logLeft45():
+ global curr
+ curr -= 45
+ if curr + 1 > len(loglist) or curr < 0:
+ curr = -45
+ return "There is no more records"
+
+ ls = []
+ for i in range(curr, curr+46):
+ if i > len(loglist) -1:
+ break
+ ls.append(loglist[i])
+ string = ''.join(ls)
+ #print(string)
+ return string
+
+def logRight45():
+ global curr
+ curr += 45
+ if curr + 1 > len(loglist) or curr < 0:
+ curr -= 45
+ return "There is no more records"
+ ls = []
+ for i in range(curr, curr+46):
+ if i > len(loglist) -1:
+ break
+ ls.append(loglist[i])
+ string = ''.join(ls)
+ #print(string)
+ return string
+
+# Trigger Functions
+def logBackTrigger(text):
+ global curr
+ curr = 0
+ logFrame.pack_forget()
+ settingOptionsFrame.pack()
+def logLeftTrigger(t):
+ t.delete('1.0',END)
+ s = logLeft45()
+ updateTextGrid(t,s)
+
+ return
+def logRightTrigger(t):
+ t.delete('1.0',END)
+ s = logRight45()
+ updateTextGrid(t,s)
+ return
+
+def showLog(text,s):
+ text.delete('1.0',END)
+ updateTextGrid(text,s)
+
+
+# Frame Building
+logFrame = Frame(width = WIDTH, height = HEIGHT)
+logFrame.pack_propagate(0)
+# Frame Variables
+loglist = getLog()
+logString = log45()
+logText = Text(logFrame, bg=DEFAULTBG, fg=TextColor)
+showLog(logText,logString)
+logLeftButton = Button(logFrame,text = "<|", bg=DEFAULTBG,activebackground=DEFAULTBG,command = lambda:logLeftTrigger(logText))
+logRightButton = Button(logFrame, text = "|>", bg=DEFAULTBG,activebackground=DEFAULTBG,command = lambda:logRightTrigger(logText))
+logBackButton = Button(logFrame, text = "Back", bg=DEFAULTBG,activebackground=DEFAULTBG, command = lambda:logBackTrigger(logText))
+# image for frame
+logLeftButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/logFrame/left_arrow_2.gif")
+logLeftButton.config(image=logLeftButtonImage)
+logRightButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/logFrame/right_arrow_2.gif")
+logRightButton.config(image=logRightButtonImage)
+# change size
+logBackButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/logFrame/back_2.gif")
+logBackButton.config(image=logBackButtonImage)
+# Display Frame
+logText.grid(row = 0, ipadx = 120,column = 0,columnspan=2)
+logLeftButton.grid(row = 1, column = 0,ipadx = 0,ipady=10, sticky=W+E+N+S)
+logRightButton.grid(row = 1, column = 1,ipadx = 0,ipady=10,sticky=W+E+N+S)
+logBackButton.grid(row = 2, column = 0,columnspan = 2,ipady=10,sticky=W+E+N+S)
+
+'''
+GUI--Finger Enroll Frame
+====================================================================================================
+'''
+# Trigger Functions
+def addFingerTrigger(t,n): # n is which finger
+
+ #####################################################################
+ #
+ # Fuction that take Employee_ID as prameter to search if there is a match
+ # Check flag, Chech fingerID1-3 is None or not, return True or False
+ #
+ finsql = 'SELECT * from admin WHERE Admin_ID = "%d"'
+ print(Employee_ID)
+ result = True #we can add the new fingerprint
+ adminfings = config.executeQuery(finsql %(Employee_ID))
+ if (adminfings[0] and adminfings[0]["Finger_Registered_Flag"]==1):
+ if adminfings[0]["Finger_ID"] != None and adminfings[0]["Finger_ID_2"]!= None and adminfings[0]["Finger_ID_3"]!= None:
+ result = False #all slots full, we cannot add the fingerprint
+
+ #####################################################################
+ if n == "1" and adminfings[0]["Finger_ID"]!= None:
+ s = "Finger_1 is already enrolled.\n"
+ updateTextGrid(t,s)
+ return
+ if n == "2" and adminfings[0]["Finger_ID_2"]!= None:
+ s = "Finger_2 is already enrolled.\n"
+ updateTextGrid(t,s)
+ return
+ if n == "3" and adminfings[0]["Finger_ID_3"]!= None:
+ s = "Finger_3 is already enrolled.\n"
+ updateTextGrid(t,s)
+ return
+ printID = 0
+ printID = enroll_count()
+ test = 200
+ while(test > 0):
+ if IdEnrolled(printID):
+ printID = printID +1
+ else:
+ break
+ result = printEnroll(printID,t)
+ if result:
+ #####################################################################
+ # Update the fingerprint table
+ # Then
+ # Update admin table with flag(1)/finger(printID). using Employee_ID
+ #
+ #
+ #logsql='INSERT INTO log(Employee_ID,AccessTime)VALUES("%d","%s")'%(Employee_ID,timestamp)
+ ufsql='INSERT INTO fingerprint(Finger_ID) VALUES("%d")'%(printID)
+ try:
+ config.executeQuery(ufsql)
+ #print("#1")
+ ##admin table
+ sqll = []
+ sqll.append('UPDATE admin SET Finger_Registered_Flag = "%d", ')
+ if n == "1":
+ #This is for fingerOne
+ sqll.append('Finger_ID = "%d" ')
+ if n == "2":
+ #This is for fingerTwo
+ sqll.append('Finger_ID_2 = "%d" ')
+ if n == "3":
+ #This is for fingerThree
+ sqll.append('Finger_ID_3 = "%d" ')
+
+ sqll.append('WHERE Admin_ID = "%d"')
+ uasql = ''.join(sqll) #The Query is joined here.
+ uasql = uasql %(1, printID, Employee_ID)
+ #print(uasql)
+ config.executeQuery(uasql ) #set finger registered flag to 1, put the printID in the right place.
+
+ #print("#2")
+ except:
+ fingerIDs = [printID]
+ removeFingerIDs(fingerIDs,t)
+ #####################################################################
+ return
+ else:
+ s = "Enroll Failed. Try again later."
+ updateTextGrid(t,s)
+
+def addFingerBackTrigger(t):
+ f.CmosLed(False)
+ global Employee_ID
+ Employee_ID = 999999999
+ t.delete('1.0',END)
+ updateTextGrid(t,"Click Buttons To Enroll Your Finger Prints\n")
+ fingerEnrollFrame.pack_forget()
+ settingOptionsFrame.pack()
+# Frame Building
+fingerEnrollFrame = Frame(width = WIDTH, height = HEIGHT)
+fingerEnrollFrame.pack_propagate(0)
+# Frame Variables
+fingerString = "Click Buttons To Enroll Your Finger Prints\n"
+fingerEnrollText = Text(fingerEnrollFrame, bg=DEFAULTBG, fg=TextColor)
+fingerEnrollText.delete('1.0',END)
+fingerEnrollText.insert(INSERT, fingerString)
+fingerOneButton = Button(fingerEnrollFrame, text = "Finger One", bg=DEFAULTBG,activebackground=DEFAULTBG, command = lambda:addFingerTrigger(fingerEnrollText, "1"))
+fingerTwoButton = Button(fingerEnrollFrame, text = "Finger Two", bg=DEFAULTBG, activebackground=DEFAULTBG,command = lambda:addFingerTrigger(fingerEnrollText, "2"))
+fingerThreeButton = Button(fingerEnrollFrame, text = "Finger Three", bg=DEFAULTBG,activebackground=DEFAULTBG, command = lambda:addFingerTrigger(fingerEnrollText, "3"))
+fingerEnrollBackButton = Button(fingerEnrollFrame, text = "Back", bg=DEFAULTBG, activebackground=DEFAULTBG,command = lambda:addFingerBackTrigger(fingerEnrollText))
+# image for frame button
+fingerOneButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno1_2.gif")
+fingerOneButton.config(image=fingerOneButtonImage)
+fingerTwoButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno2_2.gif")
+fingerTwoButton.config(image=fingerTwoButtonImage)
+fingerThreeButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno3_2.gif")
+fingerThreeButton.config(image=fingerThreeButtonImage)
+fingerEnrollBackButtonImage=PhotoImage(file="/home/pi/SF_DeviceSecuritySystem/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/back_2.gif")
+fingerEnrollBackButton.config(image=fingerEnrollBackButtonImage)
+# Display Frame
+fingerEnrollText.grid(row = 0, column = 0,columnspan=2,ipadx = 120)
+fingerOneButton.grid(row = 1, column = 0, sticky=W+E+N+S, ipady = 10)
+fingerTwoButton.grid(row = 1, column = 1,sticky=W+E+N+S)
+fingerThreeButton.grid(row = 2, column = 0,sticky=W+E+N+S)
+fingerEnrollBackButton.grid(row = 2, column = 1, sticky=W+E+N+S, ipady = 10)
+'''
+GUI--Start
+====================================================================================================
+'''
+top.mainloop()
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Color Code.docx b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Color Code.docx
new file mode 100644
index 0000000..f670158
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Color Code.docx differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/back.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/back.gif
new file mode 100644
index 0000000..9080027
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/back_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/back_2.gif
new file mode 100644
index 0000000..77b9931
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_in.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_in.gif
new file mode 100644
index 0000000..247bb77
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_in.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_in_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_in_2.gif
new file mode 100644
index 0000000..bd71119
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_in_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_out.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_out.gif
new file mode 100644
index 0000000..f617450
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_out.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_out_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_out_2.gif
new file mode 100644
index 0000000..323c88e
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/check_out_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Preview_map_1.PNG b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Preview_map_1.PNG
new file mode 100644
index 0000000..3896ca2
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Preview_map_1.PNG differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Preview_map_2.PNG b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Preview_map_2.PNG
new file mode 100644
index 0000000..ae2e6d2
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/Preview_map_2.PNG differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/background_800x480.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/background_800x480.gif
new file mode 100644
index 0000000..cb4baf8
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/background_800x480.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/back.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/back.gif
new file mode 100644
index 0000000..e8409af
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/back_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/back_2.gif
new file mode 100644
index 0000000..2d3e9ed
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno1.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno1.gif
new file mode 100644
index 0000000..6c1d83e
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno1.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno1_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno1_2.gif
new file mode 100644
index 0000000..88fe909
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno1_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno2.gif
new file mode 100644
index 0000000..8b70dd8
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno2_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno2_2.gif
new file mode 100644
index 0000000..1d64e97
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno2_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno3.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno3.gif
new file mode 100644
index 0000000..9a701aa
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno3.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno3_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno3_2.gif
new file mode 100644
index 0000000..0abf248
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/fno3_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/back.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/back.gif
new file mode 100644
index 0000000..368d412
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/back_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/back_2.gif
new file mode 100644
index 0000000..d39f480
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/start.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/start.gif
new file mode 100644
index 0000000..b2d1834
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/start.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/start_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/start_2.gif
new file mode 100644
index 0000000..c5a52e4
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/start_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/background_800x480.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/background_800x480.gif
new file mode 100644
index 0000000..cb4baf8
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/background_800x480.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/setting_button.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/setting_button.gif
new file mode 100644
index 0000000..fba1adf
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/setting_button.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/unlock_button.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/unlock_button.gif
new file mode 100644
index 0000000..1731a83
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/unlock_button.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/back.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/back.gif
new file mode 100644
index 0000000..c3e45f7
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/back_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/back_2.gif
new file mode 100644
index 0000000..cf39dd4
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/left_arrow.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/left_arrow.gif
new file mode 100644
index 0000000..20abdbf
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/left_arrow.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/left_arrow_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/left_arrow_2.gif
new file mode 100644
index 0000000..2f337f7
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/left_arrow_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/right_arrow.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/right_arrow.gif
new file mode 100644
index 0000000..697b043
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/right_arrow.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/right_arrow_2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/right_arrow_2.gif
new file mode 100644
index 0000000..d0ea78f
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/right_arrow_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/0.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/0.gif
new file mode 100644
index 0000000..5683e84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/0.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/1.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/1.gif
new file mode 100644
index 0000000..b6ae72d
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/1.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/2.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/2.gif
new file mode 100644
index 0000000..b9d4114
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/3.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/3.gif
new file mode 100644
index 0000000..cd56a14
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/3.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/4.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/4.gif
new file mode 100644
index 0000000..58ec974
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/4.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/5.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/5.gif
new file mode 100644
index 0000000..4d5e97a
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/5.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/6.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/6.gif
new file mode 100644
index 0000000..66b4c0a
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/6.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/7.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/7.gif
new file mode 100644
index 0000000..1d21d9b
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/7.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/8.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/8.gif
new file mode 100644
index 0000000..98e12ac
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/8.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/9.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/9.gif
new file mode 100644
index 0000000..f51cf07
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/9.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/back.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/back.gif
new file mode 100644
index 0000000..51b1203
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/clear.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/clear.gif
new file mode 100644
index 0000000..eb0732f
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/clear.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/confirm.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/confirm.gif
new file mode 100644
index 0000000..c01cf39
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/confirm.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/Dadmins.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/Dadmins.gif
new file mode 100644
index 0000000..d6c0cb1
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/Dadmins.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/back.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/back.gif
new file mode 100644
index 0000000..4d7ca90
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/exit.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/exit.gif
new file mode 100644
index 0000000..6c88c33
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/exit.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/fingerprint.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/fingerprint.gif
new file mode 100644
index 0000000..ac69e9c
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/fingerprint.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/log.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/log.gif
new file mode 100644
index 0000000..cb9bc27
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/log.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/setting.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/setting.gif
new file mode 100644
index 0000000..f39c292
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/setting.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/unlock.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/unlock.gif
new file mode 100644
index 0000000..b25c523
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/unlock.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/back.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/back.gif
new file mode 100644
index 0000000..1e367f0
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/fingerprint.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/fingerprint.gif
new file mode 100644
index 0000000..0dddbc2
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/fingerprint.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/password.gif b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/password.gif
new file mode 100644
index 0000000..7459e3d
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/password.gif differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/NFCConnect.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/NFCConnect.py
new file mode 100644
index 0000000..24d87a7
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/NFCConnect.py
@@ -0,0 +1,15 @@
+import serial
+import config
+from datetime import datetime
+ser = serial.Serial('/dev/ttyACM0', 115200, timeout = 10, writeTimeout = 10)
+
+string = str(ser.readline())
+string = string[2:-5]
+print(string)
+print("release")
+
+#string="Thisbeconnection"
+#print("proceed")
+#date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+#sql='INSERT INTO sessions (PersonID, AccessTime, NFCID) VALUES("%d","%s","%s")'%(person,date,string)
+#config.executeQuery(sql)
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/config.cpython-34.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/config.cpython-34.pyc
new file mode 100644
index 0000000..7664a47
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/config.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/config.cpython-36.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/config.cpython-36.pyc
new file mode 100644
index 0000000..9ce2bbf
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/config.cpython-36.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/backup-menu.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/backup-menu.py
new file mode 100644
index 0000000..54ee314
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/backup-menu.py
@@ -0,0 +1,321 @@
+import fingerpi as fp
+import time
+import datetime
+from types import *
+import RPi.GPIO as GPIO
+
+
+f = fp.FingerPi()
+print ('Opening connection...')
+
+f.Open()
+f.CmosLed(False)
+
+#set up GPIO using BCM numbering
+GPIO.setmode(GPIO.BCM)
+LOCK = 4
+
+
+
+def printMenu():
+ print("\nMenu")
+ print("0. Unlock")
+ print("1. Enroll Count")
+ print("2. Check Enrolled ID")
+ print("3. Enroll new finger")
+ print("4. Remove enrolled ID")
+ print("5. Remove all IDs")
+ print("6. Verify ID (1:1)")
+ print("7. Identify ID (1:N)")
+ print("8. Exit \n")
+ return
+
+def enroll_count():
+ count = f.GetEnrollCount()[0]['Parameter']
+ print(("{} fingerprints has been enrolled\n".format(count)))
+ del count
+ return
+
+def enroll():
+ enroll_failed = False
+ enroll_success = False
+ try:
+ print(("Totally {} fingerprints has been enrolled\n".format(f.GetEnrollCount()[0]['Parameter'])))
+ while ((not enroll_failed) and (not enroll_success)):
+ id = eval(input("Enter enrolled ID: 0-199 (200 to exit): "))
+ if (id == 200):
+ enroll_failed = True
+ break
+ if type(id) is not IntType or id < 0 or id > 200:
+ print("ID is not valid\n")
+ continue
+ else:
+ res = f.CheckEnrolled(id)
+ if res[0]['ACK']:
+ print("ID is already used\n")
+ continue
+ # print(res[0]['Parameter'])
+ f.CmosLed(True)
+ status = f.EnrollStart(id)
+ if (not status[0]['ACK']):
+ print((status[0]['Parameter']))
+ enroll_failed = True
+ break
+ # print(status[0]['Parameter'])
+
+ print("1.Place your finger on the scanner\n")
+ f.WaitForFinger(False)
+ cap1 = f.CaptureFinger(best_image = True)
+ if (cap1[0]['ACK'] == False):
+ print("1. No Image captured")
+ enroll_failed = True
+ break
+ status1 = f.Enroll1()
+ if not status1[0]['ACK']:
+ print((status1[0]['Parameter']))
+ enroll_failed = True
+ break
+ # print(status1[0]['Parameter'])
+ print ("1. Remove your finger\n")
+ f.WaitForFinger(True)
+
+ print("2.Place same finger on the scanner\n")
+ f.WaitForFinger(False)
+ cap2 = f.CaptureFinger(best_image = True)
+ if (cap2[0]['ACK'] == False):
+ print("2. No Image captured")
+ enroll_failed = True
+ break
+ status2 = f.Enroll2()
+ if not status2[0]['ACK']:
+ print((status2[0]['Parameter']))
+ enroll_failed = True
+ break
+ # print(status2[0]['Parameter'])
+ print ("2. Remove your finger\n")
+ f.WaitForFinger(True)
+
+ print("3.Place same finger on the scanner\n")
+ f.WaitForFinger(False)
+ cap3 = f.CaptureFinger(best_image = True)
+ if (cap3[0]['ACK'] == False):
+ print("2. No Image captured")
+ enroll_failed = True
+ break
+ status3 = f.Enroll3()
+ if not status3[0]['ACK']:
+ if (status3[0]['Parameter'] == 0):
+ print("Finger is already registered")
+ else:
+ print((status3[0]['Parameter']))
+ enroll_failed = True
+ break
+ # print(status3[0]['Parameter'])
+ enroll_success = True
+ print ("3. Remove your finger\n")
+ f.WaitForFinger(True)
+
+ if enroll_failed :
+ time.sleep(2)
+ f.CmosLed(False)
+ print("Enroll failed\n\n")
+ if enroll_success :
+ time.sleep(2)
+ f.CmosLed(False)
+ print("Enroll success\n")
+ print(("Totally {} fingerprints has been enrolled.\n".format(f.GetEnrollCount()[0]['Parameter'])))
+
+ except RuntimeError as e:
+ print(e)
+ return
+
+
+def check_enrolled_ID():
+ while (True):
+ id = eval(input("Enter enrolled ID: 0-199 (200 to eixt): "))
+ if (id == 200):
+ break
+ if id < 0 or id > 199:
+ print("ID is not valid\n")
+ continue
+ else:
+ status = f.CheckEnrolled(id)[0]['ACK']
+ if (status):
+ print(("ID: {} is already used.".format(id)))
+ else:
+ print(("ID: {} is good to use.".format(id)))
+ del status
+ break
+ return
+
+def verify():
+ while (True):
+ id = eval(input("Enter the ID: 0-199 (200 to exit): "))
+ if (id == 200):
+ break
+ if id < 0 or id > 199:
+ print("ID is not valid\n")
+ continue
+ else:
+ status = f.CheckEnrolled(id)[0]['ACK']
+ if (not status):
+ print(("ID: {} is not registered.".format(id)))
+ else:
+ f.CmosLed(True)
+ print("Place your finger on the scanner\n")
+ f.WaitForFinger(False)
+ cap1 = f.CaptureFinger(best_image = False)
+ if (cap1[0]['ACK'] == False):
+ print("1. No Image captured")
+ break
+ rp = f.Verify(id)
+ print("Remove your finger \n")
+ f.WaitForFinger(True)
+ if (rp[0]['ACK']):
+ print((rp[0]['Parameter']))
+ print ("Verified \n")
+ else:
+ print ("Finger is not verified \n")
+
+ f.CmosLed(False)
+ break
+ return
+
+def identify():
+ f.CmosLed(True)
+ print("Place your finger on the scanner\n")
+ f.WaitForFinger(False)
+ cap1 = f.CaptureFinger(best_image = False)
+ if (cap1[0]['ACK'] == False):
+ print("1. No Image captured \n")
+ return
+ rp = f.Identify()
+ print("Remove your finger \n")
+ f.WaitForFinger(True)
+ if (rp[0]['ACK']):
+ print(("The finger ID is {}.\n".format(rp[0]['Parameter'])))
+ else:
+ print ("Finger is not registered \n")
+ f.CmosLed(False)
+ return
+
+def removeID():
+ while (True):
+ id = eval(input("Enter the ID: 0-199 (200 to exit): "))
+ if (id == 200):
+ break
+ if id < 0 or id > 199:
+ print("ID is not valid\n")
+ continue
+ else:
+ status = f.CheckEnrolled(id)[0]['ACK']
+ if (not status):
+ print(("ID: {} is not registered.".format(id)))
+ continue
+ else:
+ rp = f.DeleteId(id)
+ if(rp[0]['ACK']):
+ print(("ID: {} is deleted.".format(id)))
+ break
+ else:
+ print(("{} error!".format(rp[0]['Parameter'])))
+ break
+ return
+
+def removeAll():
+ status = f.DeleteAll()
+ if (status):
+ print ("All the fingerprints are deleted")
+ else:
+ print(("{} error!".format(rp[0]['Parameter'])))
+ return
+
+def unlock():
+ #takePic()
+ f.CmosLed(True)
+ print("Place your finger on the scanner\n")
+ f.WaitForFinger(False)
+ cap1 = f.CaptureFinger(best_image = False)
+ if (cap1[0]['ACK'] == False):
+ print("1. No Image captured \n")
+ return
+ rp = f.Identify()
+ print("Remove your finger \n")
+ f.WaitForFinger(True)
+ f.CmosLed(False)
+ if (rp[0]['ACK']):
+ print(("The finger ID is {}.\n".format(rp[0]['Parameter'])))
+ GPIO.setup(LOCK, GPIO.OUT)
+ GPIO.output(LOCK, True)
+ print("Unlock")
+ i = 5
+ while i > 0:
+ print(i)
+ i = i -1
+ time.sleep(1)
+ GPIO.output(LOCK, False)
+ print("lock")
+ else:
+ print ("Finger is not registered \n")
+ #f.CmosLed(False)
+ return
+
+
+
+
+
+
+
+try:
+ while True:
+ f.CmosLed(False)
+ printMenu()
+ option = eval(input("Select an option: "))
+ if (option == 0 ):
+ print("0. Unlock")
+ unlock()
+ continue
+ if (option == 1):
+ print("1. Enroll Count: \n")
+ enroll_count()
+ continue
+ elif (option == 2):
+ print("2. Check Enrolled ID: \n")
+ check_enrolled_ID()
+ continue
+ elif (option == 3):
+ print("3. Enroll new finger: \n")
+ enroll()
+ continue
+ elif (option == 4):
+ print("4. Remove enrolled ID")
+ removeID()
+ continue
+ elif (option == 5):
+ print("5. Remove all IDs")
+ removeAll()
+ continue
+ elif (option == 6):
+ print("6. Verify ID (1:1)")
+ verify()
+ continue
+ elif (option == 7):
+ print("7. Identify ID (1:N)")
+ identify()
+ continue
+ elif (option == 8):
+ print("8. Exit")
+ f.Close()
+ GPIO.cleanup()
+ break
+ else:
+ print("Invalid input")
+ continue
+except RuntimeError as e:
+ print(e)
+except SyntaxError as e:
+ print (e)
+except NameError as e:
+ print (e)
+
+
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/config.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/config.py
new file mode 100644
index 0000000..9ab5439
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/config.py
@@ -0,0 +1,25 @@
+import pymysql
+import pymysql.cursors
+from datetime import datetime
+
+def executeQuery(sql):
+ Hostname = "us-cdbr-iron-east-04.cleardb.net"
+ Username = "b372dfe7409692"
+ Password = "74f6e317"
+
+ date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+ conn= pymysql.connect(host=Hostname,user=Username,password=Password,db='ad_15a989204c2ff8a',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
+ curs=conn.cursor(pymysql.cursors.DictCursor)
+ try:
+ curs.execute(sql)
+ retval = curs.fetchall()
+ conn.commit()
+ print("successfully executed query")
+ curs.close()
+ conn.close()
+ return retval
+ except:
+ print("failed to execute query, please try again")
+ conn.rollback()
+ curs.close()
+ conn.close()
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__init__.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__init__.py
new file mode 100644
index 0000000..789392d
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__init__.py
@@ -0,0 +1 @@
+from .fingerpi import FingerPi
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__init__.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__init__.pyc
new file mode 100644
index 0000000..85cff37
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__init__.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/__init__.cpython-34.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/__init__.cpython-34.pyc
new file mode 100644
index 0000000..aa807c2
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/__init__.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/base.cpython-34.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/base.cpython-34.pyc
new file mode 100644
index 0000000..7e4c521
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/base.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/fingerpi.cpython-34.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/fingerpi.cpython-34.pyc
new file mode 100644
index 0000000..2b1ea76
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/fingerpi.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/structure.cpython-34.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/structure.cpython-34.pyc
new file mode 100644
index 0000000..95afb11
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/structure.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/base.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/base.py
new file mode 100644
index 0000000..e1f7aba
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/base.py
@@ -0,0 +1,143 @@
+
+import struct
+from .structure import *
+
+
+"""
+Command Packet:
+OFFSET ITEM TYPE DESCRIPTION
+----------------------------------------------------------------
+0 0x55 BYTE Command start code 1
+1 0xAA BYTE Command start code 2
+2 Device ID WORD Device ID (default: 0x0001)
+4 Parameter DWORD Input parameter
+8 Command WORD Command code
+10 Checksum WORD Byte addition checksum
+
+Response Packet:
+OFFSET ITEM TYPE DESCRIPTION
+----------------------------------------------------------------
+0 0x55 BYTE Response code 1
+1 0xAA BYTE Response code 2
+2 Device ID WORD Device ID (default: 0x0001)
+4 Parameter DWORD Error code
+8 Response WORD Response (ACK/NACK)
+10 Checksum WORD Byte addition checksum
+
+Data Packet:
+OFFSET ITEM TYPE DESCRIPTION
+----------------------------------------------------------------
+0 0x5A BYTE Data code 1
+1 0xA5 BYTE Data code 2
+2 Device ID WORD Device ID (default: 0x0001)
+4 Parameter N BYTES N bytes of data - size predefined
+4 + N Checksum WORD Byte addition checksum
+"""
+
+"""
+Args:
+ typ: Type of the packet to create
+ 'comm': Command/Response packet
+ 'data': Data packet
+ device_id: Device ID (defualts to 1)
+ parameter: Parameter to send
+ command: Command to send
+"""
+
+def encode_command_packet(
+ command = None,
+ parameter = 0,
+ device_id = 1):
+
+ command = commands[command]
+ packet = bytearray(struct.pack(comm_struct(),
+ packets['Command1'], # Start code 1
+ packets['Command2'], # Start code 2
+ device_id, # Device ID
+ parameter, # Parameter
+ command # Command
+ ))
+ checksum = sum(packet)
+ packet += bytearray(struct.pack(checksum_struct(), checksum))
+ return packet
+
+def encode_data_packet(
+ data = None,
+ data_len = 0,
+ device_id = 1):
+
+ packet = bytearray(struct.pack(data_struct(data_len),
+ packets['Data1'], # Start code 1
+ packets['Data2'], # Start code 2
+ device_id, # Device ID
+ data # Data to be sent
+ ))
+ checksum = sum(packet)
+ packet += bytearray(struct.pack(checksum_struct(), checksum))
+ return packet
+
+def decode_command_packet(packet):
+ response = {
+ 'Header': None,
+ 'DeviceID': None,
+ 'ACK': None,
+ 'Parameter': None,
+ 'Checksum': None
+ }
+ _debug = packet
+ if packet == '': # Nothing to decode
+ response['ACK'] = False
+ return response
+ # Check if it is a data packet:
+ if packet[0] == packets['Data1'] and packet[1] == packets['Data2']:
+ return decode_data_packet(packet)
+ # Strip the checksum and get the values out
+ checksum = sum(struct.unpack(checksum_struct(), packet[-2:])) # Last two bytes are checksum
+ packet = packet[:-2]
+ response['Checksum'] = sum(packet) == checksum # True if checksum is correct
+
+ try:
+ packet = struct.unpack(comm_struct(), packet)
+ except Exception as e:
+ raise Exception(str(e) + ' ' + str(packet[0]))
+ response['Header'] = hex(packet[0])[2:] + hex(packet[1])[2:]
+ response['DeviceID'] = hex(packet[2])[2:]
+ response['ACK'] = packet[4] != 0x31 # Not NACK, might be command
+ # response['Parameter'] = packet[3] if response['ACK'] else errors[packet[3]]
+ response['Parameter'] = errors[packet[3]] if (not response['ACK'] and packet[3] in errors) else packet[3]
+ return response
+
+def decode_data_packet(packet):
+ response = {
+ 'Header': None,
+ 'DeviceID': None,
+ 'Data': None,
+ 'Checksum': None
+ }
+ if packet == '':
+ response['ACK'] = False
+ return response
+ # Check if it is a command packet:
+ if packet[0] == packets['Command1'] and packet[1] == packets['Command2']:
+ return decode_command_packet(packet)
+
+ # Strip the checksum and get the values out
+ checksum = sum(struct.unpack(checksum_struct(), packet[-2:])) # Last two bytes are checksum
+ packet = packet[:-2]
+ # Data sum might be larger than the checksum field:
+ chk = sum(packet)
+ chk &= 0xffff
+ response['Checksum'] = chk == checksum # True if checksum is correct
+
+ data_len = len(packet) - 4 # Exclude the header (2) and device ID (2)
+
+ packet = struct.unpack(data_struct(data_len), packet)
+ response['Header'] = hex(packet[0])[2:] + hex(packet[1])[2:]
+ response['DeviceID'] = hex(packet[2])[2:]
+ response['Data'] = packet[3]
+ # print packet
+ return response
+
+
+
+
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/base.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/base.pyc
new file mode 100644
index 0000000..c1880b9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/base.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/exceptions.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/exceptions.py
new file mode 100644
index 0000000..bb14509
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/exceptions.py
@@ -0,0 +1,60 @@
+
+## Exceptions specifically for the FingerPi communication
+## All exceptions inherit from RuntimeError
+
+################################################################################
+# Port IO related errors
+class PortError(IOError):
+ """Base class for port errors"""
+ def __init__(self, *args, **kwargs):
+ IOError.__init__(self, *args, **kwargs)
+
+################################################################################
+# Cases when trying to reuse variables that are already in use
+class AlreadyError(RuntimeError):
+ """Base class"""
+ def __init__(self, *args, **kwargs):
+ RuntimeError.__init__(self, *args, **kwargs)
+
+class AlreadyInitializedError(AlreadyError):
+ """If trying to initialize the device that is already initialized"""
+ def __init__(self, *args, **kwargs):
+ AlreadyError.__init__(self, *args, **kwargs)
+
+class AlreadyOpenError(AlreadyError):
+ """If trying to open the device that is already open"""
+ def __init__(self, *args, **kwargs):
+ AlreadyError.__init__(self, *args, **kwargs)
+################################################################################
+# Cases when trying to use variables that are not yet created
+class NotYetError(RuntimeError):
+ """Base class"""
+ def __init__(self, *args, **kwargs):
+ RuntimeError.__init__(self, *args, **kwargs)
+
+class NotInitializedError(NotYetError):
+ """If trying to use methods without initializing first"""
+ def __init__(self, *args, **kwargs):
+ NotYetError.__init__(self, *args, **kwargs)
+
+class NotOpenError(NotYetError):
+ """If trying to use methods without opening first"""
+ def __init__(self, *args, **kwargs):
+ NotYetError.__init__(self, *args, **kwargs)
+
+################################################################################
+# Nack errors (tricky)
+class NackError(RuntimeError):
+ """Any NACK errors would be here"""
+ def __init__(self, *args, **kwargs):
+ RuntimeError.__init__(self, *args, **kwargs)
+
+################################################################################
+# Name/Key/Value errors
+class OutOfBoundsError(ValueError):
+ """If the values are outside the range!"""
+ def __init__(self, *args, **kwargs):
+ ValueError.__init__(self, *args, **kwargs)
+
+
+
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/fingerpi.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/fingerpi.py
new file mode 100644
index 0000000..f93041b
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/fingerpi.py
@@ -0,0 +1,323 @@
+
+"""Communication with the Fingerprint Scanner using R-Pi"""
+
+import os, sys
+import serial
+import time
+
+from .base import *
+
+class FingerPi():
+ def __init__(self,
+ port = '/dev/ttyUSB0',
+ baudrate = 9600,
+ device_id = 0x01,
+ timeout = 2,
+ *args, **kwargs):
+ self.port = port
+ self.baudrate = baudrate
+ if not os.path.exists(port):
+ raise IOError("Port " + self.port + " cannot be opened!")
+
+ self.serial = serial.Serial(
+ port = self.port, baudrate = self.baudrate, timeout = timeout,
+ *args, **kwargs)
+
+ self.device_id = device_id
+ self.timeout = 5
+
+ self.save = False
+
+ self.serial.flushInput()
+ self.serial.flushOutput()
+
+
+ ##########################################################
+ ## Send/Get routines
+
+ def sendCommand(self, command, parameter = 0x00):
+ if type(parameter) == bool:
+ parameter = parameter*1
+ packet = encode_command_packet(command, parameter, device_id = self.device_id)
+
+ # The length of the written command should match:
+ result = len(packet) == self.serial.write(packet)
+ self.serial.flush()
+ return result
+
+ def getResponse(self, response_len = 12):
+ response = self.serial.read(response_len)
+ # print len(response)
+ return decode_command_packet(bytearray(response))
+
+ def sendData(self, data, data_len):
+ packet = encode_data_packet(data, data_len, device_id = self.device_id)
+ result = len(packet) == self.serial.write(packet)
+ self.serial.flush()
+ return result
+
+ def getData(self, data_len):
+ # Data length is different for every command
+ response = self.serial.read(1+1+2+data_len+2) # Header(2) + ID(2) + data + checksum(2)
+ # return response
+ return decode_data_packet(bytearray(response))
+
+
+ ##########################################################
+ ## Send/Get routines
+ def Open(self, extra_info = False, check_baudrate = False):
+ # Check baudrate:
+ if check_baudrate:
+ self.serial.timeout = 0.5
+ for baudrate in (self.serial.baudrate,) + self.serial.BAUDRATES:
+ if 9600 <= baudrate <= 115200:
+ self.serial.baudrate = baudrate
+ if not self.sendCommand('Open', extra_info):
+ raise RuntimeError("Couldn't send 'Open' packet!")
+ # print baudrate
+ response = self.getResponse()
+ if response['ACK']:
+ # Decoded something
+ response['Parameter'] = baudrate
+ break
+
+ if self.serial.baudrate > 115200: # Cannot be more than that
+ raise RuntimeError("Couldn't find appropriate baud rate!")
+ else:
+ self.sendCommand('Open', extra_info)
+ response = self.getResponse()
+ data = None
+ if extra_info:
+ data = self.getData(16+4+4)
+ self.serial.timeout = self.timeout
+ return [response, data]
+
+ def Close (self):
+ self.ChangeBaudrate(9600)
+ if self.sendCommand('Close'):
+ response = self.getResponse()
+ self.serial.flushInput()
+ self.serial.flushOutput()
+ self.serial.close()
+ return [response, None]
+
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def UsbInternalCheck(self):
+ if self.sendCommand('UsbInternalCheck'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def CmosLed(self, on = False):
+ if self.sendCommand('CmosLed', on):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def ChangeBaudrate(self, baudrate):
+ if self.sendCommand('ChangeBaudrate', baudrate):
+ response = self.getResponse()
+ self.serial.baudrate = baudrate
+ return [response, None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def GetEnrollCount(self):
+ if self.sendCommand('GetEnrollCount'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def CheckEnrolled(self, ID):
+ if self.sendCommand('CheckEnrolled', ID):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def EnrollStart(self, ID):
+ self.save = ID == -1
+ if self.sendCommand('EnrollStart', ID):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def Enroll1(self):
+ if self.sendCommand('Enroll1'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def Enroll2(self):
+ if self.sendCommand('Enroll2'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def Enroll3(self):
+ if self.sendCommand('Enroll3'):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ data = None
+ if self.save:
+ data = self.getData(498)
+ return [response, data]
+
+ def IsPressFinger(self):
+ if self.sendCommand('IsPressFinger'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def DeleteId(self, ID):
+ if self.sendCommand('DeleteID', ID):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def DeleteAll(self):
+ if self.sendCommand('DeleteAll'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def Verify(self, ID):
+ if self.sendCommand('Verify',ID):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def Identify(self):
+ if self.sendCommand('Identify'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def VerifyTemplate(self, ID, template):
+ if self.sendCommand('VerifyTemplate', ID):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ if self.sendData(template, 498):
+ data = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet (data)")
+ return [response, data]
+
+ def IdentifyTemplate(self, template):
+ if self.sendCommand('IdentifyTemplate'):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ if self.sendData(template, 498):
+ data = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet (data)")
+ return [response, data]
+
+ def CaptureFinger(self, best_image = False):
+ # For enrollment use 'best_image = True'
+ # For identification use 'best_image = False'
+ if best_image:
+ self.serial.timeout = 10
+ if self.sendCommand('CaptureFinger', best_image):
+ self.serial.timeout = self.timeout
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def MakeTemplate(self):
+ if self.sendCommand('MakeTemplate'):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ self.serial.timeout = 10
+ data = self.getData(498)
+ self.serial.timeout = self.timeout
+ return [response, data]
+
+ def GetImage(self, dim = (258, 202)):
+ # The documentation is ambiguous:
+ # Dimensions could be 202x258 or 256x256
+ to_read = dim[0]*dim[1]
+
+ if self.sendCommand('GetImage'):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ data = None
+ if response['ACK']:
+ self.serial.timeout = None # This is dangerous!
+ data = self.getData(dim[0]*dim[1])
+ self.serial.timeout = self.timeout
+ data['Data'] = (data['Data'], dim)
+ return [response, data]
+
+ def GetRawImage(self, dim = (160, 120)):
+ if self.sendCommand('GetRawImage'):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ data = None
+ if response['ACK']:
+ self.serial.timeout = None # This is dangerous!
+ data = self.getData(dim[0]*dim[1])
+ self.serial.timeout = self.timeout
+ # Add dimensions to the data
+ data['Data'] = (data['Data'], dim)
+ return [response, data]
+
+ def GetTemplate(self, ID):
+ if self.sendCommand('GetTemplate', ID):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ self.serial.timeout = None # This is dangerous!
+ data = self.getData(498)
+ self.serial.timeout = self.timeout
+ return [response, data]
+
+ def SetTemplate(self, ID, template):
+ if self.sendCommand('SetTemplate', ID):
+ response = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet")
+ if self.sendData(template, 498):
+ data = self.getResponse()
+ else:
+ raise RuntimeError("Couldn't send packet (data)")
+ return [response, data]
+
+ def GetDatabaseStart(self):
+ if self.sendCommand('GetDatabaseStart'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def GetDatabaseEnd(self):
+ if self.sendCommand('GetDatabaseEnd'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def SetIAPMode(self):
+ if self.sendCommand('SetIAPMode'):
+ return [self.getResponse(), None]
+ else:
+ raise RuntimeError("Couldn't send packet")
+
+ def WaitForFinger(self, state):
+ if (state):
+ while(self.IsPressFinger()[0]['Parameter'] == 0):
+ time.sleep(0.1)
+ else:
+ n = 50 # only wait for about 10 sec
+ while(self.IsPressFinger()[0]['Parameter'] >0):
+ if n < 0:
+ self.CmosLed(False)
+ break
+ n -= 1
+ time.sleep(0.1)
+
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/fingerpi.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/fingerpi.pyc
new file mode 100644
index 0000000..2669a1d
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/fingerpi.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/structure.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/structure.py
new file mode 100644
index 0000000..9b0d100
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/structure.py
@@ -0,0 +1,111 @@
+
+
+"""
+Command Packet:
+OFFSET ITEM TYPE DESCRIPTION
+----------------------------------------------------------------
+0 0x55 BYTE Command start code 1
+1 0xAA BYTE Command start code 2
+2 Device ID WORD Device ID (default: 0x0001)
+4 Parameter DWORD Input parameter
+8 Command WORD Command code
+10 Checksum WORD Byte addition checksum
+
+Response Packet:
+OFFSET ITEM TYPE DESCRIPTION
+----------------------------------------------------------------
+0 0x55 BYTE Response code 1
+1 0xAA BYTE Response code 2
+2 Device ID WORD Device ID (default: 0x0001)
+4 Parameter DWORD Error code
+8 Response WORD Response (ACK/NACK)
+10 Checksum WORD Byte addition checksum
+
+Data Packet:
+OFFSET ITEM TYPE DESCRIPTION
+----------------------------------------------------------------
+0 0x5A BYTE Data code 1
+1 0xA5 BYTE Data code 2
+2 Device ID WORD Device ID (default: 0x0001)
+4 Parameter N BYTES N bytes of data - size predefined
+4 + N Checksum WORD Byte addition checksum
+"""
+
+comm_struct = lambda: 'Enroll1->Enroll2->Enroll3)
+ 0x100C: 'NACK_BAD_FINGER', # Fingerprint is too bad
+ 0x100D: 'NACK_ENROLL_FAILED', # Enrollment Failure
+ 0x100E: 'NACK_IS_NOT_SUPPORTED', # The command is not supported
+ 0x100F: 'NACK_DEV_ERR', # Device error: probably Crypto-Chip is faulty (Wrong checksum ~Z)
+ 0x1010: 'NACK_CAPTURE_CANCELED', # (Obsolete) Capturing was canceled
+ 0x1011: 'NACK_INVALID_PARAM', # Invalid parameter
+ 0x1012: 'NACK_FINGER_IS_NOT_PRESSED', # Finger is not pressed
+}
+
+responses = {
+ 'Ack': 0x30,
+ 'Nack': 0x31,
+ 0x30: 'Ack',
+ 0x31: 'Nack'
+}
+
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/structure.pyc b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/structure.pyc
new file mode 100644
index 0000000..f490089
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/structure.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/testQ.py b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/testQ.py
new file mode 100644
index 0000000..60140a1
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/DSSystem/testQ.py
@@ -0,0 +1,58 @@
+import config
+from datetime import date
+#fingerID=2
+#finsql='SELECT Admin_ID from admin WHERE FINGER_REGISTERED_FLAG = 1 AND (FINGER_ID="%d" OR FINGER_ID_2="%d" OR FINGER_ID_3="%d")'
+#val = config.executeQuery(finsql %(fingerID,fingerID,fingerID));
+
+#from datetime import datetime
+#acctime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+#empID = 18
+#sql='INSERT INTO log(Employee_ID,AccessTime)VALUES("%d","%s")'%(empID,acctime)
+#val = config.executeQuery(sql);
+#print(val);
+
+#pinsql = 'SELECT pin from admin WHERE Admin_ID = getEmployeeIDSomeHow'
+#val = config.executeQuery(pinsql)
+#print(val==pin)
+#import hashlib
+#m = hashlib.md5()
+#m.update("1234".encode("utf-8"))
+#print(m.hexdigest()) # its more common to show hashes as a hex string
+# '81dc9bdb52d04dc20036dbd8313ed055'
+
+#sql = 'SELECT * from admin WHERE Admin_ID = "8q6812"'
+#adminfings = config.executeQuery(sql)
+
+
+#print(adminfings)
+
+#if adminfings:
+ # print ("yes")
+#else:
+# print ("No")
+
+logsql = 'SELECT * from log'
+#sessionsql = 'SELECT * from sessions'
+sessionsql = 'SELECT sessions.*, devices.Device_Name from sessions INNER JOIN devices ON sessions.NFCID = devices.NFC_ID'
+logdata = config.executeQuery(logsql)
+sessiondata = config.executeQuery(sessionsql)
+#devicedata = config.executeQuery(devicenamesql)
+#print(devicedata)
+for session in sessiondata:
+ logdata.append(session)
+logdata.sort(key=lambda item:item['AccessTime'], reverse=False)
+output = []
+for dct in logdata:
+ #print(dct)
+ if len(dct)==3:
+ s = "Access Time: {:20s}".format(dct["AccessTime"].strftime('%Y-%m-%d %H:%M:%S'))+ " (Door opened) | Log ID: {:4d}".format(dct['log_ID'])+" | Employee ID: {:9d}".format(dct["Employee_ID"])
+ elif len(dct)>3:
+ s = "Access Time: {:20s}".format(dct["AccessTime"].strftime('%Y-%m-%d %H:%M:%S'))+ " (Device Scanned) | Ses ID: {:4d}".format(dct['SessionID'])+" | Employee ID: {:9d}".format(dct["PersonID"]) +" | Device ID: {:16s}".format(dct["NFCID"])+" | Name : {:20s}".format(dct["Device_Name"])
+ output.append(s)
+ output.append("\n")
+teststring = ''.join(output)
+
+print(output[0])
+#print(teststring)
+
+#print(date.today())
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/README.md b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/README.md
new file mode 100644
index 0000000..2e7204f
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/README.md
@@ -0,0 +1 @@
+# SF_DeviceSecuritySystem
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/autostart.txt b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/autostart.txt
new file mode 100644
index 0000000..f13c66e
--- /dev/null
+++ b/SF_DeviceSecuritySystem-master/SF_DeviceSecuritySystem-master/autostart.txt
@@ -0,0 +1,14 @@
+in /home/pi/.config build a directory name autostart, and build a new file name DSSystem
+
+[Desktop Entry]
+Name = DSSystem
+Comment = DSSystem Autostart
+Exec=python3 /home/pi/SF_DeviceSecuritySystem/DSSystem/DSSystem.py
+Terminal = false
+MultipleArgs = true (should be false if you do not want input)
+MutipleArgs = true (should be false if you do not want input)
+Type=Application
+Categories=Application;Development;
+StartupNotify=true
+
+then sudo reboot
\ No newline at end of file
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/._SF_DeviceSecuritySystem-master b/SF_DeviceSecuritySystem-master/__MACOSX/._SF_DeviceSecuritySystem-master
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/._SF_DeviceSecuritySystem-master differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.DS_Store b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.DS_Store
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.DS_Store differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.gitignore b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.gitignore
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.gitignore differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.idea b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.idea
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._.idea differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._DSSystem b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._DSSystem
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._DSSystem differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._README.md b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._README.md
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._README.md differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._autostart.txt b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._autostart.txt
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/._autostart.txt differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._SF_DeviceSecuritySystem.iml b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._SF_DeviceSecuritySystem.iml
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._SF_DeviceSecuritySystem.iml differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._misc.xml b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._misc.xml
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._misc.xml differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._modules.xml b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._modules.xml
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._modules.xml differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._vcs.xml b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._vcs.xml
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._vcs.xml differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._workspace.xml b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._workspace.xml
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/.idea/._workspace.xml differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._DSSystem.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._DSSystem.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._DSSystem.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._GUIButtonImage b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._GUIButtonImage
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._GUIButtonImage differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._NFCConnect.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._NFCConnect.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._NFCConnect.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/.___pycache__ b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/.___pycache__
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/.___pycache__ differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._backup-menu.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._backup-menu.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._backup-menu.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._config.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._config.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._config.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._fingerpi b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._fingerpi
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._fingerpi differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._testQ.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._testQ.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/._testQ.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Color Code.docx b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Color Code.docx
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Color Code.docx differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._DeviceFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._DeviceFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._DeviceFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Preview_map_1.PNG b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Preview_map_1.PNG
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Preview_map_1.PNG differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Preview_map_2.PNG b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Preview_map_2.PNG
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._Preview_map_2.PNG differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._background_800x480.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._background_800x480.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._background_800x480.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._fingerPrintEnrollFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._fingerPrintEnrollFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._fingerPrintEnrollFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._fingerUnlockFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._fingerUnlockFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._fingerUnlockFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._indexPage b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._indexPage
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._indexPage differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._logFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._logFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._logFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._numberPadFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._numberPadFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._numberPadFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._settingFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._settingFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._settingFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._startFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._startFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._startFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._unlockOptionsFrame b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._unlockOptionsFrame
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/._unlockOptionsFrame differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._back.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._back.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._back_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._back_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_in.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_in.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_in.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_in_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_in_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_in_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_out.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_out.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_out.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_out_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_out_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/DeviceFrame/._check_out_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._back.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._back.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._back_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._back_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno1.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno1.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno1.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno1_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno1_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno1_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno2_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno2_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno2_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno3.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno3.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno3.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno3_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno3_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerPrintEnrollFrame/._fno3_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._back.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._back.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._back_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._back_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._start.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._start.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._start.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._start_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._start_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/fingerUnlockFrame/._start_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._background_800x480.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._background_800x480.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._background_800x480.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._setting_button.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._setting_button.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._setting_button.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._unlock_button.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._unlock_button.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/indexPage/._unlock_button.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._back.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._back.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._back_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._back_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._back_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._left_arrow.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._left_arrow.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._left_arrow.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._left_arrow_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._left_arrow_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._left_arrow_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._right_arrow.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._right_arrow.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._right_arrow.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._right_arrow_2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._right_arrow_2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/logFrame/._right_arrow_2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._0.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._0.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._0.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._1.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._1.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._1.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._2.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._2.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._2.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._3.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._3.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._3.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._4.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._4.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._4.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._5.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._5.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._5.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._6.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._6.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._6.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._7.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._7.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._7.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._8.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._8.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._8.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._9.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._9.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._9.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._back.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._back.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._clear.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._clear.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._clear.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._confirm.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._confirm.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/numberPadFrame/._confirm.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._Dadmins.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._Dadmins.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._Dadmins.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._back.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._back.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._exit.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._exit.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._exit.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._fingerprint.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._fingerprint.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._fingerprint.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._log.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._log.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/settingFrame/._log.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/._setting.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/._setting.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/._setting.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/._unlock.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/._unlock.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/startFrame/._unlock.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._back.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._back.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._back.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._fingerprint.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._fingerprint.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._fingerprint.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._password.gif b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._password.gif
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/GUIButtonImage/unlockOptionsFrame/._password.gif differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/._config.cpython-34.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/._config.cpython-34.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/._config.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/._config.cpython-36.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/._config.cpython-36.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/__pycache__/._config.cpython-36.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___init__.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___init__.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___init__.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___init__.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___init__.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___init__.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___pycache__ b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___pycache__
new file mode 100644
index 0000000..637ce84
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/.___pycache__ differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._base.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._base.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._base.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._base.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._base.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._base.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._exceptions.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._exceptions.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._exceptions.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._fingerpi.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._fingerpi.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._fingerpi.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._fingerpi.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._fingerpi.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._fingerpi.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._structure.py b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._structure.py
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._structure.py differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._structure.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._structure.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/._structure.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/.___init__.cpython-34.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/.___init__.cpython-34.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/.___init__.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._base.cpython-34.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._base.cpython-34.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._base.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._fingerpi.cpython-34.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._fingerpi.cpython-34.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._fingerpi.cpython-34.pyc differ
diff --git a/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._structure.cpython-34.pyc b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._structure.cpython-34.pyc
new file mode 100644
index 0000000..4baaca9
Binary files /dev/null and b/SF_DeviceSecuritySystem-master/__MACOSX/SF_DeviceSecuritySystem-master/DSSystem/fingerpi/__pycache__/._structure.cpython-34.pyc differ