Styling adjustments (PR#2668 & PR#2670)
Keep "astyled" reformatting
This commit is contained in:
parent
b5fb7075b9
commit
0c7f7ebcfb
|
@ -57,12 +57,10 @@ int how_many_E5s_are_here( unsigned char *);
|
|||
|
||||
|
||||
|
||||
void gcode_M100()
|
||||
{
|
||||
void gcode_M100() {
|
||||
static int m100_not_initialized = 1;
|
||||
unsigned char* sp, *ptr;
|
||||
int i, j, n;
|
||||
|
||||
//
|
||||
// M100 D dumps the free memory block from __brkval to the stack pointer.
|
||||
// malloc() eats memory from the start of the block and the stack grows
|
||||
|
@ -72,11 +70,9 @@ int i, j, n;
|
|||
// probably caused by bad pointers. Any unexpected values will be flagged in
|
||||
// the right hand column to help spotting them.
|
||||
//
|
||||
|
||||
#if ENABLED(M100_FREE_MEMORY_DUMPER) // Disable to remove Dump sub-command
|
||||
if (code_seen('D')) {
|
||||
ptr = (unsigned char*) __brkval;
|
||||
|
||||
//
|
||||
// We want to start and end the dump on a nice 16 byte boundry even though
|
||||
// the values we are using are not 16 byte aligned.
|
||||
|
@ -84,12 +80,10 @@ int i, j, n;
|
|||
SERIAL_ECHOPGM("\n__brkval : ");
|
||||
prt_hex_word((unsigned int) ptr);
|
||||
ptr = (unsigned char*)((unsigned long) ptr & 0xfff0);
|
||||
|
||||
sp = top_of_stack();
|
||||
SERIAL_ECHOPGM("\nStack Pointer : ");
|
||||
prt_hex_word((unsigned int) sp);
|
||||
SERIAL_ECHOPGM("\n");
|
||||
|
||||
sp = (unsigned char*)((unsigned long) sp | 0x000f);
|
||||
n = sp - ptr;
|
||||
//
|
||||
|
@ -103,7 +97,6 @@ int i, j, n;
|
|||
SERIAL_ECHOPGM(" ");
|
||||
delay(2);
|
||||
}
|
||||
|
||||
SERIAL_ECHO("|"); // now show where non 0xE5's are
|
||||
for (i = 0; i < 16; i++) {
|
||||
delay(2);
|
||||
|
@ -113,7 +106,6 @@ int i, j, n;
|
|||
SERIAL_ECHOPGM("?");
|
||||
}
|
||||
SERIAL_ECHO("\n");
|
||||
|
||||
ptr += 16;
|
||||
delay(2);
|
||||
}
|
||||
|
@ -121,7 +113,6 @@ int i, j, n;
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
// M100 F requests the code to return the number of free bytes in the memory pool along with
|
||||
// other vital statistics that define the memory pool.
|
||||
|
@ -133,9 +124,7 @@ int i, j, n;
|
|||
ptr = (unsigned char*) __brkval;
|
||||
sp = top_of_stack();
|
||||
n = sp - ptr;
|
||||
|
||||
// Scan through the range looking for the biggest block of 0xE5's we can find
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (*(ptr + i) == (unsigned char) 0xe5) {
|
||||
j = how_many_E5s_are_here((unsigned char*) ptr + i);
|
||||
|
@ -155,7 +144,6 @@ int i, j, n;
|
|||
}
|
||||
if (block_cnt > 1)
|
||||
SERIAL_ECHOLNPGM("\nMemory Corruption detected in free memory area.\n");
|
||||
|
||||
SERIAL_ECHO("\nDone.\n");
|
||||
return;
|
||||
}
|
||||
|
@ -171,11 +159,9 @@ int i, j, n;
|
|||
ptr = (unsigned char*) __brkval;
|
||||
SERIAL_ECHOPAIR("\n__brkval : ", (long) ptr);
|
||||
ptr += 8;
|
||||
|
||||
sp = top_of_stack();
|
||||
SERIAL_ECHOPAIR("\nStack Pointer : ", (long) sp);
|
||||
SERIAL_ECHOLNPGM("\n");
|
||||
|
||||
n = sp - ptr - 64; // -64 just to keep us from finding interrupt activity that
|
||||
// has altered the stack.
|
||||
j = n / (x + 1);
|
||||
|
@ -188,7 +174,6 @@ int i, j, n;
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
// M100 I Initializes the free memory pool so it can be watched and prints vital
|
||||
// statistics that define the free memory pool.
|
||||
|
@ -198,20 +183,15 @@ int i, j, n;
|
|||
ptr = (unsigned char*) __brkval; // Repeated M100 with no sub-command will not destroy the
|
||||
SERIAL_ECHOPAIR("\n__brkval : ", (long) ptr); // state of the initialized free memory pool.
|
||||
ptr += 8;
|
||||
|
||||
sp = top_of_stack();
|
||||
SERIAL_ECHOPAIR("\nStack Pointer : ", (long) sp);
|
||||
SERIAL_ECHOLNPGM("\n");
|
||||
|
||||
n = sp - ptr - 64; // -64 just to keep us from finding interrupt activity that
|
||||
// has altered the stack.
|
||||
|
||||
SERIAL_ECHO(n);
|
||||
SERIAL_ECHOLNPGM(" bytes of memory initialized.\n");
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
*(ptr + i) = (unsigned char) 0xe5;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (*(ptr + i) != (unsigned char) 0xe5) {
|
||||
SERIAL_ECHOPAIR("? address : ", (unsigned long) ptr + i);
|
||||
|
@ -238,8 +218,7 @@ unsigned char *top_of_stack() {
|
|||
// 3 support routines to print hex numbers. We can print a nibble, byte and word
|
||||
//
|
||||
|
||||
void prt_hex_nibble( unsigned int n )
|
||||
{
|
||||
void prt_hex_nibble(unsigned int n) {
|
||||
if (n <= 9)
|
||||
SERIAL_ECHO(n);
|
||||
else
|
||||
|
@ -247,14 +226,12 @@ void prt_hex_nibble( unsigned int n )
|
|||
delay(2);
|
||||
}
|
||||
|
||||
void prt_hex_byte(unsigned int b)
|
||||
{
|
||||
void prt_hex_byte(unsigned int b) {
|
||||
prt_hex_nibble((b & 0xf0) >> 4);
|
||||
prt_hex_nibble(b & 0x0f);
|
||||
}
|
||||
|
||||
void prt_hex_word(unsigned int w)
|
||||
{
|
||||
void prt_hex_word(unsigned int w) {
|
||||
prt_hex_byte((w & 0xff00) >> 8);
|
||||
prt_hex_byte(w & 0x0ff);
|
||||
}
|
||||
|
@ -262,10 +239,8 @@ void prt_hex_word(unsigned int w)
|
|||
// how_many_E5s_are_here() is a utility function to easily find out how many 0xE5's are
|
||||
// at the specified location. Having this logic as a function simplifies the search code.
|
||||
//
|
||||
int how_many_E5s_are_here( unsigned char *p)
|
||||
{
|
||||
int how_many_E5s_are_here(unsigned char* p) {
|
||||
int n;
|
||||
|
||||
for (n = 0; n < 32000; n++) {
|
||||
if (*(p + n) != (unsigned char) 0xe5)
|
||||
return n - 1;
|
||||
|
|
|
@ -102,7 +102,8 @@ void MarlinSerial::end() {
|
|||
int MarlinSerial::peek(void) {
|
||||
if (rx_buffer.head == rx_buffer.tail) {
|
||||
return -1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return rx_buffer.buffer[rx_buffer.tail];
|
||||
}
|
||||
}
|
||||
|
@ -162,7 +163,8 @@ void MarlinSerial::print(long n, int base) {
|
|||
n = -n;
|
||||
}
|
||||
printNumber(n, 10);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
printNumber(n, base);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,7 +99,6 @@ class MarlinSerial { //: public Stream
|
|||
FORCE_INLINE void write(uint8_t c) {
|
||||
while (!TEST(M_UCSRxA, M_UDREx))
|
||||
;
|
||||
|
||||
M_UDRx = c;
|
||||
}
|
||||
|
||||
|
|
|
@ -455,12 +455,10 @@ void serial_echopair_P(const char *s_P, unsigned long v) { serialprintPGM(s_P);
|
|||
|
||||
int freeMemory() {
|
||||
int free_memory;
|
||||
|
||||
if ((int)__brkval == 0)
|
||||
free_memory = ((int)&free_memory) - ((int)&__bss_end);
|
||||
else
|
||||
free_memory = ((int)&free_memory) - ((int)__brkval);
|
||||
|
||||
return free_memory;
|
||||
}
|
||||
}
|
||||
|
@ -509,7 +507,6 @@ void enqueuecommands_P(const char* pgcode) {
|
|||
* Returns false if it doesn't add any command
|
||||
*/
|
||||
bool enqueuecommand(const char* cmd) {
|
||||
|
||||
if (*cmd == ';' || commands_in_queue >= BUFSIZE) return false;
|
||||
|
||||
// This is dangerous if a mixing of serial and this happens
|
||||
|
@ -1441,39 +1438,32 @@ static void setup_for_endstop_move() {
|
|||
prepare_move_raw(); // this will also set_current_to_destination
|
||||
|
||||
// Move to engage deployment
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE != Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE != Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE)
|
||||
feedrate = Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_X != Z_PROBE_ALLEN_KEY_DEPLOY_1_X) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_X != Z_PROBE_ALLEN_KEY_DEPLOY_1_X)
|
||||
destination[X_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_2_X;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_Y != Z_PROBE_ALLEN_KEY_DEPLOY_1_Y) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_Y != Z_PROBE_ALLEN_KEY_DEPLOY_1_Y)
|
||||
destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_2_Y;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_Z != Z_PROBE_ALLEN_KEY_DEPLOY_1_Z) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_2_Z != Z_PROBE_ALLEN_KEY_DEPLOY_1_Z)
|
||||
destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_2_Z;
|
||||
}
|
||||
prepare_move_raw();
|
||||
|
||||
#ifdef Z_PROBE_ALLEN_KEY_DEPLOY_3_X
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE != Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE != Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE)
|
||||
feedrate = Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE;
|
||||
}
|
||||
|
||||
// Move to trigger deployment
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE != Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE != Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE)
|
||||
feedrate = Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_X != Z_PROBE_ALLEN_KEY_DEPLOY_2_X) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_X != Z_PROBE_ALLEN_KEY_DEPLOY_2_X)
|
||||
destination[X_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_3_X;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_Y != Z_PROBE_ALLEN_KEY_DEPLOY_2_Y) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_Y != Z_PROBE_ALLEN_KEY_DEPLOY_2_Y)
|
||||
destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_3_Y;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_Z != Z_PROBE_ALLEN_KEY_DEPLOY_2_Z) {
|
||||
if (Z_PROBE_ALLEN_KEY_DEPLOY_3_Z != Z_PROBE_ALLEN_KEY_DEPLOY_2_Z)
|
||||
destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_3_Z;
|
||||
}
|
||||
|
||||
prepare_move_raw();
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1505,7 +1495,6 @@ static void setup_for_endstop_move() {
|
|||
}
|
||||
|
||||
static void stow_z_probe(bool doRaise = true) {
|
||||
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (marlin_debug_flags & DEBUG_LEVELING) {
|
||||
print_xyz("stow_z_probe > current_position", current_position);
|
||||
|
@ -1553,28 +1542,22 @@ static void setup_for_endstop_move() {
|
|||
prepare_move_raw();
|
||||
|
||||
// Move the nozzle down to push the Z probe into retracted position
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE != Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE) {
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE != Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE)
|
||||
feedrate = Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_2_X != Z_PROBE_ALLEN_KEY_STOW_1_X) {
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_2_X != Z_PROBE_ALLEN_KEY_STOW_1_X)
|
||||
destination[X_AXIS] = Z_PROBE_ALLEN_KEY_STOW_2_X;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_2_Y != Z_PROBE_ALLEN_KEY_STOW_1_Y) {
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_2_Y != Z_PROBE_ALLEN_KEY_STOW_1_Y)
|
||||
destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_STOW_2_Y;
|
||||
}
|
||||
destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_STOW_2_Z;
|
||||
prepare_move_raw();
|
||||
|
||||
// Move up for safety
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE != Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE) {
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE != Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE)
|
||||
feedrate = Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_3_X != Z_PROBE_ALLEN_KEY_STOW_2_X) {
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_3_X != Z_PROBE_ALLEN_KEY_STOW_2_X)
|
||||
destination[X_AXIS] = Z_PROBE_ALLEN_KEY_STOW_3_X;
|
||||
}
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_3_Y != Z_PROBE_ALLEN_KEY_STOW_2_Y) {
|
||||
if (Z_PROBE_ALLEN_KEY_STOW_3_Y != Z_PROBE_ALLEN_KEY_STOW_2_Y)
|
||||
destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_STOW_3_Y;
|
||||
}
|
||||
destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_STOW_3_Z;
|
||||
prepare_move_raw();
|
||||
|
||||
|
@ -1601,9 +1584,7 @@ static void setup_for_endstop_move() {
|
|||
}
|
||||
Stop();
|
||||
}
|
||||
|
||||
#endif // Z_PROBE_ALLEN_KEY
|
||||
|
||||
}
|
||||
|
||||
enum ProbeAction {
|
||||
|
@ -1615,7 +1596,6 @@ static void setup_for_endstop_move() {
|
|||
|
||||
// Probe bed height at position (x,y), returns the measured z value
|
||||
static float probe_pt(float x, float y, float z_before, ProbeAction probe_action = ProbeDeployAndStow, int verbose_level = 1) {
|
||||
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (marlin_debug_flags & DEBUG_LEVELING) {
|
||||
SERIAL_ECHOLNPGM("probe_pt >>>");
|
||||
|
@ -2732,7 +2712,8 @@ inline void gcode_G28() {
|
|||
}
|
||||
if (code_seen('Z')) {
|
||||
z = code_value();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
SERIAL_PROTOCOLPGM("Z not entered.\n");
|
||||
return;
|
||||
}
|
||||
|
@ -2824,6 +2805,7 @@ inline void gcode_G28() {
|
|||
}
|
||||
|
||||
int auto_bed_leveling_grid_points = AUTO_BED_LEVELING_GRID_POINTS;
|
||||
|
||||
#if DISABLED(DELTA)
|
||||
if (code_seen('P')) auto_bed_leveling_grid_points = code_value_short();
|
||||
if (auto_bed_leveling_grid_points < 2) {
|
||||
|
@ -3434,7 +3416,7 @@ inline void gcode_M17() {
|
|||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif //SDSUPPORT
|
||||
|
||||
/**
|
||||
* M31: Get the time since the start of SD Print (or last M109)
|
||||
|
@ -4470,7 +4452,6 @@ inline void gcode_M204() {
|
|||
SERIAL_ECHOPAIR("Setting Travel Acceleration: ", travel_acceleration);
|
||||
SERIAL_EOL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4555,7 +4536,9 @@ inline void gcode_M206() {
|
|||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#elif ENABLED(Z_DUAL_ENDSTOPS) // !DELTA && ENABLED(Z_DUAL_ENDSTOPS)
|
||||
|
||||
/**
|
||||
* M666: For Z Dual Endstop setup, set z axis offset to the z2 axis.
|
||||
*/
|
||||
|
@ -5610,7 +5593,6 @@ inline void gcode_T(uint8_t tmp_extruder) {
|
|||
current_position[Z_AXIS] = current_position[Z_AXIS] -
|
||||
extruder_offset[Z_AXIS][active_extruder] +
|
||||
extruder_offset[Z_AXIS][tmp_extruder];
|
||||
|
||||
active_extruder = tmp_extruder;
|
||||
|
||||
// This function resets the max/min values - the current position may be overwritten below.
|
||||
|
@ -6372,8 +6354,7 @@ void clamp_to_software_endstops(float target[3]) {
|
|||
#if ENABLED(MESH_BED_LEVELING)
|
||||
|
||||
// This function is used to split lines on mesh borders so each segment is only part of one mesh area
|
||||
void mesh_plan_buffer_line(float x, float y, float z, const float e, float feed_rate, const uint8_t &extruder, uint8_t x_splits=0xff, uint8_t y_splits=0xff)
|
||||
{
|
||||
void mesh_plan_buffer_line(float x, float y, float z, const float e, float feed_rate, const uint8_t& extruder, uint8_t x_splits = 0xff, uint8_t y_splits = 0xff) {
|
||||
if (!mbl.active) {
|
||||
plan_buffer_line(x, y, z, e, feed_rate, extruder);
|
||||
set_current_to_destination();
|
||||
|
@ -6623,15 +6604,15 @@ void plan_arc(
|
|||
|
||||
// CCW angle of rotation between position and target from the circle center. Only one atan2() trig computation required.
|
||||
float angular_travel = atan2(r_axis0 * rt_axis1 - r_axis1 * rt_axis0, r_axis0 * rt_axis0 + r_axis1 * rt_axis1);
|
||||
if (angular_travel < 0) { angular_travel += RADIANS(360); }
|
||||
if (clockwise) { angular_travel -= RADIANS(360); }
|
||||
if (angular_travel < 0) angular_travel += RADIANS(360);
|
||||
if (clockwise) angular_travel -= RADIANS(360);
|
||||
|
||||
// Make a circle if the angular rotation is 0
|
||||
if (current_position[X_AXIS] == target[X_AXIS] && current_position[Y_AXIS] == target[Y_AXIS] && angular_travel == 0)
|
||||
angular_travel += RADIANS(360);
|
||||
|
||||
float mm_of_travel = hypot(angular_travel * radius, fabs(linear_travel));
|
||||
if (mm_of_travel < 0.001) { return; }
|
||||
if (mm_of_travel < 0.001) return;
|
||||
uint16_t segments = floor(mm_of_travel / MM_PER_ARC_SEGMENT);
|
||||
if (segments == 0) segments = 1;
|
||||
|
||||
|
@ -7113,7 +7094,6 @@ void kill(const char *lcd_msg) {
|
|||
void setPwmFrequency(uint8_t pin, int val) {
|
||||
val &= 0x07;
|
||||
switch (digitalPinToTimer(pin)) {
|
||||
|
||||
#if defined(TCCR0A)
|
||||
case TIMER0A:
|
||||
case TIMER0B:
|
||||
|
@ -7121,7 +7101,6 @@ void kill(const char *lcd_msg) {
|
|||
// TCCR0B |= val;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(TCCR1A)
|
||||
case TIMER1A:
|
||||
case TIMER1B:
|
||||
|
@ -7129,7 +7108,6 @@ void kill(const char *lcd_msg) {
|
|||
// TCCR1B |= val;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(TCCR2)
|
||||
case TIMER2:
|
||||
case TIMER2:
|
||||
|
@ -7137,7 +7115,6 @@ void kill(const char *lcd_msg) {
|
|||
TCCR2 |= val;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(TCCR2A)
|
||||
case TIMER2A:
|
||||
case TIMER2B:
|
||||
|
@ -7145,7 +7122,6 @@ void kill(const char *lcd_msg) {
|
|||
TCCR2B |= val;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(TCCR3A)
|
||||
case TIMER3A:
|
||||
case TIMER3B:
|
||||
|
@ -7154,7 +7130,6 @@ void kill(const char *lcd_msg) {
|
|||
TCCR3B |= val;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(TCCR4A)
|
||||
case TIMER4A:
|
||||
case TIMER4B:
|
||||
|
@ -7163,7 +7138,6 @@ void kill(const char *lcd_msg) {
|
|||
TCCR4B |= val;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(TCCR5A)
|
||||
case TIMER5A:
|
||||
case TIMER5B:
|
||||
|
@ -7172,8 +7146,6 @@ void kill(const char *lcd_msg) {
|
|||
TCCR5B |= val;
|
||||
break;
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif // FAST_PWM_FAN
|
||||
|
|
|
@ -112,10 +112,9 @@ static uint8_t spiRec() {
|
|||
//------------------------------------------------------------------------------
|
||||
/** Soft SPI read data */
|
||||
static void spiRead(uint8_t* buf, uint16_t nbyte) {
|
||||
for (uint16_t i = 0; i < nbyte; i++) {
|
||||
for (uint16_t i = 0; i < nbyte; i++)
|
||||
buf[i] = spiRec();
|
||||
}
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
/** Soft SPI send byte */
|
||||
static void spiSend(uint8_t data) {
|
||||
|
@ -144,10 +143,9 @@ static void spiSend(uint8_t data) {
|
|||
/** Soft SPI send block */
|
||||
void spiSendBlock(uint8_t token, const uint8_t* buf) {
|
||||
spiSend(token);
|
||||
for (uint16_t i = 0; i < 512; i++) {
|
||||
for (uint16_t i = 0; i < 512; i++)
|
||||
spiSend(buf[i]);
|
||||
}
|
||||
}
|
||||
#endif // SOFTWARE_SPI
|
||||
//------------------------------------------------------------------------------
|
||||
// send command and return error code. Return zero for OK
|
||||
|
@ -257,7 +255,6 @@ bool Sd2Card::erase(uint32_t firstBlock, uint32_t lastBlock) {
|
|||
}
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -322,7 +319,8 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) {
|
|||
// check SD version
|
||||
if ((cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) {
|
||||
type(SD_CARD_TYPE_SD1);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// only need last byte of r7 response
|
||||
for (uint8_t i = 0; i < 4; i++) status_ = spiRec();
|
||||
if (status_ != 0XAA) {
|
||||
|
@ -384,8 +382,7 @@ bool Sd2Card::readBlock(uint32_t blockNumber, uint8_t* dst) {
|
|||
if (retryCnt > 0) goto retry;
|
||||
goto fail;
|
||||
}
|
||||
if (!readData(dst, 512))
|
||||
{
|
||||
if (!readData(dst, 512)) {
|
||||
if (retryCnt > 0) goto retry;
|
||||
goto fail;
|
||||
}
|
||||
|
@ -488,8 +485,7 @@ bool Sd2Card::readData(uint8_t* dst, uint16_t count) {
|
|||
uint16_t calcCrc = CRC_CCITT(dst, count);
|
||||
uint16_t recvCrc = spiRec() << 8;
|
||||
recvCrc |= spiRec();
|
||||
if (calcCrc != recvCrc)
|
||||
{
|
||||
if (calcCrc != recvCrc) {
|
||||
error(SD_CARD_ERROR_CRC);
|
||||
goto fail;
|
||||
}
|
||||
|
@ -501,7 +497,6 @@ bool Sd2Card::readData(uint8_t* dst, uint16_t count) {
|
|||
#endif
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -515,7 +510,6 @@ bool Sd2Card::readRegister(uint8_t cmd, void* buf) {
|
|||
goto fail;
|
||||
}
|
||||
return readData(dst, 16);
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -539,7 +533,6 @@ bool Sd2Card::readStart(uint32_t blockNumber) {
|
|||
}
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -558,7 +551,6 @@ bool Sd2Card::readStop() {
|
|||
}
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -592,7 +584,6 @@ bool Sd2Card::waitNotBusy(uint16_t timeoutMillis) {
|
|||
if (((uint16_t)millis() - t0) >= timeoutMillis) goto fail;
|
||||
}
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -626,7 +617,6 @@ bool Sd2Card::writeBlock(uint32_t blockNumber, const uint8_t* src) {
|
|||
}
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -644,7 +634,6 @@ bool Sd2Card::writeData(const uint8_t* src) {
|
|||
if (!writeData(WRITE_MULTIPLE_TOKEN, src)) goto fail;
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
error(SD_CARD_ERROR_WRITE_MULTIPLE);
|
||||
chipSelectHigh();
|
||||
|
@ -664,7 +653,6 @@ bool Sd2Card::writeData(uint8_t token, const uint8_t* src) {
|
|||
goto fail;
|
||||
}
|
||||
return true;
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -695,7 +683,6 @@ bool Sd2Card::writeStart(uint32_t blockNumber, uint32_t eraseCount) {
|
|||
}
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
chipSelectHigh();
|
||||
return false;
|
||||
|
@ -713,7 +700,6 @@ bool Sd2Card::writeStop() {
|
|||
if (!waitNotBusy(SD_WRITE_TIMEOUT)) goto fail;
|
||||
chipSelectHigh();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
error(SD_CARD_ERROR_STOP_TRAN);
|
||||
chipSelectHigh();
|
||||
|
|
|
@ -68,7 +68,6 @@ bool SdBaseFile::addDirCluster() {
|
|||
// Increase directory file size by cluster size
|
||||
fileSize_ += 512UL << vol_->clusterSizeShift_;
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -78,7 +77,6 @@ bool SdBaseFile::addDirCluster() {
|
|||
dir_t* SdBaseFile::cacheDirEntry(uint8_t action) {
|
||||
if (!vol_->cacheRawBlock(dirBlock_, action)) goto fail;
|
||||
return vol_->cache()->dir + dirIndex_;
|
||||
|
||||
fail:
|
||||
return 0;
|
||||
}
|
||||
|
@ -167,7 +165,6 @@ bool SdBaseFile::createContiguous(SdBaseFile* dirFile,
|
|||
flags_ |= F_FILE_DIR_DIRTY;
|
||||
|
||||
return sync();
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -191,7 +188,6 @@ bool SdBaseFile::dirEntry(dir_t* dir) {
|
|||
// copy to caller's struct
|
||||
memcpy(dir, p, sizeof(dir_t));
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -258,7 +254,8 @@ int16_t SdBaseFile::fgets(char* str, int16_t num, char* delim) {
|
|||
str[n++] = ch;
|
||||
if (!delim) {
|
||||
if (ch == '\n') break;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (strchr(delim, ch)) break;
|
||||
}
|
||||
}
|
||||
|
@ -392,7 +389,8 @@ bool SdBaseFile::make83Name(const char* str, uint8_t* name, const char** ptr) {
|
|||
if (n == 10) goto fail; // only one dot allowed
|
||||
n = 10; // max index for full 8.3 name
|
||||
i = 8; // place for extension
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// illegal FAT characters
|
||||
PGM_P p = PSTR("|<>^+=?/[];,*\"\\");
|
||||
uint8_t b;
|
||||
|
@ -406,7 +404,6 @@ bool SdBaseFile::make83Name(const char* str, uint8_t* name, const char** ptr) {
|
|||
*ptr = str;
|
||||
// must have a file name, extension is optional
|
||||
return name[0] != ' ';
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -454,7 +451,6 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const char* path, bool pFlag) {
|
|||
sub = parent != &dir1 ? &dir1 : &dir2;
|
||||
}
|
||||
return mkdir(parent, dname);
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -503,7 +499,8 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const uint8_t dname[11]) {
|
|||
if (parent->isRoot()) {
|
||||
d.firstClusterLow = 0;
|
||||
d.firstClusterHigh = 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
d.firstClusterLow = parent->firstCluster_ & 0XFFFF;
|
||||
d.firstClusterHigh = parent->firstCluster_ >> 16;
|
||||
}
|
||||
|
@ -512,7 +509,6 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const uint8_t dname[11]) {
|
|||
|
||||
// write first block
|
||||
return vol_->cacheFlush();
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -609,7 +605,6 @@ bool SdBaseFile::open(SdBaseFile* dirFile, const char* path, uint8_t oflag) {
|
|||
sub = parent != &dir1 ? &dir1 : &dir2;
|
||||
}
|
||||
return open(parent, dname, oflag);
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -641,7 +636,8 @@ bool SdBaseFile::open(SdBaseFile* dirFile,
|
|||
}
|
||||
// done if no entries follow
|
||||
if (p->name[0] == DIR_NAME_FREE) break;
|
||||
} else if (!memcmp(dname, p->name, 11)) {
|
||||
}
|
||||
else if (!memcmp(dname, p->name, 11)) {
|
||||
fileFound = true;
|
||||
break;
|
||||
}
|
||||
|
@ -649,14 +645,16 @@ bool SdBaseFile::open(SdBaseFile* dirFile,
|
|||
if (fileFound) {
|
||||
// don't open existing file if O_EXCL
|
||||
if (oflag & O_EXCL) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// don't create unless O_CREAT and O_WRITE
|
||||
if (!(oflag & O_CREAT) || !(oflag & O_WRITE)) goto fail;
|
||||
if (emptyFound) {
|
||||
index = dirIndex_;
|
||||
p = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
|
||||
if (!p) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (dirFile->type_ == FAT_FILE_TYPE_ROOT_FIXED) goto fail;
|
||||
|
||||
// add and zero cluster for dirFile - first cluster is in cache for write
|
||||
|
@ -674,7 +672,8 @@ bool SdBaseFile::open(SdBaseFile* dirFile,
|
|||
if (dateTime_) {
|
||||
// call user date/time function
|
||||
dateTime_(&p->creationDate, &p->creationTime);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// use default date/time
|
||||
p->creationDate = FAT_DEFAULT_DATE;
|
||||
p->creationTime = FAT_DEFAULT_TIME;
|
||||
|
@ -688,7 +687,6 @@ bool SdBaseFile::open(SdBaseFile* dirFile,
|
|||
}
|
||||
// open entry in cache
|
||||
return openCachedEntry(index, oflag);
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -731,7 +729,6 @@ bool SdBaseFile::open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag) {
|
|||
}
|
||||
// open cached entry
|
||||
return openCachedEntry(index & 0XF, oflag);
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -757,10 +754,12 @@ bool SdBaseFile::openCachedEntry(uint8_t dirIndex, uint8_t oflag) {
|
|||
if (DIR_IS_FILE(p)) {
|
||||
fileSize_ = p->fileSize;
|
||||
type_ = FAT_FILE_TYPE_NORMAL;
|
||||
} else if (DIR_IS_SUBDIR(p)) {
|
||||
}
|
||||
else if (DIR_IS_SUBDIR(p)) {
|
||||
if (!vol_->chainSize(firstCluster_, &fileSize_)) goto fail;
|
||||
type_ = FAT_FILE_TYPE_SUBDIR;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
// save open flags for read/write
|
||||
|
@ -771,7 +770,6 @@ bool SdBaseFile::openCachedEntry(uint8_t dirIndex, uint8_t oflag) {
|
|||
curPosition_ = 0;
|
||||
if ((oflag & O_TRUNC) && !truncate(0)) return false;
|
||||
return oflag & O_AT_END ? seekEnd(0) : true;
|
||||
|
||||
fail:
|
||||
type_ = FAT_FILE_TYPE_CLOSED;
|
||||
return false;
|
||||
|
@ -818,7 +816,6 @@ bool SdBaseFile::openNext(SdBaseFile* dirFile, uint8_t oflag) {
|
|||
return openCachedEntry(index, oflag);
|
||||
}
|
||||
}
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -862,8 +859,9 @@ bool SdBaseFile::openParent(SdBaseFile* dir) {
|
|||
// '..' is pointer to first cluster of parent. open '../..' to find parent
|
||||
if (p->firstClusterHigh == 0 && p->firstClusterLow == 0) {
|
||||
if (!file.openRoot(dir->volume())) goto fail;
|
||||
} else {
|
||||
if (!file.openCachedEntry(1, O_READ)) goto fail;
|
||||
}
|
||||
else if (!file.openCachedEntry(1, O_READ)) {
|
||||
goto fail;
|
||||
}
|
||||
// search for parent in '../..'
|
||||
do {
|
||||
|
@ -873,7 +871,6 @@ bool SdBaseFile::openParent(SdBaseFile* dir) {
|
|||
} while (c != cluster);
|
||||
// open parent
|
||||
return open(&file, file.curPosition() / 32 - 1, O_READ);
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -895,11 +892,13 @@ bool SdBaseFile::openRoot(SdVolume* vol) {
|
|||
type_ = FAT_FILE_TYPE_ROOT_FIXED;
|
||||
firstCluster_ = 0;
|
||||
fileSize_ = 32 * vol->rootDirEntryCount();
|
||||
} else if (vol->fatType() == 32) {
|
||||
}
|
||||
else if (vol->fatType() == 32) {
|
||||
type_ = FAT_FILE_TYPE_ROOT32;
|
||||
firstCluster_ = vol->rootDirStart();
|
||||
if (!vol->chainSize(firstCluster_, &fileSize_)) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// volume is not initialized, invalid, or FAT12 without support
|
||||
return false;
|
||||
}
|
||||
|
@ -915,7 +914,6 @@ bool SdBaseFile::openRoot(SdVolume* vol) {
|
|||
dirBlock_ = 0;
|
||||
dirIndex_ = 0;
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -1060,14 +1058,16 @@ int16_t SdBaseFile::read(void* buf, uint16_t nbyte) {
|
|||
offset = curPosition_ & 0X1FF; // offset in block
|
||||
if (type_ == FAT_FILE_TYPE_ROOT_FIXED) {
|
||||
block = vol_->rootDirStart() + (curPosition_ >> 9);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
uint8_t blockOfCluster = vol_->blockOfCluster(curPosition_);
|
||||
if (offset == 0 && blockOfCluster == 0) {
|
||||
// start of new cluster
|
||||
if (curPosition_ == 0) {
|
||||
// use first cluster in file
|
||||
curCluster_ = firstCluster_;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// get next cluster from FAT
|
||||
if (!vol_->fatGet(curCluster_, &curCluster_)) goto fail;
|
||||
}
|
||||
|
@ -1082,7 +1082,8 @@ int16_t SdBaseFile::read(void* buf, uint16_t nbyte) {
|
|||
// no buffering needed if n == 512
|
||||
if (n == 512 && block != vol_->cacheBlockNumber()) {
|
||||
if (!vol_->readBlock(block, dst)) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// read block to cache and copy data to caller
|
||||
if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_READ)) goto fail;
|
||||
uint8_t* src = vol_->cache()->data + offset;
|
||||
|
@ -1093,7 +1094,6 @@ int16_t SdBaseFile::read(void* buf, uint16_t nbyte) {
|
|||
toRead -= n;
|
||||
}
|
||||
return nbyte;
|
||||
|
||||
fail:
|
||||
return -1;
|
||||
}
|
||||
|
@ -1166,7 +1166,6 @@ dir_t* SdBaseFile::readDirCache() {
|
|||
|
||||
// return pointer to entry
|
||||
return vol_->cache()->dir + i;
|
||||
|
||||
fail:
|
||||
return 0;
|
||||
}
|
||||
|
@ -1202,7 +1201,6 @@ bool SdBaseFile::remove() {
|
|||
// write entry to SD
|
||||
return vol_->cacheFlush();
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -1228,7 +1226,6 @@ bool SdBaseFile::remove(SdBaseFile* dirFile, const char* path) {
|
|||
SdBaseFile file;
|
||||
if (!file.open(dirFile, path, O_WRITE)) goto fail;
|
||||
return file.remove();
|
||||
|
||||
fail:
|
||||
// can't set iostate - static function
|
||||
return false;
|
||||
|
@ -1272,7 +1269,8 @@ bool SdBaseFile::rename(SdBaseFile* dirFile, const char* newPath) {
|
|||
if (!file.open(dirFile, newPath, O_CREAT | O_EXCL | O_WRITE)) {
|
||||
goto restore;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// don't create missing path prefix components
|
||||
if (!file.mkdir(dirFile, newPath, false)) {
|
||||
goto restore;
|
||||
|
@ -1358,7 +1356,6 @@ bool SdBaseFile::rmdir() {
|
|||
type_ = FAT_FILE_TYPE_NORMAL;
|
||||
flags_ |= O_WRITE;
|
||||
return remove();
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -1402,7 +1399,8 @@ bool SdBaseFile::rmRfStar() {
|
|||
if (f.isSubDir()) {
|
||||
// recursively delete
|
||||
if (!f.rmRfStar()) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// ignore read-only
|
||||
f.flags_ |= O_WRITE;
|
||||
if (!f.remove()) goto fail;
|
||||
|
@ -1417,7 +1415,6 @@ bool SdBaseFile::rmRfStar() {
|
|||
if (!rmdir()) goto fail;
|
||||
}
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -1465,7 +1462,8 @@ bool SdBaseFile::seekSet(uint32_t pos) {
|
|||
if (nNew < nCur || curPosition_ == 0) {
|
||||
// must follow chain from first cluster
|
||||
curCluster_ = firstCluster_;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// advance from curPosition
|
||||
nNew -= nCur;
|
||||
}
|
||||
|
@ -1637,7 +1635,6 @@ bool SdBaseFile::timestamp(uint8_t flags, uint16_t year, uint8_t month,
|
|||
d->lastWriteTime = dirTime;
|
||||
}
|
||||
return vol_->cacheFlush();
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -1674,7 +1671,8 @@ bool SdBaseFile::truncate(uint32_t length) {
|
|||
// free all clusters
|
||||
if (!vol_->freeChain(firstCluster_)) goto fail;
|
||||
firstCluster_ = 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
uint32_t toFree;
|
||||
if (!vol_->fatGet(curCluster_, &toFree)) goto fail;
|
||||
|
||||
|
@ -1739,16 +1737,19 @@ int16_t SdBaseFile::write(const void* buf, uint16_t nbyte) {
|
|||
if (firstCluster_ == 0) {
|
||||
// allocate first cluster of file
|
||||
if (!addCluster()) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
curCluster_ = firstCluster_;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
uint32_t next;
|
||||
if (!vol_->fatGet(curCluster_, &next)) goto fail;
|
||||
if (vol_->isEOC(next)) {
|
||||
// add cluster if at end of chain
|
||||
if (!addCluster()) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
curCluster_ = next;
|
||||
}
|
||||
}
|
||||
|
@ -1768,13 +1769,15 @@ int16_t SdBaseFile::write(const void* buf, uint16_t nbyte) {
|
|||
vol_->cacheSetBlockNumber(0XFFFFFFFF, false);
|
||||
}
|
||||
if (!vol_->writeBlock(block, src)) goto fail;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (blockOffset == 0 && curPosition_ >= fileSize_) {
|
||||
// start of new block don't need to read into cache
|
||||
if (!vol_->cacheFlush()) goto fail;
|
||||
// set cache dirty and SD address of block
|
||||
vol_->cacheSetBlockNumber(block, true);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// rewrite part of block
|
||||
if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_WRITE)) goto fail;
|
||||
}
|
||||
|
@ -1789,7 +1792,8 @@ int16_t SdBaseFile::write(const void* buf, uint16_t nbyte) {
|
|||
// update fileSize and insure sync will update dir entry
|
||||
fileSize_ = curPosition_;
|
||||
flags_ |= F_FILE_DIR_DIRTY;
|
||||
} else if (dateTime_ && nbyte) {
|
||||
}
|
||||
else if (dateTime_ && nbyte) {
|
||||
// insure sync will update modified date and time
|
||||
flags_ |= F_FILE_DIR_DIRTY;
|
||||
}
|
||||
|
|
|
@ -55,13 +55,11 @@ int16_t SdFile::write(const void* buf, uint16_t nbyte) {
|
|||
* Use writeError to check for errors.
|
||||
*/
|
||||
#if ARDUINO >= 100
|
||||
size_t SdFile::write(uint8_t b)
|
||||
{
|
||||
size_t SdFile::write(uint8_t b) {
|
||||
return SdBaseFile::write(&b, 1);
|
||||
}
|
||||
#else
|
||||
void SdFile::write(uint8_t b)
|
||||
{
|
||||
void SdFile::write(uint8_t b) {
|
||||
SdBaseFile::write(&b, 1);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -50,7 +50,8 @@ bool SdVolume::allocContiguous(uint32_t count, uint32_t* curCluster) {
|
|||
|
||||
// don't save new start location
|
||||
setStart = false;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// start at likely place for free cluster
|
||||
bgnCluster = allocSearchStart_;
|
||||
|
||||
|
@ -75,7 +76,8 @@ bool SdVolume::allocContiguous(uint32_t count, uint32_t* curCluster) {
|
|||
if (f != 0) {
|
||||
// cluster in use try next cluster as bgnCluster
|
||||
bgnCluster = endCluster + 1;
|
||||
} else if ((endCluster - bgnCluster + 1) == count) {
|
||||
}
|
||||
else if ((endCluster - bgnCluster + 1) == count) {
|
||||
// done - found space
|
||||
break;
|
||||
}
|
||||
|
@ -99,7 +101,6 @@ bool SdVolume::allocContiguous(uint32_t count, uint32_t* curCluster) {
|
|||
if (setStart) allocSearchStart_ = bgnCluster + 1;
|
||||
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -119,7 +120,6 @@ bool SdVolume::cacheFlush() {
|
|||
cacheDirty_ = 0;
|
||||
}
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -132,7 +132,6 @@ bool SdVolume::cacheRawBlock(uint32_t blockNumber, bool dirty) {
|
|||
}
|
||||
if (dirty) cacheDirty_ = true;
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -146,7 +145,6 @@ bool SdVolume::chainSize(uint32_t cluster, uint32_t* size) {
|
|||
} while (!isEOC(cluster));
|
||||
*size = s;
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -173,9 +171,11 @@ bool SdVolume::fatGet(uint32_t cluster, uint32_t* value) {
|
|||
}
|
||||
if (fatType_ == 16) {
|
||||
lba = fatStartBlock_ + (cluster >> 8);
|
||||
} else if (fatType_ == 32) {
|
||||
}
|
||||
else if (fatType_ == 32) {
|
||||
lba = fatStartBlock_ + (cluster >> 7);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
if (lba != cacheBlockNumber_) {
|
||||
|
@ -183,11 +183,11 @@ bool SdVolume::fatGet(uint32_t cluster, uint32_t* value) {
|
|||
}
|
||||
if (fatType_ == 16) {
|
||||
*value = cacheBuffer_.fat16[cluster & 0XFF];
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
*value = cacheBuffer_.fat32[cluster & 0X7F] & FAT32MASK;
|
||||
}
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -231,22 +231,24 @@ bool SdVolume::fatPut(uint32_t cluster, uint32_t value) {
|
|||
}
|
||||
if (fatType_ == 16) {
|
||||
lba = fatStartBlock_ + (cluster >> 8);
|
||||
} else if (fatType_ == 32) {
|
||||
}
|
||||
else if (fatType_ == 32) {
|
||||
lba = fatStartBlock_ + (cluster >> 7);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
if (!cacheRawBlock(lba, CACHE_FOR_WRITE)) goto fail;
|
||||
// store entry
|
||||
if (fatType_ == 16) {
|
||||
cacheBuffer_.fat16[cluster & 0XFF] = value;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
cacheBuffer_.fat32[cluster & 0X7F] = value;
|
||||
}
|
||||
// mirror second FAT
|
||||
if (fatCount_ > 1) cacheMirrorBlock_ = lba + blocksPerFat_;
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -268,7 +270,6 @@ bool SdVolume::freeChain(uint32_t cluster) {
|
|||
} while (!isEOC(cluster));
|
||||
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
@ -284,9 +285,11 @@ int32_t SdVolume::freeClusterCount() {
|
|||
|
||||
if (fatType_ == 16) {
|
||||
n = 256;
|
||||
} else if (fatType_ == 32) {
|
||||
}
|
||||
else if (fatType_ == 32) {
|
||||
n = 128;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// put FAT12 here
|
||||
return -1;
|
||||
}
|
||||
|
@ -298,7 +301,8 @@ int32_t SdVolume::freeClusterCount() {
|
|||
for (uint16_t i = 0; i < n; i++) {
|
||||
if (cacheBuffer_.fat16[i] == 0) free++;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
for (uint16_t i = 0; i < n; i++) {
|
||||
if (cacheBuffer_.fat32[i] == 0) free++;
|
||||
}
|
||||
|
@ -381,6 +385,7 @@ bool SdVolume::init(Sd2Card* dev, uint8_t part) {
|
|||
// total blocks for FAT16 or FAT32
|
||||
totalBlocks = fbs->totalSectors16 ?
|
||||
fbs->totalSectors16 : fbs->totalSectors32;
|
||||
|
||||
// total data blocks
|
||||
clusterCount_ = totalBlocks - (dataStartBlock_ - volumeStartBlock);
|
||||
|
||||
|
@ -391,14 +396,15 @@ bool SdVolume::init(Sd2Card* dev, uint8_t part) {
|
|||
if (clusterCount_ < 4085) {
|
||||
fatType_ = 12;
|
||||
if (!FAT12_SUPPORT) goto fail;
|
||||
} else if (clusterCount_ < 65525) {
|
||||
}
|
||||
else if (clusterCount_ < 65525) {
|
||||
fatType_ = 16;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
rootDirStart_ = fbs->fat32RootCluster;
|
||||
fatType_ = 32;
|
||||
}
|
||||
return true;
|
||||
|
||||
fail:
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -154,11 +154,14 @@ class SdVolume {
|
|||
//----------------------------------------------------------------------------
|
||||
bool allocContiguous(uint32_t count, uint32_t* curCluster);
|
||||
uint8_t blockOfCluster(uint32_t position) const {
|
||||
return (position >> 9) & (blocksPerCluster_ - 1);}
|
||||
return (position >> 9) & (blocksPerCluster_ - 1);
|
||||
}
|
||||
uint32_t clusterStartBlock(uint32_t cluster) const {
|
||||
return dataStartBlock_ + ((cluster - 2) << clusterSizeShift_);}
|
||||
return dataStartBlock_ + ((cluster - 2) << clusterSizeShift_);
|
||||
}
|
||||
uint32_t blockNumber(uint32_t cluster, uint32_t position) const {
|
||||
return clusterStartBlock(cluster) + blockOfCluster(position);}
|
||||
return clusterStartBlock(cluster) + blockOfCluster(position);
|
||||
}
|
||||
cache_t* cache() {return &cacheBuffer_;}
|
||||
uint32_t cacheBlockNumber() {return cacheBlockNumber_;}
|
||||
#if USE_MULTIPLE_CARDS
|
||||
|
@ -187,7 +190,8 @@ class SdVolume {
|
|||
return cluster >= FAT32EOC_MIN;
|
||||
}
|
||||
bool readBlock(uint32_t block, uint8_t* dst) {
|
||||
return sdCard_->readBlock(block, dst);}
|
||||
return sdCard_->readBlock(block, dst);
|
||||
}
|
||||
bool writeBlock(uint32_t block, const uint8_t* dst) {
|
||||
return sdCard_->writeBlock(block, dst);
|
||||
}
|
||||
|
|
|
@ -248,10 +248,9 @@ void CardReader::release() {
|
|||
}
|
||||
|
||||
void CardReader::startFileprint() {
|
||||
if (cardOK) {
|
||||
if (cardOK)
|
||||
sdprinting = true;
|
||||
}
|
||||
}
|
||||
|
||||
void CardReader::pauseSDPrint() {
|
||||
if (sdprinting) sdprinting = false;
|
||||
|
|
|
@ -50,9 +50,8 @@ void digipot_i2c_init() {
|
|||
const float digipot_motor_current[] = DIGIPOT_I2C_MOTOR_CURRENTS;
|
||||
Wire.begin();
|
||||
// setup initial currents as defined in Configuration_adv.h
|
||||
for(int i = 0; i < COUNT(digipot_motor_current); i++) {
|
||||
for (int i = 0; i < COUNT(digipot_motor_current); i++)
|
||||
digipot_i2c_set_current(i, digipot_motor_current[i]);
|
||||
}
|
||||
}
|
||||
|
||||
#endif //DIGIPOT_I2C
|
||||
|
|
|
@ -11,44 +11,44 @@
|
|||
#define START_BMPBYTES 532 // START_BMPWIDTH * START_BMPHEIGHT / 8
|
||||
|
||||
const unsigned char start_bmp[START_BMPBYTES] PROGMEM = {
|
||||
0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff
|
||||
,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff
|
||||
,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff
|
||||
,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
|
||||
,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff
|
||||
,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x3f,0xff
|
||||
,0xc0,0x0f,0xc0,0xfc,0x00,0x00,0x00,0x00,0x00,0x78,0x18,0x00,0x1f,0xff
|
||||
,0xc0,0x3f,0xe1,0xff,0x00,0x00,0x00,0x00,0x00,0x78,0x3c,0x00,0x0f,0xff
|
||||
,0xc0,0x7f,0xf3,0xff,0x80,0x00,0x00,0x00,0x00,0x78,0x3c,0x00,0x07,0xff
|
||||
,0xc0,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x78,0x3c,0x00,0x03,0xff
|
||||
,0xc1,0xf8,0x7f,0x87,0xe0,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xff
|
||||
,0xc1,0xf0,0x3f,0x03,0xe0,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xff
|
||||
,0xc1,0xe0,0x1e,0x01,0xe0,0x1f,0x00,0x03,0xe0,0x78,0x3c,0x03,0xf0,0x7f
|
||||
,0xc1,0xe0,0x1e,0x01,0xe0,0x7f,0xc0,0x0f,0xf8,0x78,0x3c,0x07,0xfc,0x3f
|
||||
,0xc1,0xe0,0x1e,0x01,0xe1,0xff,0xe0,0x1f,0xfc,0x78,0x3c,0x0f,0xfe,0x1f
|
||||
,0xc1,0xe0,0x1e,0x01,0xe3,0xff,0xf0,0x3f,0xfe,0x78,0x3c,0x1f,0xfe,0x0f
|
||||
,0xc1,0xe0,0x1e,0x01,0xe3,0xf3,0xf8,0x3f,0x3e,0x78,0x3c,0x3f,0x3f,0x07
|
||||
,0xc1,0xe0,0x1e,0x01,0xe7,0xe0,0xfc,0x7c,0x1f,0x78,0x3c,0x3e,0x1f,0x07
|
||||
,0xc1,0xe0,0x1e,0x01,0xe7,0xc0,0x7c,0x7c,0x0f,0x78,0x3c,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x7c,0x78,0x0f,0x78,0x3c,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe7,0xc0,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe3,0xe0,0x3c,0x78,0x00,0x7c,0x3c,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe3,0xff,0x3f,0xf8,0x00,0x7f,0xbc,0x3c,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe1,0xff,0x3f,0xf8,0x00,0x3f,0xbf,0xfc,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe0,0xff,0x3f,0xf8,0x00,0x1f,0xbf,0xfc,0x0f,0x03
|
||||
,0xc1,0xe0,0x1e,0x01,0xe0,0x7f,0x3f,0xf8,0x00,0x0f,0xbf,0xfc,0x0f,0x03
|
||||
,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07
|
||||
,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06
|
||||
,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e
|
||||
,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c
|
||||
,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78
|
||||
,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0
|
||||
,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80 };
|
||||
0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
|
||||
0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
|
||||
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
|
||||
0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3F, 0xFF,
|
||||
0xC0, 0x0F, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x18, 0x00, 0x1F, 0xFF,
|
||||
0xC0, 0x3F, 0xE1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x0F, 0xFF,
|
||||
0xC0, 0x7F, 0xF3, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x07, 0xFF,
|
||||
0xC0, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x03, 0xFF,
|
||||
0xC1, 0xF8, 0x7F, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xFF,
|
||||
0xC1, 0xF0, 0x3F, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xFF,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xE0, 0x78, 0x3C, 0x03, 0xF0, 0x7F,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0x7F, 0xC0, 0x0F, 0xF8, 0x78, 0x3C, 0x07, 0xFC, 0x3F,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE1, 0xFF, 0xE0, 0x1F, 0xFC, 0x78, 0x3C, 0x0F, 0xFE, 0x1F,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xFF, 0xF0, 0x3F, 0xFE, 0x78, 0x3C, 0x1F, 0xFE, 0x0F,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xF3, 0xF8, 0x3F, 0x3E, 0x78, 0x3C, 0x3F, 0x3F, 0x07,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0xE0, 0xFC, 0x7C, 0x1F, 0x78, 0x3C, 0x3E, 0x1F, 0x07,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0xC0, 0x7C, 0x7C, 0x0F, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x7C, 0x78, 0x0F, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0xC0, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xE0, 0x3C, 0x78, 0x00, 0x7C, 0x3C, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xFF, 0x3F, 0xF8, 0x00, 0x7F, 0xBC, 0x3C, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE1, 0xFF, 0x3F, 0xF8, 0x00, 0x3F, 0xBF, 0xFC, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0xFF, 0x3F, 0xF8, 0x00, 0x1F, 0xBF, 0xFC, 0x0F, 0x03,
|
||||
0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0x7F, 0x3F, 0xF8, 0x00, 0x0F, 0xBF, 0xFC, 0x0F, 0x03,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
|
||||
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E,
|
||||
0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
|
||||
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
|
||||
0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
|
||||
0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80 };
|
||||
#else
|
||||
#define START_BMPWIDTH 56
|
||||
#define START_BMPHEIGHT 19
|
||||
|
@ -56,25 +56,25 @@
|
|||
#define START_BMPBYTES 133 // START_BMPWIDTH * START_BMPHEIGHT / 8
|
||||
|
||||
const unsigned char start_bmp[START_BMPBYTES] PROGMEM = {
|
||||
0x1f,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
,0x60,0x00,0x00,0x00,0x00,0x01,0xff
|
||||
,0x40,0x00,0x00,0x00,0x00,0x00,0xff
|
||||
,0x80,0x00,0x00,0x00,0x00,0x00,0x7f
|
||||
,0x83,0xcf,0x00,0x00,0x0c,0x30,0x3f
|
||||
,0x87,0xff,0x80,0x00,0x0c,0x30,0x1f
|
||||
,0x86,0x79,0x80,0x00,0x0c,0x00,0x0f
|
||||
,0x8c,0x30,0xc7,0x83,0x8c,0x30,0xe7
|
||||
,0x8c,0x30,0xcf,0xc7,0xcc,0x31,0xf3
|
||||
,0x8c,0x30,0xdc,0xec,0xec,0x33,0xb9
|
||||
,0x8c,0x30,0xd8,0x6c,0x6c,0x33,0x19
|
||||
,0x8c,0x30,0xd0,0x6c,0x0c,0x33,0x19
|
||||
,0x8c,0x30,0xd8,0x6c,0x0c,0x33,0x19
|
||||
,0x8c,0x30,0xdc,0x6c,0x0e,0x3b,0x19
|
||||
,0x8c,0x30,0xcf,0x7c,0x07,0x9f,0x19
|
||||
,0x8c,0x30,0xc7,0x7c,0x03,0x8f,0x19
|
||||
,0x40,0x00,0x00,0x00,0x00,0x00,0x02
|
||||
,0x60,0x00,0x00,0x00,0x00,0x00,0x06
|
||||
,0x1f,0xff,0xff,0xff,0xff,0xff,0xf8 };
|
||||
0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
|
||||
0x83, 0xCF, 0x00, 0x00, 0x0C, 0x30, 0x3F,
|
||||
0x87, 0xFF, 0x80, 0x00, 0x0C, 0x30, 0x1F,
|
||||
0x86, 0x79, 0x80, 0x00, 0x0C, 0x00, 0x0F,
|
||||
0x8C, 0x30, 0xC7, 0x83, 0x8C, 0x30, 0xE7,
|
||||
0x8C, 0x30, 0xCF, 0xC7, 0xCC, 0x31, 0xF3,
|
||||
0x8C, 0x30, 0xDC, 0xEC, 0xEC, 0x33, 0xB9,
|
||||
0x8C, 0x30, 0xD8, 0x6C, 0x6C, 0x33, 0x19,
|
||||
0x8C, 0x30, 0xD0, 0x6C, 0x0C, 0x33, 0x19,
|
||||
0x8C, 0x30, 0xD8, 0x6C, 0x0C, 0x33, 0x19,
|
||||
0x8C, 0x30, 0xDC, 0x6C, 0x0E, 0x3B, 0x19,
|
||||
0x8C, 0x30, 0xCF, 0x7C, 0x07, 0x9F, 0x19,
|
||||
0x8C, 0x30, 0xC7, 0x7C, 0x03, 0x8F, 0x19,
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
|
||||
0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8 };
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -236,4 +236,3 @@
|
|||
};
|
||||
#endif // Extruders
|
||||
|
||||
|
||||
|
|
|
@ -154,4 +154,5 @@ const u8g_fntpgm_uint8_t u8g_font_6x9[2300] U8G_SECTION(".progmem.u8g_font_6x9")
|
|||
0, 144, 144, 144, 112, 4, 6, 6, 6, 1, 0, 80, 0, 144, 144, 144,
|
||||
112, 4, 9, 9, 6, 1, 254, 32, 64, 0, 144, 144, 144, 112, 144, 96,
|
||||
4, 8, 8, 6, 1, 254, 128, 128, 224, 144, 144, 224, 128, 128, 4, 8,
|
||||
8,6,1,254,80,0,144,144,144,112,144,96};
|
||||
8, 6, 1, 254, 80, 0, 144, 144, 144, 112, 144, 96
|
||||
};
|
||||
|
|
|
@ -168,4 +168,5 @@ const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7
|
|||
32, 112, 32, 5, 8, 8, 6, 0, 0, 16, 144, 80, 48, 80, 144, 16,
|
||||
56, 5, 8, 8, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 5,
|
||||
7, 7, 6, 0, 0, 120, 168, 168, 120, 40, 40, 40, 5, 8, 8, 6,
|
||||
0,0,248,248,248,248,248,248,248,248};
|
||||
0, 0, 248, 248, 248, 248, 248, 248, 248, 248
|
||||
};
|
||||
|
|
|
@ -166,4 +166,5 @@ const u8g_fntpgm_uint8_t HD44780_J_5x7[2491] U8G_SECTION(".progmem.HD44780_J_5x7
|
|||
32, 248, 32, 32, 5, 5, 5, 6, 0, 0, 248, 64, 120, 72, 136, 5,
|
||||
5, 5, 6, 0, 0, 248, 168, 248, 136, 136, 5, 5, 5, 6, 0, 1,
|
||||
32, 0, 248, 0, 32, 0, 0, 0, 6, 0, 8, 6, 10, 10, 6, 0,
|
||||
254,252,252,252,252,252,252,252,252,252,252};
|
||||
254, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252
|
||||
};
|
||||
|
|
|
@ -200,4 +200,5 @@ const u8g_fntpgm_uint8_t HD44780_W_5x7[3034] U8G_SECTION(".progmem.HD44780_W_5x7
|
|||
136, 152, 104, 5, 7, 7, 6, 0, 0, 80, 0, 136, 136, 136, 152, 104,
|
||||
5, 9, 9, 6, 0, 255, 16, 32, 0, 136, 136, 136, 248, 8, 112, 4,
|
||||
7, 7, 6, 1, 0, 192, 64, 96, 80, 96, 64, 224, 5, 8, 8, 6,
|
||||
0,255,80,0,136,136,136,248,8,112};
|
||||
0, 255, 80, 0, 136, 136, 136, 248, 8, 112
|
||||
};
|
||||
|
|
|
@ -267,4 +267,5 @@ const u8g_fntpgm_uint8_t ISO10646_CN[4105] U8G_SECTION(".progmem.ISO10646_CN") =
|
|||
128, 11, 11, 22, 12, 0, 255, 39, 192, 36, 64, 247, 192, 46, 224, 42,
|
||||
160, 62, 224, 225, 0, 47, 224, 35, 128, 37, 64, 105, 32, 11, 11, 22,
|
||||
12, 0, 255, 20, 0, 39, 224, 42, 0, 98, 0, 163, 192, 34, 0, 34,
|
||||
0,35,224,34,0,34,0,34,0};
|
||||
0, 35, 224, 34, 0, 34, 0, 34, 0
|
||||
};
|
||||
|
|
|
@ -170,4 +170,5 @@ const u8g_fntpgm_uint8_t ISO10646_Kana_5x7[2549] U8G_SECTION(".progmem.ISO10646_
|
|||
16, 32, 2, 2, 2, 6, 2, 2, 192, 192, 5, 1, 1, 6, 0, 3,
|
||||
248, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 5, 6, 6, 6,
|
||||
0, 1, 40, 128, 64, 32, 16, 8, 5, 7, 7, 6, 0, 0, 248, 8,
|
||||
8,8,8,8,8};
|
||||
8, 8, 8, 8, 8
|
||||
};
|
||||
|
|
|
@ -19,4 +19,5 @@ const u8g_fntpgm_uint8_t Marlin_symbols[140] U8G_SECTION(".progmem.Marlin_symbol
|
|||
184, 136, 136, 112, 32, 5, 9, 9, 6, 0, 255, 224, 128, 192, 176, 168,
|
||||
40, 48, 40, 40, 5, 9, 9, 6, 0, 255, 248, 168, 136, 136, 136, 136,
|
||||
136, 168, 248, 5, 10, 10, 6, 0, 254, 32, 80, 80, 80, 80, 136, 168,
|
||||
168,136,112,3,3,3,6,0,3,64,160,64};
|
||||
168, 136, 112, 3, 3, 3, 6, 0, 3, 64, 160, 64
|
||||
};
|
||||
|
|
|
@ -448,7 +448,7 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c
|
|||
lcd_print(':');
|
||||
while (n--) lcd_print(' ');
|
||||
u8g.setPrintPos(LCD_PIXEL_WIDTH - DOG_CHAR_WIDTH * vallen, (row + 1) * DOG_CHAR_HEIGHT);
|
||||
if (pgm) { lcd_printPGM(data); } else { lcd_print((char *)data); }
|
||||
if (pgm) lcd_printPGM(data); else lcd_print((char*)data);
|
||||
}
|
||||
|
||||
#define lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, data) _drawmenu_setting_edit_generic(sel, row, pstr, data, false)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
The fonts are created with Fony.exe (http://hukka.ncn.fi/?fony) because Fontforge didn't do what I want (probably lack off experience).
|
||||
The fonts are created with Fony.exe (http://hukka.ncn.fi/?fony) because Fontforge didn't do what I want (probably lack of experience).
|
||||
In Fony export the fonts to bdf-format. Maybe another one can edit them with Fontforge.
|
||||
Then run make_fonts.bat what calls bdf2u8g.exe with the needed parameters to produce the .h files.
|
||||
The .h files must be edited to replace '#include "u8g.h"' with '#include <utility/u8g.h>', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', insert '.progmem.' right behind the first '"' and moved to the main directory.
|
||||
|
|
|
@ -81,8 +81,8 @@
|
|||
#error BUILD_VERSION Information must be specified
|
||||
#endif
|
||||
|
||||
#ifndef MACHINE_UUID
|
||||
#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
|
||||
#ifndef UUID
|
||||
#define UUID "00000000-0000-0000-0000-000000000000"
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -122,7 +122,7 @@
|
|||
#define MSG_INVALID_EXTRUDER "Invalid extruder"
|
||||
#define MSG_INVALID_SOLENOID "Invalid solenoid"
|
||||
#define MSG_ERR_NO_THERMISTORS "No thermistors - no temperature"
|
||||
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
|
||||
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" UUID "\n"
|
||||
#define MSG_COUNT_X " Count X: "
|
||||
#define MSG_ERR_KILLED "Printer halted. kill() called!"
|
||||
#define MSG_ERR_STOPPED "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
|
||||
|
|
|
@ -447,8 +447,6 @@
|
|||
#ifndef MSG_BED_DONE
|
||||
#define MSG_BED_DONE "Bed done."
|
||||
#endif
|
||||
|
||||
#if ENABLED(DELTA_CALIBRATION_MENU)
|
||||
#ifndef MSG_DELTA_CALIBRATE
|
||||
#define MSG_DELTA_CALIBRATE "Delta Calibration"
|
||||
#endif
|
||||
|
@ -464,6 +462,5 @@
|
|||
#ifndef MSG_DELTA_CALIBRATE_CENTER
|
||||
#define MSG_DELTA_CALIBRATE_CENTER "Calibrate Center"
|
||||
#endif
|
||||
#endif // DELTA_CALIBRATION_MENU
|
||||
|
||||
#endif // LANGUAGE_EN_H
|
||||
|
|
|
@ -280,7 +280,6 @@ void planner_forward_pass_kernel(block_t *previous, block_t *current, block_t *n
|
|||
if (previous->entry_speed < current->entry_speed) {
|
||||
double entry_speed = min(current->entry_speed,
|
||||
max_allowable_speed(-previous->acceleration, previous->entry_speed, previous->millimeters));
|
||||
|
||||
// Check for junction speed change
|
||||
if (current->entry_speed != entry_speed) {
|
||||
current->entry_speed = entry_speed;
|
||||
|
@ -395,7 +394,7 @@ void plan_init() {
|
|||
oldt = t;
|
||||
setTargetHotend0(t);
|
||||
}
|
||||
#endif
|
||||
#endif //AUTOTEMP
|
||||
|
||||
void check_axes_activity() {
|
||||
unsigned char axis_active[NUM_AXIS] = { 0 },
|
||||
|
@ -905,7 +904,6 @@ float junction_deviation = 0.1;
|
|||
double cos_theta = - previous_unit_vec[X_AXIS] * unit_vec[X_AXIS]
|
||||
- previous_unit_vec[Y_AXIS] * unit_vec[Y_AXIS]
|
||||
- previous_unit_vec[Z_AXIS] * unit_vec[Z_AXIS] ;
|
||||
|
||||
// Skip and use default max junction speed for 0 degree acute junction.
|
||||
if (cos_theta < 0.95) {
|
||||
vmax_junction = min(previous_nominal_speed, block->nominal_speed);
|
||||
|
|
|
@ -34,17 +34,7 @@ int i4_min ( int i1, int i2 )
|
|||
Output, int I4_MIN, the smaller of I1 and I2.
|
||||
*/
|
||||
{
|
||||
int value;
|
||||
|
||||
if ( i1 < i2 )
|
||||
{
|
||||
value = i1;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = i2;
|
||||
}
|
||||
return value;
|
||||
return (i1 < i2) ? i1 : i2;
|
||||
}
|
||||
|
||||
double r8_epsilon(void)
|
||||
|
@ -81,7 +71,6 @@ double r8_epsilon ( void )
|
|||
*/
|
||||
{
|
||||
const double value = 2.220446049250313E-016;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
@ -112,17 +101,7 @@ double r8_max ( double x, double y )
|
|||
Output, double R8_MAX, the maximum of X and Y.
|
||||
*/
|
||||
{
|
||||
double value;
|
||||
|
||||
if ( y < x )
|
||||
{
|
||||
value = x;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = y;
|
||||
}
|
||||
return value;
|
||||
return (y < x) ? x : y;
|
||||
}
|
||||
|
||||
double r8_abs(double x)
|
||||
|
@ -152,17 +131,7 @@ double r8_abs ( double x )
|
|||
Output, double R8_ABS, the absolute value of X.
|
||||
*/
|
||||
{
|
||||
double value;
|
||||
|
||||
if ( 0.0 <= x )
|
||||
{
|
||||
value = + x;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = - x;
|
||||
}
|
||||
return value;
|
||||
return (x < 0.0) ? -x : x;
|
||||
}
|
||||
|
||||
double r8_sign(double x)
|
||||
|
@ -192,17 +161,7 @@ double r8_sign ( double x )
|
|||
Output, double R8_SIGN, the sign of X.
|
||||
*/
|
||||
{
|
||||
double value;
|
||||
|
||||
if ( x < 0.0 )
|
||||
{
|
||||
value = - 1.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = + 1.0;
|
||||
}
|
||||
return value;
|
||||
return (x < 0.0) ? -1.0 : 1.0;
|
||||
}
|
||||
|
||||
double r8mat_amax(int m, int n, double a[])
|
||||
|
@ -241,22 +200,13 @@ double r8mat_amax ( int m, int n, double a[] )
|
|||
Output, double R8MAT_AMAX, the maximum absolute value entry of A.
|
||||
*/
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
double value;
|
||||
|
||||
value = r8_abs ( a[0+0*m] );
|
||||
|
||||
for ( j = 0; j < n; j++ )
|
||||
{
|
||||
for ( i = 0; i < m; i++ )
|
||||
{
|
||||
double value = r8_abs(a[0 + 0 * m]);
|
||||
for (int j = 0; j < n; j++) {
|
||||
for (int i = 0; i < m; i++) {
|
||||
if (value < r8_abs(a[i + j * m]))
|
||||
{
|
||||
value = r8_abs(a[i + j * m]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
|
@ -294,17 +244,11 @@ void r8mat_copy( double a2[], int m, int n, double a1[] )
|
|||
Output, double R8MAT_COPY_NEW[M*N], the copy of A1.
|
||||
*/
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
|
||||
for ( j = 0; j < n; j++ )
|
||||
{
|
||||
for ( i = 0; i < m; i++ )
|
||||
{
|
||||
for (int j = 0; j < n; j++) {
|
||||
for (int i = 0; i < m; i++)
|
||||
a2[i + j * m] = a1[i + j * m];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -360,46 +304,23 @@ void daxpy ( int n, double da, double dx[], int incx, double dy[], int incy )
|
|||
Input, int INCY, the increment between successive entries of DY.
|
||||
*/
|
||||
{
|
||||
int i;
|
||||
int ix;
|
||||
int iy;
|
||||
int m;
|
||||
if (n <= 0 || da == 0.0) return;
|
||||
|
||||
if ( n <= 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( da == 0.0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
int i, ix, iy, m;
|
||||
/*
|
||||
Code for unequal increments or equal increments
|
||||
not equal to 1.
|
||||
*/
|
||||
if ( incx != 1 || incy != 1 )
|
||||
{
|
||||
if (incx != 1 || incy != 1) {
|
||||
if (0 <= incx)
|
||||
{
|
||||
ix = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ix = (- n + 1) * incx;
|
||||
}
|
||||
|
||||
if (0 <= incy)
|
||||
{
|
||||
iy = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
iy = (- n + 1) * incy;
|
||||
}
|
||||
|
||||
for ( i = 0; i < n; i++ )
|
||||
{
|
||||
for (i = 0; i < n; i++) {
|
||||
dy[iy] = dy[iy] + da * dx[ix];
|
||||
ix = ix + incx;
|
||||
iy = iy + incy;
|
||||
|
@ -408,24 +329,17 @@ void daxpy ( int n, double da, double dx[], int incx, double dy[], int incy )
|
|||
/*
|
||||
Code for both increments equal to 1.
|
||||
*/
|
||||
else
|
||||
{
|
||||
else {
|
||||
m = n % 4;
|
||||
|
||||
for (i = 0; i < m; i++)
|
||||
{
|
||||
dy[i] = dy[i] + da * dx[i];
|
||||
}
|
||||
|
||||
for ( i = m; i < n; i = i + 4 )
|
||||
{
|
||||
for (i = m; i < n; i = i + 4) {
|
||||
dy[i ] = dy[i ] + da * dx[i ];
|
||||
dy[i + 1] = dy[i + 1] + da * dx[i + 1];
|
||||
dy[i + 2] = dy[i + 2] + da * dx[i + 2];
|
||||
dy[i + 3] = dy[i + 3] + da * dx[i + 3];
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -481,45 +395,21 @@ double ddot ( int n, double dx[], int incx, double dy[], int incy )
|
|||
entries of DX and DY.
|
||||
*/
|
||||
{
|
||||
double dtemp;
|
||||
int i;
|
||||
int ix;
|
||||
int iy;
|
||||
int m;
|
||||
|
||||
dtemp = 0.0;
|
||||
if (n <= 0) return 0.0;
|
||||
|
||||
int i, m;
|
||||
double dtemp = 0.0;
|
||||
|
||||
if ( n <= 0 )
|
||||
{
|
||||
return dtemp;
|
||||
}
|
||||
/*
|
||||
Code for unequal increments or equal increments
|
||||
not equal to 1.
|
||||
*/
|
||||
if ( incx != 1 || incy != 1 )
|
||||
{
|
||||
if ( 0 <= incx )
|
||||
{
|
||||
ix = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ix = ( - n + 1 ) * incx;
|
||||
}
|
||||
|
||||
if ( 0 <= incy )
|
||||
{
|
||||
iy = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
iy = ( - n + 1 ) * incy;
|
||||
}
|
||||
|
||||
for ( i = 0; i < n; i++ )
|
||||
{
|
||||
dtemp = dtemp + dx[ix] * dy[iy];
|
||||
if (incx != 1 || incy != 1) {
|
||||
int ix = (incx >= 0) ? 0 : (-n + 1) * incx,
|
||||
iy = (incy >= 0) ? 0 : (-n + 1) * incy;
|
||||
for (i = 0; i < n; i++) {
|
||||
dtemp += dx[ix] * dy[iy];
|
||||
ix = ix + incx;
|
||||
iy = iy + incy;
|
||||
}
|
||||
|
@ -527,18 +417,12 @@ double ddot ( int n, double dx[], int incx, double dy[], int incy )
|
|||
/*
|
||||
Code for both increments equal to 1.
|
||||
*/
|
||||
else
|
||||
{
|
||||
else {
|
||||
m = n % 5;
|
||||
|
||||
for (i = 0; i < m; i++)
|
||||
{
|
||||
dtemp = dtemp + dx[i] * dy[i];
|
||||
}
|
||||
|
||||
for ( i = m; i < n; i = i + 5 )
|
||||
{
|
||||
dtemp = dtemp + dx[i ] * dy[i ]
|
||||
dtemp += dx[i] * dy[i];
|
||||
for (i = m; i < n; i = i + 5) {
|
||||
dtemp += dx[i] * dy[i]
|
||||
+ dx[i + 1] * dy[i + 1]
|
||||
+ dx[i + 2] * dy[i + 2]
|
||||
+ dx[i + 3] * dy[i + 3]
|
||||
|
@ -596,48 +480,27 @@ double dnrm2 ( int n, double x[], int incx )
|
|||
Output, double DNRM2, the Euclidean norm of X.
|
||||
*/
|
||||
{
|
||||
double absxi;
|
||||
int i;
|
||||
int ix;
|
||||
double norm;
|
||||
double scale;
|
||||
double ssq;
|
||||
|
||||
if (n < 1 || incx < 1)
|
||||
{
|
||||
norm = 0.0;
|
||||
}
|
||||
else if (n == 1)
|
||||
{
|
||||
norm = r8_abs(x[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
scale = 0.0;
|
||||
ssq = 1.0;
|
||||
ix = 0;
|
||||
|
||||
for ( i = 0; i < n; i++ )
|
||||
{
|
||||
if ( x[ix] != 0.0 )
|
||||
{
|
||||
absxi = r8_abs ( x[ix] );
|
||||
if ( scale < absxi )
|
||||
{
|
||||
else {
|
||||
double scale = 0.0, ssq = 1.0;
|
||||
int ix = 0;
|
||||
for (int i = 0; i < n; i++) {
|
||||
if (x[ix] != 0.0) {
|
||||
double absxi = r8_abs(x[ix]);
|
||||
if (scale < absxi) {
|
||||
ssq = 1.0 + ssq * (scale / absxi) * (scale / absxi);
|
||||
scale = absxi;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else
|
||||
ssq = ssq + (absxi / scale) * (absxi / scale);
|
||||
}
|
||||
ix += incx;
|
||||
}
|
||||
ix = ix + incx;
|
||||
}
|
||||
|
||||
norm = scale * sqrt(ssq);
|
||||
}
|
||||
|
||||
return norm;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
@ -717,34 +580,22 @@ void dqrank ( double a[], int lda, int m, int n, double tol, int *kr,
|
|||
the QR factorization.
|
||||
*/
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
int job;
|
||||
int k;
|
||||
double work[n];
|
||||
|
||||
for ( i = 0; i < n; i++ )
|
||||
{
|
||||
for (int i = 0; i < n; i++)
|
||||
jpvt[i] = 0;
|
||||
}
|
||||
|
||||
job = 1;
|
||||
int job = 1;
|
||||
|
||||
dqrdc(a, lda, m, n, qraux, jpvt, work, job);
|
||||
|
||||
*kr = 0;
|
||||
k = i4_min ( m, n );
|
||||
|
||||
for ( j = 0; j < k; j++ )
|
||||
{
|
||||
int k = i4_min(m, n);
|
||||
for (int j = 0; j < k; j++) {
|
||||
if (r8_abs(a[j + j * lda]) <= tol * r8_abs(a[0 + 0 * lda]))
|
||||
{
|
||||
return;
|
||||
}
|
||||
*kr = j + 1;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -829,60 +680,33 @@ void dqrdc ( double a[], int lda, int n, int p, double qraux[], int jpvt[],
|
|||
nonzero, pivoting is done.
|
||||
*/
|
||||
{
|
||||
int j;
|
||||
int jp;
|
||||
int l;
|
||||
int j;
|
||||
int lup;
|
||||
int maxj;
|
||||
double maxnrm;
|
||||
double nrmxl;
|
||||
int pl;
|
||||
int pu;
|
||||
int swapj;
|
||||
double t;
|
||||
double tt;
|
||||
double maxnrm, nrmxl, t, tt;
|
||||
|
||||
pl = 1;
|
||||
pu = 0;
|
||||
int pl = 1, pu = 0;
|
||||
/*
|
||||
If pivoting is requested, rearrange the columns.
|
||||
*/
|
||||
if ( job != 0 )
|
||||
{
|
||||
for ( j = 1; j <= p; j++ )
|
||||
{
|
||||
swapj = ( 0 < jpvt[j-1] );
|
||||
|
||||
if ( jpvt[j-1] < 0 )
|
||||
{
|
||||
jpvt[j-1] = -j;
|
||||
}
|
||||
else
|
||||
{
|
||||
jpvt[j-1] = j;
|
||||
}
|
||||
|
||||
if ( swapj )
|
||||
{
|
||||
if (job != 0) {
|
||||
for (j = 1; j <= p; j++) {
|
||||
int swapj = (0 < jpvt[j - 1]);
|
||||
jpvt[j - 1] = (jpvt[j - 1] < 0) ? -j : j;
|
||||
if (swapj) {
|
||||
if (j != pl)
|
||||
{
|
||||
dswap(n, a + 0 + (pl - 1)*lda, 1, a + 0 + (j - 1), 1);
|
||||
}
|
||||
jpvt[j - 1] = jpvt[pl - 1];
|
||||
jpvt[pl - 1] = j;
|
||||
pl = pl + 1;
|
||||
pl++;
|
||||
}
|
||||
}
|
||||
pu = p;
|
||||
|
||||
for ( j = p; 1 <= j; j-- )
|
||||
{
|
||||
if ( jpvt[j-1] < 0 )
|
||||
{
|
||||
for (j = p; 1 <= j; j--) {
|
||||
if (jpvt[j - 1] < 0) {
|
||||
jpvt[j - 1] = -jpvt[j - 1];
|
||||
|
||||
if ( j != pu )
|
||||
{
|
||||
if (j != pu) {
|
||||
dswap(n, a + 0 + (pu - 1)*lda, 1, a + 0 + (j - 1)*lda, 1);
|
||||
jp = jpvt[pu - 1];
|
||||
jpvt[pu - 1] = jpvt[j - 1];
|
||||
|
@ -896,39 +720,27 @@ void dqrdc ( double a[], int lda, int n, int p, double qraux[], int jpvt[],
|
|||
Compute the norms of the free columns.
|
||||
*/
|
||||
for (j = pl; j <= pu; j++)
|
||||
{
|
||||
qraux[j - 1] = dnrm2(n, a + 0 + (j - 1) * lda, 1);
|
||||
}
|
||||
|
||||
for (j = pl; j <= pu; j++)
|
||||
{
|
||||
work[j - 1] = qraux[j - 1];
|
||||
}
|
||||
/*
|
||||
Perform the Householder reduction of A.
|
||||
*/
|
||||
lup = i4_min(n, p);
|
||||
|
||||
for ( l = 1; l <= lup; l++ )
|
||||
{
|
||||
for (int l = 1; l <= lup; l++) {
|
||||
/*
|
||||
Bring the column of largest norm into the pivot position.
|
||||
*/
|
||||
if ( pl <= l && l < pu )
|
||||
{
|
||||
if (pl <= l && l < pu) {
|
||||
maxnrm = 0.0;
|
||||
maxj = l;
|
||||
for ( j = l; j <= pu; j++ )
|
||||
{
|
||||
if ( maxnrm < qraux[j-1] )
|
||||
{
|
||||
for (j = l; j <= pu; j++) {
|
||||
if (maxnrm < qraux[j - 1]) {
|
||||
maxnrm = qraux[j - 1];
|
||||
maxj = j;
|
||||
}
|
||||
}
|
||||
|
||||
if ( maxj != l )
|
||||
{
|
||||
if (maxj != l) {
|
||||
dswap(n, a + 0 + (l - 1)*lda, 1, a + 0 + (maxj - 1)*lda, 1);
|
||||
qraux[maxj - 1] = qraux[l - 1];
|
||||
work[maxj - 1] = work[l - 1];
|
||||
|
@ -941,44 +753,29 @@ void dqrdc ( double a[], int lda, int n, int p, double qraux[], int jpvt[],
|
|||
Compute the Householder transformation for column L.
|
||||
*/
|
||||
qraux[l - 1] = 0.0;
|
||||
|
||||
if ( l != n )
|
||||
{
|
||||
if (l != n) {
|
||||
nrmxl = dnrm2(n - l + 1, a + l - 1 + (l - 1) * lda, 1);
|
||||
|
||||
if ( nrmxl != 0.0 )
|
||||
{
|
||||
if (nrmxl != 0.0) {
|
||||
if (a[l - 1 + (l - 1)*lda] != 0.0)
|
||||
{
|
||||
nrmxl = nrmxl * r8_sign(a[l - 1 + (l - 1) * lda]);
|
||||
}
|
||||
|
||||
dscal(n - l + 1, 1.0 / nrmxl, a + l - 1 + (l - 1)*lda, 1);
|
||||
a[l - 1 + (l - 1)*lda] = 1.0 + a[l - 1 + (l - 1) * lda];
|
||||
/*
|
||||
Apply the transformation to the remaining columns, updating the norms.
|
||||
*/
|
||||
for ( j = l + 1; j <= p; j++ )
|
||||
{
|
||||
for (j = l + 1; j <= p; j++) {
|
||||
t = -ddot(n - l + 1, a + l - 1 + (l - 1) * lda, 1, a + l - 1 + (j - 1) * lda, 1)
|
||||
/ a[l - 1 + (l - 1) * lda];
|
||||
daxpy(n - l + 1, t, a + l - 1 + (l - 1)*lda, 1, a + l - 1 + (j - 1)*lda, 1);
|
||||
|
||||
if ( pl <= j && j <= pu )
|
||||
{
|
||||
if ( qraux[j-1] != 0.0 )
|
||||
{
|
||||
if (pl <= j && j <= pu) {
|
||||
if (qraux[j - 1] != 0.0) {
|
||||
tt = 1.0 - pow(r8_abs(a[l - 1 + (j - 1) * lda]) / qraux[j - 1], 2);
|
||||
tt = r8_max(tt, 0.0);
|
||||
t = tt;
|
||||
tt = 1.0 + 0.05 * tt * pow(qraux[j - 1] / work[j - 1], 2);
|
||||
|
||||
if (tt != 1.0)
|
||||
{
|
||||
qraux[j - 1] = qraux[j - 1] * sqrt(t);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
qraux[j - 1] = dnrm2(n - l, a + l + (j - 1) * lda, 1);
|
||||
work[j - 1] = qraux[j - 1];
|
||||
}
|
||||
|
@ -993,7 +790,6 @@ void dqrdc ( double a[], int lda, int n, int p, double qraux[], int jpvt[],
|
|||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -1106,9 +902,7 @@ int dqrls ( double a[], int lda, int m, int n, double tol, int *kr, double b[],
|
|||
*/
|
||||
{
|
||||
int ind;
|
||||
|
||||
if ( lda < m )
|
||||
{
|
||||
if (lda < m) {
|
||||
/*fprintf ( stderr, "\n" );
|
||||
fprintf ( stderr, "DQRLS - Fatal error!\n" );
|
||||
fprintf ( stderr, " LDA < M.\n" );*/
|
||||
|
@ -1116,8 +910,7 @@ int dqrls ( double a[], int lda, int m, int n, double tol, int *kr, double b[],
|
|||
return ind;
|
||||
}
|
||||
|
||||
if ( n <= 0 )
|
||||
{
|
||||
if (n <= 0) {
|
||||
/*fprintf ( stderr, "\n" );
|
||||
fprintf ( stderr, "DQRLS - Fatal error!\n" );
|
||||
fprintf ( stderr, " N <= 0.\n" );*/
|
||||
|
@ -1125,8 +918,7 @@ int dqrls ( double a[], int lda, int m, int n, double tol, int *kr, double b[],
|
|||
return ind;
|
||||
}
|
||||
|
||||
if ( itask < 1 )
|
||||
{
|
||||
if (itask < 1) {
|
||||
/*fprintf ( stderr, "\n" );
|
||||
fprintf ( stderr, "DQRLS - Fatal error!\n" );
|
||||
fprintf ( stderr, " ITASK < 1.\n" );*/
|
||||
|
@ -1139,14 +931,11 @@ int dqrls ( double a[], int lda, int m, int n, double tol, int *kr, double b[],
|
|||
Factor the matrix.
|
||||
*/
|
||||
if (itask == 1)
|
||||
{
|
||||
dqrank(a, lda, m, n, tol, kr, jpvt, qraux);
|
||||
}
|
||||
/*
|
||||
Solve the least-squares problem.
|
||||
*/
|
||||
dqrlss(a, lda, m, n, *kr, b, x, rsd, jpvt, qraux);
|
||||
|
||||
return ind;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
@ -1232,31 +1021,23 @@ void dqrlss ( double a[], int lda, int m, int n, int kr, double b[], double x[],
|
|||
int k;
|
||||
double t;
|
||||
|
||||
if ( kr != 0 )
|
||||
{
|
||||
if (kr != 0) {
|
||||
job = 110;
|
||||
info = dqrsl(a, lda, m, kr, qraux, b, rsd, rsd, x, rsd, rsd, job);
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
jpvt[i] = - jpvt[i];
|
||||
}
|
||||
|
||||
for (i = kr; i < n; i++)
|
||||
{
|
||||
x[i] = 0.0;
|
||||
}
|
||||
|
||||
for ( j = 1; j <= n; j++ )
|
||||
{
|
||||
if ( jpvt[j-1] <= 0 )
|
||||
{
|
||||
for (j = 1; j <= n; j++) {
|
||||
if (jpvt[j - 1] <= 0) {
|
||||
k = - jpvt[j - 1];
|
||||
jpvt[j - 1] = k;
|
||||
|
||||
while ( k != j )
|
||||
{
|
||||
while (k != j) {
|
||||
t = x[j - 1];
|
||||
x[j - 1] = x[k - 1];
|
||||
x[k - 1] = t;
|
||||
|
@ -1265,7 +1046,6 @@ void dqrlss ( double a[], int lda, int m, int n, int kr, double b[], double x[],
|
|||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -1424,6 +1204,7 @@ int dqrsl ( double a[], int lda, int n, int k, double qraux[], double y[],
|
|||
Set INFO flag.
|
||||
*/
|
||||
info = 0;
|
||||
|
||||
/*
|
||||
Determine what is to be computed.
|
||||
*/
|
||||
|
@ -1432,75 +1213,46 @@ int dqrsl ( double a[], int lda, int n, int k, double qraux[], double y[],
|
|||
cb = ((job % 1000) / 100 != 0);
|
||||
cr = ((job % 100) / 10 != 0);
|
||||
cab = ((job % 10) != 0);
|
||||
|
||||
ju = i4_min(k, n - 1);
|
||||
|
||||
/*
|
||||
Special action when N = 1.
|
||||
*/
|
||||
if ( ju == 0 )
|
||||
{
|
||||
if (ju == 0) {
|
||||
if (cqy)
|
||||
{
|
||||
qy[0] = y[0];
|
||||
}
|
||||
|
||||
if (cqty)
|
||||
{
|
||||
qty[0] = y[0];
|
||||
}
|
||||
|
||||
if (cab)
|
||||
{
|
||||
ab[0] = y[0];
|
||||
}
|
||||
|
||||
if ( cb )
|
||||
{
|
||||
if (cb) {
|
||||
if (a[0 + 0 * lda] == 0.0)
|
||||
{
|
||||
info = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
b[0] = y[0] / a[0 + 0 * lda];
|
||||
}
|
||||
}
|
||||
|
||||
if (cr)
|
||||
{
|
||||
rsd[0] = 0.0;
|
||||
}
|
||||
return info;
|
||||
}
|
||||
/*
|
||||
Set up to compute QY or QTY.
|
||||
*/
|
||||
if ( cqy )
|
||||
{
|
||||
if (cqy) {
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
qy[i - 1] = y[i - 1];
|
||||
}
|
||||
}
|
||||
|
||||
if ( cqty )
|
||||
{
|
||||
if (cqty) {
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
qty[i - 1] = y[i - 1];
|
||||
}
|
||||
}
|
||||
/*
|
||||
Compute QY.
|
||||
*/
|
||||
if ( cqy )
|
||||
{
|
||||
for ( jj = 1; jj <= ju; jj++ )
|
||||
{
|
||||
if (cqy) {
|
||||
for (jj = 1; jj <= ju; jj++) {
|
||||
j = ju - jj + 1;
|
||||
|
||||
if ( qraux[j-1] != 0.0 )
|
||||
{
|
||||
if (qraux[j - 1] != 0.0) {
|
||||
temp = a[j - 1 + (j - 1) * lda];
|
||||
a[j - 1 + (j - 1)*lda] = qraux[j - 1];
|
||||
t = -ddot(n - j + 1, a + j - 1 + (j - 1) * lda, 1, qy + j - 1, 1) / a[j - 1 + (j - 1) * lda];
|
||||
|
@ -1512,12 +1264,9 @@ int dqrsl ( double a[], int lda, int n, int k, double qraux[], double y[],
|
|||
/*
|
||||
Compute Q'*Y.
|
||||
*/
|
||||
if ( cqty )
|
||||
{
|
||||
for ( j = 1; j <= ju; j++ )
|
||||
{
|
||||
if ( qraux[j-1] != 0.0 )
|
||||
{
|
||||
if (cqty) {
|
||||
for (j = 1; j <= ju; j++) {
|
||||
if (qraux[j - 1] != 0.0) {
|
||||
temp = a[j - 1 + (j - 1) * lda];
|
||||
a[j - 1 + (j - 1)*lda] = qraux[j - 1];
|
||||
t = -ddot(n - j + 1, a + j - 1 + (j - 1) * lda, 1, qty + j - 1, 1) / a[j - 1 + (j - 1) * lda];
|
||||
|
@ -1529,64 +1278,38 @@ int dqrsl ( double a[], int lda, int n, int k, double qraux[], double y[],
|
|||
/*
|
||||
Set up to compute B, RSD, or AB.
|
||||
*/
|
||||
if ( cb )
|
||||
{
|
||||
if (cb) {
|
||||
for (i = 1; i <= k; i++)
|
||||
{
|
||||
b[i - 1] = qty[i - 1];
|
||||
}
|
||||
}
|
||||
|
||||
if ( cab )
|
||||
{
|
||||
if (cab) {
|
||||
for (i = 1; i <= k; i++)
|
||||
{
|
||||
ab[i - 1] = qty[i - 1];
|
||||
}
|
||||
}
|
||||
|
||||
if ( cr && k < n )
|
||||
{
|
||||
if (cr && k < n) {
|
||||
for (i = k + 1; i <= n; i++)
|
||||
{
|
||||
rsd[i - 1] = qty[i - 1];
|
||||
}
|
||||
}
|
||||
|
||||
if ( cab && k+1 <= n )
|
||||
{
|
||||
if (cab && k + 1 <= n) {
|
||||
for (i = k + 1; i <= n; i++)
|
||||
{
|
||||
ab[i - 1] = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
if ( cr )
|
||||
{
|
||||
if (cr) {
|
||||
for (i = 1; i <= k; i++)
|
||||
{
|
||||
rsd[i - 1] = 0.0;
|
||||
}
|
||||
}
|
||||
/*
|
||||
Compute B.
|
||||
*/
|
||||
if ( cb )
|
||||
{
|
||||
for ( jj = 1; jj <= k; jj++ )
|
||||
{
|
||||
if (cb) {
|
||||
for (jj = 1; jj <= k; jj++) {
|
||||
j = k - jj + 1;
|
||||
|
||||
if ( a[j-1+(j-1)*lda] == 0.0 )
|
||||
{
|
||||
if (a[j - 1 + (j - 1)*lda] == 0.0) {
|
||||
info = j;
|
||||
break;
|
||||
}
|
||||
|
||||
b[j - 1] = b[j - 1] / a[j - 1 + (j - 1) * lda];
|
||||
|
||||
if ( j != 1 )
|
||||
{
|
||||
if (j != 1) {
|
||||
t = -b[j - 1];
|
||||
daxpy(j - 1, t, a + 0 + (j - 1)*lda, 1, b, 1);
|
||||
}
|
||||
|
@ -1595,26 +1318,18 @@ int dqrsl ( double a[], int lda, int n, int k, double qraux[], double y[],
|
|||
/*
|
||||
Compute RSD or AB as required.
|
||||
*/
|
||||
if ( cr || cab )
|
||||
{
|
||||
for ( jj = 1; jj <= ju; jj++ )
|
||||
{
|
||||
if (cr || cab) {
|
||||
for (jj = 1; jj <= ju; jj++) {
|
||||
j = ju - jj + 1;
|
||||
|
||||
if ( qraux[j-1] != 0.0 )
|
||||
{
|
||||
if (qraux[j - 1] != 0.0) {
|
||||
temp = a[j - 1 + (j - 1) * lda];
|
||||
a[j - 1 + (j - 1)*lda] = qraux[j - 1];
|
||||
|
||||
if ( cr )
|
||||
{
|
||||
if (cr) {
|
||||
t = -ddot(n - j + 1, a + j - 1 + (j - 1) * lda, 1, rsd + j - 1, 1)
|
||||
/ a[j - 1 + (j - 1) * lda];
|
||||
daxpy(n - j + 1, t, a + j - 1 + (j - 1)*lda, 1, rsd + j - 1, 1);
|
||||
}
|
||||
|
||||
if ( cab )
|
||||
{
|
||||
if (cab) {
|
||||
t = -ddot(n - j + 1, a + j - 1 + (j - 1) * lda, 1, ab + j - 1, 1)
|
||||
/ a[j - 1 + (j - 1) * lda];
|
||||
daxpy(n - j + 1, t, a + j - 1 + (j - 1)*lda, 1, ab + j - 1, 1);
|
||||
|
@ -1623,7 +1338,6 @@ int dqrsl ( double a[], int lda, int n, int k, double qraux[], double y[],
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
@ -1677,45 +1391,29 @@ void dscal ( int n, double sa, double x[], int incx )
|
|||
int ix;
|
||||
int m;
|
||||
|
||||
if ( n <= 0 )
|
||||
{
|
||||
}
|
||||
else if ( incx == 1 )
|
||||
{
|
||||
if (n <= 0) return;
|
||||
|
||||
if (incx == 1) {
|
||||
m = n % 5;
|
||||
|
||||
for (i = 0; i < m; i++)
|
||||
{
|
||||
x[i] = sa * x[i];
|
||||
}
|
||||
|
||||
for ( i = m; i < n; i = i + 5 )
|
||||
{
|
||||
for (i = m; i < n; i = i + 5) {
|
||||
x[i] = sa * x[i];
|
||||
x[i + 1] = sa * x[i + 1];
|
||||
x[i + 2] = sa * x[i + 2];
|
||||
x[i + 3] = sa * x[i + 3];
|
||||
x[i + 4] = sa * x[i + 4];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
if (0 <= incx)
|
||||
{
|
||||
ix = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ix = (- n + 1) * incx;
|
||||
}
|
||||
|
||||
for ( i = 0; i < n; i++ )
|
||||
{
|
||||
for (i = 0; i < n; i++) {
|
||||
x[ix] = sa * x[ix];
|
||||
ix = ix + incx;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -1765,73 +1463,46 @@ void dswap ( int n, double x[], int incx, double y[], int incy )
|
|||
Input, int INCY, the increment between successive elements of Y.
|
||||
*/
|
||||
{
|
||||
int i;
|
||||
int ix;
|
||||
int iy;
|
||||
int m;
|
||||
if (n <= 0) return;
|
||||
|
||||
int i, ix, iy, m;
|
||||
double temp;
|
||||
|
||||
if ( n <= 0 )
|
||||
{
|
||||
}
|
||||
else if ( incx == 1 && incy == 1 )
|
||||
{
|
||||
if (incx == 1 && incy == 1) {
|
||||
m = n % 3;
|
||||
|
||||
for ( i = 0; i < m; i++ )
|
||||
{
|
||||
for (i = 0; i < m; i++) {
|
||||
temp = x[i];
|
||||
x[i] = y[i];
|
||||
y[i] = temp;
|
||||
}
|
||||
|
||||
for ( i = m; i < n; i = i + 3 )
|
||||
{
|
||||
for (i = m; i < n; i = i + 3) {
|
||||
temp = x[i];
|
||||
x[i] = y[i];
|
||||
y[i] = temp;
|
||||
|
||||
temp = x[i + 1];
|
||||
x[i + 1] = y[i + 1];
|
||||
y[i + 1] = temp;
|
||||
|
||||
temp = x[i + 2];
|
||||
x[i + 2] = y[i + 2];
|
||||
y[i + 2] = temp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
if (0 <= incx)
|
||||
{
|
||||
ix = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ix = (- n + 1) * incx;
|
||||
}
|
||||
|
||||
if (0 <= incy)
|
||||
{
|
||||
iy = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
iy = (- n + 1) * incy;
|
||||
}
|
||||
|
||||
for ( i = 0; i < n; i++ )
|
||||
{
|
||||
for (i = 0; i < n; i++) {
|
||||
temp = x[ix];
|
||||
x[ix] = y[iy];
|
||||
y[iy] = temp;
|
||||
ix = ix + incx;
|
||||
iy = iy + incy;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -1887,15 +1558,8 @@ void qr_solve ( double x[], int m, int n, double a[], double b[] )
|
|||
Output, double QR_SOLVE[N], the least squares solution.
|
||||
*/
|
||||
{
|
||||
double a_qr[n*m];
|
||||
int ind;
|
||||
int itask;
|
||||
int jpvt[n];
|
||||
int kr;
|
||||
int lda;
|
||||
double qraux[n];
|
||||
double r[m];
|
||||
double tol;
|
||||
double a_qr[n * m], qraux[n], r[m], tol;
|
||||
int ind, itask, jpvt[n], kr, lda;
|
||||
|
||||
r8mat_copy(a_qr, m, n, a);
|
||||
lda = m;
|
||||
|
|
|
@ -408,14 +408,14 @@ inline void update_endstops() {
|
|||
#else // !Z_DUAL_ENDSTOPS
|
||||
|
||||
UPDATE_ENDSTOP(Z, MIN);
|
||||
|
||||
#endif // !Z_DUAL_ENDSTOPS
|
||||
#endif // Z_MIN_PIN
|
||||
|
||||
#if ENABLED(Z_MIN_PROBE_ENDSTOP)
|
||||
UPDATE_ENDSTOP(Z, MIN_PROBE);
|
||||
|
||||
if (TEST_ENDSTOP(Z_MIN_PROBE))
|
||||
{
|
||||
if (TEST_ENDSTOP(Z_MIN_PROBE)) {
|
||||
endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS];
|
||||
endstop_hit_bits |= BIT(Z_MIN_PROBE);
|
||||
}
|
||||
|
@ -704,7 +704,9 @@ ISR(TIMER1_COMPA_vect) {
|
|||
timer = calc_timer(acc_step_rate);
|
||||
OCR1A = timer;
|
||||
acceleration_time += timer;
|
||||
|
||||
#if ENABLED(ADVANCE)
|
||||
|
||||
for (int8_t i = 0; i < step_loops; i++) {
|
||||
advance += advance_rate;
|
||||
}
|
||||
|
@ -713,7 +715,7 @@ ISR(TIMER1_COMPA_vect) {
|
|||
e_steps[current_block->active_extruder] += ((advance >> 8) - old_advance);
|
||||
old_advance = advance >> 8;
|
||||
|
||||
#endif
|
||||
#endif //ADVANCE
|
||||
}
|
||||
else if (step_events_completed > (unsigned long)current_block->decelerate_after) {
|
||||
MultiU24X32toH16(step_rate, deceleration_time, current_block->acceleration_rate);
|
||||
|
@ -763,8 +765,7 @@ ISR(TIMER1_COMPA_vect) {
|
|||
unsigned char old_OCR0A;
|
||||
// Timer interrupt for E. e_steps is set in the main routine;
|
||||
// Timer 0 is shared with millies
|
||||
ISR(TIMER0_COMPA_vect)
|
||||
{
|
||||
ISR(TIMER0_COMPA_vect) {
|
||||
old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz)
|
||||
OCR0A = old_OCR0A;
|
||||
// Set E direction (Depends on E direction + advance)
|
||||
|
@ -827,7 +828,6 @@ ISR(TIMER1_COMPA_vect) {
|
|||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
#endif // ADVANCE
|
||||
|
@ -1034,7 +1034,6 @@ void st_init() {
|
|||
// output mode = 00 (disconnected)
|
||||
TCCR1A &= ~(3 << COM1A0);
|
||||
TCCR1A &= ~(3 << COM1B0);
|
||||
|
||||
// Set the timer pre-scaler
|
||||
// Generally we use a divider of 8, resulting in a 2MHz timer
|
||||
// frequency on a 16MHz MCU. If you are going to change this, be
|
||||
|
|
|
@ -60,8 +60,7 @@
|
|||
#endif
|
||||
|
||||
#if ENABLED(HAVE_TMCDRIVER)
|
||||
void tmc_init()
|
||||
{
|
||||
void tmc_init() {
|
||||
#if ENABLED(X_IS_TMC)
|
||||
stepperX.setMicrosteps(X_MICROSTEPS);
|
||||
stepperX.start();
|
||||
|
@ -147,8 +146,7 @@ void tmc_init()
|
|||
|
||||
// init routine
|
||||
#if ENABLED(HAVE_L6470DRIVER)
|
||||
void L6470_init()
|
||||
{
|
||||
void L6470_init() {
|
||||
#if ENABLED(X_IS_L6470)
|
||||
stepperX.init(X_K_VAL);
|
||||
stepperX.softFree();
|
||||
|
|
|
@ -395,8 +395,7 @@ void checkExtruderAutoFans() {
|
|||
fanState |= 1;
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_1
|
||||
if (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
||||
{
|
||||
if (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE) {
|
||||
if (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
||||
fanState |= 1;
|
||||
else
|
||||
|
@ -404,8 +403,7 @@ void checkExtruderAutoFans() {
|
|||
}
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_2
|
||||
if (current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
||||
{
|
||||
if (current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE) {
|
||||
if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
||||
fanState |= 1;
|
||||
else if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN)
|
||||
|
@ -415,8 +413,7 @@ void checkExtruderAutoFans() {
|
|||
}
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_3
|
||||
if (current_temperature[3] > EXTRUDER_AUTO_FAN_TEMPERATURE)
|
||||
{
|
||||
if (current_temperature[3] > EXTRUDER_AUTO_FAN_TEMPERATURE) {
|
||||
if (EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
|
||||
fanState |= 1;
|
||||
else if (EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN)
|
||||
|
@ -792,10 +789,15 @@ static float analog2tempBed(int raw) {
|
|||
if (i == BEDTEMPTABLE_LEN) celsius = PGM_RD_W(BEDTEMPTABLE[i - 1][1]);
|
||||
|
||||
return celsius;
|
||||
#elif defined BED_USES_AD595
|
||||
|
||||
#elif defined(BED_USES_AD595)
|
||||
|
||||
return ((raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR) * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET;
|
||||
|
||||
#else
|
||||
|
||||
return 0;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1320,7 +1322,7 @@ ISR(TIMER0_COMPB_vect) {
|
|||
#endif
|
||||
}
|
||||
|
||||
if (soft_pwm_0 < pwm_count) { WRITE_HEATER_0(0); }
|
||||
if (soft_pwm_0 < pwm_count) WRITE_HEATER_0(0);
|
||||
#if EXTRUDERS > 1
|
||||
if (soft_pwm_1 < pwm_count) WRITE_HEATER_1(0);
|
||||
#if EXTRUDERS > 2
|
||||
|
@ -1343,6 +1345,7 @@ ISR(TIMER0_COMPB_vect) {
|
|||
pwm_count &= 0x7f;
|
||||
|
||||
#else // SLOW_PWM_HEATERS
|
||||
|
||||
/*
|
||||
* SLOW PWM HEATERS
|
||||
*
|
||||
|
|
|
@ -1497,6 +1497,7 @@ static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr,
|
|||
|
||||
/** LCD API **/
|
||||
void lcd_init() {
|
||||
|
||||
lcd_implementation_init();
|
||||
|
||||
#if ENABLED(NEWPANEL)
|
||||
|
@ -1505,10 +1506,12 @@ void lcd_init() {
|
|||
SET_INPUT(BTN_EN2);
|
||||
WRITE(BTN_EN1, HIGH);
|
||||
WRITE(BTN_EN2, HIGH);
|
||||
|
||||
#if BTN_ENC > 0
|
||||
SET_INPUT(BTN_ENC);
|
||||
WRITE(BTN_ENC, HIGH);
|
||||
#endif
|
||||
|
||||
#if ENABLED(REPRAPWORLD_KEYPAD)
|
||||
pinMode(SHIFT_CLK, OUTPUT);
|
||||
pinMode(SHIFT_LD, OUTPUT);
|
||||
|
@ -1516,7 +1519,9 @@ void lcd_init() {
|
|||
WRITE(SHIFT_OUT, HIGH);
|
||||
WRITE(SHIFT_LD, HIGH);
|
||||
#endif
|
||||
|
||||
#else // Not NEWPANEL
|
||||
|
||||
#if ENABLED(SR_LCD_2W_NL) // Non latching 2 wire shift register
|
||||
pinMode(SR_DATA_PIN, OUTPUT);
|
||||
pinMode(SR_CLK_PIN, OUTPUT);
|
||||
|
@ -1529,6 +1534,7 @@ void lcd_init() {
|
|||
WRITE(SHIFT_LD, HIGH);
|
||||
WRITE(SHIFT_EN, LOW);
|
||||
#endif // SR_LCD_2W_NL
|
||||
|
||||
#endif//!NEWPANEL
|
||||
|
||||
#if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT)
|
||||
|
@ -1967,7 +1973,6 @@ char *ftostr43(const float &x) {
|
|||
// Convert float to string with 1.23 format
|
||||
char* ftostr12ns(const float& x) {
|
||||
long xx = x * 100;
|
||||
|
||||
xx = abs(xx);
|
||||
conv[0] = (xx / 100) % 10 + '0';
|
||||
conv[1] = '.';
|
||||
|
@ -1981,7 +1986,6 @@ char *ftostr12ns(const float &x) {
|
|||
char* ftostr32sp(const float& x) {
|
||||
long xx = abs(x * 100);
|
||||
uint8_t dig;
|
||||
|
||||
if (x < 0) { // negative val = -_0
|
||||
conv[0] = '-';
|
||||
dig = (xx / 1000) % 10;
|
||||
|
|
|
@ -420,7 +420,7 @@ unsigned lcd_print(char c) { return charset_mapper(c); }
|
|||
lcd_print(' ');
|
||||
}
|
||||
|
||||
// scrol the PSTR'text' in a 'len' wide field for 'time' milliseconds at position col,line
|
||||
// Scroll the PSTR 'text' in a 'len' wide field for 'time' milliseconds at position col,line
|
||||
void lcd_scroll(int col, int line, const char* text, int len, int time) {
|
||||
char tmp[LCD_WIDTH + 1] = {0};
|
||||
int n = max(lcd_strlen_P(text) - len, 0);
|
||||
|
|
|
@ -21,11 +21,9 @@
|
|||
|
||||
#include <U8glib.h>
|
||||
|
||||
static void ST7920_SWSPI_SND_8BIT(uint8_t val)
|
||||
{
|
||||
static void ST7920_SWSPI_SND_8BIT(uint8_t val) {
|
||||
uint8_t i;
|
||||
for( i=0; i<8; i++ )
|
||||
{
|
||||
for (i = 0; i < 8; i++) {
|
||||
WRITE(ST7920_CLK_PIN,0);
|
||||
#if F_CPU == 20000000
|
||||
__asm__("nop\n\t");
|
||||
|
@ -46,13 +44,10 @@ static void ST7920_SWSPI_SND_8BIT(uint8_t val)
|
|||
#define ST7920_WRITE_BYTE(a) {ST7920_SWSPI_SND_8BIT((uint8_t)((a)&0xf0u));ST7920_SWSPI_SND_8BIT((uint8_t)((a)<<4u));u8g_10MicroDelay();}
|
||||
#define ST7920_WRITE_BYTES(p,l) {uint8_t i;for(i=0;i<l;i++){ST7920_SWSPI_SND_8BIT(*p&0xf0);ST7920_SWSPI_SND_8BIT(*p<<4);p++;}u8g_10MicroDelay();}
|
||||
|
||||
uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||
{
|
||||
uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) {
|
||||
uint8_t i, y;
|
||||
switch(msg)
|
||||
{
|
||||
case U8G_DEV_MSG_INIT:
|
||||
{
|
||||
switch (msg) {
|
||||
case U8G_DEV_MSG_INIT: {
|
||||
OUT_WRITE(ST7920_CS_PIN, LOW);
|
||||
OUT_WRITE(ST7920_DAT_PIN, LOW);
|
||||
OUT_WRITE(ST7920_CLK_PIN, HIGH);
|
||||
|
@ -64,8 +59,7 @@ uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo
|
|||
ST7920_WRITE_BYTE(0x01); //clear CGRAM ram
|
||||
u8g_Delay(15); //delay for CGRAM clear
|
||||
ST7920_WRITE_BYTE(0x3E); //extended mode + GDRAM active
|
||||
for(y=0;y<LCD_PIXEL_HEIGHT/2;y++) //clear GDRAM
|
||||
{
|
||||
for (y = 0; y < LCD_PIXEL_HEIGHT / 2; y++) { //clear GDRAM
|
||||
ST7920_WRITE_BYTE(0x80 | y); //set y
|
||||
ST7920_WRITE_BYTE(0x80); //set x = 0
|
||||
ST7920_SET_DAT();
|
||||
|
@ -77,31 +71,25 @@ uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo
|
|||
ST7920_NCS();
|
||||
}
|
||||
break;
|
||||
|
||||
case U8G_DEV_MSG_STOP:
|
||||
break;
|
||||
case U8G_DEV_MSG_PAGE_NEXT:
|
||||
{
|
||||
case U8G_DEV_MSG_PAGE_NEXT: {
|
||||
uint8_t* ptr;
|
||||
u8g_pb_t* pb = (u8g_pb_t*)(dev->dev_mem);
|
||||
y = pb->p.page_y0;
|
||||
ptr = (uint8_t*)pb->buf;
|
||||
|
||||
ST7920_CS();
|
||||
for( i = 0; i < PAGE_HEIGHT; i ++ )
|
||||
{
|
||||
for (i = 0; i < PAGE_HEIGHT; i ++) {
|
||||
ST7920_SET_CMD();
|
||||
if ( y < 32 )
|
||||
{
|
||||
if (y < 32) {
|
||||
ST7920_WRITE_BYTE(0x80 | y); //y
|
||||
ST7920_WRITE_BYTE(0x80); //x=0
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
ST7920_WRITE_BYTE(0x80 | (y - 32)); //y
|
||||
ST7920_WRITE_BYTE(0x80 | 8); //x=64
|
||||
}
|
||||
|
||||
ST7920_SET_DAT();
|
||||
ST7920_WRITE_BYTES(ptr, LCD_PIXEL_WIDTH / 8); //ptr is incremented inside of macro
|
||||
y++;
|
||||
|
@ -123,8 +111,7 @@ uint8_t u8g_dev_st7920_128x64_rrd_buf[LCD_PIXEL_WIDTH*(PAGE_HEIGHT/8)] U8G_NOC
|
|||
u8g_pb_t u8g_dev_st7920_128x64_rrd_pb = {{PAGE_HEIGHT, LCD_PIXEL_HEIGHT, 0, 0, 0}, LCD_PIXEL_WIDTH, u8g_dev_st7920_128x64_rrd_buf};
|
||||
u8g_dev_t u8g_dev_st7920_128x64_rrd_sw_spi = {u8g_dev_rrd_st7920_128x64_fn, &u8g_dev_st7920_128x64_rrd_pb, &u8g_com_null_fn};
|
||||
|
||||
class U8GLIB_ST7920_128X64_RRD : public U8GLIB
|
||||
{
|
||||
class U8GLIB_ST7920_128X64_RRD : public U8GLIB {
|
||||
public:
|
||||
U8GLIB_ST7920_128X64_RRD(uint8_t dummy) : U8GLIB(&u8g_dev_st7920_128x64_rrd_sw_spi) {}
|
||||
};
|
||||
|
|
|
@ -22,8 +22,7 @@
|
|||
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
|
||||
class matrix_3x3;
|
||||
|
||||
struct vector_3
|
||||
{
|
||||
struct vector_3 {
|
||||
float x, y, z;
|
||||
|
||||
vector_3();
|
||||
|
@ -42,8 +41,7 @@ struct vector_3
|
|||
void apply_rotation(matrix_3x3 matrix);
|
||||
};
|
||||
|
||||
struct matrix_3x3
|
||||
{
|
||||
struct matrix_3x3 {
|
||||
float matrix[9];
|
||||
|
||||
static matrix_3x3 create_from_rows(vector_3 row_0, vector_3 row_1, vector_3 row_2);
|
||||
|
|
|
@ -16,8 +16,7 @@
|
|||
|
||||
|
||||
/// intialise watch dog with a 4 sec interrupt time
|
||||
void watchdog_init()
|
||||
{
|
||||
void watchdog_init() {
|
||||
#if ENABLED(WATCHDOG_RESET_MANUAL)
|
||||
//We enable the watchdog timer, but only for the interrupt.
|
||||
//Take care, as this requires the correct order of operation, with interrupts disabled. See the datasheet of any AVR chip for details.
|
||||
|
@ -30,8 +29,7 @@ void watchdog_init()
|
|||
}
|
||||
|
||||
/// reset watchdog. MUST be called every 1s after init or avr will reset.
|
||||
void watchdog_reset()
|
||||
{
|
||||
void watchdog_reset() {
|
||||
wdt_reset();
|
||||
}
|
||||
|
||||
|
@ -41,8 +39,7 @@ void watchdog_reset()
|
|||
|
||||
//Watchdog timer interrupt, called if main program blocks >1sec and manual reset is enabled.
|
||||
#if ENABLED(WATCHDOG_RESET_MANUAL)
|
||||
ISR(WDT_vect)
|
||||
{
|
||||
ISR(WDT_vect) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Something is wrong, please turn off the printer.");
|
||||
kill(PSTR("ERR:Please Reset")); //kill blocks //16 characters so it fits on a 16x2 display
|
||||
|
|
Loading…
Reference in a new issue