You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.0 KiB
156 lines
4.0 KiB
from socket import *
|
|
from .zkconnect import *
|
|
from .zkversion import *
|
|
from .zkos import *
|
|
from .zkextendfmt import *
|
|
from .zkextendoplog import *
|
|
from .zkplatform import *
|
|
from .zkworkcode import *
|
|
from .zkssr import *
|
|
from .zkpin import *
|
|
from .zkface import *
|
|
from .zkserialnumber import *
|
|
from .zkdevice import *
|
|
from .zkuser import *
|
|
from .zkattendance import *
|
|
from .zktime import *
|
|
|
|
class ZKLib:
|
|
|
|
def __init__(self, ip, port):
|
|
self.address = (ip, port)
|
|
self.zkclient = socket(AF_INET, SOCK_DGRAM)
|
|
self.zkclient.settimeout(3)
|
|
self.session_id = 0
|
|
self.userdata = []
|
|
self.attendancedata = []
|
|
|
|
|
|
def createChkSum(self, p):
|
|
"""This function calculates the chksum of the packet to be sent to the
|
|
time clock
|
|
|
|
Copied from zkemsdk.c"""
|
|
l = len(p)
|
|
chksum = 0
|
|
while l > 1:
|
|
chksum += unpack('H', pack('BB', p[0], p[1]))[0]
|
|
|
|
p = p[2:]
|
|
if chksum > USHRT_MAX:
|
|
chksum -= USHRT_MAX
|
|
l -= 2
|
|
|
|
|
|
if l:
|
|
chksum = chksum + p[-1]
|
|
|
|
while chksum > USHRT_MAX:
|
|
chksum -= USHRT_MAX
|
|
|
|
chksum = ~chksum
|
|
|
|
while chksum < 0:
|
|
chksum += USHRT_MAX
|
|
|
|
return pack('H', chksum)
|
|
|
|
|
|
def createHeader(self, command, chksum, session_id, reply_id,
|
|
command_string):
|
|
"""This function puts a the parts that make up a packet together and
|
|
packs them into a byte string"""
|
|
buf = pack('HHHH', command, chksum, session_id, reply_id) + command_string.encode(encoding='utf_8', errors='strict')
|
|
|
|
buf = unpack('8B'+'%sB' % len(command_string), buf)
|
|
|
|
chksum = unpack('H', self.createChkSum(buf))[0]
|
|
#print unpack('H', self.createChkSum(buf))
|
|
reply_id += 1
|
|
if reply_id >= USHRT_MAX:
|
|
reply_id -= USHRT_MAX
|
|
|
|
buf = pack('HHHH', command, chksum, session_id, reply_id)
|
|
return buf + command_string.encode(encoding='utf_8', errors='strict')
|
|
|
|
|
|
def checkValid(self, reply):
|
|
"""Checks a returned packet to see if it returned CMD_ACK_OK,
|
|
indicating success"""
|
|
command = unpack('HHHH', reply[:8])[0]
|
|
if command == CMD_ACK_OK:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def connect(self):
|
|
return zkconnect(self)
|
|
|
|
def disconnect(self):
|
|
return zkdisconnect(self)
|
|
|
|
def version(self):
|
|
return zkversion(self)
|
|
|
|
def osversion(self):
|
|
return zkos(self)
|
|
|
|
def extendFormat(self):
|
|
return zkextendfmt(self)
|
|
|
|
def extendOPLog(self, index=0):
|
|
return zkextendoplog(self, index)
|
|
|
|
def platform(self):
|
|
return zkplatform(self)
|
|
|
|
def fmVersion(self):
|
|
return zkplatformVersion(self)
|
|
|
|
def workCode(self):
|
|
return zkworkcode(self)
|
|
|
|
def ssr(self):
|
|
return zkssr(self)
|
|
|
|
def pinWidth(self):
|
|
return zkpinwidth(self)
|
|
|
|
def faceFunctionOn(self):
|
|
return zkfaceon(self)
|
|
|
|
def serialNumber(self):
|
|
return zkserialnumber(self)
|
|
|
|
def deviceName(self):
|
|
return zkdevicename(self)
|
|
|
|
def disableDevice(self):
|
|
return zkdisabledevice(self)
|
|
|
|
def enableDevice(self):
|
|
return zkenabledevice(self)
|
|
|
|
def getUser(self):
|
|
return zkgetuser(self)
|
|
|
|
def setUser(self, uid, userid, name, password, role):
|
|
return zksetuser(self, uid, userid, name, password, role)
|
|
|
|
def clearUser(self):
|
|
return zkclearuser(self)
|
|
|
|
def clearAdmin(self):
|
|
return zkclearadmin(self)
|
|
|
|
def getAttendance(self):
|
|
return zkgetattendance(self)
|
|
|
|
def clearAttendance(self):
|
|
return zkclearattendance(self)
|
|
|
|
def setTime(self, t):
|
|
return zksettime(self, t)
|
|
|
|
def getTime(self):
|
|
return zkgettime(self)
|
|
|