A couple of tidyings and additions:
1. Z home now moves home, rather than just setting the coordinate. 2. Wait for temps implemented. Also the JSON requests for the g code filelist has been temporarily commented out in reprap.htm. It was causing the firmware to hang sometimes. To be investigated. Machine now prints nicely...
This commit is contained in:
parent
3c901fb194
commit
708822a54e
12 changed files with 164 additions and 572 deletions
|
@ -34,6 +34,9 @@ Licence: GPL
|
||||||
|
|
||||||
#define HEAT_SAMPLE_TIME 0.5 // Seconds
|
#define HEAT_SAMPLE_TIME 0.5 // Seconds
|
||||||
|
|
||||||
|
#define TEMPERATURE_CLOSE_ENOUGH 5.0 // Celsius
|
||||||
|
#define TEMPERATURE_LOW_SO_DONT_CARE 40.0 // Celsius
|
||||||
|
|
||||||
#define STANDBY_INTERRUPT_RATE 2.0e-4 // Seconds
|
#define STANDBY_INTERRUPT_RATE 2.0e-4 // Seconds
|
||||||
|
|
||||||
#define NUMBER_OF_PROBE_POINTS 3
|
#define NUMBER_OF_PROBE_POINTS 3
|
||||||
|
|
30
GCodes.cpp
30
GCodes.cpp
|
@ -58,6 +58,7 @@ void GCodes::Init()
|
||||||
homeX = false;
|
homeX = false;
|
||||||
homeY = false;
|
homeY = false;
|
||||||
homeZ = false;
|
homeZ = false;
|
||||||
|
homeZFinalMove = false;
|
||||||
// homeXQueued = false;
|
// homeXQueued = false;
|
||||||
// homeYQueued = false;
|
// homeYQueued = false;
|
||||||
// homeZQueued = false;
|
// homeZQueued = false;
|
||||||
|
@ -284,13 +285,15 @@ bool GCodes::DoHome()
|
||||||
|
|
||||||
float moveToDo[DRIVES+1];
|
float moveToDo[DRIVES+1];
|
||||||
bool action[DRIVES+1];
|
bool action[DRIVES+1];
|
||||||
for(int8_t drive = 0; drive <= DRIVES; drive++)
|
for(int8_t drive = 0; drive < DRIVES; drive++)
|
||||||
action[drive] = false;
|
action[drive] = false;
|
||||||
|
action[DRIVES] = true;
|
||||||
|
|
||||||
if(homeX)
|
if(homeX)
|
||||||
{
|
{
|
||||||
action[X_AXIS] = true;
|
action[X_AXIS] = true;
|
||||||
moveToDo[X_AXIS] = -2.0*platform->AxisLength(X_AXIS);
|
moveToDo[X_AXIS] = -2.0*platform->AxisLength(X_AXIS);
|
||||||
|
moveToDo[DRIVES] = platform->HomeFeedRate(X_AXIS)*0.016666667;
|
||||||
if(DoCannedCycleMove(moveToDo, action, true))
|
if(DoCannedCycleMove(moveToDo, action, true))
|
||||||
{
|
{
|
||||||
homeX = false;
|
homeX = false;
|
||||||
|
@ -303,6 +306,7 @@ bool GCodes::DoHome()
|
||||||
{
|
{
|
||||||
action[Y_AXIS] = true;
|
action[Y_AXIS] = true;
|
||||||
moveToDo[Y_AXIS] = -2.0*platform->AxisLength(Y_AXIS);
|
moveToDo[Y_AXIS] = -2.0*platform->AxisLength(Y_AXIS);
|
||||||
|
moveToDo[DRIVES] = platform->HomeFeedRate(Y_AXIS)*0.016666667;
|
||||||
if(DoCannedCycleMove(moveToDo, action, true))
|
if(DoCannedCycleMove(moveToDo, action, true))
|
||||||
{
|
{
|
||||||
homeY = false;
|
homeY = false;
|
||||||
|
@ -314,13 +318,24 @@ bool GCodes::DoHome()
|
||||||
if(homeZ)
|
if(homeZ)
|
||||||
{
|
{
|
||||||
action[Z_AXIS] = true;
|
action[Z_AXIS] = true;
|
||||||
moveToDo[Z_AXIS] = -2.0*platform->AxisLength(Z_AXIS);
|
moveToDo[DRIVES] = platform->HomeFeedRate(Z_AXIS)*0.016666667;
|
||||||
if(DoCannedCycleMove(moveToDo, action, true))
|
if(homeZFinalMove)
|
||||||
{
|
{
|
||||||
|
moveToDo[Z_AXIS] = 0.0;
|
||||||
|
if(DoCannedCycleMove(moveToDo, action, false))
|
||||||
|
{
|
||||||
|
homeZFinalMove = false;
|
||||||
homeZ = false;
|
homeZ = false;
|
||||||
return NoHome();
|
return NoHome();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
moveToDo[Z_AXIS] = -2.0*platform->AxisLength(Z_AXIS);
|
||||||
|
if(DoCannedCycleMove(moveToDo, action, true))
|
||||||
|
homeZFinalMove = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should never get here
|
// Should never get here
|
||||||
|
@ -708,6 +723,10 @@ bool GCodes::ActOnGcode(GCodeBuffer *gb)
|
||||||
drivesRelative = true;
|
drivesRelative = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 84:
|
||||||
|
platform->Message(HOST_MESSAGE, "Motors off received\n");
|
||||||
|
break;
|
||||||
|
|
||||||
case 92: // Set steps/mm for each axis
|
case 92: // Set steps/mm for each axis
|
||||||
if(reprap.debug())
|
if(reprap.debug())
|
||||||
platform->GetLine()->Write("Steps/mm: ");
|
platform->GetLine()->Write("Steps/mm: ");
|
||||||
|
@ -752,7 +771,9 @@ bool GCodes::ActOnGcode(GCodeBuffer *gb)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 116: // Wait for everything
|
case 116: // Wait for everything
|
||||||
platform->Message(HOST_MESSAGE, "Wait for all temperatures received\n");
|
if(!AllMovesAreFinishedAndMoveBufferIsLoaded())
|
||||||
|
return false;
|
||||||
|
result = reprap.GetHeat()->AllHeatersAtSetTemperatures();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 111: // Debug level
|
case 111: // Debug level
|
||||||
|
@ -824,6 +845,7 @@ bool GCodes::ActOnGcode(GCodeBuffer *gb)
|
||||||
if(reprap.debug())
|
if(reprap.debug())
|
||||||
platform->GetLine()->Write("\n");
|
platform->GetLine()->Write("\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 906: // Motor currents
|
case 906: // Motor currents
|
||||||
for(uint8_t i = 0; i < DRIVES; i++)
|
for(uint8_t i = 0; i < DRIVES; i++)
|
||||||
{
|
{
|
||||||
|
|
3
GCodes.h
3
GCodes.h
|
@ -118,6 +118,7 @@ class GCodes
|
||||||
bool homeX;
|
bool homeX;
|
||||||
bool homeY;
|
bool homeY;
|
||||||
bool homeZ;
|
bool homeZ;
|
||||||
|
bool homeZFinalMove;
|
||||||
// bool homeXQueued;
|
// bool homeXQueued;
|
||||||
// bool homeYQueued;
|
// bool homeYQueued;
|
||||||
// bool homeZQueued;
|
// bool homeZQueued;
|
||||||
|
@ -161,7 +162,7 @@ inline bool GCodes::PrintingAFile()
|
||||||
|
|
||||||
inline bool GCodes::NoHome()
|
inline bool GCodes::NoHome()
|
||||||
{
|
{
|
||||||
return !(homeX || homeY || homeZ);
|
return !(homeX || homeY || homeZ || homeZFinalMove);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This function takes care of the fact that the heater and head indices
|
// This function takes care of the fact that the heater and head indices
|
||||||
|
|
56
Heat.h
56
Heat.h
|
@ -29,9 +29,12 @@ class PID
|
||||||
void Init();
|
void Init();
|
||||||
void Spin();
|
void Spin();
|
||||||
void SetActiveTemperature(const float& t);
|
void SetActiveTemperature(const float& t);
|
||||||
|
float GetActiveTemperature();
|
||||||
void SetStandbyTemperature(const float& t);
|
void SetStandbyTemperature(const float& t);
|
||||||
|
float GetStandbyTemperature();
|
||||||
void Activate();
|
void Activate();
|
||||||
void Standby();
|
void Standby();
|
||||||
|
bool Active();
|
||||||
float GetTemperature();
|
float GetTemperature();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -57,10 +60,13 @@ class Heat
|
||||||
void Init();
|
void Init();
|
||||||
void Exit();
|
void Exit();
|
||||||
void SetActiveTemperature(int8_t heater, const float& t);
|
void SetActiveTemperature(int8_t heater, const float& t);
|
||||||
|
float GetActiveTemperature(int8_t heater);
|
||||||
void SetStandbyTemperature(int8_t heater, const float& t);
|
void SetStandbyTemperature(int8_t heater, const float& t);
|
||||||
|
float GetStandbyTemperature(int8_t heater);
|
||||||
void Activate(int8_t heater);
|
void Activate(int8_t heater);
|
||||||
void Standby(int8_t heater);
|
void Standby(int8_t heater);
|
||||||
float GetTemperature(int8_t heater);
|
float GetTemperature(int8_t heater);
|
||||||
|
bool AllHeatersAtSetTemperatures();
|
||||||
void Diagnostics();
|
void Diagnostics();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -75,16 +81,31 @@ class Heat
|
||||||
|
|
||||||
//***********************************************************************************************************
|
//***********************************************************************************************************
|
||||||
|
|
||||||
|
inline bool PID::Active()
|
||||||
|
{
|
||||||
|
return active;
|
||||||
|
}
|
||||||
|
|
||||||
inline void PID::SetActiveTemperature(const float& t)
|
inline void PID::SetActiveTemperature(const float& t)
|
||||||
{
|
{
|
||||||
activeTemperature = t;
|
activeTemperature = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline float PID::GetActiveTemperature()
|
||||||
|
{
|
||||||
|
return activeTemperature;
|
||||||
|
}
|
||||||
|
|
||||||
inline void PID::SetStandbyTemperature(const float& t)
|
inline void PID::SetStandbyTemperature(const float& t)
|
||||||
{
|
{
|
||||||
standbyTemperature = t;
|
standbyTemperature = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline float PID::GetStandbyTemperature()
|
||||||
|
{
|
||||||
|
return standbyTemperature;
|
||||||
|
}
|
||||||
|
|
||||||
inline float PID::GetTemperature()
|
inline float PID::GetTemperature()
|
||||||
{
|
{
|
||||||
return temperature;
|
return temperature;
|
||||||
|
@ -105,11 +126,21 @@ inline void Heat::SetActiveTemperature(int8_t heater, const float& t)
|
||||||
pids[heater]->SetActiveTemperature(t);
|
pids[heater]->SetActiveTemperature(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline float Heat::GetActiveTemperature(int8_t heater)
|
||||||
|
{
|
||||||
|
return pids[heater]->GetActiveTemperature();
|
||||||
|
}
|
||||||
|
|
||||||
inline void Heat::SetStandbyTemperature(int8_t heater, const float& t)
|
inline void Heat::SetStandbyTemperature(int8_t heater, const float& t)
|
||||||
{
|
{
|
||||||
pids[heater]->SetStandbyTemperature(t);
|
pids[heater]->SetStandbyTemperature(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline float Heat::GetStandbyTemperature(int8_t heater)
|
||||||
|
{
|
||||||
|
return pids[heater]->GetStandbyTemperature();
|
||||||
|
}
|
||||||
|
|
||||||
inline float Heat::GetTemperature(int8_t heater)
|
inline float Heat::GetTemperature(int8_t heater)
|
||||||
{
|
{
|
||||||
return pids[heater]->GetTemperature();
|
return pids[heater]->GetTemperature();
|
||||||
|
@ -125,4 +156,29 @@ inline void Heat::Standby(int8_t heater)
|
||||||
pids[heater]->Standby();
|
pids[heater]->Standby();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool Heat::AllHeatersAtSetTemperatures()
|
||||||
|
{
|
||||||
|
float dt;
|
||||||
|
for(int8_t heater = 0; heater < HEATERS; heater++)
|
||||||
|
{
|
||||||
|
dt = GetTemperature(heater);
|
||||||
|
if(pids[heater]->Active())
|
||||||
|
{
|
||||||
|
if(GetActiveTemperature(heater) < TEMPERATURE_LOW_SO_DONT_CARE)
|
||||||
|
dt = 0;
|
||||||
|
else
|
||||||
|
dt = fabs(dt - GetActiveTemperature(heater));
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if(GetStandbyTemperature(heater) < TEMPERATURE_LOW_SO_DONT_CARE)
|
||||||
|
dt = 0;
|
||||||
|
else
|
||||||
|
dt = fabs(dt - GetStandbyTemperature(heater));
|
||||||
|
}
|
||||||
|
if(dt > TEMPERATURE_CLOSE_ENOUGH)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
76
Platform.cpp
76
Platform.cpp
|
@ -249,6 +249,21 @@ void Platform::Diagnostics()
|
||||||
Message(HOST_MESSAGE, "Platform Diagnostics:\n");
|
Message(HOST_MESSAGE, "Platform Diagnostics:\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//extern int __bss_end; // void? long?
|
||||||
|
//extern void *__brkval;
|
||||||
|
//
|
||||||
|
//long Platform::GetFreeMemory()
|
||||||
|
//{
|
||||||
|
// long free_memory;
|
||||||
|
//
|
||||||
|
// if((long)__brkval == 0)
|
||||||
|
// free_memory = ((long)&free_memory) - ((long)&__bss_end);
|
||||||
|
// else
|
||||||
|
// free_memory = ((long)&free_memory) - ((long)__brkval);
|
||||||
|
//
|
||||||
|
// return free_memory;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//=============================Thermal Settings ============================
|
//=============================Thermal Settings ============================
|
||||||
|
@ -351,6 +366,7 @@ void MassStorage::Init()
|
||||||
{
|
{
|
||||||
//platform->Message(HOST_MESSAGE, "Please plug in the SD card.\n");
|
//platform->Message(HOST_MESSAGE, "Please plug in the SD card.\n");
|
||||||
//delay(1000);
|
//delay(1000);
|
||||||
|
sdPresentCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sdPresentCount >= 5)
|
if(sdPresentCount >= 5)
|
||||||
|
@ -883,6 +899,34 @@ void Network::Init()
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Network::Spin()
|
||||||
|
{
|
||||||
|
// Keep the Ethernet running
|
||||||
|
|
||||||
|
ethernet_task();
|
||||||
|
|
||||||
|
// Anything come in from the network to act on?
|
||||||
|
|
||||||
|
if(!netRingGetPointer->Active())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Finished reading the active ring element?
|
||||||
|
|
||||||
|
if(!netRingGetPointer->ReadFinished())
|
||||||
|
{
|
||||||
|
// No - Finish reading any data that's been received.
|
||||||
|
|
||||||
|
if(inputPointer < inputLength)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Haven't started reading it yet - set that up.
|
||||||
|
|
||||||
|
inputPointer = 0;
|
||||||
|
inputLength = netRingGetPointer->Length();
|
||||||
|
inputBuffer = netRingGetPointer->Data();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Webserver calls this to read bytes that have come in from the network
|
// Webserver calls this to read bytes that have come in from the network
|
||||||
|
|
||||||
bool Network::Read(char& b)
|
bool Network::Read(char& b)
|
||||||
|
@ -891,7 +935,7 @@ bool Network::Read(char& b)
|
||||||
{
|
{
|
||||||
inputLength = -1;
|
inputLength = -1;
|
||||||
inputPointer = 0;
|
inputPointer = 0;
|
||||||
netRingGetPointer->SetRead();
|
netRingGetPointer->SetReadFinished(); // Past tense...
|
||||||
SetWriteEnable(true);
|
SetWriteEnable(true);
|
||||||
//reprap.GetPlatform()->Message(HOST_MESSAGE, "Network - data read.\n");
|
//reprap.GetPlatform()->Message(HOST_MESSAGE, "Network - data read.\n");
|
||||||
return false;
|
return false;
|
||||||
|
@ -935,33 +979,7 @@ void Network::Write(char b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Network::Spin()
|
|
||||||
{
|
|
||||||
// Keep the Ethernet running
|
|
||||||
|
|
||||||
ethernet_task();
|
|
||||||
|
|
||||||
// Anything come in from the network to act on?
|
|
||||||
|
|
||||||
if(!netRingGetPointer->Active())
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Finished reading the active ring element?
|
|
||||||
|
|
||||||
if(!netRingGetPointer->Read())
|
|
||||||
{
|
|
||||||
// No - Finish reading any data that's been received.
|
|
||||||
|
|
||||||
if(inputPointer < inputLength)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Haven't started reading it yet - set that up.
|
|
||||||
|
|
||||||
inputPointer = 0;
|
|
||||||
inputLength = netRingGetPointer->Length();
|
|
||||||
inputBuffer = netRingGetPointer->Data();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Network::InputBufferReleased(void* pb)
|
void Network::InputBufferReleased(void* pb)
|
||||||
{
|
{
|
||||||
|
@ -1104,12 +1122,12 @@ int NetRing::Length()
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NetRing::Read()
|
bool NetRing::ReadFinished()
|
||||||
{
|
{
|
||||||
return read;
|
return read;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetRing::SetRead()
|
void NetRing::SetReadFinished()
|
||||||
{
|
{
|
||||||
read = true;
|
read = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,8 +238,8 @@ protected:
|
||||||
bool Set(char* d, int l, void* pb, void* pc, void* h);
|
bool Set(char* d, int l, void* pb, void* pc, void* h);
|
||||||
char* Data();
|
char* Data();
|
||||||
int Length();
|
int Length();
|
||||||
bool Read();
|
bool ReadFinished();
|
||||||
void SetRead();
|
void SetReadFinished();
|
||||||
void* Pbuf();
|
void* Pbuf();
|
||||||
void* Pcb();
|
void* Pcb();
|
||||||
void* Hs();
|
void* Hs();
|
||||||
|
@ -408,6 +408,8 @@ class Platform
|
||||||
|
|
||||||
void Diagnostics();
|
void Diagnostics();
|
||||||
|
|
||||||
|
// long GetFreeMemory();
|
||||||
|
|
||||||
// Timing
|
// Timing
|
||||||
|
|
||||||
float Time(); // Returns elapsed seconds since some arbitrary time
|
float Time(); // Returns elapsed seconds since some arbitrary time
|
||||||
|
|
|
@ -178,6 +178,9 @@ void RepRap::Init()
|
||||||
active = true;
|
active = true;
|
||||||
gCodes->RunConfigurationGCodes();
|
gCodes->RunConfigurationGCodes();
|
||||||
platform->Message(HOST_MESSAGE, "RepRapPro RepRap Firmware (Re)Started\n");
|
platform->Message(HOST_MESSAGE, "RepRapPro RepRap Firmware (Re)Started\n");
|
||||||
|
// platform->Message(HOST_MESSAGE, "Free memory: ");
|
||||||
|
// sprintf(scratchString,"%d\n",platform->GetFreeMemory());
|
||||||
|
// platform->Message(HOST_MESSAGE, scratchString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RepRap::Exit()
|
void RepRap::Exit()
|
||||||
|
|
|
@ -16,14 +16,22 @@
|
||||||
; infill extrusion width = 0.80mm
|
; infill extrusion width = 0.80mm
|
||||||
; first layer extrusion width = 0.48mm
|
; first layer extrusion width = 0.48mm
|
||||||
|
|
||||||
M107
|
|
||||||
M104 S205 ; set temperature
|
|
||||||
G28 ; home all axes
|
|
||||||
G1 Z5 F200 ; lift nozzle
|
|
||||||
M109 S205 ; wait for temperature to be reached
|
|
||||||
G90 ; use absolute coordinates
|
|
||||||
G21 ; set units to millimeters
|
G21 ; set units to millimeters
|
||||||
|
G90 ; use absolute coordinates
|
||||||
M83 ; use relative distances for extrusion
|
M83 ; use relative distances for extrusion
|
||||||
|
M107
|
||||||
|
G10 P0 S205 R205 ; Set extruder temperature
|
||||||
|
T0
|
||||||
|
M140 S55; Set bed temperature
|
||||||
|
G1 Z5 F200 ; lift nozzle
|
||||||
|
G28 X0 Y0; home X and Y axes
|
||||||
|
G1 X30 Y30 F2000
|
||||||
|
G28 Z0
|
||||||
|
G1 Z0 F200
|
||||||
|
G32 ; Probe bed
|
||||||
|
G1 X0 Y0 F2000
|
||||||
|
G1 Z0 F200
|
||||||
|
M116; Wait for all temperatures
|
||||||
G1 F1800.000 E-2.00000
|
G1 F1800.000 E-2.00000
|
||||||
G1 Z0.240 F3600.000
|
G1 Z0.240 F3600.000
|
||||||
G1 X68.609 Y91.575
|
G1 X68.609 Y91.575
|
||||||
|
@ -7584,8 +7592,8 @@ G1 X72.284 Y102.512 E0.02412
|
||||||
G1 X72.512 Y102.283 E0.01333
|
G1 X72.512 Y102.283 E0.01333
|
||||||
G1 F1800.000 E-2.00000
|
G1 F1800.000 E-2.00000
|
||||||
M107
|
M107
|
||||||
M104 S0 ; turn off temperature
|
G10 P0 S0 R0; Turn off heater
|
||||||
M140 S0
|
M140 S0
|
||||||
G28 X2 Y180 ; home X axis
|
G1 X2 Y180 ;
|
||||||
M84 ; disable motors
|
M84 ; disable motors
|
||||||
; filament used = 1425.9mm (3.4cm3)
|
; filament used = 1425.9mm (3.4cm3)
|
||||||
|
|
|
@ -6,7 +6,7 @@ G90 ; Absolute positioning
|
||||||
M83 ; Extrusion relative
|
M83 ; Extrusion relative
|
||||||
M107; Fan off
|
M107; Fan off
|
||||||
G31 Z0.7 P400 ; Set Z probe height and threshold
|
G31 Z0.7 P400 ; Set Z probe height and threshold
|
||||||
M906 X1200 Y1200 Z1200 E1200 ; Motor currents (mA)
|
M906 X400 Y400 Z400 E400 ; Motor currents (mA)
|
||||||
M201 X4000 Y4000 E4000 ; Accelerations (mms-2)
|
M201 X4000 Y4000 E4000 ; Accelerations (mms-2)
|
||||||
T0 ; Extruder 0
|
T0 ; Extruder 0
|
||||||
|
|
||||||
|
|
|
@ -335,7 +335,7 @@ function viewModel()
|
||||||
|
|
||||||
self.fileList = function()
|
self.fileList = function()
|
||||||
{
|
{
|
||||||
$.get('/rr_files', {}, self.files);
|
//$.get('/rr_files', {}, self.files);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.getTemps = function()
|
self.getTemps = function()
|
||||||
|
|
|
@ -1,521 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2001-2003 Swedish Institute of Computer Science.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote products
|
|
||||||
* derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
||||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
|
||||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
|
||||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
||||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
|
||||||
* OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* This file is part of the lwIP TCP/IP stack.
|
|
||||||
*
|
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#if 0
|
|
||||||
#include "lwipopts.h"
|
|
||||||
#if defined(HTTP_RAW_USED)
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include "lwip/src/include/lwip/debug.h"
|
|
||||||
#include "lwip/src/include/lwip/stats.h"
|
|
||||||
#include "httpd.h"
|
|
||||||
#include "lwip/src/include/lwip/tcp.h"
|
|
||||||
#include "fs.h"
|
|
||||||
|
|
||||||
struct http_state {
|
|
||||||
char *file;
|
|
||||||
uint16_t left;
|
|
||||||
uint8_t retries;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
//static void
|
|
||||||
//send_data(struct tcp_pcb *pcb, struct http_state *hs)
|
|
||||||
//{
|
|
||||||
// err_t err;
|
|
||||||
// uint16_t len;
|
|
||||||
// int i;
|
|
||||||
//
|
|
||||||
//// if(hs->left <= 0)
|
|
||||||
//// {
|
|
||||||
//// hs->left = GetRepRapNetworkDataToSendLength();
|
|
||||||
//// hs->file = GetRepRapNetworkDataToSend();
|
|
||||||
//// }
|
|
||||||
//
|
|
||||||
// /* We cannot send more data than space available in the send
|
|
||||||
// buffer. */
|
|
||||||
// if (tcp_sndbuf(pcb) < hs->left) {
|
|
||||||
// len = tcp_sndbuf(pcb);
|
|
||||||
// } else {
|
|
||||||
// len = hs->left;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// do {
|
|
||||||
// err = tcp_write(pcb, hs->file, len, 0);
|
|
||||||
// if (err == ERR_MEM) {
|
|
||||||
// len /= 2;
|
|
||||||
// }
|
|
||||||
// } while (err == ERR_MEM && len > 1);
|
|
||||||
//
|
|
||||||
// if (err == ERR_OK) {
|
|
||||||
// hs->file += len;
|
|
||||||
// hs->left -= len;
|
|
||||||
// /* } else {
|
|
||||||
// printf("send_data: error %s len %d %d\n", lwip_strerr(err), len, tcp_sndbuf(pcb));*/
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
static void
|
|
||||||
conn_err(void *arg, err_t err)
|
|
||||||
{
|
|
||||||
struct http_state *hs;
|
|
||||||
|
|
||||||
LWIP_UNUSED_ARG(err);
|
|
||||||
|
|
||||||
hs = arg;
|
|
||||||
mem_free(hs);
|
|
||||||
}
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
static void
|
|
||||||
close_conn(struct tcp_pcb *pcb, struct http_state *hs)
|
|
||||||
{
|
|
||||||
tcp_arg(pcb, NULL);
|
|
||||||
tcp_sent(pcb, NULL);
|
|
||||||
tcp_recv(pcb, NULL);
|
|
||||||
mem_free(hs);
|
|
||||||
tcp_close(pcb);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
static err_t
|
|
||||||
http_poll(void *arg, struct tcp_pcb *pcb)
|
|
||||||
{
|
|
||||||
struct http_state *hs;
|
|
||||||
|
|
||||||
hs = arg;
|
|
||||||
|
|
||||||
/* printf("Polll\n");*/
|
|
||||||
if (hs == NULL) {
|
|
||||||
/* printf("Null, close\n");*/
|
|
||||||
tcp_abort(pcb);
|
|
||||||
return ERR_ABRT;
|
|
||||||
} else {
|
|
||||||
++hs->retries;
|
|
||||||
if (hs->retries == 4) {
|
|
||||||
tcp_abort(pcb);
|
|
||||||
return ERR_ABRT;
|
|
||||||
}
|
|
||||||
send_data(pcb, hs);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
//static err_t
|
|
||||||
//http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
|
|
||||||
//{
|
|
||||||
// int i;
|
|
||||||
// char *data;
|
|
||||||
// struct fs_file file;
|
|
||||||
// struct http_state *hs;
|
|
||||||
//
|
|
||||||
// hs = arg;
|
|
||||||
//
|
|
||||||
// if (err == ERR_OK && p != NULL)
|
|
||||||
// {
|
|
||||||
//
|
|
||||||
// /* Inform TCP that we have taken the data. */
|
|
||||||
// tcp_recved(pcb, p->tot_len);
|
|
||||||
//
|
|
||||||
// if (hs->file == NULL)
|
|
||||||
// {
|
|
||||||
// data = p->payload;
|
|
||||||
//
|
|
||||||
// if (strncmp(data, "GET ", 4) == 0)
|
|
||||||
// {
|
|
||||||
// for(i = 0; i < 40; i++) {
|
|
||||||
// if (((char *)data + 4)[i] == ' ' ||
|
|
||||||
// ((char *)data + 4)[i] == '\r' ||
|
|
||||||
// ((char *)data + 4)[i] == '\n')
|
|
||||||
// {
|
|
||||||
// ((char *)data + 4)[i] = 0;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (*(char *)(data + 4) == '/' && *(char *)(data + 5) == 0)
|
|
||||||
// {
|
|
||||||
// fs_open("/index.html", &file);
|
|
||||||
// } else if (!fs_open((char *)data + 4, &file))
|
|
||||||
// {
|
|
||||||
// fs_open("/404.html", &file);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// hs->file = file.data;
|
|
||||||
// hs->left = file.len;
|
|
||||||
// /* printf("data %p len %ld\n", hs->file, hs->left);*/
|
|
||||||
//
|
|
||||||
// pbuf_free(p);
|
|
||||||
// send_data(pcb, hs);
|
|
||||||
//
|
|
||||||
// /* Tell TCP that we wish be to informed of data that has been
|
|
||||||
// successfully sent by a call to the http_sent() function. */
|
|
||||||
// tcp_sent(pcb, http_sent);
|
|
||||||
// } else
|
|
||||||
// {
|
|
||||||
// pbuf_free(p);
|
|
||||||
// close_conn(pcb, hs);
|
|
||||||
// }
|
|
||||||
// } else
|
|
||||||
// {
|
|
||||||
// pbuf_free(p);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (err == ERR_OK && p == NULL)
|
|
||||||
// {
|
|
||||||
// close_conn(pcb, hs);
|
|
||||||
// }
|
|
||||||
// return ERR_OK;
|
|
||||||
//}
|
|
||||||
|
|
||||||
static struct tcp_pcb* activePcb = 0;
|
|
||||||
static struct pbuf* activePbuf = 0;
|
|
||||||
static struct http_state* activeHttpState = 0;
|
|
||||||
static char* dataPayload = 0;
|
|
||||||
//static char outputBuffer[1200];
|
|
||||||
static int lastDataSentLength = 0;
|
|
||||||
|
|
||||||
int GetRepRapNetworkDataToSendLength();
|
|
||||||
char* GetRepRapNetworkDataToSend();
|
|
||||||
void RepRapNetworkMessage(char* s);
|
|
||||||
void RepRapNetworkReceiveInput(char* ip, int length);
|
|
||||||
void RepRapNetworkDataTransmitted(int length);
|
|
||||||
|
|
||||||
int SendBufferSize()
|
|
||||||
{
|
|
||||||
if(activePcb == 0)
|
|
||||||
return -1;
|
|
||||||
return tcp_sndbuf(activePcb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static err_t DataHasGone(void *arg, struct tcp_pcb *pcb, uint16_t len)
|
|
||||||
{
|
|
||||||
RepRapNetworkDataTransmitted(len);
|
|
||||||
// struct http_state *hs;
|
|
||||||
//
|
|
||||||
// LWIP_UNUSED_ARG(len);
|
|
||||||
//
|
|
||||||
// hs = arg;
|
|
||||||
//
|
|
||||||
// activePcb = pcb;
|
|
||||||
// activeHttpState = hs;
|
|
||||||
//
|
|
||||||
// hs->retries = 0;
|
|
||||||
//
|
|
||||||
// if (hs->left > 0)
|
|
||||||
// {
|
|
||||||
// send_data(pcb, hs);
|
|
||||||
// } else
|
|
||||||
// SetDataToSend();
|
|
||||||
|
|
||||||
// if (hs->left <= 0)
|
|
||||||
// {
|
|
||||||
// CloseConnection();
|
|
||||||
// // close_conn(pcb, hs);
|
|
||||||
// }
|
|
||||||
|
|
||||||
return ERR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SendData(char* data, int length)
|
|
||||||
{
|
|
||||||
if(activePcb == 0)
|
|
||||||
return -1;
|
|
||||||
int err = tcp_write(activePcb, data, length, 0);
|
|
||||||
lastDataSentLength = length;
|
|
||||||
tcp_sent(activePcb, DataHasGone);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
//int SetDataToSend()
|
|
||||||
//{
|
|
||||||
// int i;
|
|
||||||
//
|
|
||||||
// if(activeHttpState == 0)
|
|
||||||
// return -1;
|
|
||||||
//
|
|
||||||
// if(activeHttpState->left > 0)
|
|
||||||
// return 0;
|
|
||||||
//
|
|
||||||
// activeHttpState->left = GetRepRapNetworkDataToSendLength();
|
|
||||||
// activeHttpState->file = outputBuffer;
|
|
||||||
//
|
|
||||||
// if(activeHttpState->left > 0)
|
|
||||||
// {
|
|
||||||
// i = 0;
|
|
||||||
// while(i < activeHttpState->left)
|
|
||||||
// {
|
|
||||||
// outputBuffer[i] = GetRepRapNetworkDataToSend()[i];
|
|
||||||
// i++;
|
|
||||||
// }
|
|
||||||
// outputBuffer[i] = 0;
|
|
||||||
// } else
|
|
||||||
// outputBuffer[0] = 0;
|
|
||||||
//
|
|
||||||
// return 1;
|
|
||||||
//}
|
|
||||||
|
|
||||||
static void FreeBuffer()
|
|
||||||
{
|
|
||||||
if(activePbuf != 0)
|
|
||||||
{
|
|
||||||
pbuf_free(activePbuf);
|
|
||||||
activePbuf = 0;
|
|
||||||
dataPayload = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void CloseConnection()
|
|
||||||
{
|
|
||||||
if(activePcb != 0 && activeHttpState != 0)
|
|
||||||
{
|
|
||||||
close_conn(activePcb, activeHttpState);
|
|
||||||
//activePcb = 0;
|
|
||||||
//activeHttpState = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void FreeBufferAndCloseConnection()
|
|
||||||
{
|
|
||||||
FreeBuffer();
|
|
||||||
CloseConnection();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static err_t
|
|
||||||
http_sent(void *arg, struct tcp_pcb *pcb, uint16_t len)
|
|
||||||
{
|
|
||||||
struct http_state *hs;
|
|
||||||
|
|
||||||
LWIP_UNUSED_ARG(len);
|
|
||||||
|
|
||||||
hs = arg;
|
|
||||||
|
|
||||||
activePcb = pcb;
|
|
||||||
activeHttpState = hs;
|
|
||||||
|
|
||||||
hs->retries = 0;
|
|
||||||
|
|
||||||
if (hs->left > 0)
|
|
||||||
{
|
|
||||||
send_data(pcb, hs);
|
|
||||||
} else
|
|
||||||
SetDataToSend();
|
|
||||||
|
|
||||||
if (hs->left <= 0)
|
|
||||||
{
|
|
||||||
CloseConnection();
|
|
||||||
// close_conn(pcb, hs);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//int HttpSend()
|
|
||||||
//{
|
|
||||||
// if(activePcb != 0 && activeHttpState != 0)
|
|
||||||
// {
|
|
||||||
// send_data(activePcb, activeHttpState);
|
|
||||||
//
|
|
||||||
// /* Tell TCP that we wish be to informed of data that has been
|
|
||||||
// successfully sent by a call to the http_sent() function. */
|
|
||||||
// tcp_sent(activePcb, http_sent);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//static int InterpretAndSend()
|
|
||||||
//{
|
|
||||||
// if(dataPayload == 0)
|
|
||||||
// return false;
|
|
||||||
//
|
|
||||||
// int i;
|
|
||||||
//
|
|
||||||
// struct fs_file file;
|
|
||||||
//
|
|
||||||
// if (strncmp(dataPayload, "GET ", 4) == 0)
|
|
||||||
// //if(GetRepRapNetworkDataToSendLength() > 0)
|
|
||||||
// {
|
|
||||||
// for(i = 0; i < 40; i++) {
|
|
||||||
// if (((char *)dataPayload + 4)[i] == ' ' ||
|
|
||||||
// ((char *)dataPayload + 4)[i] == '\r' ||
|
|
||||||
// ((char *)dataPayload + 4)[i] == '\n')
|
|
||||||
// {
|
|
||||||
// ((char *)dataPayload + 4)[i] = 0;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (*(char *)(dataPayload + 4) == '/' && *(char *)(dataPayload + 5) == 0)
|
|
||||||
// {
|
|
||||||
// fs_open("/index.html", &file);
|
|
||||||
// } else if (!fs_open((char *)dataPayload + 4, &file))
|
|
||||||
// {
|
|
||||||
// fs_open("/404.html", &file);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// activeHttpState->file = file.data;
|
|
||||||
// activeHttpState->left = file.len;
|
|
||||||
//
|
|
||||||
// //activeHttpState->file = GetRepRapNetworkDataToSend();
|
|
||||||
// //activeHttpState->left = GetRepRapNetworkDataToSendLength();
|
|
||||||
//
|
|
||||||
// /* printf("data %p len %ld\n", hs->file, hs->left);*/
|
|
||||||
//
|
|
||||||
// //pbuf_free(p);
|
|
||||||
// FreeBuffer();
|
|
||||||
//// send_data(activePcb, activeHttpState);
|
|
||||||
////
|
|
||||||
//// /* Tell TCP that we wish be to informed of data that has been
|
|
||||||
//// successfully sent by a call to the http_sent() function. */
|
|
||||||
//// tcp_sent(activePcb, http_sent);
|
|
||||||
//
|
|
||||||
// //HttpSend();
|
|
||||||
// } else
|
|
||||||
// {
|
|
||||||
// FreeBufferAndCloseConnection();
|
|
||||||
// //pbuf_free(p);
|
|
||||||
// //close_conn(pcb, hs);
|
|
||||||
// }
|
|
||||||
// return true;
|
|
||||||
//}
|
|
||||||
|
|
||||||
static err_t
|
|
||||||
http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *data;
|
|
||||||
|
|
||||||
struct http_state *hs;
|
|
||||||
|
|
||||||
hs = arg;
|
|
||||||
|
|
||||||
activePcb = pcb;
|
|
||||||
activePbuf = p;
|
|
||||||
activeHttpState = hs;
|
|
||||||
|
|
||||||
if (err == ERR_OK && p != NULL)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Inform TCP that we have taken the data. */
|
|
||||||
tcp_recved(pcb, p->tot_len);
|
|
||||||
|
|
||||||
//if (hs->file == NULL)
|
|
||||||
//if(GetRepRapNetworkDataToSendLength() <= 0)
|
|
||||||
//{
|
|
||||||
data = p->payload;
|
|
||||||
dataPayload = data;
|
|
||||||
|
|
||||||
// Deal with data received
|
|
||||||
|
|
||||||
RepRapNetworkReceiveInput(data, p->len);
|
|
||||||
|
|
||||||
//InterpretAndSend();
|
|
||||||
|
|
||||||
//} /*else
|
|
||||||
//{
|
|
||||||
FreeBuffer();
|
|
||||||
//pbuf_free(p);
|
|
||||||
//}*/
|
|
||||||
//FreeBuffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// if (err == ERR_OK && p == NULL)
|
|
||||||
// {
|
|
||||||
// CloseConnection();
|
|
||||||
// //close_conn(pcb, hs);
|
|
||||||
// }
|
|
||||||
return ERR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
static err_t
|
|
||||||
http_accept(void *arg, struct tcp_pcb *pcb, err_t err)
|
|
||||||
{
|
|
||||||
struct http_state *hs;
|
|
||||||
|
|
||||||
LWIP_UNUSED_ARG(arg);
|
|
||||||
LWIP_UNUSED_ARG(err);
|
|
||||||
|
|
||||||
tcp_setprio(pcb, TCP_PRIO_MIN);
|
|
||||||
|
|
||||||
/* Allocate memory for the structure that holds the state of the
|
|
||||||
connection. */
|
|
||||||
hs = (struct http_state *)mem_malloc(sizeof(struct http_state));
|
|
||||||
|
|
||||||
if (hs == NULL) {
|
|
||||||
//printf("http_accept: Out of memory\n");
|
|
||||||
return ERR_MEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize the structure. */
|
|
||||||
hs->file = NULL;
|
|
||||||
hs->left = 0;
|
|
||||||
hs->retries = 0;
|
|
||||||
|
|
||||||
/* Tell TCP that this is the structure we wish to be passed for our
|
|
||||||
callbacks. */
|
|
||||||
tcp_arg(pcb, hs);
|
|
||||||
|
|
||||||
/* Tell TCP that we wish to be informed of incoming data by a call
|
|
||||||
to the http_recv() function. */
|
|
||||||
tcp_recv(pcb, http_recv);
|
|
||||||
|
|
||||||
tcp_err(pcb, conn_err);
|
|
||||||
|
|
||||||
tcp_poll(pcb, http_poll, 4);
|
|
||||||
return ERR_OK;
|
|
||||||
}
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
httpd_init(void)
|
|
||||||
{
|
|
||||||
//struct tcp_pcb *pcb;
|
|
||||||
|
|
||||||
activePcb = tcp_new();
|
|
||||||
tcp_bind(activePcb, IP_ADDR_ANY, 80);
|
|
||||||
activePcb = tcp_listen(activePcb);
|
|
||||||
tcp_accept(activePcb, http_accept);
|
|
||||||
}
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -108,7 +108,7 @@ close_conn(struct tcp_pcb *pcb, struct http_state *hs)
|
||||||
tcp_close(pcb);
|
tcp_close(pcb);
|
||||||
}
|
}
|
||||||
|
|
||||||
char scratch[40];
|
//char scratch[40];
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
Reference in a new issue