Commit graph

3035 commits

Author SHA1 Message Date
Scott Lahteine
496fc28dc3 Tweaks to pins comments 2015-08-02 21:34:13 -05:00
Scott Lahteine
8d3b74cc6e Rename SDCARDDETECT to SDCARDDETECT_PIN
- Rename the pin so it can be tested with `PIN_EXISTS`
- Fix some incorrect tests for `SDCARDDETECT`
2015-08-02 21:34:13 -05:00
Scott Lahteine
0f5ada8cbd Group the fail case in one negation (PR#2572) 2015-08-01 18:55:50 -05:00
AnHardt
7ddf1cda1d Improve condition for SERVO_LEVELING (PR#2570) 2015-07-31 22:41:34 -05:00
Richard Wackerbarth
f32048b8f5 In for a penny, in for a pound 2015-07-31 17:13:53 -05:00
Scott Lahteine
e944f960de Add a sanity check for old name "BEEPER" 2015-07-31 17:13:53 -05:00
Scott Lahteine
8ebf0b92be Spacing adjustments in some pins files 2015-07-31 17:13:53 -05:00
Scott Lahteine
94a796c8cc Rename BEEPER to BEEPER_PIN
For consistency with other pins, allowing use of `PIN_EXISTS` macro.
2015-07-31 17:13:53 -05:00
Richard Wackerbarth
b217474eab Compiler Complaints about concatenated tokens (PR#2566) 2015-07-31 17:08:44 -05:00
Scott Lahteine
2460f82d8b Make proper distinction between BEEPER and HAS_BUZZER 2015-07-31 01:24:33 -05:00
Scott Lahteine
58cfcd4239 Overridable Options - Part 5
Apply `ENABLED` / `DISABLED` macros to files needing only a small
number of changes.
2015-07-31 01:24:20 -05:00
Scott Lahteine
5e834352a9 Overridable Options - Part 11 (PR#2563)
Apply `ENABLED` / `DISABLED` macros to EEPROM-related files.
2015-07-31 01:07:04 -05:00
Scott Lahteine
bf6eb93c61 Overridable Options - Part 10 (PR#2562)
Apply `ENABLED` / `DISABLED` macros to planner files.
2015-07-31 01:06:29 -05:00
Scott Lahteine
51e89a269c Overridable Options - Part 9 (PR#2561)
Apply `ENABLED` / `DISABLED` macros to temperature-related files.
2015-07-31 01:05:55 -05:00
Scott Lahteine
c35fb88094 Overridable Options - Part 8 (PR#2560)
Apply `ENABLED` / `DISABLED` macros to stepper-related files.
2015-07-31 01:05:22 -05:00
Scott Lahteine
0d8989fc14 Overridable Options - Part 7 (PR#2559)
Apply `ENABLED` / `DISABLED` macros to LCD-related files.
2015-07-31 01:04:37 -05:00
Scott Lahteine
b4abb0ae7f Apply ENABLED / DISABLED to Marlin core files (PR#2558) 2015-07-31 01:03:58 -05:00
Scott Lahteine
c0d7ea3e7e Overridable Options - Part 4 (PR#2556)
Apply `ENABLED` / `DISABLED` / `HAS_SERVOS` macros to pins files.
2015-07-31 00:44:53 -05:00
Scott Lahteine
4b40964064 Overridable Options - Part 3 (PR#2555)
Apply `ENABLED` / `DISABLED` macros to language-related files.
2015-07-31 00:19:13 -05:00
Scott Lahteine
32683b282b Include configurator copies of configs 2015-07-31 00:03:36 -05:00
Scott Lahteine
37d1879386 Apply overridables to Configuration files 2015-07-31 00:03:36 -05:00
Scott Lahteine
9d151bb61b servo_endstop_angles -> servo_endstop_angle 2015-07-30 23:35:57 -05:00
Scott Lahteine
9334479aeb Minor cleanup of Conditionals.h 2015-07-30 23:35:57 -05:00
Scott Lahteine
1f63293624 servo_endstops -> servo_endstop_id 2015-07-30 23:35:57 -05:00
Scott Lahteine
edaaead7e0 Fix comment about SERVO_ENDSTOP_ANGLES 2015-07-30 23:35:57 -05:00
Scott Lahteine
ed4a6371ad Add HAS_SERVO_ENDSTOPS to simplify conditonals 2015-07-30 23:35:57 -05:00
Scott Lahteine
70be61d416 Reset filament_size with a loop 2015-07-30 23:31:58 -05:00
Scott Lahteine
ae9274be05 Fix minor compiler warnings in for loops 2015-07-30 23:31:58 -05:00
Scott Lahteine
c7c8cfed6f Complete M200 output with M503
- The contents of EEPROM include filament diameters even with
Volumetric disabled. This change makes `M503` display the full
volumetric settings so that playing back the output of `M503 S0` will
fully restore them.
2015-07-30 23:31:58 -05:00
Scott Lahteine
4a58e447a1 Add array size to servo_endstop_angles (PR#2553) 2015-07-30 23:27:38 -05:00
Andrew Lenharth
a0ae9e30df don't pass integer by reference, inefficient. (PR#2547) 2015-07-30 17:51:12 -05:00
AnHardt
d03f037a92 Get rid of malloc() and free() (PR#2549)
Just the minimal changes to qr_solve.cpp and .h to get rid of malloc() and free().

Saves about 656 bytes of progmem (library-code)
and 22 bytes for static variables.

Should use exactly the same amount of stack as it did before on the heap.
2015-07-30 17:50:31 -05:00
Scott Lahteine
3b2b2313ff Combine if block related to SERVO_ENDSTOPS 2015-07-30 16:39:05 -05:00
Scott Lahteine
0af2a80e06 Make SERVO_ENDSTOP_ANGLES 2-dimensional 2015-07-30 16:38:56 -05:00
Richard Wackerbarth
525d0dc239 Configurator is out-of-date AGAIN (PR#2550) 2015-07-30 16:36:01 -05:00
Richard Marko
dd22cbbfb8 makefile: add buzzer.cpp (PR#2479) 2015-07-30 07:56:44 -05:00
Scott Lahteine
9f48798ffd Replace ENABLED with DEFINED for SERVO_ENDSTOPS (PR#2542) 2015-07-30 07:55:29 -05:00
Richard Wackerbarth
ae00fad75b Rename as M100 2015-07-27 20:31:59 -05:00
Richard Wackerbarth
a401d738df There is an echo in here 2015-07-27 20:31:59 -05:00
Richard Wackerbarth
ed7d45e8f5 Memory watcher 2015-07-27 20:31:59 -05:00
AnHardt
d17f7ebc8a Multiply WATCH_TEMP_PERIOD by 1000UL (PR#2535)
instead of 1000.  Else we get errors with times over 32 seconds.
2015-07-27 20:30:53 -05:00
Scott Lahteine
bea6739774 Don't include Z_RAISE_AFTER_PROBING if not used (PR#2527) 2015-07-27 20:24:33 -05:00
Scott Lahteine
81bba7ed88 More sanity checking for extruder requirements (PR#2531) 2015-07-27 10:14:43 -05:00
AnHardt
87a97f3724 Fix conditions for display strings 2015-07-26 20:41:21 -05:00
AnHardt
aaccea0260 Shift some display only strings from language.h to lenguage_en.h
and translate them to German.
2015-07-26 20:41:15 -05:00
Scott Lahteine
e4c01f1c7e Simplify init with ARRAY_BY_EXTRUDERS1 macro (PR#2507) 2015-07-26 20:40:27 -05:00
Scott Lahteine
ab6f1fdf8b Move & document ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED (PR#2528)
As suggested in #2521
- Move `ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED` because `SDSUPPORT` is
also required.
- Add a note that endstops must be enabled for the feature to have any
effect
2015-07-26 20:36:37 -05:00
Richard Marko
1183c10a2e makefile: drop -q -q (much quiet) from avrdude flags
Annoying when trying to figure out if uploading
actually does something.
2015-07-26 20:31:31 -05:00
Richard Marko
0e064357f4 makefile: use /etc/avrdude/avrdude.conf on linux
No need to look for arduino specific avrdude configuration
as distributions ship their own avrdude.conf file that
is compatible with arduino.
2015-07-26 20:31:31 -05:00
Scott Lahteine
bcb7d5a149 Improve sanitycheck for TEMP_SENSOR_1 2015-07-25 21:17:36 -05:00
Scott Lahteine
5b24f59401 Add sanity checks for temp sensors 2015-07-25 21:17:36 -05:00
AnHardt
fd0e81b0c7 Distinguish between BUZZER and SPEAKER (PR#2513)
A speaker needs a AC or a pulsed DC to make a sound, a buzzer only needs a DC.
A buzzer has it's own resonator. It works in most cases to feed the buzzer with a pulsed DC, but the sound will not be as loud as with pure DC.

There seem to be boards where the BEEPER-pin is not able to handle a PWM. Obviously intended for a buzzer.
To make these board able to handle a speaker

* replace the PWM based tone()-function again with a on-delay-off-delay loop.

Hopefully the last time I touch the beeper code.
2015-07-24 22:10:04 -05:00
Scott Lahteine
e2957df05c Shorthand for do_blocking_move_to 2015-07-24 22:07:41 -05:00
Scott Lahteine
819c5b9b50 Adjust comment on Z adjustment 2015-07-24 22:07:41 -05:00
Scott Lahteine
5a7356b6fc Patch for G29 final Z position
Include all the necessary pieces to get the final Z position after
probing the bed, and add commentary about other possible changes.
2015-07-24 22:07:41 -05:00
AnHardt
088e09e052 Add forgotten Marlin_main.cpp 2015-07-24 22:04:49 -05:00
AnHardt
8b876241bd Some more servo code tweaks
Just set up the pin. Don't move to a random position.

Simplify servo::move()
* servo::move() does not need the pin parameter - The pin is set during servo_init() with attach().
* servo::move() does not need a return value.

SERVO_LEVELING is the wrong condition to deactivate the servos.

Remove some temporary (Servo *) variables.
SanityCheck for the servo indexes.
2015-07-24 22:04:49 -05:00
Scott Lahteine
b116c096bd Reduce set_homing_bump_feedrate, save 42 bytes (PR#2512)
Updates to `set_homing_bump_feedrate`:
- Move the string into Program Memory, reduce length by 31 bytes
- Use an auto to get the divisor, adjust it on error
- Set feedrate once, at the end
2015-07-24 22:00:25 -05:00
Scott Lahteine
f7e7862588 Better Sanguinololu & Graphical Controller (PR#2504)
- Change suggested at
https://github.com/MarlinFirmware/Marlin/issues/2482#issuecomment-123553
266
2015-07-23 23:47:07 -05:00
Scott Lahteine
a1154d4a20 Enable Y and sanity-check CoreXZ (PR#2509) 2015-07-23 23:46:27 -05:00
Scott Lahteine
932f1c109e Move servos to the top in pins_MEGACONTROLLER.h 2015-07-23 22:51:41 -05:00
Scott Lahteine
90f8ddfc1e Apply MINIPANEL to other configs 2015-07-23 22:51:41 -05:00
AndySze
00dbf69b6d add MINIPANEL defines 2015-07-23 22:51:40 -05:00
AndySze
8ac5e56934 fixed some format problems and cleaned code 2015-07-23 22:51:40 -05:00
AndySze
eef595aa64 add makerlab mega controller pin configs 2015-07-23 22:51:40 -05:00
AnHardt
4e14e152fa Add Travis tests for CORXY and COREXZ 2015-07-23 19:52:48 -05:00
AnHardt
27d7d2ccab Correct bracketing for COREXY-XZ 2015-07-23 19:52:21 -05:00
Scott Lahteine
469843427d Reduce code in gcode_M81 (PR#2497) 2015-07-23 08:14:00 -05:00
Scott Lahteine
c66955aaf9 Mark unchanging arrays as const (PR#2494)
The compiler may be able to optimize if it knows an array won’t be
changing.
2015-07-22 21:37:37 -05:00
Scott Lahteine
278aa15301 Add COUNT macro and apply 2015-07-22 18:16:05 -05:00
Scott Lahteine
d85861d296 Move macros, add ENABLED/DISABLED, add includes 2015-07-22 18:16:05 -05:00
Scott Lahteine
17960fd2b0 Neaten up pins_MEGATRONICS.h (PR#2493) 2015-07-22 17:23:22 -05:00
Scott Lahteine
aac2b9aa9d Reduce code in gcode_M84 (PR#2492)
`gcode_M84` only needs to call `finishAndDisableSteppers`, which calls
all the other functions.
2015-07-22 17:22:01 -05:00
Scott Lahteine
4971fa73f9 Add a sanitycheck error for old servo settings (PR#2491)
- Documentation solution for #2476
2015-07-22 16:35:10 -05:00
Scott Lahteine
96ace72ddc Servos attach/detach based only on servo config
Assuming #2470 fixed up the main issue.
2015-07-22 16:34:26 -05:00
Richard Wackerbarth
b80a6a8d31 Correct Kossel Pro Configuration_adv (PR#2473) 2015-07-22 16:32:08 -05:00
Scott Lahteine
000a6fce46 Extract update_endstops from stepper ISR (PR#2474) 2015-07-19 18:33:18 -05:00
Scott Lahteine
e83eac312e Move plan_arc next to prepare_move 2015-07-19 16:18:46 -05:00
Scott Lahteine
5c5936508d G2/G3 Arcs for Delta
- Update prepare_move_delta to take a target argument
- Add Delta support to plan_arc
2015-07-19 16:18:46 -05:00
Scott Lahteine
9f53e2f0c9 Implement COREXZ in stepper.cpp and planner.cpp 2015-07-19 16:17:03 -05:00
Scott Lahteine
fa00e1d97f Explode conditions common to corexy and cartesian 2015-07-19 16:17:03 -05:00
Scott Lahteine
c7dd5527b4 Add a C_AXIS and Z_HEAD to support COREXZ 2015-07-19 16:17:03 -05:00
Scott Lahteine
129f986ccf Add COREXZ option to configurations 2015-07-19 16:17:03 -05:00
Scott Lahteine
69b0490b77 Show minimal preheat options in menus (PR#2471) 2015-07-19 16:14:59 -05:00
Scott Lahteine
eacfe132aa Change the name of servos[] and servo_t 2015-07-19 11:35:48 -07:00
Scott Lahteine
3b23ccd366 Patch servos code for move
- Have `Servo::attach` explicitly return -1 if it fails
- Check for -1 in `Servo::move` because `servoIndex` might be 0
- Make `attach` / `detach` calls conditional on `SERVO_LEVELING`
- Move `SERVO_LEVELING` define to `Conditionals.h`
2015-07-19 11:24:23 -07:00
Richard Wackerbarth
54ddc1d417 Simplify DRY RUN (PR#2358)
Elsewhere DRYRUN turns off the heating elements
and ignores constraints on them.

Here, whenever motion is entered into the planner,
if DRY RUN is set, we instantly act as if the E_AXIS
is in the desired final position.
2015-07-19 10:15:53 -05:00
Scott Lahteine
944090c19c Optimize lsDive logic 2015-07-19 10:13:40 -05:00
Scott Lahteine
417706e578 Include space for the terminating nul in lsDive 2015-07-19 10:13:39 -05:00
Scott Lahteine
f3c1a6b19c Reduce lsDive stack usage to the minimum 2015-07-19 10:13:39 -05:00
Patrick Bogen
fba4e6241b Specify print format for reporting invalid tmp_extruder (PR#2465) 2015-07-18 16:40:01 -05:00
AnHardt
d15d869267 Rename axis_is_at_home() to set_axis_is_at_home() (PR#2464)
to make clear - it's not a question but an order.
2015-07-18 10:27:21 -05:00
Scott Lahteine
f209b755a5 Move the Z probe as far as needed to trigger the switch (PR#2461) 2015-07-16 20:02:44 -05:00
Scott Lahteine
0f1df62389 Fixup comments in code_seen 2015-07-16 16:40:52 -05:00
Scott Lahteine
2945eb6650 Call code_seen only once per parameter 2015-07-16 16:40:52 -05:00
Scott Lahteine
b742af2e2a Move Y_STOP_PIN for Printrboard with SD (PR#2420) 2015-07-16 16:39:55 -05:00
Scott Lahteine
baa9199973 Define extern delta only for delta 2015-07-16 16:36:30 -05:00
Scott Lahteine
77e80ef367 Require extruders for thermal code 2015-07-16 16:36:30 -05:00
Scott Lahteine
3bde4f4855 Require temp sensor for bed thermal protection 2015-07-16 16:36:30 -05:00
Scott Lahteine
82a3ed2f9a Cleanup and dev notes in Marlin.h 2015-07-16 16:36:30 -05:00
Scott Lahteine
db23b9b184 Minor tweak to M204 code (PR#2457) 2015-07-16 16:35:13 -05:00
Scott Lahteine
81d42406b7 Move braces in homeaxis to prevent a hanging else (PR#2451) 2015-07-16 10:25:54 -05:00
Scott Lahteine
552a327df8 Fix lsDive filename stack overrun (PR#2449) 2015-07-16 10:23:56 -05:00
AnHardt
a6628f12cc Eliminate the further use of the pin-parameter 2015-07-15 20:50:58 -05:00
AnHardt
8504992e9f Remove the additional pin variable in Servo.cpp
as sugested by @c-born
inhttps://github.com/MarlinFirmware/Marlin/issues/1885#issuecomment-92618240
2015-07-15 20:50:58 -05:00
AnHardt
ed6598adf5 Corrected Bed Height vs. Bed Topology for verbosity > 3
and cleaned out some tabs.

Everything else is a rebased PR#2017 as proposed by @CptanPanic
2015-07-15 19:51:40 -05:00
brian
62302ceb9e Add calculation of difference between auto-correct bed level plane, and measured topo map. 2015-07-15 19:51:40 -05:00
Scott Lahteine
de25a48dec Remove PID examples from preconfigured configs 2015-07-15 19:13:53 -05:00
Scott Lahteine
7456710a1f Update configs formatting 2015-07-15 19:13:47 -05:00
Scott Lahteine
391386dd94 Update configs for new servo deactivation 2015-07-15 19:13:40 -05:00
AnHardt
5243d8b523 Deactivate DEACTIVATE_SERVOS_AFTER_MOVE by default 2015-07-15 17:39:43 -05:00
AnHardt
49609f6c14 Activate the new servo.move() function
by replacing the sequences (attach, write, delay, detach), and their conditions with the new function in Marlin.main.cpp
and removing the old configuration in the ABL part of Configuration.h
2015-07-15 17:39:43 -05:00
AnHardt
40b6edcad7 Introduce DEACTIVATE_SERVOS_AFTER_MOVE in Configuration.h
DEACTIVATE_SERVOS_AFTER_MOVE is ought to replace PROBE_SERVO_DEACTIVATION_DELAY.
But it will work on all servo moves, not only the probe servo moves.
2015-07-15 17:39:43 -05:00
AnHardt
2ddb2a2be9 Add Servo::move() to servo.cpp
move(pin, angel) - Sequence of attach(pin), write(angel),
                   if DEACTIVATE_SERVOS_AFTER_MOVE is defined waits SERVO_DEACTIVATION_DELAY, than detaches.

As we have jitter on the servos during moves of the steppers, and detaching them improves this behaviour,
the usual sequence to handle a servo movement is:
attach(pin)
write(angel)
delay(until the servo finished the move)
detache()

Here a function to handle the complete sequence.
2015-07-15 17:39:43 -05:00
mkile
8a01e5fb7a Update Russian translation (PR#2443)
Slightly updated translation.
2015-07-15 10:35:36 -05:00
Richard Wackerbarth
e83575537a Compiler defines USBCON for USB devices (PR#2433) 2015-07-15 10:32:11 -05:00
ayberkozgur
7268d46508 Always calculate extruder temperature PID d term (PR#2432) 2015-07-13 13:22:26 -05:00
Scott Lahteine
87a872e103 Use st_get_position_mm where possible (PR#2411) 2015-07-12 22:15:54 -05:00
Scott Lahteine
2e0da8abdc Allow N to take a negative argument (PR@2402) 2015-07-12 22:14:25 -05:00
Scott Lahteine
447dbd6fa5 Add STEPPER_RESET_PIN support 2015-07-11 16:04:11 -05:00
Scott Lahteine
a0351bdb73 Remove STEPPER_RESET_FIX option 2015-07-11 16:04:11 -05:00
Scott Lahteine
6b1b8cb2b3 Also nullify spaces before the checksum asterisk (PR#2409) 2015-07-10 09:03:07 -05:00
Scott Lahteine
8e61314323 Use RIGIDBOT_PANEL for consistency with online docs 2015-07-09 11:36:46 -05:00
Scott Lahteine
4b204da3c1 Cleanup of pins_RAMPS_13.h 2015-07-09 11:36:46 -05:00
Scott Lahteine
536f86e896 RigidBot CONTROLLERFAN_PIN in Configuration_adv.h 2015-07-09 11:36:46 -05:00
Scott Lahteine
f068e46661 RigidBoard include for pins.h 2015-07-09 11:36:46 -05:00
Scott Lahteine
9ebcae496d RIGIDBOARD / RIGIDPANEL 2015-07-09 11:36:46 -05:00
Scott Lahteine
c3c605c658 Move note about LiquidTWI2 to Configuration.h (PR#2406) 2015-07-09 05:33:17 -05:00
Scott Lahteine
4e9d658141 Prevent a hanging SERIAL_ECHO_START in M111 2015-07-07 06:59:10 -05:00
Scott Lahteine
bc0fdbe88e Use SERIAL_EOL in SERIAL_PROTOCOLLN macros 2015-07-07 06:59:10 -05:00
Scott Lahteine
d78ebbc0e9 Remove unused MSG_OK_B and MSG_OK_T 2015-07-07 06:59:10 -05:00
Scott Lahteine
6b494c1535 Use disable_all_heaters in M111 2015-07-07 06:59:10 -05:00
Scott Lahteine
15190d40df Add extra EOL after M111 2015-07-07 06:59:10 -05:00
AnHardt
0e1cf78f5c Remove code for testing if probing range is too small (PR#2390)
becaue it is over-restrictive and superseeded by the now working tests
if the probe-recktangle can be reached. See iss#2366
2015-07-07 06:58:01 -05:00
AnHardt
d421f5250d Correct the sign of zprobe_zoffset for G29 (PR#@391)
Sign flipped with #2167.
See also comments
https://github.com/MarlinFirmware/Marlin/issues/2040#issuecomment-118568355
and following.
2015-07-07 06:55:33 -05:00
Scott Lahteine
52fcc743ab Replace "target" with "destination" in M600 (PR#2374)
- Also fix a bug in `M600` where `Z_MAX_ENDSTOP_INVERTING` is being
used as the index into the `destination[AxisEnum]` array.
2015-07-04 05:55:25 -05:00
Scott Lahteine
a5033c3652 Enable LCD_PIN_RESET if it exists (PR#2375) 2015-07-04 05:53:22 -05:00
AnHardt
23c8c5348f Z-height fix V2b (PR#2351)
here the other two occurences of `Z_PROBE_OFFSET_FROM_EXTRUDER` are
replaced with `zprobe_zoffset`.
2015-07-02 20:30:40 -05:00
Todd Swindoll
a111fbbd0a z-probe offset fix (PR#2361)
verified via 1.0.2 tag that compiles by multiple people,
credit for the fix goes to paulusjacobus for the initial find and
sniffle for the correction so M851 works.
2015-07-02 20:28:07 -05:00
Scott Lahteine
42465ee444 Cleanup of comments & spacing 2015-06-28 08:20:28 -05:00
Scott Lahteine
9682ed455e Fix comment on M83, add comment to prepare_move 2015-06-28 08:20:19 -05:00
Scott Lahteine
bb44fe17cf Fix typo in buzzer.h endif (PR#2337) 2015-06-27 06:10:19 -05:00
AnHardt
36746143a1 Correct output of M48 (PR#2336)
n_samples is an uint8_t .
Got printouts like:
50 of 2  ...
2015-06-27 06:08:40 -05:00
Scott Lahteine
f6ca5a8da8 Allow "M110 N123" without a checksum 2015-06-26 18:13:54 -05:00
Scott Lahteine
aaad65ff5d Include a comment documenting M110 2015-06-26 18:13:54 -05:00
Scott Lahteine
862c72b030 Put the mandatory test of gcode_N first 2015-06-26 18:13:54 -05:00
Scott Lahteine
30976f9773 Allow M110 to handle a second N argument 2015-06-26 18:13:53 -05:00
Scott Lahteine
d135b15bb8 Init all endstop bits to 0 (PR#2332) 2015-06-26 07:10:22 -05:00
Scott Lahteine
5ccb1c9e7d Use millis for M600 audio feedback interval 2015-06-25 20:45:03 -05:00
Scott Lahteine
fb16a83b8a Cleanup M600 documentation comments 2015-06-25 20:45:03 -05:00