Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
x393_sata
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
x393_sata
Commits
f0ae0474
Commit
f0ae0474
authored
Nov 08, 2016
by
Mikhail Karpenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make 'state' command show current state
parent
6ca736b9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
234 additions
and
15 deletions
+234
-15
x393_vsc330x.php
py393sata/x393_vsc330x.php
+234
-15
No files found.
py393sata/x393_vsc330x.php
View file @
f0ae0474
...
@@ -19,8 +19,8 @@
...
@@ -19,8 +19,8 @@
*! along with this program. If not, see <http://www.gnu.org/licenses/>.
*! along with this program. If not, see <http://www.gnu.org/licenses/>.
*! -----------------------------------------------------------------------------**
*! -----------------------------------------------------------------------------**
*/
*/
require
'i2c.inc'
;
//
require 'i2c.inc';
include
'show_source.inc'
;
//
include 'show_source.inc';
$debug
=
false
;
$debug
=
false
;
$BUS
=
1
;
// 1 - 10369, 0 - 10359 (sensor)
$BUS
=
1
;
// 1 - 10369, 0 - 10359 (sensor)
...
@@ -80,20 +80,51 @@ $i2c_SoftwareReset= 0x7a;
...
@@ -80,20 +80,51 @@ $i2c_SoftwareReset= 0x7a;
$i2c_SoftwareResetData
=
0x10
;
// to reset, 0 - normal
$i2c_SoftwareResetData
=
0x10
;
// to reset, 0 - normal
$i2c_CurrentPage
=
0x7f
;
$i2c_CurrentPage
=
0x7f
;
$vsc_sysfs_dir
=
'/sys/devices/soc0/amba@0/e0004000.ps7-i2c/i2c-0/0-0001'
;
$connections
=
array
();
// pairs, first index< second
$connections
=
array
();
// pairs, first index< second
// $channels=array(
// array('in'=>10, 'out'=> 3, 'name'=>'host1', 'connector'=> 1),
// array('in'=> 3, 'out'=>10, 'name'=>'host2', 'connector'=> 2),
// array('in'=> 0, 'out'=> 5, 'name'=>'host3', 'connector'=> 3),
// array('in'=> 4, 'out'=> 4, 'name'=>'host4', 'connector'=> 4),
// array('in'=> 9, 'out'=> 0, 'name'=>'host5', 'connector'=> 5),
// array('in'=> 7, 'out'=> 9, 'name'=>'host6', 'connector'=> 6),
// array('in'=>11, 'out'=> 1, 'name'=>'ssd1', 'connector'=> 7),
// array('in'=> 8, 'out'=> 6, 'name'=>'ssd2', 'connector'=> 8),
// array('in'=> 5, 'out'=>11, 'name'=>'ssd3', 'connector'=> 9),
// array('in'=> 2, 'out'=> 2, 'name'=>'ssd4', 'connector'=>10),
// array('in'=> 1, 'out'=> 8, 'name'=>'ssd5', 'connector'=>11));
$channels
=
array
(
$channels
=
array
(
array
(
'in'
=>
10
,
'out'
=>
3
,
'name'
=>
'host1'
,
'connector'
=>
1
),
array
(
'in'
=>
12
,
'out'
=>
8
,
'name'
=>
'A'
,
'connector'
=>
1
),
array
(
'in'
=>
3
,
'out'
=>
10
,
'name'
=>
'host2'
,
'connector'
=>
2
),
array
(
'in'
=>
13
,
'out'
=>
9
,
'name'
=>
'B'
,
'connector'
=>
2
),
array
(
'in'
=>
0
,
'out'
=>
5
,
'name'
=>
'host3'
,
'connector'
=>
3
),
array
(
'in'
=>
14
,
'out'
=>
10
,
'name'
=>
'C'
,
'connector'
=>
3
),
array
(
'in'
=>
4
,
'out'
=>
4
,
'name'
=>
'host4'
,
'connector'
=>
4
),
array
(
'in'
=>
15
,
'out'
=>
11
,
'name'
=>
'D'
,
'connector'
=>
4
),
array
(
'in'
=>
9
,
'out'
=>
0
,
'name'
=>
'host5'
,
'connector'
=>
5
),
array
(
'in'
=>
8
,
'out'
=>
12
,
'name'
=>
'E'
,
'connector'
=>
5
),
array
(
'in'
=>
7
,
'out'
=>
9
,
'name'
=>
'host6'
,
'connector'
=>
6
),
array
(
'in'
=>
9
,
'out'
=>
13
,
'name'
=>
'F'
,
'connector'
=>
6
),
array
(
'in'
=>
11
,
'out'
=>
1
,
'name'
=>
'ssd1'
,
'connector'
=>
7
),
array
(
'in'
=>
10
,
'out'
=>
14
,
'name'
=>
'G'
,
'connector'
=>
7
),
array
(
'in'
=>
8
,
'out'
=>
6
,
'name'
=>
'ssd2'
,
'connector'
=>
8
),
array
(
'in'
=>
11
,
'out'
=>
15
,
'name'
=>
'H'
,
'connector'
=>
8
));
array
(
'in'
=>
5
,
'out'
=>
11
,
'name'
=>
'ssd3'
,
'connector'
=>
9
),
array
(
'in'
=>
2
,
'out'
=>
2
,
'name'
=>
'ssd4'
,
'connector'
=>
10
),
/** Paths to parameters in sysfs */
array
(
'in'
=>
1
,
'out'
=>
8
,
'name'
=>
'ssd5'
,
'connector'
=>
11
));
$param_paths
=
array
(
//echo "<pre>\n";
'input_ISE_short'
=>
$vsc_sysfs_dir
.
'/input_ISE_short/'
,
'input_ISE_medium'
=>
$vsc_sysfs_dir
.
'/input_ISE_medium/'
,
'input_ISE_long'
=>
$vsc_sysfs_dir
.
'/input_ISE_long/'
,
'input_terminate'
=>
$vsc_sysfs_dir
.
'/input_terminate_high/'
,
'input_invert'
=>
$vsc_sysfs_dir
.
'/input_state_invert/'
,
'input_LOS'
=>
$vsc_sysfs_dir
.
'/input_LOS_threshold/'
,
'input_off'
=>
$vsc_sysfs_dir
.
'/input_state_off/'
,
'output_PRE_long_decay'
=>
$vsc_sysfs_dir
.
'/output_PRE_long_decay/'
,
'output_PRE_long_level'
=>
$vsc_sysfs_dir
.
'/output_PRE_long_level/'
,
'output_PRE_short_decay'
=>
$vsc_sysfs_dir
.
'/output_PRE_short_decay/'
,
'output_PRE_short_level'
=>
$vsc_sysfs_dir
.
'/output_PRE_short_level/'
,
'output_level'
=>
$vsc_sysfs_dir
.
'/output_level/'
,
'output_mode'
=>
$vsc_sysfs_dir
.
'/output_mode/'
,
'forward_OOB'
=>
$vsc_sysfs_dir
.
'/forward_OOB/'
,
'status'
=>
$vsc_sysfs_dir
.
'/status/'
,
'connections'
=>
$vsc_sysfs_dir
.
'/connections/'
);
$numHosts
=
6
;
$numHosts
=
6
;
if
(
count
(
$_GET
)
==
0
){
if
(
count
(
$_GET
)
==
0
){
showUsage
();
showUsage
();
...
@@ -572,8 +603,152 @@ function showUsage(){
...
@@ -572,8 +603,152 @@ function showUsage(){
EOT;
EOT;
}
}
/** Read the current state of the switch and place data to global variables */
function
readCurrentState
()
{
global
$debug
,
$channels
,
$param_paths
;
global
$activeInputs
,
$activeOutputs
;
global
$port_ise
,
$port_input_state
,
$port_los
,
$port_pre_long
,
$port_pre_short
,
$port_out_level
;
global
$port_out_state
,
$port_channel_status
,
$port_channel_input
;
// read ISE
if
(
$debug
)
echo
"<!-- read ISE -->
\n
"
;
$ise_short
=
read_vals
(
$param_paths
[
'input_ISE_short'
]
.
port_fn
());
$ise_medium
=
read_vals
(
$param_paths
[
'input_ISE_medium'
]
.
port_fn
());
$ise_long
=
read_vals
(
$param_paths
[
'input_ISE_long'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"short: "
.
$ise_short
[
$index
]
.
", "
.
"medium: "
.
$ise_medium
[
$index
]
.
", "
.
"long: "
.
$ise_long
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'in'
);
$port_ise
[
$port_index
]
=
array
(
'short'
=>
$ise_short
[
$index
],
'medium'
=>
$ise_medium
[
$index
],
'long'
=>
$ise_long
[
$index
]);
}
// read InputState
if
(
$debug
)
echo
"<!-- read InputState -->
\n
"
;
$port_termination
=
read_vals
(
$param_paths
[
'input_terminate'
]
.
port_fn
());
$port_invertion
=
read_vals
(
$param_paths
[
'input_invert'
]
.
port_fn
());
$input_off
=
read_vals
(
$param_paths
[
'input_off'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"off: "
.
$input_off
[
$index
]
.
", "
.
"terminate: "
.
$port_termination
[
$index
]
.
", "
.
"invert: "
.
$port_invertion
[
$index
]
.
" -->
\n
"
;
$activeInputs
[
$index
]
=
$input_off
[
$index
]
==
0
;
$port_index
=
translate_index
(
$index
,
'in'
);
$port_input_state
[
$port_index
]
=
array
(
'terminate'
=>
$port_termination
[
$index
],
'invert'
=>
$port_invertion
[
$index
]);
}
// read LOS
if
(
$debug
)
echo
"<!-- read LOS -->
\n
"
;
$data
=
read_vals
(
$param_paths
[
'input_LOS'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"level: "
.
$data
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'in'
);
$port_los
[
$port_index
]
=
array
(
'level'
=>
$data
[
$index
]);
}
// read pre-emphasis (long)
if
(
$debug
)
echo
"<!-- read pre-emphasis (long) -->
\n
"
;
$data_level
=
read_vals
(
$param_paths
[
'output_PRE_long_level'
]
.
port_fn
());
$data_decay
=
read_vals
(
$param_paths
[
'output_PRE_long_decay'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"level: "
.
$data_level
[
$index
]
.
", "
.
"decay: "
.
$data_decay
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'out'
);
$port_pre_long
[
$port_index
]
=
array
(
'level'
=>
$data_level
[
$index
],
'decay'
=>
$data_decay
[
$index
]);
}
// read pre-emphasis (short)
if
(
$debug
)
echo
"<!-- read pre-emphasis (short) -->
\n
"
;
$data_level
=
read_vals
(
$param_paths
[
'output_PRE_short_level'
]
.
port_fn
());
$data_decay
=
read_vals
(
$param_paths
[
'output_PRE_short_decay'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"level: "
.
$data_level
[
$index
]
.
", "
.
"decay: "
.
$data_decay
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'out'
);
$port_pre_short
[
$port_index
]
=
array
(
'level'
=>
$data_level
[
$index
],
'decay'
=>
$data_decay
[
$index
]);
}
// read output level
if
(
$debug
)
echo
"<!-- read output level -->
\n
"
;
$data
=
read_vals
(
$param_paths
[
'output_level'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"level: "
.
$data
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'out'
);
$port_out_level
[
$port_index
]
=
array
(
'level'
=>
$data
[
$index
]);
}
// read OutputState
if
(
$debug
)
echo
"<!-- read output state -->
\n
"
;
$data_mode
=
read_vals
(
$param_paths
[
'output_mode'
]
.
port_fn
());
$data_oob
=
read_vals
(
$param_paths
[
'forward_OOB'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"mode: "
.
$data_mode
[
$index
]
.
", "
.
"OOB: "
.
$data_oob
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'out'
);
$port_out_state
[
$port_index
]
=
array
(
'mode'
=>
$data_mode
[
$index
],
'oob'
=>
$data_oob
[
$index
]);
}
// read channel status
if
(
$debug
)
echo
"<!-- read channel status -->
\n
"
;
$data
=
read_vals
(
$param_paths
[
'status'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"]"
.
"status: "
.
$data
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'in'
);
$port_channel_status
[
$port_index
]
=
array
(
'los'
=>
$data
[
$index
]);
}
// read connections
if
(
$debug
)
echo
"<!-- read connections -->
\n
"
;
$data
=
read_vals
(
$param_paths
[
'connections'
]
.
port_fn
());
for
(
$index
=
0
;
$index
<
count
(
$channels
);
$index
++
)
{
if
(
$debug
)
echo
"<!-- ["
.
$index
.
"] => "
.
"connection: "
.
$data
[
$index
]
.
" -->
\n
"
;
$port_index
=
translate_index
(
$index
,
'out'
);
$val
=
((
$data
[
$index
]
&
0x10
)
==
0
)
?
(
$data
[
$index
]
&
0x0f
)
:
-
1
;
$port_channel_input
[
$port_index
]
=
array
(
'input'
=>
$val
);
$activeOutputs
[
$index
]
=
(
$data
[
$index
]
&
0x10
)
==
0
;
}
}
function
readCurrentState
(){
function
readCurrentState
_old
(){
global
$debug
,
$i2c_InterfaceMode
,
$i2c_InterfaceModeData
,
$SA
;
global
$debug
,
$i2c_InterfaceMode
,
$i2c_InterfaceModeData
,
$SA
;
global
$i2c_CurrentPage
,
$activeInputs
,
$activeOutputs
;
global
$i2c_CurrentPage
,
$activeInputs
,
$activeOutputs
;
global
$port_ise
,
$port_input_state
,
$port_los
,
$port_pre_long
,
$port_pre_short
,
$port_out_level
;
global
$port_ise
,
$port_input_state
,
$port_los
,
$port_pre_long
,
$port_pre_short
,
$port_out_level
;
...
@@ -1092,5 +1267,49 @@ function exitError($text){
...
@@ -1092,5 +1267,49 @@ function exitError($text){
exit
(
1
);
exit
(
1
);
}
}
/** Create port file name from port number */
function
port_fn
(
$port_num
=
-
1
)
{
if
(
$port_num
==
-
1
)
return
"all"
;
else
return
printf
(
"port_%02d"
,
$port_num
);
}
/** Read one string from sysfs file, split it and return an array of values */
function
read_vals
(
$file_name
)
{
$substr
=
array
();
$f
=
fopen
(
$file_name
,
'r'
);
if
(
$f
!==
false
)
{
if
((
$data
=
fgets
(
$f
))
!==
false
)
{
$data
=
str_replace
(
"
\n
"
,
""
,
$data
);
$substr
=
preg_split
(
"/ +/"
,
$data
);
}
fclose
(
$f
);
}
return
$substr
;
}
/** Find port index in the channels list by zero based index given */
function
translate_index
(
$index
,
$dir
)
{
global
$channels
;
$port_index
=
-
1
;
$offset
=
8
;
// VSC3304 port numbering starts from 08, the offset is used to minimize legacy code modifications
$ret
=
-
1
;
for
(
$i
=
0
;
$i
<
count
(
$channels
);
$i
++
)
{
if
(
$channels
[
$i
][
$dir
]
==
(
$index
+
$offset
))
$port_index
=
$i
;
}
if
(
$port_index
!=
-
1
)
{
$ret
=
$channels
[
$port_index
][
$dir
];
}
return
$ret
;
}
?>
?>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment