Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
elphel-web-393
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Elphel
elphel-web-393
Commits
87d4f901
Commit
87d4f901
authored
Aug 14, 2016
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modifying to NC393
parent
0d78d42e
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
62 deletions
+23
-62
framepars.php
src/php_top/framepars.php
+0
-42
parsedit.php
src/php_top/parsedit.php
+23
-20
No files found.
src/php_top/framepars.php
View file @
87d4f901
...
@@ -285,48 +285,6 @@ CAPTION;
...
@@ -285,48 +285,6 @@ CAPTION;
$xml
->
addChild
(
'LSEEK_SENSORPROC'
,
fseek
(
$framepars_file
,
ELPHEL_LSEEK_SENSORPROC
,
SEEK_END
));
$xml
->
addChild
(
'LSEEK_SENSORPROC'
,
fseek
(
$framepars_file
,
ELPHEL_LSEEK_SENSORPROC
,
SEEK_END
));
$frame
=
0
;
$frame
=
0
;
// gets half-frame
// gets half-frame
/*
elphel_set_P_value(ELPHEL_BITS, 8, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_QUALITY, 80, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR, 1, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_BLUE,200, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_RED, 200, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_SENSOR_RUN, 2, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
*/
/*
//works
elphel_set_P_value(ELPHEL_BITS, 8, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_QUALITY, 80, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR, 1, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_BLUE,200, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_RED, 200, $frame+3, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_SENSOR_RUN, 2, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
*/
/*
wrong
elphel_set_P_value(ELPHEL_BITS, 8, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_QUALITY, 80, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR, 1, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_BLUE,200, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_RED, 200, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_SENSOR_RUN, 2, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_BITS, 8, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_QUALITY, 80, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR, 1, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_BLUE,200, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_RED, 200, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_SENSOR_RUN, 2, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
*/
/*
elphel_set_P_value(ELPHEL_BITS, 8, $frame+4, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_QUALITY, 80, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR, 1, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_BLUE,200, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_COLOR_SATURATION_RED, 200, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
elphel_set_P_value(ELPHEL_SENSOR_RUN, 2, $frame+5, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
*/
elphel_set_P_value
(
ELPHEL_MAXAHEAD
,
2
,
0
,
8
);
/// When servicing interrupts, try programming up to 2 frames ahead of due time)
elphel_set_P_value
(
ELPHEL_MAXAHEAD
,
2
,
0
,
8
);
/// When servicing interrupts, try programming up to 2 frames ahead of due time)
...
...
src/php_top/parsedit.php
View file @
87d4f901
...
@@ -119,6 +119,9 @@
...
@@ -119,6 +119,9 @@
//main()
//main()
///globals
///globals
$PARS_FRAMES
=
16
;
$PARS_FRAMES_MASK
=
$PARS_FRAMES
-
1
;
$sensor_port
=
0
;
/// TODO: NC393 - add sensor port control, initially will use $sensor_port=0 for all php functions that require it
$autocampars
=
'/usr/html/autocampars.php'
;
$autocampars
=
'/usr/html/autocampars.php'
;
$descriptions
=
getParDescriptions
(
$autocampars
);
$descriptions
=
getParDescriptions
(
$autocampars
);
$default_ahead
=
3
;
$default_ahead
=
3
;
...
@@ -186,7 +189,7 @@
...
@@ -186,7 +189,7 @@
}
else
{
// return XML page with specified parameters values
}
else
{
// return XML page with specified parameters values
addGammas
(
$todo
);
addGammas
(
$todo
);
$names
=
array_merge
(
extractNames
(
$global_params
),
extractNames
(
$frame_params
));
$names
=
array_merge
(
extractNames
(
$global_params
),
extractNames
(
$frame_params
));
$currentParameters
=
elphel_get_P_arr
(
$names
);
$currentParameters
=
elphel_get_P_arr
(
$
sensor_port
,
$
names
);
applyPost
(
$todo
,
true
);
// no final wait
applyPost
(
$todo
,
true
);
// no final wait
$msg
=
"<?xml version=
\"
1.0
\"
?>
\n
<parameters>
\n
"
;
$msg
=
"<?xml version=
\"
1.0
\"
?>
\n
<parameters>
\n
"
;
foreach
(
$currentParameters
as
$key
=>
$value
)
{
foreach
(
$currentParameters
as
$key
=>
$value
)
{
...
@@ -568,7 +571,7 @@ echo "</pre>";
...
@@ -568,7 +571,7 @@ echo "</pre>";
function
showLastImages
(
$numImg
,
$imagesPerRow
,
$imgScale
)
{
function
showLastImages
(
$numImg
,
$imagesPerRow
,
$imgScale
)
{
$done
=
decodeTodo
(
$_GET
[
'done'
]);
$done
=
decodeTodo
(
$_GET
[
'done'
]);
// $this_exif=elphel_get_exif_elphel(0);
// $this_exif=elphel_get_exif_elphel(0);
$circbuf_pointers
=
elphel_get_circbuf_pointers
(
1
);
$circbuf_pointers
=
elphel_get_circbuf_pointers
(
$sensor_port
,
1
);
$framesAgo
=
0
;
$framesAgo
=
0
;
//echo "<pre>\n";
//echo "<pre>\n";
end
(
$circbuf_pointers
);
end
(
$circbuf_pointers
);
...
@@ -596,12 +599,12 @@ function showLastImages($numImg,$imagesPerRow,$imgScale) {
...
@@ -596,12 +599,12 @@ function showLastImages($numImg,$imagesPerRow,$imgScale) {
$lastFrameIndex
=
key
(
$circbuf_pointers
);
$lastFrameIndex
=
key
(
$circbuf_pointers
);
for
(
$i
=
0
;
$i
<=
min
((
$numImg
-
1
),
$lastFrameIndex
);
$i
++
)
{
for
(
$i
=
0
;
$i
<=
min
((
$numImg
-
1
),
$lastFrameIndex
);
$i
++
)
{
$meta
[
$i
]
=
array
(
'circbuf_pointer'
=>
$circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'circbuf_pointer'
],
$meta
[
$i
]
=
array
(
'circbuf_pointer'
=>
$circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'circbuf_pointer'
],
'meta'
=>
elphel_get_interframe_meta
(
$circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'circbuf_pointer'
]),
'meta'
=>
elphel_get_interframe_meta
(
$
sensor_port
,
$
circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'circbuf_pointer'
]),
'Exif'
=>
elphel_get_exif_elphel
(
$circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'exif_pointer'
]));
'Exif'
=>
elphel_get_exif_elphel
(
$
sensor_port
,
$
circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'exif_pointer'
]));
$lastFrameNumber
=
$circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'frame'
];
$lastFrameNumber
=
$circbuf_pointers
[
$lastFrameIndex
-
(
$numImg
-
1
)
+
$i
][
'frame'
];
}
}
$running
=
(
elphel_get_P_value
(
ELPHEL_COMPRESSOR_RUN
)
==
ELPHEL_CONST_COMPRESSOR_RUN_CONT
)
&&
$running
=
(
elphel_get_P_value
(
$sensor_port
,
ELPHEL_COMPRESSOR_RUN
)
==
ELPHEL_CONST_COMPRESSOR_RUN_CONT
)
&&
(
elphel_get_P_value
(
ELPHEL_SENSOR_RUN
)
==
ELPHEL_CONST_SENSOR_RUN_CONT
);
(
elphel_get_P_value
(
$sensor_port
,
ELPHEL_SENSOR_RUN
)
==
ELPHEL_CONST_SENSOR_RUN_CONT
);
$page_title
=
sprintf
(
"%s %d images acquired to the circular buffer (circbuf). Acquisition is %s. Last frame is %d"
$page_title
=
sprintf
(
"%s %d images acquired to the circular buffer (circbuf). Acquisition is %s. Last frame is %d"
,
$framesAgo
?
"
$framesAgo
frames (stored) ago"
:
"Latest"
,
$framesAgo
?
"
$framesAgo
frames (stored) ago"
:
"Latest"
,
$numImg
,
$numImg
...
@@ -745,10 +748,10 @@ function applyPost($todo,$noFinalWait=false) {
...
@@ -745,10 +748,10 @@ function applyPost($todo,$noFinalWait=false) {
$waitingEnabled
=
false
;
$waitingEnabled
=
false
;
break
;
break
;
}
}
if
(
elphel_get_frame
(
)
<
8
)
$waitingEnabled
=
false
;
/// or is "==0" enough?
if
(
elphel_get_frame
(
$sensor_port
)
<
8
)
$waitingEnabled
=
false
;
/// or is "==0" enough?
if
(
$waitingEnabled
&&
!
$noFinalWait
)
elphel_skip_frames
(
1
);
// in GET mode, do not skip any frames
if
(
$waitingEnabled
&&
!
$noFinalWait
)
elphel_skip_frames
(
$sensor_port
,
1
);
// in GET mode, do not skip any frames
/// store the current frame number as reference for all actions delays
/// store the current frame number as reference for all actions delays
$frame_zero
=
elphel_get_frame
();
$frame_zero
=
elphel_get_frame
(
$sensor_port
);
$frame_since
=
0
;
$frame_since
=
0
;
$frame_now
=
$frame_zero
;
$frame_now
=
$frame_zero
;
///Iterate through $todo array, programming the parameter changes
///Iterate through $todo array, programming the parameter changes
...
@@ -758,23 +761,23 @@ function applyPost($todo,$noFinalWait=false) {
...
@@ -758,23 +761,23 @@ function applyPost($todo,$noFinalWait=false) {
$frame_now
=
$frame_since
+
$frame_zero
;
$frame_now
=
$frame_since
+
$frame_zero
;
if
(
$waitingEnabled
)
{
if
(
$waitingEnabled
)
{
if
(
$showSeqMode
>
0
)
{
printf
(
"waiting frame %d (0x%x) ... "
,
$frame_now
,
$frame_now
);
ob_flush
();
flush
();}
if
(
$showSeqMode
>
0
)
{
printf
(
"waiting frame %d (0x%x) ... "
,
$frame_now
,
$frame_now
);
ob_flush
();
flush
();}
elphel_wait_frame_abs
(
$frame_now
);
elphel_wait_frame_abs
(
$
sensor_port
,
$
frame_now
);
if
(
$showSeqMode
>
0
)
{
printf
(
"done
\n
"
);
ob_flush
();
flush
();}
if
(
$showSeqMode
>
0
)
{
printf
(
"done
\n
"
);
ob_flush
();
flush
();}
}
}
}
}
elphel_set_P_arr
(
$pgmpars
,
$frame_zero
+
$since
,
ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC
);
/// Are these flags needed?
elphel_set_P_arr
(
$
sensor_port
,
$
pgmpars
,
$frame_zero
+
$since
,
ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC
);
/// Are these flags needed?
}
}
if
(
!
$noFinalWait
)
{
if
(
!
$noFinalWait
)
{
$frame_now
=
$since
+
$frame_zero
+
1
;
/// wait just 1 frame longer that the target of the last command in $todo
$frame_now
=
$since
+
$frame_zero
+
1
;
/// wait just 1 frame longer that the target of the last command in $todo
// echo "since=$since\n"; ob_flush(); flush();
// echo "since=$since\n"; ob_flush(); flush();
if
(
$showSeqMode
>
0
)
{
printf
(
"waiting frame %d (0x%x) ... "
,
$frame_now
,
$frame_now
);
ob_flush
();
flush
();}
if
(
$showSeqMode
>
0
)
{
printf
(
"waiting frame %d (0x%x) ... "
,
$frame_now
,
$frame_now
);
ob_flush
();
flush
();}
if
(
$waitingEnabled
)
{
if
(
$waitingEnabled
)
{
elphel_wait_frame_abs
(
$frame_now
);
elphel_wait_frame_abs
(
$
sensor_port
,
$
frame_now
);
}
else
{
}
else
{
$timeout_step
=
100000
;
/// 0.1 sec
$timeout_step
=
100000
;
/// 0.1 sec
$timeout
=
3000000
;
/// 3.0sec
$timeout
=
3000000
;
/// 3.0sec
for
(
$i
=
0
;
$i
<
$timeout
;
$i
+=
$timeout_step
)
{
for
(
$i
=
0
;
$i
<
$timeout
;
$i
+=
$timeout_step
)
{
if
(
elphel_get_frame
()
>=
$frame_now
)
break
;
if
(
elphel_get_frame
(
$sensor_port
)
>=
$frame_now
)
break
;
usleep
(
$timeout_step
);
usleep
(
$timeout_step
);
}
}
}
}
...
@@ -877,7 +880,7 @@ function addGammas($todo) {
...
@@ -877,7 +880,7 @@ function addGammas($todo) {
$black
=
(
$gamma_black
>>
8
)
&
0xff
;
$black
=
(
$gamma_black
>>
8
)
&
0xff
;
$gamma
=
(
$gamma_black
&
0xff
)
*
0.01
;
$gamma
=
(
$gamma_black
&
0xff
)
*
0.01
;
if
(
$showSeqMode
>
0
)
printf
(
"<pre>Adding gamma table (gamma=%f, black level=%d)
\n
</pre>
\n
"
,
$gamma
,
$black
);
if
(
$showSeqMode
>
0
)
printf
(
"<pre>Adding gamma table (gamma=%f, black level=%d)
\n
</pre>
\n
"
,
$gamma
,
$black
);
elphel_gamma_add
(
$gamma
,
$black
);
elphel_gamma_add
(
$gamma
,
$black
);
// does not need $sensor_port
}
}
}
}
...
@@ -928,7 +931,7 @@ function parseGetNames() {
...
@@ -928,7 +931,7 @@ function parseGetNames() {
/// locate $key among constants, accept numeric values also
/// locate $key among constants, accept numeric values also
$address
=
myval
(
$key
);
$address
=
myval
(
$key
);
if
((
$address
==
0
)
&&
(
strlen
(
$key
)
>
3
))
{
/// suspect constant
if
((
$address
==
0
)
&&
(
strlen
(
$key
)
>
3
))
{
/// suspect constant
$address
=
elphel_parse_P_name
(
$key
);
$address
=
elphel_parse_P_name
(
$key
);
// does not need $sensor_port,
}
}
if
(
$address
==
0
)
{
if
(
$address
==
0
)
{
$xml
=
new
SimpleXMLElement
(
"<?xml version='1.0'?><framepars/>"
);
$xml
=
new
SimpleXMLElement
(
"<?xml version='1.0'?><framepars/>"
);
...
@@ -960,7 +963,7 @@ function parseGetNames() {
...
@@ -960,7 +963,7 @@ function parseGetNames() {
if
(
$isPost
)
{
if
(
$isPost
)
{
$ahead
=
$posted_params
[
$index
][
'delay'
];
$ahead
=
$posted_params
[
$index
][
'delay'
];
}
}
if
(
elphel_is_global_par
(
$address
))
{
if
(
elphel_is_global_par
(
$address
))
{
// does not need $sensor_port,
$global_params
[
$index
++
]
=
array
(
"number"
=>
$address
,
$global_params
[
$index
++
]
=
array
(
"number"
=>
$address
,
"name"
=>
$key
,
"name"
=>
$key
,
...
@@ -994,7 +997,7 @@ function readCurrentParameterValues() {
...
@@ -994,7 +997,7 @@ function readCurrentParameterValues() {
}
}
// echo "<pre>";
// echo "<pre>";
//print_r($pars);
//print_r($pars);
$pars
=
elphel_get_P_arr
(
$pars
);
/// next2 frame/globals
$pars
=
elphel_get_P_arr
(
$
sensor_port
,
$
pars
);
/// next2 frame/globals
//print_r($pars);
//print_r($pars);
foreach
(
$frame_params
as
$key
=>
$par
)
{
foreach
(
$frame_params
as
$key
=>
$par
)
{
$frame_params
[
$key
][
'cur_value'
]
=
$pars
[
$par
[
'name'
]];
$frame_params
[
$key
][
'cur_value'
]
=
$pars
[
$par
[
'name'
]];
...
@@ -1202,7 +1205,7 @@ function printPage($encoded_todo) {
...
@@ -1202,7 +1205,7 @@ function printPage($encoded_todo) {
fclose
(
$fd_circ
);
fclose
(
$fd_circ
);
// echo "circbuf_pointer=$circbuf_pointer";
// echo "circbuf_pointer=$circbuf_pointer";
if
(
$circbuf_pointer
>=
0
)
{
if
(
$circbuf_pointer
>=
0
)
{
$meta
=
elphel_get_interframe_meta
(
$circbuf_pointer
);
$meta
=
elphel_get_interframe_meta
(
$
sensor_port
,
$
circbuf_pointer
);
$width
=
floor
(
$meta
[
'width'
]
*
$embedImageScale
);
$width
=
floor
(
$meta
[
'width'
]
*
$embedImageScale
);
$height
=
floor
(
$meta
[
'height'
]
*
$embedImageScale
);
$height
=
floor
(
$meta
[
'height'
]
*
$embedImageScale
);
//echo "width=$width, height=$height, embedImageScale=$embedImageScale<br />\n";
//echo "width=$width, height=$height, embedImageScale=$embedImageScale<br />\n";
...
@@ -1304,7 +1307,7 @@ function printPage($encoded_todo) {
...
@@ -1304,7 +1307,7 @@ function printPage($encoded_todo) {
function
getDescription
(
$compositeName
,
$descriptions
){
function
getDescription
(
$compositeName
,
$descriptions
){
if
(
array_key_exists
(
$compositeName
,
$descriptions
))
return
$descriptions
[
$compositeName
];
if
(
array_key_exists
(
$compositeName
,
$descriptions
))
return
$descriptions
[
$compositeName
];
/// try to find a parent name
/// try to find a parent name
$number
=
elphel_parse_P_name
(
$compositeName
);
$number
=
elphel_parse_P_name
(
$compositeName
);
// does not need $sensor_port,
if
(
!
$number
)
return
"Unknown name"
;
if
(
!
$number
)
return
"Unknown name"
;
$prefix
=
""
;
$prefix
=
""
;
// is it a bit field?
// is it a bit field?
...
@@ -1315,7 +1318,7 @@ function getDescription ($compositeName,$descriptions){
...
@@ -1315,7 +1318,7 @@ function getDescription ($compositeName,$descriptions){
$name
=
substr
(
$compositeName
,
0
,
strlen
(
$compositeName
)
-
strlen
(
'__XXYY'
));
$name
=
substr
(
$compositeName
,
0
,
strlen
(
$compositeName
)
-
strlen
(
'__XXYY'
));
if
(
$width
==
1
)
$prefix
.=
sprintf
(
"This is the bit %d of %s - "
,
$bit
,
$name
);
if
(
$width
==
1
)
$prefix
.=
sprintf
(
"This is the bit %d of %s - "
,
$bit
,
$name
);
else
$prefix
.=
sprintf
(
"This is a bit selection - bits %d through %d of %s - "
,
$bit
,(
$bit
+
$width
-
1
),
$name
);
else
$prefix
.=
sprintf
(
"This is a bit selection - bits %d through %d of %s - "
,
$bit
,(
$bit
+
$width
-
1
),
$name
);
$number
=
elphel_parse_P_name
(
$name
);
$number
=
elphel_parse_P_name
(
$name
);
// does not need $sensor_port,
if
(
!
$number
)
{
if
(
!
$number
)
{
echo
"Internal error in parsedit.php:Unknown name
$name
of
$compositeName
"
;
echo
"Internal error in parsedit.php:Unknown name
$name
of
$compositeName
"
;
exit
(
1
);
exit
(
1
);
...
...
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