from ctypes import *
class API:
api = None
def __init__(self):
# Load API module
try:
# 64bit API
self.api = windll.LoadLibrary("c:\\matrix\\api\\dll\\matrix64.dll")
# 32bit API
#self.api = windll.LoadLibrary("c:\\matrix\\api\\dll\\matrix32.dll")
except Exception as e:
print(e)
self.api = None
return
# define argument types for Matrix API functions from matrix64.dll
self.api.Dongle_Count.argtypes = [c_short]
self.api.Dongle_MemSize.argtypes = [c_short, c_short]
self.api.Dongle_Model.argtypes = [c_short, c_short]
self.api.Dongle_Version.argtypes = [c_short, c_short]
self.api.Dongle_ReadData.argtypes = [c_int, POINTER(c_int), c_short, c_short, c_short]
self.api.Dongle_ReadDataEx.argtypes = [c_int, POINTER(c_int), c_short, c_short, c_short, c_short]
self.api.Dongle_WriteData.argtypes = [c_int, POINTER(c_int), c_short, c_short, c_short]
self.api.Dongle_WriteDataEx.argtypes = [c_int, POINTER(c_int), c_short, c_short, c_short, c_short]
self.api.Dongle_ReadSerNr.argtypes = [c_int, c_short, c_short]
self.api.Dongle_WriteKey.argtypes = [c_int, POINTER(c_int), c_short, c_short]
self.api.Dongle_GetKeyFlag.argtypes = [c_int, c_short, c_short]
self.api.Dongle_EncryptData.argtypes = [c_int, POINTER(c_int), c_short, c_short]
self.api.Dongle_DecryptData.argtypes = [c_int, POINTER(c_int), c_short, c_short]
self.api.Dongle_SetDriverFlag.argtypes = [c_int, c_short, c_short, c_short]
self.api.Dongle_GetDriverFlag.argtypes = [c_int, c_short, c_short]
self.api.SetConfig_MatrixNet.argtypes = [c_short, c_char_p]
self.api.GetConfig_MatrixNet.argtypes = [c_short]
self.api.LogIn_MatrixNet.argtypes = [c_int, c_short, c_short]
self.api.LogOut_MatrixNet.argtypes = [c_int, c_short, c_short]
# Initialize API
self.api.Init_MatrixAPI()
def __del__(self):
if self.api is None:
return -1
return self.api.Release_MatrixAPI()
def count(self):
if self.api is None:
return -1
return self.api.Dongle_Count(85)
def mem_size(self, port_no):
if self.api is None:
return -1
return self.api.Dongle_MemSize(port_no, 85)
def model(self, port_no):
if self.api is None:
return -1
return self.api.Dongle_Model(port_no, 85)
def version(self, port_no):
if self.api is None:
return -1
return self.api.Dongle_Version(port_no, 85)
def api_version(self):
if self.api is None:
return -1
return self.api.GetVersionAPI()
def drv_version(self):
if self.api is None:
return -1
return self.api.GetVersionDRV()
def ser_no(self, user_code, port_no):
if self.api is None:
return -1
return self.api.Dongle_ReadSerNr(user_code, port_no, 85)
def read_data(self, user_code, count, port_no):
if self.api is None:
return -1, []
fields = [0] * count
data = (c_int * count)(*fields)
ret = self.api.Dongle_ReadData(user_code, data, count, port_no, 85)
if ret == count:
return ret, list(data)
return ret, []
def read_data_ex(self, user_code, pos, count, port_no):
if self.api is None:
return -1, []
fields = [0] * count
data = (c_int * count)(*fields)
ret = self.api.Dongle_ReadDataEx(user_code, data, pos, count, port_no, 85)
if ret == count:
return ret, list(data)
return ret, []
def write_data(self, user_code, fields, port_no):
if self.api is None:
return -1
if not isinstance(fields, list):
return -9
data = (c_int * len(fields))(*fields)
return self.api.Dongle_WriteData(user_code, data, len(fields), port_no, 85)
def write_data_ex(self, user_code, fields, pos, port_no):
if self.api is None:
return -1
if not isinstance(fields, list):
return -9
data = (c_int * len(fields))(*fields)
return self.api.Dongle_WriteDataEx(user_code, data, pos, len(fields), port_no, 85)
def write_key(self, user_code, keys, port_no):
if self.api is None:
return -1
if not isinstance(keys, list) or len(keys) != 4:
return -9
enc_key = (c_int * len(keys))(*keys)
return self.api.Dongle_WriteKey(user_code, enc_key, port_no, 85)
def get_key_flag(self, user_code, port_no):
return self.api.Dongle_GetKeyFlag(user_code, port_no, 85)
def encrypt_data(self, user_code, data, port_no):
if self.api is None:
return -1, []
if not isinstance(data, list) or len(data) != 2:
return -1, []
plain = (c_int * len(data))(*data)
ret = self.api.Dongle_EncryptData(user_code, plain, port_no, 85)
if ret > 0:
return ret, list(plain)
return ret, []
def decrypt_data(self, user_code, data, port_no):
if self.api is None:
return -1, []
if not isinstance(data, list) or len(data) != 2:
return -1, []
enc_data = (c_int * len(data))(*data)
ret = self.api.Dongle_DecryptData(user_code, enc_data, port_no, 85)
if ret > 0:
return ret, list(enc_data)
return ret, []
def set_driver_flag(self, user_code, flag, port_no):
if self.api is None:
return -1
return self.api.Dongle_SetDriverFlag(user_code, flag, port_no, 85)
def get_driver_flag(self, user_code, port_no):
if self.api is None:
return -1
return self.api.Dongle_GetDriverFlag(user_code, port_no, 85)
def setconfig_matrixnet(self, access, server_file):
if self.api is None:
return -1
file = bytes(server_file, 'utf-8')
return self.api.SetConfig_MatrixNet(access, file)
def getconfig_matrixnet(self, category):
if self.api is None:
return -1
return self.api.GetConfig_MatrixNet(category)
def login(self, user_code, app_slot, port_no):
if self.api is None:
return -1
return self.api.LogIn_MatrixNet( user_code, app_slot, port_no)
def logout(self, user_code, app_slot, port_no):
if self.api is None:
return -1
return self.api.LogOut_MatrixNet( user_code, app_slot, port_no)