Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
PyPCC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LOFAR2.0
PyPCC
Commits
77fa71da
Commit
77fa71da
authored
4 years ago
by
Paulus Kruger
Browse files
Options
Downloads
Patches
Plain Diff
APSPU added
parent
b37ab722
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
config/APSPUTL.yaml
+125
-0
125 additions, 0 deletions
config/APSPUTL.yaml
i2cserv/i2c_array.py
+0
-6
0 additions, 6 deletions
i2cserv/i2c_array.py
i2cserv/i2c_dev.py
+27
-12
27 additions, 12 deletions
i2cserv/i2c_dev.py
opcuaserv/smbus_float.py
+2
-0
2 additions, 0 deletions
opcuaserv/smbus_float.py
with
154 additions
and
18 deletions
config/APSPUTL.yaml
0 → 100644
+
125
−
0
View file @
77fa71da
version
:
"
1.0"
description
:
"
1234"
drivers
:
-
name
:
I2C
type
:
i2c_smbus
parameters
:
[
5
]
#I2C port number
-
name
:
I2C_PU
type
:
i2c_dev
#I2C devices
parent
:
I2C
status
:
APSPU_I2C_STATUS
#This is the I2C devices in the RCU
device_registers
:
-
name
:
ROM
address
:
0x50
driver
:
I2C_PU
registers
:
-
name
:
ID
description
:
Random
address
:
0xfc
-
name
:
Version
description
:
Set in production
address
:
0
-
name
:
MAX
description
:
MAX6620 fan speed controller
address
:
0x29
driver
:
I2C_PU
registers
:
-
name
:
GLOBAL
address
:
0x00
-
name
:
TACH1
address
:
0x10
-
name
:
TACH2
address
:
0x12
-
name
:
TACH3
address
:
0x14
variables
:
-
name
:
APSPU_I2C_STATUS
driver
:
I2C_PU
rw
:
ro
#server RW variable, not linked to IO
dtype
:
uint8
-
name
:
APSPUTL_translator_busy
description
:
False when idle
rw
:
ro
#server variable, not linked to IO
dtype
:
boolean
-
name
:
APSPU_ID
description
:
Unique PCB ID
driver
:
I2C_PU
devreg
:
ROM.ID
width
:
32
rw
:
ro
dtype
:
uint32
-
name
:
APSPU_version
description
:
Version number
driver
:
I2C_PU
devreg
:
ROM.Version
width
:
80
#10 characters
rw
:
ro
dtype
:
string
-
name
:
[
APSPU_LBA_VOUT
,
APSPU_RCU2A_VOUT
,
APSPU_RCU2D_VOUT
]
driver
:
I2C_PU
devreg
:
[
0x3C.0x8B
,
0x3D.0x8B
,
0x3E.0x8B
]
width
:
16
rw
:
ro
dtype
:
double
endian
:
"
<"
scale
:
4.8828e-4
#2^-11
monitor
:
true
-
name
:
[
APSPU_LBA_IOUT
,
APSPU_RCU2A_IOUT
,
APSPU_RCU2D_IOUT
]
driver
:
I2C_PU
devreg
:
[
0x3C.0x8C
,
0x3D.0x8C
,
0x3E.0x8C
]
width
:
16
rw
:
ro
dtype
:
double
scale
:
smbus_2bytes_to_float
monitor
:
true
-
name
:
[
APSPU_LBA_TEMP
,
APSPU_RCU2A_TEMP
,
APSPU_RCU2D_TEMP
]
driver
:
I2C_PU
devreg
:
[
0x3C.0x8D
,
0x3D.0x8D
,
0x3E.0x8D
]
width
:
16
rw
:
ro
dtype
:
double
scale
:
smbus_2bytes_to_float
monitor
:
true
-
name
:
[
APSPU_FAN_period1
,
APSPU_FAN_period2
,
APSPU_FAN_period3
]
driver
:
I2C_PU
devreg
:
[
MAX.TACH1
,
MAX.TACH2
,
MAX.TACH3
]
bitoffset
:
4
width
:
12
rw
:
ro
dtype
:
double
scale
:
7.629395e-6
#FAN_TACHS/TACH_COUNT_FREQ/TACH_PERIODS = 1/8192/16
monitor
:
true
methods
:
-
name
:
APSPUTL_Init
#Called after startup to load. Should have all stored registers
driver
:
I2C_PU
debug
:
True
instructions
:
-
APSPU_ID
:
Update
-
APSPU_version
:
Update
-
name
:
APSPU_FanOn
driver
:
I2C_PU
instructions
:
-
MAX.GLOBAL
:
0x02;
#Run monitor
-
MAX.0x02
:
0x88;
-
MAX.0x06
:
0x80;
# int((math.log(TACH_PERIODS{16}) / math.log(2))) << 5,
-
MAX.0x03
:
0x88;
-
MAX.0x07
:
0x80;
-
MAX.0x04
:
0x88;
-
MAX.0x08
:
0x80;
This diff is collapsed.
Click to expand it.
i2cserv/i2c_array.py
+
0
−
6
View file @
77fa71da
...
...
@@ -5,12 +5,6 @@ from queuetypes import *
from
.hwdev
import
hwdev
from
.i2c_dev
import
*
def
GetSteps
(
V1
):
if
isinstance
(
V1
[
'
devreg
'
],
list
):
Step
=
len
(
V1
[
'
devreg
'
])
else
:
Step
=
1
;
#V1.nVars
Step2
=
V1
.
get
(
'
dim
'
,
1
)
*
((
V1
.
get
(
'
width
'
,
8
)
+
7
)
//
8
)
//
Step
#int(V1.size/V1.nVars)
logging
.
debug
(
str
((
"
GetStep
"
,
Step
,
Step2
)));
return
Step
,
Step2
class
i2c_array
(
i2c_dev
):
def
__init__
(
self
,
config
):
...
...
This diff is collapsed.
Click to expand it.
i2cserv/i2c_dev.py
+
27
−
12
View file @
77fa71da
...
...
@@ -81,6 +81,14 @@ def list_different(A,B):
if
not
(
m
==
A
[
i
]):
return
True
return
False
def
GetSteps
(
V1
):
if
isinstance
(
V1
[
'
devreg
'
],
list
):
Step
=
len
(
V1
[
'
devreg
'
])
else
:
Step
=
1
;
#V1.nVars
Step2
=
V1
.
get
(
'
dim
'
,
1
)
*
((
V1
.
get
(
'
width
'
,
8
)
+
7
)
//
8
)
//
Step
#int(V1.size/V1.nVars)
logging
.
debug
(
str
((
"
GetStep
"
,
Step
,
Step2
)));
return
Step
,
Step2
class
i2c_dev
(
hwdev
):
def
__init__
(
self
,
config
):
hwdev
.
__init__
(
self
,
config
);
...
...
@@ -111,6 +119,7 @@ class i2c_dev(hwdev):
return
Data
def
OPCUAReadVariable
(
self
,
varid
,
var1
,
mask
):
if
len
(
mask
)
==
0
:
mask
=
[
True
];
logging
.
info
(
str
((
"
Read Var
"
,
var1
[
'
name
'
],
mask
)))
if
not
(
var1
.
get
(
'
devreg
'
)):
return
[]
#data=self.GetVarValueAll(var1)
...
...
@@ -132,9 +141,13 @@ class i2c_dev(hwdev):
return
self
.
conf
[
'
parentcls
'
].
i2csetget
(
*
args
,
**
kwargs
)
def
SetGetVarValueMask
(
self
,
var1
,
data
,
mask
):
Step
=
(
len
(
var1
[
'
devreg
'
])
if
isinstance
(
var1
[
'
devreg
'
],
list
)
else
1
)
value1
=
[
0
]
*
Step
if
not
(
len
(
data
)
==
Step
):
Step
,
Step2
=
GetSteps
(
var1
);
value1
=
[
0
]
*
Step
*
Step2
;
# Step=(len(var1['devreg']) if isinstance(var1['devreg'],list) else 1)
# value1=[0]*Step;
if
not
(
len
(
data
)
==
Step
*
Step2
):
# if not(len(data)==Step):
print
(
"
Check data length!
"
);
return
;
if
(
len
(
mask
)
==
1
):
...
...
@@ -149,8 +162,8 @@ class i2c_dev(hwdev):
if
not
(
self
.
I2Cmask
[
0
]
==
0
):
mask
[
Vari
]
=
False
;
continue
;
i0
=
(
Vari
)
*
Step
i1
=
(
Vari
+
1
)
*
Step
i0
=
(
Vari
)
*
Step
2
i1
=
(
Vari
+
1
)
*
Step
2
devreg
=
var1
[
'
devreg
'
][
Vari
];
width
=
var1
.
get
(
'
width
'
,
8
)
bitoffset
=
GetField
(
var1
,
'
bitoffset
'
,
Vari
,
0
)
...
...
@@ -170,8 +183,10 @@ class i2c_dev(hwdev):
def
GetVarValueMask
(
self
,
var1
,
mask
):
Step
=
(
len
(
var1
[
'
devreg
'
])
if
isinstance
(
var1
[
'
devreg
'
],
list
)
else
1
)
value1
=
[
0
]
*
Step
;
Step
,
Step2
=
GetSteps
(
var1
);
value1
=
[
0
]
*
Step
*
Step2
;
# Step=(len(var1['devreg']) if isinstance(var1['devreg'],list) else 1)
# value1=[0]*Step;
if
(
len
(
mask
)
==
1
):
mask
=
[
mask
[
0
]
for
x
in
range
(
Step
)]
if
(
len
(
mask
)
==
0
):
...
...
@@ -184,8 +199,8 @@ class i2c_dev(hwdev):
if
not
(
self
.
I2Cmask
[
0
]
==
0
):
mask
[
Vari
]
=
False
;
continue
;
i0
=
(
Vari
)
*
Step
i1
=
(
Vari
+
1
)
*
Step
i0
=
(
Vari
)
*
Step
2
i1
=
(
Vari
+
1
)
*
Step
2
devreg
=
var1
[
'
devreg
'
][
Vari
];
width
=
var1
.
get
(
'
width
'
,
8
)
bitoffset
=
GetField
(
var1
,
'
bitoffset
'
,
Vari
,
0
)
...
...
@@ -234,7 +249,7 @@ class i2c_dev(hwdev):
if
devreg
[
'
register_W
'
]
==-
1
:
return
True
;
#We can not set it, only read it e.g. temperature
logging
.
debug
(
str
((
"
I2C Set
"
,
devreg
[
'
addr
'
],
value
)))
#self.parentcls.SetChannel(1<<RCU_Switch[RCUi]);
if
devreg
[
'
store
'
]
:
if
devreg
.
get
(
'
store
'
)
:
previous
=
self
.
getstoreval
(
devreg
);
for
x
in
range
(
len
(
value
)):
value
[
x
]
=
ApplyMask
(
value
[
x
],
width
,
bitoffset
,
previous
);
...
...
@@ -244,14 +259,14 @@ class i2c_dev(hwdev):
return
devreg
[
'
drivercls
'
].
i2csetget
(
devreg
[
'
addr
'
],
value
,
reg
=
devreg
[
'
register_W
'
])
def
GetVarValue
(
self
,
devreg
,
width
,
bitoffset
,
value
):
logging
.
debug
(
str
((
"
RCU1
Get
"
,
devreg
[
'
addr
'
],
value
)))
logging
.
debug
(
str
((
"
i2c_dev
Get
"
,
devreg
[
'
addr
'
],
value
)))
callback
=
devreg
[
'
drivercls
'
].
i2csetget
;
value2
=
value
reg
=
devreg
[
'
register_R
'
]
if
not
(
callback
(
devreg
[
'
addr
'
],
value2
,
reg
=
reg
,
read
=
1
)):
return
False
;
if
value2
[
0
]
is
None
:
return
False
value
[:]
=
value2
[:];
if
devreg
[
'
store
'
]
:
if
devreg
.
get
(
'
store
'
)
:
devreg
[
'
storeval
'
]
=
value
[
0
];
l1
=
int
(
np
.
floor
((
width
+
bitoffset
+
7
)
/
8
))
#print(value[0],width,bitoffset,l1)
...
...
This diff is collapsed.
Click to expand it.
opcuaserv/smbus_float.py
+
2
−
0
View file @
77fa71da
def
smbus_2bytes_to_float
(
data
):
expo
=
((
data
&
0xf8
)
>>
3
)
if
expo
==
1
:
expo
=
-
7
if
expo
>
2
**
4
:
expo
=
expo
-
2
**
5
mantisse
=
((
data
&
0x7
)
<<
8
)
+
((
data
&
0xff00
)
>>
8
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment