-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspcm_tools.py
54 lines (46 loc) · 1.85 KB
/
spcm_tools.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from ctypes import *
# load registers for easier access
from py_header.regs import *
#
# **************************************************************************
# szTypeToName: doing name translation
# **************************************************************************
#
def szTypeToName (lCardType):
sName = ''
lVersion = (lCardType & TYP_VERSIONMASK)
if (lCardType & TYP_SERIESMASK) == TYP_M2ISERIES:
sName = 'M2i.%04x'%lVersion
elif (lCardType & TYP_SERIESMASK) == TYP_M2IEXPSERIES:
sName = 'M2i.%04x-Exp'%lVersion
elif (lCardType & TYP_SERIESMASK) == TYP_M3ISERIES:
sName = 'M3i.%04x'%lVersion
elif (lCardType & TYP_SERIESMASK) == TYP_M3IEXPSERIES:
sName = 'M3i.%04x-Exp'%lVersion
elif (lCardType & TYP_SERIESMASK) == TYP_M4IEXPSERIES:
sName = 'M4i.%04x-x8'%lVersion
elif (lCardType & TYP_SERIESMASK) == TYP_M4XEXPSERIES:
sName = 'M4x.%04x-x4'%lVersion
elif (lCardType & TYP_SERIESMASK) == TYP_M2PEXPSERIES:
sName = 'M2p.%04x-x4'%lVersion
else:
sName = 'unknown type'
return sName
#
# **************************************************************************
# pvAllocMemPageAligned: creates a buffer for DMA that's page-aligned
# **************************************************************************
#
def pvAllocMemPageAligned (qwBytes):
dwAlignment = 4096
dwMask = dwAlignment - 1
# allocate non-aligned, slightly larger buffer
qwRequiredNonAlignedBytes = qwBytes * sizeof (c_char) + dwMask
pvNonAlignedBuf = (c_char * qwRequiredNonAlignedBytes)()
# get offset of next aligned address in non-aligned buffer
misalignment = addressof (pvNonAlignedBuf) & dwMask
if misalignment:
dwOffset = dwAlignment - misalignment
else:
dwOffset = 0
return (c_char * qwBytes).from_buffer (pvNonAlignedBuf, dwOffset)