Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
MarlinKimbra
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
machinery
MarlinKimbra
Commits
62a98bb6
Commit
62a98bb6
authored
Jan 02, 2016
by
MagoKimbra
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Same fix
parent
f004c9cd
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
105 additions
and
116 deletions
+105
-116
Configuration_Feature.h
MarlinKimbra/Configuration_Feature.h
+77
-70
Marlin_main.cpp
MarlinKimbra/Marlin_main.cpp
+1
-1
nextion_gfx.h
MarlinKimbra/module/nextion_gfx.h
+1
-0
nextion_lcd.cpp
MarlinKimbra/module/nextion_lcd.cpp
+26
-45
No files found.
MarlinKimbra/Configuration_Feature.h
View file @
62a98bb6
...
...
@@ -549,6 +549,7 @@
* *
*****************************************************************************************/
//#define ADVANCE
#define EXTRUDER_ADVANCE_K .0
#define D_FILAMENT 2.85
#define STEPS_MM_E 836
...
...
@@ -566,6 +567,7 @@
* *
**************************************************************************/
//#define FILAMENTCHANGEENABLE
#define FILAMENTCHANGE_XPOS 3
#define FILAMENTCHANGE_YPOS 3
#define FILAMENTCHANGE_ZADD 10
...
...
@@ -726,6 +728,7 @@
* *
**************************************************************************/
//#define FWRETRACT //ONLY PARTIALLY TESTED
#define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
#define RETRACT_LENGTH 3 //default retract length (positive mm)
#define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
...
...
@@ -879,6 +882,7 @@
* *
**********************************************************************************/
//#define FILAMENT_SENSOR
#define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2,3)
#define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
#define MEASURED_UPPER_LIMIT 2.00 //upper limit factor used for sensor reading validation in mm
...
...
@@ -908,6 +912,7 @@
* *
**********************************************************************************/
//#define FILAMENT_RUNOUT_SENSOR
#define FILRUNOUT_PIN_INVERTING true // Should be uncommented and true or false should assigned
#define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
#define FILAMENT_RUNOUT_SCRIPT "M600" // Script execute when filament run out
...
...
@@ -963,6 +968,7 @@
* *
**************************************************************************/
//#define POWER_CONSUMPTION
#define POWER_VOLTAGE 12.00 //(V) The power supply OUT voltage
#define POWER_SENSITIVITY 0.066 //(V/A) How much increase V for 1A of increase
#define POWER_OFFSET 0.005 //(A) Help to get 0A when no load is connected.
...
...
@@ -1209,6 +1215,7 @@
* *
**************************************************************************/
//#define CHDK
#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
/**************************************************************************/
...
...
@@ -1333,54 +1340,54 @@
//#define HAVE_TMCDRIVER
//#define X_IS_TMC
//
#define X_MAX_CURRENT 1000 //in mA
//
#define X_SENSE_RESISTOR 91 //in mOhms
//
#define X_MICROSTEPS 16 //number of microsteps
#define X_MAX_CURRENT 1000 //in mA
#define X_SENSE_RESISTOR 91 //in mOhms
#define X_MICROSTEPS 16 //number of microsteps
//#define X2_IS_TMC
//
#define X2_MAX_CURRENT 1000 //in mA
//
#define X2_SENSE_RESISTOR 91 //in mOhms
//
#define X2_MICROSTEPS 16 //number of microsteps
#define X2_MAX_CURRENT 1000 //in mA
#define X2_SENSE_RESISTOR 91 //in mOhms
#define X2_MICROSTEPS 16 //number of microsteps
//#define Y_IS_TMC
//
#define Y_MAX_CURRENT 1000 //in mA
//
#define Y_SENSE_RESISTOR 91 //in mOhms
//
#define Y_MICROSTEPS 16 //number of microsteps
#define Y_MAX_CURRENT 1000 //in mA
#define Y_SENSE_RESISTOR 91 //in mOhms
#define Y_MICROSTEPS 16 //number of microsteps
//#define Y2_IS_TMC
//
#define Y2_MAX_CURRENT 1000 //in mA
//
#define Y2_SENSE_RESISTOR 91 //in mOhms
//
#define Y2_MICROSTEPS 16 //number of microsteps
#define Y2_MAX_CURRENT 1000 //in mA
#define Y2_SENSE_RESISTOR 91 //in mOhms
#define Y2_MICROSTEPS 16 //number of microsteps
//#define Z_IS_TMC
//
#define Z_MAX_CURRENT 1000 //in mA
//
#define Z_SENSE_RESISTOR 91 //in mOhms
//
#define Z_MICROSTEPS 16 //number of microsteps
#define Z_MAX_CURRENT 1000 //in mA
#define Z_SENSE_RESISTOR 91 //in mOhms
#define Z_MICROSTEPS 16 //number of microsteps
//#define Z2_IS_TMC
//
#define Z2_MAX_CURRENT 1000 //in mA
//
#define Z2_SENSE_RESISTOR 91 //in mOhms
//
#define Z2_MICROSTEPS 16 //number of microsteps
#define Z2_MAX_CURRENT 1000 //in mA
#define Z2_SENSE_RESISTOR 91 //in mOhms
#define Z2_MICROSTEPS 16 //number of microsteps
//#define E0_IS_TMC
//
#define E0_MAX_CURRENT 1000 //in mA
//
#define E0_SENSE_RESISTOR 91 //in mOhms
//
#define E0_MICROSTEPS 16 //number of microsteps
#define E0_MAX_CURRENT 1000 //in mA
#define E0_SENSE_RESISTOR 91 //in mOhms
#define E0_MICROSTEPS 16 //number of microsteps
//#define E1_IS_TMC
//
#define E1_MAX_CURRENT 1000 //in mA
//
#define E1_SENSE_RESISTOR 91 //in mOhms
//
#define E1_MICROSTEPS 16 //number of microsteps
#define E1_MAX_CURRENT 1000 //in mA
#define E1_SENSE_RESISTOR 91 //in mOhms
#define E1_MICROSTEPS 16 //number of microsteps
//#define E2_IS_TMC
//
#define E2_MAX_CURRENT 1000 //in mA
//
#define E2_SENSE_RESISTOR 91 //in mOhms
//
#define E2_MICROSTEPS 16 //number of microsteps
#define E2_MAX_CURRENT 1000 //in mA
#define E2_SENSE_RESISTOR 91 //in mOhms
#define E2_MICROSTEPS 16 //number of microsteps
//#define E3_IS_TMC
//
#define E3_MAX_CURRENT 1000 //in mA
//
#define E3_SENSE_RESISTOR 91 //in mOhms
//
#define E3_MICROSTEPS 16 //number of microsteps
#define E3_MAX_CURRENT 1000 //in mA
#define E3_SENSE_RESISTOR 91 //in mOhms
#define E3_MICROSTEPS 16 //number of microsteps
/***********************************************************************/
...
...
@@ -1397,64 +1404,64 @@
//#define HAVE_L6470DRIVER
//#define X_IS_L6470
//
#define X_MICROSTEPS 16 //number of microsteps
//
#define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define X_MICROSTEPS 16 //number of microsteps
#define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define X2_IS_L6470
//
#define X2_MICROSTEPS 16 //number of microsteps
//
#define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define X2_MICROSTEPS 16 //number of microsteps
#define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define Y_IS_L6470
//
#define Y_MICROSTEPS 16 //number of microsteps
//
#define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define Y_MICROSTEPS 16 //number of microsteps
#define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define Y2_IS_L6470
//
#define Y2_MICROSTEPS 16 //number of microsteps
//
#define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define Y2_MICROSTEPS 16 //number of microsteps
#define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define Z_IS_L6470
//
#define Z_MICROSTEPS 16 //number of microsteps
//
#define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define Z_MICROSTEPS 16 //number of microsteps
#define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define Z2_IS_L6470
//
#define Z2_MICROSTEPS 16 //number of microsteps
//
#define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define Z2_MICROSTEPS 16 //number of microsteps
#define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define E0_IS_L6470
//
#define E0_MICROSTEPS 16 //number of microsteps
//
#define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define E0_MICROSTEPS 16 //number of microsteps
#define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define E1_IS_L6470
//
#define E1_MICROSTEPS 16 //number of microsteps
//
#define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define E1_MICROSTEPS 16 //number of microsteps
#define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define E2_IS_L6470
//
#define E2_MICROSTEPS 16 //number of microsteps
//
#define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define E2_MICROSTEPS 16 //number of microsteps
#define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
//#define E3_IS_L6470
//
#define E3_MICROSTEPS 16 //number of microsteps
//
#define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
//
#define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
//
#define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
#define E3_MICROSTEPS 16 //number of microsteps
#define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be carefull not to go too high
#define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
#define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
/**********************************************************************************/
...
...
MarlinKimbra/Marlin_main.cpp
View file @
62a98bb6
MarlinKimbra/module/nextion_gfx.h
View file @
62a98bb6
...
...
@@ -15,6 +15,7 @@
*
*/
#ifndef NEXTION_GFX_H
#define NEXTION_GFX_H
...
...
MarlinKimbra/module/nextion_lcd.cpp
View file @
62a98bb6
...
...
@@ -17,10 +17,8 @@
#include "nextion_gfx.h"
#include <Nextion.h>
const
float
MaxWave
=
0.2
;
bool
NextionON
=
false
;
bool
PageInfo
=
false
;
bool
gfxON
=
false
;
char
buffer
[
100
]
=
{
0
};
uint32_t
slidermaxval
=
20
;
char
lcd_status_message
[
30
]
=
WELCOME_MSG
;
...
...
@@ -28,7 +26,7 @@
static
millis_t
next_lcd_update_ms
;
#if ENABLED(NEXTION_GFX)
GFX
gfx
=
GFX
(
196
,
194
);
GFX
gfx
=
GFX
(
200
,
190
);
#endif
// Page
...
...
@@ -41,10 +39,10 @@
NexPage
Pmove
=
NexPage
(
6
,
0
,
"move"
);
// Text
NexText
Hotend0
=
NexText
(
1
,
1
,
"t0"
);
NexText
Hotend0
=
NexText
(
1
,
2
,
"t0"
);
NexText
Hotend1
=
NexText
(
1
,
4
,
"t1"
);
NexText
Hotend2
=
NexText
(
1
,
5
,
"t
2"
);
NexText
Hotend2
1
=
NexText
(
1
,
6
,
"h
2"
);
NexText
Hotend2
1
=
NexText
(
1
,
5
,
"h
2"
);
NexText
Hotend2
=
NexText
(
1
,
6
,
"t
2"
);
NexText
LedStatus
=
NexText
(
1
,
7
,
"t4"
);
NexText
LedCoord
=
NexText
(
1
,
8
,
"t5"
);
NexText
set0
=
NexText
(
2
,
2
,
"set0"
);
...
...
@@ -57,15 +55,15 @@
NexText
sdfolder
=
NexText
(
4
,
23
,
"sdfolder"
);
// Picture
NexPicture
Menu
=
NexPicture
(
1
,
10
,
"p0"
);
NexPicture
MSD
=
NexPicture
(
1
,
1
1
,
"p1"
);
NexPicture
MSetup
=
NexPicture
(
1
,
1
2
,
"p2"
);
NexPicture
Hend0
=
NexPicture
(
1
,
1
3
,
"p3"
);
NexPicture
Menu
=
NexPicture
(
1
,
9
,
"p0"
);
NexPicture
MSD
=
NexPicture
(
1
,
1
0
,
"p1"
);
NexPicture
MSetup
=
NexPicture
(
1
,
1
1
,
"p2"
);
NexPicture
Hend0
=
NexPicture
(
1
,
1
2
,
"p3"
);
NexPicture
Hend1
=
NexPicture
(
1
,
14
,
"p4"
);
NexPicture
Hend2
=
NexPicture
(
1
,
1
5
,
"p5"
);
NexPicture
Fanpic
=
NexPicture
(
1
,
1
9
,
"p6"
);
NexPicture
NPlay
=
NexPicture
(
1
,
2
7
,
"p7"
);
NexPicture
NStop
=
NexPicture
(
1
,
2
8
,
"p8"
);
NexPicture
Hend2
=
NexPicture
(
1
,
1
6
,
"p5"
);
NexPicture
Fanpic
=
NexPicture
(
1
,
1
8
,
"p6"
);
NexPicture
NPlay
=
NexPicture
(
1
,
2
4
,
"p7"
);
NexPicture
NStop
=
NexPicture
(
1
,
2
5
,
"p8"
);
NexPicture
Exit1
=
NexPicture
(
3
,
4
,
"p3"
);
NexPicture
Folder0
=
NexPicture
(
4
,
9
,
"p0"
);
NexPicture
Folder1
=
NexPicture
(
4
,
10
,
"p1"
);
...
...
@@ -86,32 +84,29 @@
NexPicture
ZDown
=
NexPicture
(
6
,
12
,
"p11"
);
// Progress Bar
NexProgressBar
sdbar
=
NexProgressBar
(
1
,
2
6
,
"j0"
);
NexProgressBar
sdbar
=
NexProgressBar
(
1
,
2
3
,
"j0"
);
// Slider
NexSlider
sdlist
=
NexSlider
(
4
,
1
,
"h0"
);
// Wafeform
NexWaveform
Graph0
=
NexWaveform
(
1
,
9
,
"s0"
);
NexWaveform
Graph1
=
NexWaveform
(
1
,
24
,
"s1"
);
NexWaveform
Graph2
=
NexWaveform
(
1
,
25
,
"s2"
);
// Touch area
NexHotspot
hot0
=
NexHotspot
(
1
,
1
4
,
"hot0"
);
NexHotspot
hot1
=
NexHotspot
(
1
,
1
6
,
"hot1"
);
NexHotspot
hot2
=
NexHotspot
(
1
,
1
8
,
"hot2"
);
NexHotspot
hot0
=
NexHotspot
(
1
,
1
3
,
"hot0"
);
NexHotspot
hot1
=
NexHotspot
(
1
,
1
5
,
"hot1"
);
NexHotspot
hot2
=
NexHotspot
(
1
,
1
7
,
"hot2"
);
NexHotspot
m11
=
NexHotspot
(
2
,
14
,
"m11"
);
NexHotspot
tup
=
NexHotspot
(
2
,
16
,
"tup"
);
NexHotspot
tdown
=
NexHotspot
(
2
,
17
,
"tdown"
);
// Timer
NexTimer
startimer
=
NexTimer
(
0
,
1
,
"tm0"
);
NexTimer
fantimer
=
NexTimer
(
1
,
2
3
,
"tm0"
);
NexTimer
fantimer
=
NexTimer
(
1
,
2
2
,
"tm0"
);
// Variable
NexVar
Hotend
=
NexVar
(
1
,
20
,
"he"
);
NexVar
Hotend
=
NexVar
(
1
,
19
,
"he"
);
NexVar
Bed
=
NexVar
(
1
,
20
,
"bed"
);
NexVar
set1
=
NexVar
(
2
,
17
,
"set1"
);
NexVar
Bed
=
NexVar
(
1
,
21
,
"bed"
);
NexVar
filename0
=
NexVar
(
4
,
19
,
"va0"
);
NexVar
filename1
=
NexVar
(
4
,
20
,
"va1"
);
NexVar
filename2
=
NexVar
(
4
,
21
,
"va2"
);
...
...
@@ -165,14 +160,6 @@
NULL
};
NexWaveform
*
graph_list
[]
=
{
&
Graph0
,
&
Graph1
,
&
Graph2
,
NULL
};
NexText
*
row_list
[]
=
{
&
sdrow0
,
...
...
@@ -211,6 +198,10 @@
PageInfo
=
true
;
#if ENABLED(NEXTION_GFX)
gfx_clear
(
X_MAX_POS
,
Y_MAX_POS
,
Z_MAX_POS
);
#endif
#if HAS_TEMP_0
Hotend
.
setValue
(
1
);
#endif
...
...
@@ -278,7 +269,6 @@
static
void
setpagesdcard
()
{
PageInfo
=
false
;
gfxON
=
false
;
Psdcard
.
show
();
uint16_t
fileCnt
=
card
.
getnrfilenames
();
...
...
@@ -436,12 +426,10 @@
void
setpagePopCallback
(
void
*
ptr
)
{
if
(
ptr
==
&
Menu
)
{
PageInfo
=
false
;
gfxON
=
false
;
Pmenu
.
show
();
}
else
if
(
ptr
==
&
MSetup
)
{
PageInfo
=
false
;
gfxON
=
false
;
Psetup
.
show
();
}
...
...
@@ -561,11 +549,6 @@
hotend_list
[
h
]
->
setText
(
buffer
);
hotend_list
[
h
]
->
setColor
(
color
);
if
(
!
gfxON
)
{
graph_list
[
h
]
->
addValue
(
0
,
(
int
)(
T1
*
MaxWave
));
graph_list
[
h
]
->
addValue
(
1
,
(
int
)(
T2
*
MaxWave
));
}
}
static
void
coordtoLCD
()
{
...
...
@@ -678,19 +661,17 @@
#if ENABLED(NEXTION_GFX)
void
gfx_clear
(
float
x
,
float
y
,
float
z
)
{
if
(
PageInfo
)
{
if
(
PageInfo
)
gfx
.
clear
(
x
,
y
,
z
);
gfxON
=
true
;
}
}
void
gfx_cursor_to
(
float
x
,
float
y
,
float
z
)
{
if
(
PageInfo
&&
gfxON
)
if
(
PageInfo
)
gfx
.
cursor_to
(
x
,
y
,
z
);
}
void
gfx_line_to
(
float
x
,
float
y
,
float
z
){
if
(
PageInfo
&&
gfxON
)
if
(
PageInfo
)
gfx
.
line_to
(
VC_TOOL
,
x
,
y
,
z
);
}
#endif
...
...
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