Compare commits

...

3325 Commits

Author SHA1 Message Date
Scott Lahteine
b2c20a8c0f Version 1.1.3 2017-06-04 17:30:24 -05:00
Scott Lahteine
ece7a2bf36 Unused var in Stepper 2017-06-04 17:30:24 -05:00
Scott Lahteine
d87845052d Ensure safe temperature for M600 2017-06-04 17:30:23 -05:00
Scott Lahteine
ea74ceb791 Maintain message scroll rate 2017-06-04 17:30:22 -05:00
Scott Lahteine
87b591bf53 Merge remote-tracking branch 'upstream/bugfix-1.1.x' into release_113 2017-06-04 12:38:19 -05:00
Scott Lahteine
6411d65c48 Fix Morgan SCARA S2 calculation 2017-06-04 12:24:09 -05:00
Scott Lahteine
46752588b9 Merge pull request #6948 from Bob-the-Kuhn/redundant_temperature
fix redefinition errors for redundant_temperature
2017-06-04 12:16:09 -05:00
Scott Lahteine
5938dae200 Merge pull request #6950 from MagoKimbra/fix_g29_3_point
Fix G29 with 3 point
2017-06-04 12:15:44 -05:00
Scott Lahteine
c5e0f08e35 Merge pull request #6951 from fixoid/patch-4
Initializing extruder/nozzle servo when turning on the printer
2017-06-04 12:13:05 -05:00
Scott Lahteine
1e2ccca063 Merge pull request #6952 from thinkyhead/bf_final_fixups_123
General cleanup before release
2017-06-04 11:51:07 -05:00
Scott Lahteine
e4937b0285 Cleanup of spacing and formatting 2017-06-04 11:31:43 -05:00
fixoid
1aab9906e6 Initializing extruder/nozzle servo when when turning on the printer 2017-06-04 16:57:24 +03:00
MagoKimbra
663ff7f92a Fix G29 with 3 point 2017-06-04 14:39:31 +02:00
oldmcg
9f295581f0 Ubl delta fixes and improvements (#6941)
* Change all direct changes of ubl.state.active to
  set_bed_leveling_enabled() which handles apply/unapply
  leveling to maintain current_position consistency.

Fix invalidation of UBL mesh to invalid unreachable
  mesh points as well (delta corners).

Fix UBL_DELTA unapply_leveling logic and when
it gets applied, including fade_height changes.

Add optional M114 D for detailed position information,
disabled from compilation by default (M114_DETAIL).

* UBL_DELTA raw and inline kinematics

* UBL planner fall through fix

* consistent variable names

* Cleanup orphaned code and whitespace changes.
Use _O2.

* compile warnings cleanup

* Remove redundant #ifdef condition
2017-06-03 17:11:43 -05:00
Bob-the-Kuhn
c34d7a29a6 fix redefinition errors for redundant_temperature
Removing redundant_temperature from public section and leaving it in the
private section
2017-06-03 16:40:14 -05:00
Bob-the-Kuhn
862def2ef4 Merge pull request #6947 from Bob-the-Kuhn/allow-GCODE_DEBUG-when-UBL-enabled
Allow DEBUG_GCODE_PARSER when UBL is enabled
2017-06-03 13:34:46 -05:00
Bob-the-Kuhn
6a5d3b580d fix "hex_address not defined" when UBL is enabled 2017-06-03 13:19:55 -05:00
Scott Lahteine
d336e413aa Merge pull request #6942 from thinkyhead/bf_cleanups_friday
General cleanup after recent commits
2017-06-03 00:48:57 -05:00
Scott Lahteine
789b2928a8 Tweak scrolling message code 2017-06-02 23:45:53 -05:00
Scott Lahteine
fc7d7f87b4 Init probe test pin with FastIO 2017-06-02 23:45:52 -05:00
Scott Lahteine
0282452cea Make Parser::seen volatile 2017-06-02 23:45:52 -05:00
Scott Lahteine
9a305a467b Patch LCD Contrast menu item 2017-06-02 23:45:52 -05:00
Scott Lahteine
90ccac4bcf Clean up after recent commits 2017-06-02 23:45:52 -05:00
Bob-the-Kuhn
fff50d3958 Merge pull request #6940 from Bob-the-Kuhn/Gcode---allow-XY
Gcode.cpp - spaces and parameters
2017-06-02 21:21:32 -05:00
Bob-the-Kuhn
2130f10de8 allow space between parameter and value 2017-06-02 19:57:22 -05:00
Bob-the-Kuhn
ebda4663c3 for discusion 2017-06-02 19:42:43 -05:00
Scott Lahteine
e2c3695e11 Merge pull request #6932 from thinkyhead/bf_zrib_2.0
Support for ZRIB v2.0 Control Board
2017-06-02 16:54:34 -05:00
FATALHERMIT
911079104e Support for ZRIB v2.0 Control Board 2017-06-02 12:05:46 -05:00
Scott Lahteine
65a0212866 Easier override of FILWIDTH_PIN 2017-06-02 12:05:46 -05:00
Scott Lahteine
147d9d76fc Merge pull request #6928 from Bob-the-Kuhn/Fix-case-light-logic-on-Azteeg-X3-boards
Fix case light logic on Azteeg_X3 boards.
2017-06-01 20:14:15 -05:00
Scott Lahteine
9118e135f9 Merge pull request #6931 from thinkyhead/bf_malyan_m150
Malyan m150 configurations
2017-06-01 19:52:38 -05:00
guntherv73
4288c4fb4f Configurations for Malyan M150 2017-06-01 19:26:29 -05:00
Scott Lahteine
1919cb0d1e Config cleanups 2017-06-01 19:26:16 -05:00
Scott Lahteine
e800743268 Merge pull request #6921 from tcm0116/pause_flash
Fix issues with advanced pause
2017-06-01 18:04:25 -05:00
Bob-the-Kuhn
9a9bbfc57c Fix case light logic on Azteeg_X3 boards. 2017-06-01 12:33:24 -05:00
Thomas Moore
a32f7b329c Fix heater status display for advanced pause 2017-06-01 12:29:47 -05:00
Scott Lahteine
ac33a378c0 Merge pull request #6922 from thinkyhead/bf_probe_options
Prevent illegal leveling combinations
2017-06-01 11:12:02 -05:00
Scott Lahteine
445865ea03 REPRAPWORLD_KEYPAD is NEWPANEL but not ULTIPANEL 2017-05-31 23:48:03 -05:00
Scott Lahteine
4296a8b74e For status scrolling, pad a short message 2017-05-31 23:48:03 -05:00
Scott Lahteine
4a96433b7e Simplify counting of printable characters 2017-05-31 23:45:41 -05:00
Scott Lahteine
8d69394ae1 Fix LCD printing of progmem strings 2017-05-31 23:36:57 -05:00
Scott Lahteine
c74d4dede6 Prevent illegal leveling combinations
Addressing issue #6901
2017-05-31 23:36:57 -05:00
Scott Lahteine
155aa62fb0 Merge pull request #6912 from thinkyhead/bf_better_pulse_delay
Account for dual XYZ in pulse delay cycles estimate
2017-05-31 22:21:47 -05:00
Scott Lahteine
a5fa586642 Preferred patch to gcode.h 2017-05-31 21:18:16 -05:00
Bob-the-Kuhn
4ecd41ef90 Merge pull request #6915 from Bob-the-Kuhn/gcode.h-2
gcode.h - another compile error
2017-05-31 14:03:33 -05:00
Bob-the-Kuhn
1b41e1f645 another compile error
only seen if

#if ENABLED(TEMPERATURE_UNITS_SUPPORT)
      ...
    #if
ENABLED(ULTIPANEL) && DISABLED(DISABLE_M503)
2017-05-31 13:59:49 -05:00
Bob-the-Kuhn
65bd4c8c94 Merge pull request #6797 from Bob-the-Kuhn/M355-case-lightimprovements-(1.1.x)
M355 case light improvements (replaces PR #5685)
2017-05-31 13:33:59 -05:00
Bob-the-Kuhn
7ed0761e09 Merge pull request #6914 from Bob-the-Kuhn/Gcode.h-bug-fix
gcode.h - fix compile error
2017-05-31 13:29:19 -05:00
Bob-the-Kuhn
9657e7d3ee copied file changes from PR #5685
==============================

Configuration_adv.h changes

==============================

add "live" LCD update

==============================

P & S version

==============================

final (hopefully) tested version

==============================

update M115 capabilities print

==============================

Menu changes portion of the requested changes

==============================

changed USEABLE_HARDWARE_PWM from a function to a series of macros

==============================

changes per review
2017-05-31 13:22:38 -05:00
Bob-the-Kuhn
8206bb9bb9 fix compile error
invalid conversion from 'const char*' to 'char*' [-fpermissive]
2017-05-31 13:17:01 -05:00
Scott Lahteine
df91346188 Account for dual XYZ in pulse delay cycles estimate 2017-05-31 12:23:28 -05:00
Scott Lahteine
6354b40231 Merge pull request #6903 from thinkyhead/bf_fix_delta_m24_m125
Patch M24 / M125 for delta
2017-05-31 00:03:20 -05:00
Scott Lahteine
7236109f2a Patch M24 / M125 for delta 2017-05-30 23:07:29 -05:00
Scott Lahteine
515f05093f Version 1.1.2 2017-05-30 17:55:55 -05:00
Scott Lahteine
b6d5886dce Patch M24 / M125 for delta 2017-05-30 17:55:55 -05:00
Scott Lahteine
17f8a494bf Merge latest bugfix 2017-05-30 16:03:17 -05:00
Scott Lahteine
be17033762 Fix case light menu toggle 2017-05-30 14:03:45 -05:00
Scott Lahteine
89b93058e3 Merge pull request #6887 from christianh17/PR-sanitycheck
enable DEACTIVATE_SERVOS_AFTER_MOVE with switching nozzle
2017-05-30 13:43:39 -05:00
Scott Lahteine
05b66234ae Merge pull request #6895 from thinkyhead/bf_user_commands
Custom user commands menu
2017-05-30 13:40:50 -05:00
Scott Lahteine
84a0a77c59 Merge pull request #6852 from tcm0116/mixing_extruder_lin_advance
Generate error if MIXING_EXTRUDER and LIN_ADVANCE are both enabled
2017-05-30 13:37:51 -05:00
Scott Lahteine
d33ae33103 Merge pull request #6897 from thinkyhead/bf_fix_lcd_scrolling
Fix LCD scrolling character counting
2017-05-30 03:45:59 -05:00
Scott Lahteine
266ae8912a Formatting in _draw_heater_status 2017-05-30 03:32:16 -05:00
Scott Lahteine
6b9ca16f36 Patch lcd_print edge limit code 2017-05-30 03:32:15 -05:00
Tannoo
74d6dee920 User Command (Script) Menu
The menu (commands / scripts) is configurable in `Configuration_adv.h`.

- Added conditionals.
- Changed script handling.
- Slimmed and working!
- Added Status message.
- Returning to lcd status screen now!
- Example Configs Updated.
- Cleanups by @thinkyhead
2017-05-30 02:33:57 -05:00
Scott Lahteine
d9c8072037 Edit PROPORTIONAL_FONT_RATIO comment 2017-05-30 01:29:39 -05:00
Scott Lahteine
bad432add7 Merge pull request #6894 from thinkyhead/bf_lcd_draw_order
Fix LCD to draw after value changes
2017-05-30 00:02:00 -05:00
Scott Lahteine
46b32e4548 Cleanup LCD interface, add lcd_reset_status 2017-05-29 22:16:13 -05:00
Scott Lahteine
ca99d67ede Fix UBL "Info screen" menu items 2017-05-29 19:55:26 -05:00
Scott Lahteine
2c7a39bc0e Fix LCD print aborted message 2017-05-29 19:52:01 -05:00
Scott Lahteine
0f1e8c195d Draw on LCD after value has changed 2017-05-29 19:42:30 -05:00
Scott Lahteine
5d6366d4e6 Merge pull request #6893 from thinkyhead/bf_lcd_leveling_fixes
Patch PROBE_MANUALLY + LCD_BED_LEVELING
2017-05-29 18:15:22 -05:00
Scott Lahteine
51587c4b43 Rename Feedrate to Velocity to match prior naming 2017-05-29 17:54:15 -05:00
Scott Lahteine
9677f3f2f5 Patch up LCD Bed Leveling menu 2017-05-29 17:51:11 -05:00
Scott Lahteine
fc2eaab7f3 Show home option in level bed menu 2017-05-29 17:51:10 -05:00
Scott Lahteine
c6a7adc293 Patch G29 A and Q arguments to bypass setup 2017-05-29 17:51:10 -05:00
Scott Lahteine
4cece2d72e Use NAN for G29 W omitted parameters 2017-05-29 17:51:10 -05:00
Scott Lahteine
2d71569138 Fix spacing in JSON output 2017-05-29 17:51:10 -05:00
Scott Lahteine
b2d3c8aedd Have G28 do a refresh of the display 2017-05-29 17:51:10 -05:00
Scott Lahteine
50ab9c2e04 General cleanup of spacing, comments 2017-05-29 15:34:14 -05:00
Scott Lahteine
f1e33afda4 Return to Bed Leveling menu when done 2017-05-29 15:31:02 -05:00
Scott Lahteine
78d8c598e1 Fix lcd_synchronize with message 2017-05-29 15:31:02 -05:00
Scott Lahteine
eb39d6e3e2 Don't draw progress bar until it has 1% 2017-05-29 15:31:01 -05:00
Scott Lahteine
194f8b2f55 Start at Z=0 in manual probing 2017-05-29 15:31:01 -05:00
Scott Lahteine
6f89db11f0 Allow lcd_setstatusPGM to reset the alert level 2017-05-29 15:31:00 -05:00
Scott Lahteine
25114414cd Merge pull request #6860 from thinkyhead/bf_case_light_toggle
Case light as a toggle menu item
2017-05-28 18:30:55 -05:00
Scott Lahteine
3fe333143c Case light as a toggle menu item 2017-05-28 14:32:07 -05:00
Scott Lahteine
d013bddfa8 Merge pull request #6876 from thinkyhead/bf_extend_leveling_menu
Extend the ABL/MBL Bed Leveling menu
2017-05-28 14:19:02 -05:00
Scott Lahteine
58556991da Merge pull request #6877 from thinkyhead/bf_scrolling_status
Scrolling status message (option)
2017-05-28 14:12:36 -05:00
Scott Lahteine
01e7e234c6 Add more options to the Bed Leveling menu 2017-05-28 14:04:28 -05:00
Scott Lahteine
0cbe448edf Split up Control > Motion submenu 2017-05-28 12:52:24 -05:00
Scott Lahteine
a3645ec921 Reference op with variable name 2017-05-28 11:33:22 -05:00
Scott Lahteine
71367fd518 Scrolling status message option 2017-05-28 11:26:28 -05:00
Scott Lahteine
b0eae68f57 Prevent bed temperature being set too high 2017-05-28 11:11:17 -05:00
Scott Lahteine
493f0b0c62 Fix some compiler warnings 2017-05-28 11:06:33 -05:00
christianh17
f379a326cc enable DEACTIVATE_SERVOS_AFTER_MOVE with switching nozzle
When using switching nozzle it should be possible to disable the servo after move. Do it only if you do not need the servo power to keep the position.
2017-05-28 15:33:28 +02:00
Scott Lahteine
33279a1e02 Code style tweak to gcode.h 2017-05-27 19:47:26 -05:00
Ernesto Martinez
ac959b12ee Updates to language_es.h based on latest updates. (#6871)
Spanish language updates
2017-05-27 19:08:39 -05:00
Scott Lahteine
55c700d537 Tweak to gcode.h 2017-05-26 22:11:31 -05:00
Bob-the-Kuhn
f0d545b950 Merge pull request #6866 from Bob-the-Kuhn/Parser-fix
Parser fix
2017-05-26 15:12:59 -05:00
Bob-the-Kuhn
868e7db4ae value check was looking at the code 2017-05-26 14:49:42 -05:00
Thomas Moore
fb5e0ffe16 Unify M600 and M125 pause features (#6407)
* Unify M600 and M125 pause features
* Cleanup per thinkyhead's comments
* Rename filament_change_menu_response to advanced_pause_menu_response
* Include HAS_BED_PROBE in QUIET_PROBING
* Update gMax example file
* is_idle() is out of scope without the braces
* Convert FT-i3-2020 to Advance Pause names...
* Allow pause even if not printing
2017-05-26 13:01:02 -05:00
Scott Lahteine
73ed0c63b4 Merge pull request #6858 from thinkyhead/bf_leveling_patch
Fixes for PROBE_MANUALLY and LCD_BED_LEVELING
2017-05-26 12:13:43 -05:00
Scott Lahteine
b3a97b5013 Patch up LCD level bed menus 2017-05-25 23:53:31 -05:00
Scott Lahteine
78af2b1444 Fix PROBE_MANUALLY via G-code 2017-05-25 23:53:31 -05:00
Scott Lahteine
082da23391 One fewer EOL in M503 output 2017-05-25 23:53:31 -05:00
Scott Lahteine
b1a4788593 Add .ino.cpp to .gitignore 2017-05-25 23:28:42 -05:00
Scott Lahteine
b15e531464 Fix screen change on character display 2017-05-25 15:29:14 -05:00
Thomas Moore
44e657766e Add incompatibility error to Sanity Check for MIXING_EXTRUDER and LIN_ADVANCE 2017-05-25 08:06:27 -05:00
Scott Lahteine
735405b2a4 Merge pull request #6848 from thinkyhead/bf_scara_M665
Add M665 for SCARA
2017-05-24 20:51:51 -05:00
Scott Lahteine
ffa901f373 Merge pull request #6839 from thinkyhead/bf_day_ending_in_y
UBL ultralcd.cpp patches
2017-05-24 17:55:44 -05:00
Scott Lahteine
361cbba113 Use M665 to set SCARA angle offsets 2017-05-24 17:49:24 -05:00
Scott Lahteine
5ed63a5724 Apply const in prepare_kinematic_move_to 2017-05-24 17:49:24 -05:00
Scott Lahteine
5cbe0244c5 Fixes for spindle/laser and SCARA probe bounds 2017-05-24 17:49:23 -05:00
Scott Lahteine
1f52c9f5df Neater Megatronics 3 pins 2017-05-24 17:49:23 -05:00
Scott Lahteine
af81cb4cbb Patch for M503 output 2017-05-24 17:49:09 -05:00
Scott Lahteine
0392329cb9 Merge pull request #6634 from thinkyhead/bf_fresh_gcode_parser
New GCode Parser
2017-05-24 16:16:50 -05:00
Scott Lahteine
1d167a6874 Some cleanup, fixes for ultralcd.cpp UBL code
- Free up 30 bytes of SRAM in UBL LCD code
- Fix BUILD_ABS_MESH temperature
- Fix UBL indentation in ultralcd.cpp
- UBL vars lowercase, "convert to positive" sensibly
2017-05-24 01:10:42 -05:00
Scott Lahteine
f4028fe088 New GCode Parser - Implementation 2017-05-23 14:15:10 -05:00
Scott Lahteine
002a06c507 New GCode Parser - Configuration 2017-05-23 14:15:07 -05:00
Scott Lahteine
2dfb7c212c Merge pull request #6836 from thinkyhead/bf_fix_ubl_motion
One more mesh_index_to_npos update
2017-05-23 13:21:36 -05:00
Scott Lahteine
ad915b667e One more mesh_index_to_npos update
Followup to #6827
2017-05-23 13:02:50 -05:00
Scott Lahteine
4ce228f2a0 Merge pull request #6833 from thinkyhead/bf_move_g7
G42: Fix and extend
2017-05-23 11:49:50 -05:00
Scott Lahteine
2881f0a48d Fix, extend G42 with P (probe) parameter
- Also fix handling of SCARA and misuse of `codenum`.
2017-05-23 04:55:42 -05:00
Scott Lahteine
d252d1b6a2 Merge pull request #6831 from thinkyhead/bf_move_g7
Move G7 to G42
2017-05-23 03:02:57 -05:00
Scott Lahteine
6d574883a0 Merge pull request #6830 from thinkyhead/bf_redraw_flags
Use redraw flag for both types of LCD
2017-05-23 03:02:13 -05:00
Brian
82ca6248e2 Move G7 to G42
See: #6777
2017-05-22 23:21:35 -05:00
Scott Lahteine
26ffa558a3 Use redraw flag for both types of LCD 2017-05-22 18:34:54 -05:00
Scott Lahteine
3ff7515527 Merge pull request #6817 from cbusillo/patch-1
missing enable for M605 for duplication mode
2017-05-22 18:07:11 -05:00
Scott Lahteine
62d8e35adc Merge pull request #6827 from thinkyhead/bf_day_ending_in_y
Make UBL a complete singleton
2017-05-22 17:51:03 -05:00
Scott Lahteine
34cfbc90cd Use new attribute macros in more places 2017-05-22 17:38:58 -05:00
Scott Lahteine
85b967657e Embed G26/G29 in ubl class, with enhancements 2017-05-22 17:38:58 -05:00
Scott Lahteine
c99bd69889 Apply const float & more 2017-05-22 17:38:36 -05:00
Scott Lahteine
ad5638f78c Cleanup some fastio code 2017-05-22 17:38:36 -05:00
Scott Lahteine
e271521c39 Single user_canceled function in G26 2017-05-22 17:38:36 -05:00
Scott Lahteine
c2ea22da49 Clean up whitespace 2017-05-22 17:38:36 -05:00
Scott Lahteine
ceb62fc7e1 Fixes #6828: M428 bug 2017-05-22 17:34:03 -05:00
oldmcg
48f7652143 UBL G29 -P3.1 smart fill (#6823)
* UBL G29 -P3.1 mesh fill with distance-weighted least squares fit.

* Back to original -O0 on G29 for now.
2017-05-22 12:33:50 -05:00
Scott Lahteine
850203fb3a Merge pull request #6816 from thinkyhead/bf_lcd_live_editing
Constrain LCD status message rendering
2017-05-22 11:15:35 -05:00
Roxy-3D
3129260c44 Misc. Clean Up (#6822)
* Misc. Clean Up

Mostly UBL related clean up.
- But fixed a bug in the thermistortables.
- Made G26 more responsive to user aborts.
- Added sanity checks for older name for UBL_MESH_VALIDATION.
- Made G29 P4 able to edit invalidated mesh points
- Restore a reasonable Fade Height for UBL when creating new state information
- Get UBL's Topology Map to look a little bit better
- Make sure the user doesn't see a blank screen when doing Mesh Editing.

* Huh???   GitHub Desktop screwed up!

* get the planner object in scope

* Fix out of scope z_fade_height

* Travis timed out...

I need a change so I can force a new commit and sync.
2017-05-21 22:09:51 -05:00
cbusillo
3b4116e73b missing enable for M605 for duplication mode
I believe gcode_M605 will not be called when using DUAL_NOZZLE_DUPLICATION_MODE without this change.
2017-05-21 13:54:20 -04:00
Scott Lahteine
5e8892d6b5 Show Restore Failsafe item with EEPROM off 2017-05-21 12:52:44 -05:00
Scott Lahteine
76af9ac7c5 tweaks 2017-05-21 12:51:58 -05:00
Scott Lahteine
ba5910ab6c Constrain LCD status message rendering 2017-05-21 12:35:16 -05:00
Scott Lahteine
a83f6db679 Merge pull request #6815 from MagoKimbra/fix_ultralcd_lcd_contrast
Fix set_lcd_contrast
2017-05-21 12:10:02 -05:00
MagoKimbra
2c309a8f7c Fix set_lcd_contrast 2017-05-21 19:01:44 +02:00
Scott Lahteine
22dbb2117c Merge pull request #6812 from thinkyhead/bf_day_ending_in_y
Cleanup code, organize & document fastio pin mappings
2017-05-21 11:39:04 -05:00
Roxy-3D
364f8fb613 Update Configuration.h files to better names (#6814)
Changed UBL_G26_MESH_EDITING to UBL_G26_MESH_VALIDATION
Added UBL_MESH_EDIT_MOVES_Z to prepare for that change (coming next)
2017-05-21 11:10:22 -05:00
Scott Lahteine
d7fda2fe49 Formatting, const in G33 2017-05-21 10:40:05 -05:00
Scott Lahteine
1519b0e7c1 Split up fastio.h, document pin mappings 2017-05-21 10:33:27 -05:00
Scott Lahteine
49599caade General cleanup to utf_mapper.h 2017-05-21 10:33:27 -05:00
Scott Lahteine
02f15f6775 UBL-related cleanup, spacing, standards
Reference: #6804
2017-05-21 10:33:26 -05:00
Scott Lahteine
52e20aeab3 Pins-related cleanup, formatting 2017-05-21 07:18:03 -05:00
Scott Lahteine
ea906e4da7 Merge pull request #6810 from thinkyhead/bf_lcd_live_editing
Add "live editing" option to LCD menus
2017-05-21 06:11:52 -05:00
Scott Lahteine
c2ca85aeb2 Merge pull request #6811 from thinkyhead/bf_temp_float_stuff
Restore current temp accessors to float
2017-05-21 06:10:31 -05:00
Scott Lahteine
11fc9564c9 Add live editing option to LCD menu 2017-05-21 05:29:46 -05:00
Scott Lahteine
8a0a5cfccc Temp-related cosmetic changes 2017-05-21 04:49:25 -05:00
Scott Lahteine
b29dbbd5e4 Use uint16_t for temps 2017-05-21 04:48:53 -05:00
Scott Lahteine
ebcd1aaf88 Access hotend/bed temperatures as float 2017-05-21 04:46:31 -05:00
Scott Lahteine
0e1f0efc4b Merge pull request #6809 from thinkyhead/bf_G33_evolves
G33 updates
2017-05-20 20:12:36 -05:00
Scott Lahteine
6ce2b1ff4a G33 evolutionary changes 2017-05-20 19:23:39 -05:00
Scott Lahteine
b3a38fd300 Clean up bugfix readme 2017-05-20 19:20:53 -05:00
Scott Lahteine
3c061a9f9a UBL tabs, whitespace, spelling, etc. 2017-05-19 14:16:50 -05:00
Scott Lahteine
dc2d215355 Merge pull request #6791 from thinkyhead/bf_ubl_pringle
Disable PROBE_MANUALLY for UBL
2017-05-19 07:50:58 -05:00
Scott Lahteine
75badae2f8 Disable PROBE_MANUALLY for UBL
Plus some other UBL tweaks.
2017-05-19 07:13:18 -05:00
Scott Lahteine
94a4af1d7f Merge pull request #6773 from thinkyhead/bf_lcd_patch_e5
Patch LCD code for 5th extruder
2017-05-18 15:26:55 -05:00
Scott Lahteine
5970fe72d1 Merge pull request #6782 from bgort/azteegtweak
Tweak Azteeg X3 PRO _pins.h so Viki2 will work for those without a case light
2017-05-18 15:26:16 -05:00
Brian
01f452c37c Tweak Azteeg X3 PRO _pins.h so Viki2 will work for those without a case light.
- add comment explaining that the Panucatt Viki2 wiring diagram uses pin 44
2017-05-18 13:00:13 -04:00
bgort
47245675fc Merge pull request #6777 from bgort/g7
Add `G7` gcode command to move between UBL mesh points
2017-05-18 06:44:13 -04:00
Brian
e09b4ce4a5 Add checking 2017-05-17 19:46:16 -04:00
Brian
13599a73c7 Add G7 gcode command to move between UBL mesh points
- can be augmented in the future to enable for other leveling systems

Quite simple, but did not want to modify `G1` as the additional checking would slow it down.

Tested & working.
2017-05-17 19:05:36 -04:00
bgort
e16743da45 Merge pull request #6775 from bgort/m421fix
Fix recent regressions, &c.
2017-05-17 17:42:35 -04:00
Brian
43c24f0027 Fix recent regressions, &c.
- fix broken `M421` due to less-than-careful optimization
- add HOME_AFTER_DEACTIVATE define to advanced config so not everyone has to rehome after steppers are deactivated
- misc. cleanups (remove unused label, unused variables)
2017-05-17 17:21:46 -04:00
Scott Lahteine
3843a5151a Patch LCD code for 5th extruder, EEPROM reset 2017-05-17 15:33:51 -05:00
Scott Lahteine
6c064bb7d6 Some probe_pt error-handling 2017-05-17 15:33:51 -05:00
bgort
aad1acc418 Merge pull request #6772 from bgort/meshstor
Fix broken EEPROM save/load
2017-05-17 12:42:14 -04:00
Brian
3370329751 Fix broken EEPROM save/load 2017-05-17 12:41:27 -04:00
Scott Lahteine
f0fe26c411 Ensure Arduino.h and configs are included for serial.cpp 2017-05-17 05:07:35 -05:00
Scott Lahteine
ffb5353294 Merge pull request #6738 from thinkyhead/bf_config_crc_rebase
Implement CRC16, develop mesh allocation table
2017-05-17 04:44:00 -05:00
Scott Lahteine
e806e6419a Merge pull request #6768 from thinkyhead/rc_spindle_m3_m5
Spindle / Laser support
2017-05-17 04:39:32 -05:00
Scott Lahteine
d6f49c6626 Merge pull request #6752 from jdelahayes/bugfix-1.1.x
Update french language
2017-05-17 04:32:28 -05:00
Scott Lahteine
55a87da036 SPINDLE/LASER implementation 2017-05-17 04:26:15 -05:00
Scott Lahteine
ffe0e2d19a SPINDLE/LASER pins changes 2017-05-17 04:23:06 -05:00
Scott Lahteine
99c4900a98 SPINDLE/LASER config changes 2017-05-17 04:23:06 -05:00
Scott Lahteine
a3abfeac47 Mark strings needing translation 2017-05-17 03:49:33 -05:00
Scott Lahteine
7f4e4b1212 UBL name/state methods 2017-05-17 03:49:32 -05:00
Brian
7852369987 Implement CRC16, develop mesh allocation table
- Add crc16 utility function
 - Implement CRC16 for config store, remove old checksum, increment layout version
 - Move UBL mesh store/load to MarlinSettings; increment UBL_VERSION
 - Begin to lay out MAT structure, prototype functions, etc.
 - Rename ubl.state.eeprom_storage_slot to .storage_slot
 - Misc. optimization
 - Cleanup/standardize/improve some messages

This is a work in progress!
2017-05-17 03:49:19 -05:00
Scott Lahteine
00d358d92d Fix a PROBE_MANUALLY bug in ultralcd.cpp 2017-05-17 03:49:19 -05:00
Scott Lahteine
13a06711ad Add a Travis test for UBL + DELTA 2017-05-17 03:49:19 -05:00
Scott Lahteine
4dc49f8424 Merge pull request #6762 from thinkyhead/bf_noz_vs_ext_servo
Separate SWITCHING_NOZZLE and SWITCHING_EXTRUDER
2017-05-16 19:53:07 -05:00
fixoid
c2321b1cdd Separate SWITCHING_NOZZLE and SWITCHING_EXTRUDER 2017-05-16 19:25:17 -05:00
Scott Lahteine
455a24f6ff Merge pull request #6764 from thinkyhead/bf_cleanups_tuesday
Prevent home_all_axes picking up XYZ parameters from command
2017-05-16 19:13:15 -05:00
Scott Lahteine
238fb53617 Patch home_all_axes to ignore G28 XYZ parameters 2017-05-16 16:18:38 -05:00
Scott Lahteine
6b6630e11b Clean up trailing whitespace and tabs 2017-05-16 16:06:18 -05:00
Roxy-3D
d30e478f97 Fix incorrectly optimized find_closest_mesh_point_of_type() function (#6761) 2017-05-16 15:24:24 -05:00
oldmcg
5a9e52a3e0 Use COPY_XYZE macro to copy exactly 4 elements (#6758)
Fix undefined DELTA_PROBEABLE_RADIUS for UBL_DELTA
2017-05-16 11:47:51 -05:00
Roxy-3D
8606644343 M48 Fix for Delta Configuration Files & UBL G29 only homes when necessary (#6757)
* Fix M48 for Delta's  There was a scope issue: DELTA_PROBEABLE_RADIUS wasn't getting defined.

* Check if the specified G29 command requires homing
2017-05-16 11:23:50 -05:00
Tannoo
0cd398c25d UBL Menu Updates (#6751)
Things should be pretty stable for a while.   
But it wouldn't surprise me if the Delta people have a need for a few special commands.
2017-05-16 08:45:31 -05:00
Johann Delahayes
a5737cba7c Update french language 2017-05-16 12:27:42 +02:00
Scott Lahteine
0fef9a2983 Remove "ubl." prefix from calls within ubl method 2017-05-16 01:19:45 -05:00
Scott Lahteine
14a4257c7b UBL tabs, whitespace, spelling, etc. 2017-05-16 01:19:45 -05:00
Scott Lahteine
56e2e331ed UBL G29: replace 'O' with 'T'
Since we already used 'T' for `G29` Topology Report in the past, and since 'T' is available…
2017-05-16 01:18:41 -05:00
Scott Lahteine
091f94a6bf Fix up M421 and some comments 2017-05-16 01:14:03 -05:00
Scott Lahteine
4ec4ecff1a Reduce find_closest_mesh_point_of_type a little 2017-05-16 01:14:03 -05:00
Scott Lahteine
f1a1c6873e Patch lcd_implementation_status_screen compiler warning 2017-05-16 00:59:50 -05:00
moebyusDev
2266c0780d fixed spanish lang
It was missing MSG_FILAMENT_CHANGE_HEAT_2 and MSG_FILAMENT_CHANGE_HEATING_2
2017-05-16 00:35:36 -05:00
oldmcg
b213a45efb UBL_DELTA post merge cleanup (#6705)
* UBL_DELTA post merge cleanup:
   fix fade_height, lost during some previous merge
   fix float cx,cy which are not const
   move repeated z_cxcy calc line inside loop
   style fixes and comment fixes/alignment

* Update ubl_motion.cpp

remove unnecessary parentheses

* Update Conditionals_post.h

Change name of define to more accurate meaning:
UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN
which is not and should not be the default for cartesians with UBL.
2017-05-16 00:30:29 -05:00
Roxy-3D
6f86c46fa6 Fix typo that caused scope issues for DELTA (#6750) 2017-05-15 23:13:45 -05:00
Roxy-3D
1fbcbc05f6 UBL no longer flout's the sacred GCode standard (#6745)
Also clean up ubl_motion.cpp debug info and fix declaration of cx & cy
2017-05-15 16:25:01 -05:00
Scott Lahteine
c262ea92e0 Merge pull request #6733 from abusca/Euskera
Updated Basque translation
2017-05-15 02:30:11 -05:00
Scott Lahteine
b17bcd56da Merge pull request #6736 from thinkyhead/bf_axis_unhomed
More constraint on axis_unhomed_error
2017-05-14 17:20:04 -05:00
Scott Lahteine
267f77b18b More constraint on axis_unhomed_error 2017-05-14 16:03:02 -05:00
Aaron Busca
645096b87a Updated Basque translation
Updated Basque translation with new strings.
2017-05-14 18:29:50 +02:00
Roxy-3D
40d95a4e23 Update the gMax files to display better with Proportional Fonts (#6727)
Update the gMax files to display better with Proportional Fonts
2017-05-13 16:33:04 -05:00
Roxy-3D
c06af63f87 G26's default behaviour ought to be the entire mesh (#6726)
Adding the capability to specify ahead of time how much of the validation pattern to print made it so by default G26 only did one circle and no connecting lines.

It is more natural for the unsophisticated user to just do the entire mesh (bed).   We default the repetition count to GRID_MAX_POINTS+1 to insure we get every last one of them!
2017-05-13 15:53:44 -05:00
Roxy-3D
15040821e0 Setup FolgerTech-i3-2020 files better for the user (#6724)
UltiPanel was enabled, but technically, it is a REPRAP_DISCOUNT_SMART_CONTROLLER
Either configuration works on the machine.  But we want it 'Right'.

Setup the Proportional Font spacing so columns line up nicer on PronterFace and Repetier Host.
2017-05-13 15:14:03 -05:00
Scott Lahteine
2da4398fb5 Merge pull request #6716 from thinkyhead/bf_ubl_prepare_move
Fix prepare_move... for UBL
2017-05-13 06:22:03 -05:00
Scott Lahteine
67c9b1e332 Update M665 comment, fix M665 code_value code. 2017-05-13 05:11:29 -05:00
Scott Lahteine
37399e3cb5 Fix prepare_move_to_destination_cartesian for UBL 2017-05-13 04:13:19 -05:00
Scott Lahteine
a7fb55ea6d Use GRID_MAX_POINTS. Some formatting 2017-05-12 06:57:19 -05:00
Scott Lahteine
e51b5774db Merge pull request #6699 from mtowara/patch-1
Bugfix PRINTER_EVENT_LEDS
2017-05-12 05:58:25 -05:00
Scott Lahteine
056350d9bf Merge pull request #6656 from FHeilmann/fix_fwretract_pos_z_move
Fix FWRetract with positive z-moves during retracted state
2017-05-12 05:56:08 -05:00
Scott Lahteine
5996c3a907 1.1.1 Readme / Version 2017-05-12 05:37:35 -05:00
Scott Lahteine
0d48fd4b6b Merge pull request #6697 from thinkyhead/bf_wednesday_cleanup
Wednesday-Thursday cleaning up after
2017-05-12 05:33:21 -05:00
Scott Lahteine
0e582bcfb7 Fix #6691 - redundant line in M665 2017-05-12 05:17:38 -05:00
Markus Towara
68ae7c8d7a Bugfix PRINTER_EVENT_LEDS
Extra closing curly bracket terminates while loop early if PRINTER_EVENT_LEDS defined
2017-05-12 12:13:23 +02:00
Scott Lahteine
ba29da56e0 Add disclaimer for verboten parameters 2017-05-12 02:34:53 -05:00
Scott Lahteine
0696dda470 Cleanups to UBL_DELTA 2017-05-12 02:34:53 -05:00
Scott Lahteine
cbfca29522 M421 tweaks, just to use const 2017-05-12 01:32:34 -05:00
Scott Lahteine
233f824dd6 Define GRID_MAX_POINTS 2017-05-12 01:32:34 -05:00
Scott Lahteine
b17e2d3dcd Apply const in Marlin_main.cpp 2017-05-12 01:32:33 -05:00
Scott Lahteine
92fbea2906 Add some GCodes to the header of Marlin_main.cpp 2017-05-12 01:32:33 -05:00
Scott Lahteine
94e90ca26c Tweak M80/M81 descriptions 2017-05-12 01:32:33 -05:00
Scott Lahteine
301958b3e0 Simplify mfdoc, mfpub 2017-05-12 01:32:33 -05:00
Scott Lahteine
ee50dfaaf3 Adjust G26 arguments 2017-05-12 01:32:33 -05:00
Scott Lahteine
b0ba5cae73 Fix a spelling boo 2017-05-12 01:32:33 -05:00
oldmcg
91841d75c9 UBL_DELTA (#6695)
UBL on Delta's....     Should be close!    Should not affect any Cartesian printer.
2017-05-11 22:33:47 -05:00
bgort
445003dbb8 Merge pull request #6694 from bgort/g29p2b
UBL:  Minor improvement to G29 P2
2017-05-11 20:44:43 -04:00
bgort
f01a14e7d0 Merge pull request #6689 from bgort/m421mod
M421:  Add 'adjust closest point' capability
2017-05-11 19:08:42 -04:00
Brian
5a5dba6fc8 UBL: Minor improvement to G29 P2
- allow H code value to override probing height
- minor cleanups
2017-05-11 18:54:34 -04:00
Brian
ae676490c9 M421: Add 'adjust closest point' capability
- Split M421 into separate versions for bilinear and ubl
- Fix minor issue in G26
2017-05-11 12:10:38 -04:00
Scott Lahteine
2819228d4f Merge pull request #6681 from thinkyhead/bf_better_mfpub
Better mfpub
2017-05-10 23:05:47 -05:00
Scott Lahteine
9a688d1456 Merge pull request #6682 from thinkyhead/bf_M80_s_arg
"M80 S" to report the state of the PSU pin
2017-05-10 20:29:01 -05:00
Roxy-3D
b63e82f309 M421 Mesh Point Offset and misc. UBL clean up (#6685)
* M421 Mesh Point Offset and misc. UBL clean up

Allow M421 to accept an offset as well as absolute value for a specified
mesh point.
And misc. UBL clean up to reduce redundent code.

* Better error checking for M421

* Fix M421 Y index bug

I just noticed....  We've had a Y index bug for who knows how long?
2017-05-10 18:54:10 -05:00
Pablo Ventura
539e0c2f31 "M80 S" to report the state of the PSU pin 2017-05-10 17:58:58 -05:00
Scott Lahteine
60a4ca1182 Better mfpub 2017-05-10 17:45:58 -05:00
bgort
df42428281 Merge pull request #6665 from bgort/font
Add proportional font adjustment ratio
2017-05-10 17:30:51 -04:00
Brian
2604742191 Add proportional font adjustment ratio
- update example configs
2017-05-10 17:19:03 -04:00
bgort
b3407a371b Merge pull request #6676 from bgort/g26zhop
G26: Add 0.5mm Z-bump between circles to minimize pattern scraping
2017-05-10 17:12:05 -04:00
bgort
c33d99c5b2 Merge pull request #6680 from bgort/g26repeat
G26:  Add 'Repeat' Option
2017-05-10 17:11:34 -04:00
Bob-the-Kuhn
7325035aac Merge pull request #6637 from Tannoo/UBL_Menu_System_1.1
UBL Menu System 1.1
2017-05-10 15:54:48 -05:00
Brian
f7a201b0d0 G26: Add 'Repeat' Option
- Allows for specifying number of points to print/validate, using 'R' code like with G29 P4 Rx
- Moved the code for Random to 'M' so we could be consistent with G29 P4
- G26 instructions indenting/cleanup
2017-05-10 16:52:08 -04:00
Brian
9c5957fc77 G26: Add 0.5mm Z-bump between circles to minimize pattern scraping 2017-05-10 16:11:59 -04:00
bgort
bbb2b86c34 Merge pull request #6672 from bgort/ublmotion
UBL Cleanup/Bugfix
2017-05-10 14:23:07 -04:00
Brian
4da14b14f4 UBL Cleanup/Bugfix
- Fix bug in ubl_line_to_destination
- Improve/fix output of some ubl.h functions
2017-05-10 13:56:17 -04:00
Tannoo
66db6c3acc UBL Menu System 1.1
/**
     * UBL System submenu
     *
     *  Prepare
     * - Unified Bed Leveling
     *   - Activate UBL
     *   - Deactivate UBL
     *   - Mesh Storage
     *       Memory Slot:
     *       Load Bed Mesh
     *       Save Bed Mesh
     *   - Output Map
     *       Map Type:
     *       Output Bed Mesh Host / Output Bed Mesh CSV
     *   - UBL Tools
     *     - Build Mesh
     *         Build PLA Mesh
     *         Build ABS Mesh
     *       - Build Custom Mesh
     *           Hotend Temp:
     *           Bed Temp:
     *           Build Custom Mesh
     *         Info Screen
     *       - Build Cold Mesh
     *       - Fill-in Mesh
     *           Fill-in Mesh
     *           Smart Fill-in
     *           Manual Fill-in
     *           Info Screen
     *         Continue Bed Mesh
     *         Invalidate All
     *         Invalidate Closest
     *     - Validate Mesh
     *         PLA Mesh Validation
     *         ABS Mesh Validation
     *       - Custom Mesh Validation
     *           Hotend Temp:
     *           Bed Temp:
     *           Validate Mesh
     *         Info Screen
     *     - Edit Mesh
     *         Fine Tune All
     *         Fine Tune Closest
     *       - Adjust Mesh Height
     *           Height Amount:
     *           Adjust Mesh Height
     *         Info Screen
     *     - Mesh Leveling
     *         3-Point Mesh Leveling
     *       - Grid Mesh Leveling
     *           Side points:
     *           Level Mesh
     *         Info Screen
     *   - Output UBL Info
     */
2017-05-10 12:14:43 -05:00
bgort
efd93169e5 Merge pull request #6668 from bgort/pio3
PIO Cleanup
2017-05-10 07:25:19 -04:00
Brian
f1cccd65c2 platformio.ini env_default=xxxxx has to match one of the labels in the env:xxxxx, otherwise nothing happens when you pio run 2017-05-10 07:11:13 -04:00
bgort
192db2ab1b Merge pull request #6666 from bgort/M100fix
Fix compiler complaint related to M100
2017-05-10 07:03:59 -04:00
Brian
3b0127cf8e Fix compiler complaint related to M100 2017-05-09 21:45:44 -04:00
Scott Lahteine
59ab971f81 Merge pull request #6658 from thinkyhead/bf_cleanup_tuesday
Patch spacing, const, .gitignore
2017-05-09 16:22:48 -05:00
Scott Lahteine
11104f177b Apply const in BABYSTEPPING 2017-05-09 12:37:23 -05:00
Scott Lahteine
081bf1f879 Patch #else / #endif comments 2017-05-09 12:37:23 -05:00
Scott Lahteine
9a364990d9 Update .gitignore 2017-05-09 12:37:22 -05:00
Scott Lahteine
e1e043d0d0 Merge pull request #6657 from thinkyhead/bf_cleanup_tuesday
Fix M100 compiler warnings, general patches
2017-05-09 12:05:01 -05:00
Scott Lahteine
a9487c9443 Reduce redundancy in BLTOUCH conditionals 2017-05-09 11:52:24 -05:00
Scott Lahteine
8d961b51cc Eliminate M100 compiler warnings? 2017-05-09 11:32:15 -05:00
Scott Lahteine
fe1fce5f56 DevIoT patch 2 2017-05-09 11:28:39 -05:00
bgort
efb9ce24d9 Merge pull request #6645 from tcm0116/bltouch_config
Automatically define Z_MIN_PROBE_ENDSTOP_INVERTING for BLTouch
2017-05-09 09:49:16 -04:00
bgort
e2f07917ab Merge pull request #6644 from tcm0116/bltouch_menu
Move BLTouch LCD menu from Main to Main/Control
2017-05-09 09:49:02 -04:00
Florian Heilmann
fe96376a73 Fix FWRetract with positive z-moves during retracted state 2017-05-09 13:54:57 +02:00
Scott Lahteine
47cae2929f Patch platformio.ini to fix build error in DevIoT
For compatibility with DevIoT, until that can be solved.
2017-05-08 20:27:14 -05:00
Scott Lahteine
5402eaf9bd Merge pull request #6647 from thinkyhead/bf_pwm_cleanup
Rename software PWM variables for clarity
2017-05-08 18:53:23 -05:00
Scott Lahteine
911a87e006 Disable SCARA feedrate scaling by default 2017-05-08 14:41:03 -05:00
Scott Lahteine
f04d1096d4 Link to users in README.md 2017-05-08 14:23:01 -05:00
Scott Lahteine
71396f77d3 Cleanups following recent commits 2017-05-08 14:23:01 -05:00
Scott Lahteine
dca48f0e63 Move platformio.ini back to Marlin folder - it works there 2017-05-08 14:23:01 -05:00
Scott Lahteine
a6dafb058e Small reduction in error code size 2017-05-08 13:58:09 -05:00
Scott Lahteine
a1e04942a2 Cleanup to software PWM variables 2017-05-08 13:51:45 -05:00
Thomas Moore
a20d0794e6 Automatically define Z_MIN_PROBE_ENDSTOP_INVERTING for BLTouch 2017-05-08 16:28:44 +00:00
Thomas Moore
3279337f47 Move BLTouch LCD menu from Main to Main/Control 2017-05-08 15:21:01 +00:00
bgort
83b6bc8e05 Merge pull request #6638 from bgort/silentprobing2
Cleanup previous implementation of new quiet probing
2017-05-08 10:21:36 -04:00
Brian
6cb0fa4128 Cleanup previous implementation of new quiet probing
Saves a few lines of code.
2017-05-08 08:13:46 -04:00
bgort
4b7f8ad9c6 Merge pull request #6610 from bgort/pio-improvements2
PlatformIO-related changes
2017-05-08 07:52:42 -04:00
Scott Lahteine
bb7e3f1d07 Patch configuration temp units 2017-05-07 23:09:40 -05:00
Scott Lahteine
c9bfe7004c Adjust spacing of "spaces" 2017-05-07 23:09:40 -05:00
Scott Lahteine
fa9e54146a Patch redundant lcd settings 2017-05-07 23:09:40 -05:00
Scott Lahteine
0079166388 Spacing adjustment, ubl_G29 2017-05-07 23:09:40 -05:00
Scott Lahteine
232f5d235d Patch mfqp for use directly with MarlinDocumentation 2017-05-07 23:09:40 -05:00
Scott Lahteine
41cf1c9e6a Note 5 extruders in config comments 2017-05-07 23:09:40 -05:00
Scott Lahteine
2e61c1fb37 Patch missing const in temp_abs 2017-05-07 23:09:39 -05:00
Brian
a68084f417 Improve BLTOUCH_HEATERS_OFF functionality
- rename to PROBING_HEATERS_OFF
 - move heater pausing functionality into thermalManager
   - add variables, pause(), ispaused(), other functions
 - add fan pausing functionality -> PROBING_FANS_OFF
 - add probing_pause() wrapper
 - move pausing into do_homing_move() and do_probe_move() to minimize quiet time and so other probe types can benefit
 - example configs
2017-05-07 23:09:39 -05:00
Scott Lahteine
d5346a0689 Adjust spacing in LSF 2017-05-07 23:09:39 -05:00
Roxy-3D
c45b668142 More misc UBL fixes and update gMax examples (#6632)
I think I forgot to Sync before I committed last time.   Some UBL
changes did not stick.

Also, update the gMax configuaration.h file so other than unique numbers
and settings, it exactly matches the default configuration.h file.
2017-05-07 23:09:39 -05:00
Roxy-3D
ad0e5928f5 misc. UBL fixes (#6631)
* Restore LSF functionality

Some of the typo's persisted...   Hopefully this gets them all fixed.

* Restore user's expectations of how G28 should behave

* Allow Nozzle size control with ornery host programs
2017-05-07 23:09:39 -05:00
lrpirlet
06ca56a13c G29 P1 stops reporting Invalid location with this patch 2017-05-07 23:09:39 -05:00
Scott Lahteine
fbd021a756 Support temperature units in M503 2017-05-07 23:09:38 -05:00
bgort
d99794f11d Various improvements - mostly UBL-related (#6607)
UBL Clean up.
2017-05-07 23:09:38 -05:00
Scott Lahteine
c0f1052efb Fix mfrb and mfpub 2017-05-07 23:09:38 -05:00
Scott Lahteine
bf7ecc761f Edit configuration comments 2017-05-07 23:09:38 -05:00
Scott Lahteine
d0480c15ef Tweak git helper scripts 2017-05-07 23:09:38 -05:00
Scott Lahteine
771f42744a Tweak command index increment 2017-05-07 23:09:38 -05:00
Scott Lahteine
3a44157ee8 Minor fix in K8200 readme 2017-05-07 23:09:38 -05:00
Max Matveev
a666ff1255 Fixed USE_CONTROLLER_FAN #define usage 2017-05-07 23:09:37 -05:00
bgort
264f0960f7 fix error in M105 output -- use SERIAL_PROTOCOL for ints instead of SERIAL_PROTOCOL_F (#6584)
also removed wayward 'address of' ampersand in setTargetHotend and setTargetBed parameters
2017-05-07 23:09:37 -05:00
Scott Lahteine
03f94a7a18 1.1.0 ReadMe, Version, helper scripts 2017-05-07 23:09:37 -05:00
Scott Lahteine
232e8682d1 Merge pull request #6633 from thinkyhead/bf_temp_units
Minor patches and cleanup
2017-05-07 21:56:52 -05:00
Scott Lahteine
56ca47ab9d Patch configuration temp units 2017-05-07 21:32:01 -05:00
Scott Lahteine
421dd62800 Adjust spacing of "spaces" 2017-05-07 21:28:54 -05:00
Scott Lahteine
26dba44cd3 Patch redundant lcd settings 2017-05-07 21:28:54 -05:00
Scott Lahteine
34b5041576 Spacing adjustment, ubl_G29 2017-05-07 21:28:54 -05:00
Scott Lahteine
6c2e6ea38e Patch mfqp for use directly with MarlinDocumentation 2017-05-07 21:28:54 -05:00
Scott Lahteine
1c4ed8b106 Note 5 extruders in config comments 2017-05-07 21:28:54 -05:00
Scott Lahteine
6e4a5cc8c6 Patch missing const in temp_abs 2017-05-07 21:13:44 -05:00
bgort
d35e2fda10 Merge pull request #6622 from bgort/silentprobing
Improve BLTOUCH_HEATERS_OFF functionality
2017-05-07 21:33:44 -04:00
Scott Lahteine
6ed52fb765 Adjust spacing in LSF 2017-05-07 19:11:52 -05:00
Roxy-3D
110afff415 More misc UBL fixes and update gMax examples (#6632)
I think I forgot to Sync before I committed last time.   Some UBL
changes did not stick.

Also, update the gMax configuaration.h file so other than unique numbers
and settings, it exactly matches the default configuration.h file.
2017-05-07 19:02:24 -05:00
Roxy-3D
d92fa40c62 misc. UBL fixes (#6631)
* Restore LSF functionality

Some of the typo's persisted...   Hopefully this gets them all fixed.

* Restore user's expectations of how G28 should behave

* Allow Nozzle size control with ornery host programs
2017-05-07 18:23:48 -05:00
Brian
faa270071d Improve BLTOUCH_HEATERS_OFF functionality
- rename to PROBING_HEATERS_OFF
 - move heater pausing functionality into thermalManager
   - add variables, pause(), ispaused(), other functions
 - add fan pausing functionality -> PROBING_FANS_OFF
 - add probing_pause() wrapper
 - move pausing into do_homing_move() and do_probe_move() to minimize quiet time and so other probe types can benefit
 - example configs
2017-05-07 16:22:08 -04:00
bgort
787fdc95bb Merge pull request #6623 from lrpirlet/AllowUBLG29ToWork
G29 P1 stops reporting Invalid location with this patch
2017-05-07 09:42:42 -04:00
lrpirlet
d66e9efac5 G29 P1 stops reporting Invalid location with this patch 2017-05-07 15:07:26 +02:00
Scott Lahteine
8908b15471 Merge pull request #6614 from thinkyhead/bf_temp_units
Support temperature units in M503
2017-05-06 20:41:04 -05:00
Scott Lahteine
ce507deb9f Support temperature units in M503 2017-05-06 20:24:51 -05:00
bgort
a59066bca9 Various improvements - mostly UBL-related (#6607)
UBL Clean up.
2017-05-06 18:59:16 -05:00
Brian
0446dd3ad8 PlatformIO-related changes
- move platformio.ini out of source directory to be more consistent with 'normal' PlatformIO usage
  - facilitates IDE integration
- add related .gitignores
2017-05-06 06:22:10 -04:00
Scott Lahteine
bef9791ea3 Fix mfrb and mfpub 2017-05-05 14:32:16 -05:00
Scott Lahteine
66bedc1a24 Merge pull request #6600 from thinkyhead/bugfix_first_fixes
Update git helper scripts, config comments
2017-05-05 13:48:16 -05:00
Scott Lahteine
77769e284f Edit configuration comments 2017-05-05 13:32:31 -05:00
Scott Lahteine
d14b068147 Tweak git helper scripts 2017-05-05 13:32:31 -05:00
Scott Lahteine
6876e79d42 Tweak command index increment 2017-05-05 13:32:31 -05:00
Scott Lahteine
7fcb5c1424 Minor fix in K8200 readme 2017-05-05 11:25:11 -05:00
Scott Lahteine
0cc4b08b93 Merge pull request #6587 from zlowred/bugfix-1.1.x
Fixed USE_CONTROLLER_FAN #define usage
2017-05-05 01:02:09 -05:00
Max Matveev
267f3a03d9 Fixed USE_CONTROLLER_FAN #define usage 2017-05-04 23:38:29 +02:00
bgort
ae7c602031 fix error in M105 output -- use SERIAL_PROTOCOL for ints instead of SERIAL_PROTOCOL_F (#6584)
also removed wayward 'address of' ampersand in setTargetHotend and setTargetBed parameters
2017-05-04 16:09:45 -05:00
Scott Lahteine
3cd9af2409 bugfix-1.1.x ReadMe, Version, helper scripts 2017-05-04 07:17:10 -05:00
Scott Lahteine
c095ee9ce9 Readme Version 1.1.0 2017-05-04 07:17:10 -05:00
Scott Lahteine
28e597f945 Merge pull request #6570 from FHeilmann/patch-2
Fix broken fwretract recovery extruder feedrate
2017-05-04 07:15:19 -05:00
Florian Heilmann
15268770f5 Fix broken fwretract recovery extruder feedrate
When both lowering and recovery are performed using the same "prepare_move_to_destination()" the extruder recovery feedrate ends up being ignored and, instead, is only capped by either the maximum e-speed or the time it takes to perform the z-lowering. 
Performing the two moves separately from each other ensures a correct recovery feedrate.
2017-05-04 11:34:28 +02:00
Scott Lahteine
58210c3a19 Merge pull request #6568 from thinkyhead/rc_bilinear_extension
Add EXTRAPOLATE_BEYOND_GRID option to bilinear leveling
2017-05-04 00:46:05 -05:00
Scott Lahteine
da08e11acd Add EXTRAPOLATE_BEYOND_GRID option to bilinear leveling 2017-05-04 00:19:07 -05:00
Scott Lahteine
6834e36871 Merge pull request #6567 from thinkyhead/rc_sdcard_stop
Shutdown heaters, autotemp on SD Cancel
2017-05-03 23:54:29 -05:00
Scott Lahteine
399efd66ed Click to resume 2017-05-03 22:26:06 -05:00
Scott Lahteine
1196e3ca59 SDCard print completion can use "M0" 2017-05-03 22:24:03 -05:00
Scott Lahteine
6854f08d22 Shut down autotemp in disable_all_heaters 2017-05-03 20:54:26 -05:00
Thomas Moore
acec237092 Shutdown heaters and fan after canceling a print from the SD card 2017-05-03 20:43:09 -05:00
Scott Lahteine
11b6a3cbb6 Fix regression in least_squares_fit.cpp 2017-05-03 19:21:44 -05:00
Scott Lahteine
e1b85ff67b Merge pull request #6559 from thinkyhead/rc_more_optimal
Compact smart_fill_mesh slightly
2017-05-03 19:07:36 -05:00
Scott Lahteine
9890141f7b M100 tweak 2017-05-03 17:28:09 -05:00
Scott Lahteine
2658cc707a Treat temperature as integer, when possible 2017-05-03 17:27:25 -05:00
Scott Lahteine
1b2c7ec20a Make G26 compatible with inches and thermal unit modes 2017-05-03 17:12:48 -05:00
Scott Lahteine
241bdffe65 Dress up Bilinear Leveling code 2017-05-03 17:12:35 -05:00
Scott Lahteine
67ecf06cc4 Patch issue in gcode_M900
Noted in #6550
2017-05-03 15:26:00 -05:00
Scott Lahteine
de5e485ed7 Explicit upward angle solution 2017-05-03 01:19:44 -05:00
Scott Lahteine
ecdf68735f Compact smart_fill_mesh slightly 2017-05-03 01:06:58 -05:00
Scott Lahteine
628391304f Merge pull request #6552 from thinkyhead/rc_more_ubl_cleanup
Further cleanup of UBL
2017-05-02 22:46:04 -05:00
Scott Lahteine
902fe76db9 Merge pull request #6556 from thinkyhead/rc_use_controller_fan
Implement USE_CONTROLLER_FAN as a feature
2017-05-02 22:43:26 -05:00
Scott Lahteine
7ba7474a73 Drop extra parens from address-of operator 2017-05-02 22:22:23 -05:00
Scott Lahteine
0bf5add075 Use UBL_MESH_(MIN|MAX)_[XY] for G29 move limits 2017-05-02 22:22:23 -05:00
Scott Lahteine
b8ba3b7647 Use 'sq' macro where possible 2017-05-02 22:22:23 -05:00
Scott Lahteine
66eba3346b Remove G29 lcd control debugging 2017-05-02 22:22:23 -05:00
Scott Lahteine
3517154135 Reduce code size, fix bug in smart_fill_mesh 2017-05-02 22:22:23 -05:00
Scott Lahteine
c4e34adcf1 Apply formatting, coding standards to UBL 2017-05-02 22:22:23 -05:00
Scott Lahteine
f4239e62b1 Merge pull request #6557 from thinkyhead/rc_hotend_status_item
Keep refreshing LCD if hotend status is on-screen
2017-05-02 22:04:21 -05:00
Scott Lahteine
fc857c5b78 Merge pull request #6549 from thinkyhead/rc_bltouch_refix
Fix BLTOUCH_HEATERS_OFF bug
2017-05-02 21:53:09 -05:00
Thomas Moore
b39f634252 Continuously update LCD when hotend status is displayed in Filament Change screens 2017-05-02 21:49:40 -05:00
Scott Lahteine
2c13922c46 Implement USE_CONTROLLER_FAN as a feature 2017-05-02 20:18:52 -05:00
Scott Lahteine
492bc536bf Modify debug methods to take PSTR 2017-05-02 17:53:40 -05:00
Bob-the-Kuhn
e5a27d9f36 G29 P2 & P4 bug fixes & improvements 2017-05-02 17:53:40 -05:00
Scott Lahteine
b93be716cf Remove trailing whitespace 2017-05-02 17:53:40 -05:00
Scott Lahteine
76eca9732d Fix mis-named language string define in Dutch 2017-05-02 16:08:09 -05:00
Scott Lahteine
806f670092 Merge pull request #6511 from Bob-the-Kuhn/UBL--G26-minor-improvements
UBL: G26 minor improvements
2017-05-02 16:06:22 -05:00
Scott Lahteine
0803c9d997 Merge pull request #6533 from thinkyhead/rc_autocal_patches
General cleanup of G33
2017-05-02 16:01:02 -05:00
Scott Lahteine
46a5cab6fb Merge pull request #6548 from thinkyhead/rc_fix_dual_z_endstops
Fix Dual-Z endstop conditional test
2017-05-02 16:00:49 -05:00
Brian
ff5fed137f Fix BLTOUCH_HEATERS_OFF bug 2017-05-02 15:53:52 -05:00
Scott Lahteine
ca1dd739a3 Organize ubl.h defines by the files they serve 2017-05-02 15:47:06 -05:00
Scott Lahteine
0449f69179 Cleanup patch to recent merge 2017-05-02 15:47:06 -05:00
LVD-AC
da2abad636 Various cleanups of G33
- update comment section
- redefined P5 grid
- minor clean to probe radius routine
- updated EEPROM version to V37 according remark in #6517
2017-05-02 15:47:06 -05:00
Bob-the-Kuhn
7ce613db0a Fix Conditionals test for endstop plug used by Z2 or probe. 2017-05-02 15:41:47 -05:00
Scott Lahteine
ef750ae86b Towards supporting Z2 in Endstops::report_state 2017-05-02 15:39:32 -05:00
Scott Lahteine
c03c623951 Sanity-check Z2 endstop assigned to a nonexistent pin. 2017-05-02 15:39:00 -05:00
Scott Lahteine
70f31b6c76 Throw an error if no E stepper is free for X2, Y2, Z2 2017-05-02 15:13:47 -05:00
Scott Lahteine
ac69eca586 Merge pull request #6538 from bgort/ubl_gridlbls
Fix, cleanup, prettify `G29 O` output
2017-05-02 14:09:18 -05:00
Scott Lahteine
99b11db1a1 Merge pull request #6537 from thinkyhead/rc_cleanup_sunday
Various leveling-related patches
2017-05-02 00:59:59 -05:00
Roxy-3D
41e63bbb7c Fix Horizontal and Vertical UBL optimization bug. (#6540)
* Fix Horizontal and Vertical optimization bug.

And drastically reduce the debug code foot print....

* Yeah Baby!

The debug print is going A - OK !
2017-05-01 23:52:33 -05:00
Scott Lahteine
e79b335367 Patches for leveling reactivation in G28 / M48 2017-05-01 17:38:57 -05:00
Brian
92e22c3bf2 Fix, cleanup, prettify G29 O output 2017-05-01 18:19:57 -04:00
Scott Lahteine
7d5cd7e0d7 Tweak set_bed_leveling_enabled 2017-05-01 16:46:52 -05:00
Scott Lahteine
ed81e9b3d3 Adjust leveling conditionals 2017-05-01 16:46:48 -05:00
Scott Lahteine
a64e5659ce Clean up G26 external references, private vars 2017-05-01 15:17:52 -05:00
Scott Lahteine
2887c20788 Add a function to home all axes (i.e., gcode_G28) 2017-05-01 15:03:37 -05:00
Scott Lahteine
8f895d5e01 Merge pull request #6530 from thinkyhead/rc_cleanups_2
Fixes for DUAL_NOZZLE_DUPLICATION_MODE
2017-05-01 12:34:11 -05:00
Scott Lahteine
8002672938 Fixes for DUAL_NOZZLE_DUPLICATION_MODE 2017-05-01 12:20:25 -05:00
Scott Lahteine
f69acde966 Merge pull request #6528 from MarlinFirmware/revert-6416-negative-mesh-fix
Revert "Fix for Meshpositions if printer has negative endstop positions"
2017-05-01 11:51:13 -05:00
Scott Lahteine
8bd63aafb9 Merge pull request #6527 from thinkyhead/rc_cleanups_2
Patch DELTA_HEIGHT, BLTOUCH init
2017-05-01 11:28:43 -05:00
Scott Lahteine
4803a4322e Revert "Fix for Meshpositions if printer has negative endstop positions" 2017-05-01 11:25:07 -05:00
Scott Lahteine
4f74c416a4 Patch for BLTOUCH_HEATERS_OFF 2017-05-01 11:13:40 -05:00
Scott Lahteine
1823a6ea29 Patch for missing DELTA_HEIGHT 2017-05-01 11:05:35 -05:00
Scott Lahteine
984c210dec Merge pull request #6519 from thinkyhead/rc_cleanups_2
Various fixes for compiler warnings
2017-05-01 02:46:34 -05:00
Scott Lahteine
d814e468d2 Fix set_heaters_for_bltouch and usage
- Only call `set_heaters_for_bltouch` when actually deploying/stowing
- Clear `next_emi_protection` when re-enabling heaters
2017-05-01 02:27:52 -05:00
Brian
4e1448e75a Various fixes for compiler warnings
add BLTouch-related messages in english and (rusty) french;
add missing endstops.h in ultralcd.cpp;
fix misc. compiler warnings;
fix lsf_reset - ZERO macro can't handle a pointer as it would only memset the size of the pointer, not the size of the entire struct
2017-05-01 02:12:40 -05:00
Scott Lahteine
fc9919b749 Merge pull request #6515 from thinkyhead/rc_cleanup_sunday
Some minor cleanups to code formatting
2017-04-30 22:58:16 -05:00
Scott Lahteine
c12bc51a59 cardreader.cpp spacing tweak 2017-04-30 22:27:47 -05:00
Scott Lahteine
46b714a52f Cleanup spacing in pinsDebug.h 2017-04-30 22:27:26 -05:00
Scott Lahteine
88141ca717 Remove things that aren't pins from pinsDebug_list.h 2017-04-30 22:24:51 -05:00
Scott Lahteine
ff35b11d08 Resolve compiler complaint about memset volatile * 2017-04-30 22:24:03 -05:00
Scott Lahteine
ff95a9850a Merge pull request #6516 from thinkyhead/rc_meaningful_branch_name
Need to define this for Rigidboard V2
2017-04-30 22:17:41 -05:00
Scott Lahteine
0b421e97c9 Rename some (unused) OMCA pins 2017-04-30 22:16:44 -05:00
Scott Lahteine
c2c9f01c8e Patch newly-introduced bug in IS_Z2_OR_PROBE 2017-04-30 20:17:10 -05:00
Scott Lahteine
819df5e06d Cleanups to pins debugging 2017-04-30 20:17:10 -05:00
Scott Lahteine
42824b0e1f Use new serial spacing function to save PROGMEM 2017-04-30 20:14:42 -05:00
Scott Lahteine
cd72901fb7 Cleanups to UBL code 2017-04-30 20:14:42 -05:00
Bob-the-Kuhn
ce87c7803e implement G26 changes per review 2017-04-30 19:05:25 -05:00
jaysonkelly
769817ce5e Need to define this for Rigidboard V2
Motor current defaults need to be defined for Rigidboard
2017-04-30 19:04:27 -05:00
Scott Lahteine
39c6c5621b Merge pull request #6416 from SkyNet3D/negative-mesh-fix
Fix for Meshpositions if printer has negative endstop positions
2017-04-30 17:38:41 -05:00
Scott Lahteine
671a44b8aa Merge pull request #6410 from teemuatlut/LVD-Delta
Delta auto-calibration updates
2017-04-30 16:39:51 -05:00
Scott Lahteine
5d5c9a040a Merge pull request #6509 from thinkyhead/rc_config_patches
Configuration cleanup
2017-04-30 16:10:27 -05:00
Scott Lahteine
d480b6f75a Enable E1 stepper for DUAL_NOZZLE_DUPLICATION_MODE 2017-04-30 16:01:01 -05:00
Bob-the-Kuhn
dcde202157 Add startup notice & update host temperatures while waiting
Right now G26 doesn't send a notice to the host that it's running.  It's
not until the heaters are at temperature that you know for sure if it's
running or not.

Added host temperature prints so that someone watching the host
interface will see the temperatures change during the warm up period.
Updates are sent every 5 seconds.
2017-04-30 15:51:58 -05:00
Scott Lahteine
54751e8557 Put DISTINCT_E_FACTORS adjacent to the affected settings 2017-04-30 15:30:31 -05:00
Scott Lahteine
0dbe4b3e54 Edit configurations to reduce verbosity, arrange logically 2017-04-30 15:30:31 -05:00
Scott Lahteine
0750933bc6 Merge pull request #6490 from Bob-the-Kuhn/Missing-X-stop
Endstop not enabled if pin is zero
2017-04-30 15:09:36 -05:00
bgort
5ace3699b1 Output (commented) coordinates on G29 S-1; helps identify the x/y points that correspond with i/j coordinates, which eases manual tweaking of z values (#6507) 2017-04-30 14:59:34 -05:00
Scott Lahteine
d7d4378481 Remove inaccurate version description 2017-04-30 14:57:19 -05:00
Scott Lahteine
f169c04604 Merge pull request #6491 from thinkyhead/rc_cleanup_wednesday
Various cleanups for recent merges
2017-04-30 14:56:48 -05:00
Scott Lahteine
6d63255ddc Merge pull request #6508 from bgort/pio_improvements
PlatformIO-related improvement
2017-04-30 14:53:22 -05:00
LVD-AC
cafc48dff8 little oops 2017-04-30 22:17:49 +03:00
Brian
627730948d Add U8glib as a dependency to platformio.ini for those who use PlatformIO; this makes compiling even easier as u8glib will be downloaded and included automatically.
Also added the new .pio-related directory to .gitignore, and a few ignores for those who use cmake.
2017-04-30 15:13:51 -04:00
bgort
5974d8e168 change G26 default nozzle size to 0.4, consistent with instructions (#6506) 2017-04-30 13:23:46 -05:00
LVD-AC
471a321624 leaner code for probe routine 2017-04-30 19:15:16 +03:00
bgort
3c0d5ba0a1 allow idle() to be called - fixes sometimes crash/hang in G29 I; (#6505) 2017-04-30 10:22:31 -05:00
Roxy-3D
2509587b5a Correct over optimization of pre-initialized variables (#6500)
* Correct over optimization of pre-initialized variables

NEAR_ZERO() works most of the time...  But it leaves corner cases
uncovered.  We need to explicitly check if these variables are +/-
infinity.

* Correct over optimization of pre-initialized variables
2017-04-29 22:01:29 -05:00
LVD-AC
585c00a728 Proposed changes
This is what I did yesterday:

- basicly gave the tests more comprehensive names; put all the
declarations at the top; got rid of the magic negative C-value (renamed
to P + A, O, T)

- "cos(RADIANS(180 + 30 * axis)) * (1 + circles * 0.1 * ((zig_zag) ? 1 :
-1)) * delta_calibration_radius" compiles wrong is zig_zag statement is
without brackets

- DELTA_TOWER_ANGLE_TRIM reset to 3 values (the calcs use the 3th value
to normalize will not compile otherwise)

-Wrote 3 dummies to keep EEPROM lenght the same

-Reset the configs to the 'original' with autocal + menu disabled (but
can be enabled of course)
2017-04-29 18:53:14 +03:00
Scott Lahteine
29fa241617 Initial patches to G33 2017-04-29 15:29:49 +03:00
Scott Lahteine
12ce051b55 Add a function to output spaces to serial 2017-04-29 15:29:49 +03:00
Scott Lahteine
42f4c53254 Starting on G33 rewrite 2017-04-29 15:29:49 +03:00
Scott Lahteine
baf3b91460 DELTA_TOWER_ANGLE_TRIM only needs AB 2017-04-29 15:29:49 +03:00
Scott Lahteine
6424068412 Merge pull request #6495 from emartinez167/Spanish-language-changes
Last three Spanish language strings
2017-04-29 05:43:04 -05:00
emartinez167
27cd165adf Last three Spanish language strings
Updates as per @thinkyhead request.
2017-04-29 11:33:30 +08:00
Scott Lahteine
2cc9774f34 Apply bltouch_menu
As proffered in #6252
2017-04-28 18:43:03 -05:00
Scott Lahteine
1a111180de Clean up set_heaters_for_bltouch 2017-04-28 18:32:39 -05:00
Scott Lahteine
7db805930a Cleanup configurations 2017-04-28 18:32:39 -05:00
Scott Lahteine
8bf3a3fcdb Remove inaccurate comments from ubl.h 2017-04-28 18:32:38 -05:00
Scott Lahteine
47557d5a19 Fix up formatting in ubl.h 2017-04-28 18:32:38 -05:00
Scott Lahteine
0a8e09c723 Clean up excess whitespace, comment formatting 2017-04-28 18:32:38 -05:00
Scott Lahteine
a35c681453 Clean up least_squares_fit 2017-04-28 17:33:28 -05:00
Bob-the-Kuhn
40089249c3 add PIN_EXISTS to HAS_xyz_MIN macro 2017-04-28 16:47:59 -05:00
Scott Lahteine
8020069371 Apply coding standards for indentation 2017-04-28 15:43:06 -05:00
Scott Lahteine
dabca83742 Merge pull request #6437 from Kaibob2/patch-1
Update language_de.h
2017-04-28 14:47:47 -05:00
Kai
3d0a4c4ea9 Update language_de.h 2017-04-28 21:09:10 +02:00
Silvio
6bf1d50188 Added missing translations (#6458) 2017-04-28 13:49:16 -05:00
Mehmet Sutas
404f767d44 Update language_tr.h (#6463) 2017-04-28 13:48:31 -05:00
Petr Zahradnik
5e701524f8 Update language_cz.h for new translations (#6465)
* Update language_cz.h for new translations

* Correction translate

* Revert correction back to hotend
2017-04-28 13:47:43 -05:00
gege2b
0a92ce7a98 Completed french translation (#6475) 2017-04-28 13:46:09 -05:00
Ernesto Martinez
ff4fb42e7d Add new strings as per recent changes in RCBugFix (#6482)
Adding missing strings to Spanish language, as per changes recently
done to the RCBugFix branch.
2017-04-28 13:45:22 -05:00
paulusjacobus
67d1fc5556 Update language_nl.h (#6478)
updated the RCbugfix release with additional Dutch translations
2017-04-28 13:42:39 -05:00
benlye
8c6b4537a6 Fix issue in itostr4sign with numbers <100 (#6487)
The first character in the string wasn't blanked if the number went from >= 100 to <100, resulting in artefacts in the displayed string.
2017-04-28 13:35:11 -05:00
LVD-AC
4ea8d0f89b Solved "The Travis CI build failed " 2017-04-28 19:55:21 +03:00
LVD-AC
ed6b361e27 cleanup ready to squash 2017-04-28 18:09:18 +03:00
LVD-AC
7a6a1ef583 M666 normalize positive values to <=0
M666

+ tower radians absolute value
2017-04-28 18:05:24 +03:00
Roxy-3D
4075b95519 Allow BL-Touch users to control heaters during probe event (#6485)
The Configuration.h file entries for BL-Touch have been updated to:
```cpp
//#define BLTOUCH
//#define BLTOUCH_DELAY 375      // (ms) Enable and increase if needed
//#define BLTOUCH_HEATERS_OFF // if defined the printer's heaters are
turned off during probe event
```
2017-04-28 09:19:55 -05:00
Roxy-3D
6e8ecb908a Shut down heaters during BL-Touch probe event
The electro-magnetic interference from the bed and nozzle are affecting
the BL-Touch repeatability for some users.   This problem can be helped
by shutting down the heaters during the actual probe event and then
quickly turning them back on.

Because this code is messing with the heaters, it is written in a
paranoid manner.  It only turns the heaters back on if everything is
EXACTLY as it expects things to be.  The BL-Touch probe must have been
put into a deployed state less than 20 seconds prior, or the stow()
function will NOT turn the heaters on.

This code has been tested and works for both G28 and probing functions.
2017-04-27 18:52:58 -05:00
LVD-AC
d8102aeca8 Cn negative : no tower angle calibration
Giving a negative number of probe points disables the tower angle
correction calibration ('4point' instead of '7point' solution)

EEPROM version updated
2017-04-27 21:13:07 +03:00
Roxy-3D
3601f08e87 Better tuned FolgerTech i3-2020 example file 2017-04-27 11:16:38 -05:00
Roxy-3D
a20b7d9581 Better tuned Example file for FolgerTech i3-2020
Also setting up Z-Probe on the machine.
2017-04-27 11:16:38 -05:00
Kai
bf2fe46062 Update language_de.h 2017-04-27 10:13:02 +02:00
Kai
11d34be060 Update language_de.h 2017-04-27 10:06:26 +02:00
Scott Lahteine
817ecb9ff4 Merge pull request #6453 from thinkyhead/rc_cleanup_wednesday
Minor cleanups, work-in-progress
2017-04-26 19:41:52 -05:00
Roxy-3D
22f6e277af Get example files fully into compliance
Change to support new name GRID_MAX_POINTS_XY
Start UBL at version 1.0 in the CUSTOM_MACHINE_NAME
2017-04-26 16:22:17 -05:00
LVD-AC
a9bc1d30cc z_offset change
Avoids to have to recalibrate the delta_height after a z_offset change
2017-04-26 21:57:11 +03:00
Roxy-3D
ec26e23e7e Add my two 'Nice' machines as example configurations
These are my two 'Nice' machines.  Both are good example machines.  The
FolgerTech i3-2020 is probably the best value kit on the market right
now.  And it has developed a 'Cult Following' of hobbiests.  I'll always
have an up to date Configuration.h file set for it, so it may as well be
an example configuration.

And the gCreate gMax 1.5+ is the best printer I've ever seen that runs
Marlin.  For sure, I'll always have up to the minute Configuration.h
files for this printer also.   I've moved over to using the gMax as my
primary development machine for Marlin.   So...  Besides being a good
machine, it is a nice convienience for me to have this Configuration.h
file as an 'Example'.
2017-04-26 12:46:12 -05:00
Scott Lahteine
adb8e68592 Fix stuck "Print Aborted" LCD message
Fixes #6393
2017-04-26 06:24:23 -05:00
Scott Lahteine
096b927102 Minor optimization of FILAMENT_WIDTH_SENSOR 2017-04-26 06:24:23 -05:00
Scott Lahteine
5bdb0b567d Cosmetic patches 2017-04-26 06:24:23 -05:00
Kai
38ae7f4238 Added more translation strings
There are some quite tricky ones which are hardly translateable.
Maybe @Sebastianv650 can review this
2017-04-26 11:58:11 +02:00
Scott Lahteine
4d96d3eab1 Bootscreen delay after clear, then set chars
Fixes #6426
2017-04-25 23:37:28 -05:00
Scott Lahteine
5512130d6c Only set Compare Mode for channel A
Fixes #6445
2017-04-25 23:14:16 -05:00
Roxy-3D
d467e97679 Smart-Fill and Mesh-Tilting (both 3-point and grid) working!
Also...   The memory corruption issue may be fixed.   The GCC compiler
was inlining static functions and this caused the G29() stack frame to
become much larger than the AVR could handle.
2017-04-25 21:03:41 -05:00
Scott Lahteine
a699967ec8 Merge pull request #6443 from thinkyhead/rc_interrupt_fastio
Patch fastio.h with Timer 2 interrupt support
2017-04-24 20:09:41 -05:00
Scott Lahteine
2823bf0874 Update fastio.h with special handling for Timer 2 2017-04-24 16:58:22 -05:00
Scott Lahteine
fd535e111a Fix up XYZ_CONSTS_FROM_CONFIG macro 2017-04-24 14:05:11 -05:00
Kai
03c2f756b9 Update language_de.h 2017-04-24 13:32:16 +02:00
LVD-AC
dcf30a69d6 Allowing #define DELTA_TOWER_ANGLE_TRIM[C_AXIS]
More consistent with M665 where C-value is allowed as well, then
normalized
2017-04-23 14:51:24 +03:00
Brian
f41fb2b635 Numerous UBL-related changes:
* relocated ubl state to config. store:
 * removed a number of ubl state variables and padding which were largely unused - saved 58 bytes of both SRAM and EEPROM;
 * modified ubl sanity_check - no longer checks removed state variables that were otherwise unused, where checking didn't seem to accomplish anything, ultimately;
 * removed pre_initialized state, saving 64 bytes of SRAM;
 * removed automatic saving of UBL state after UBL activation/deactivation;
* consolidated multiple GRID_MAX_POINTS_X/Y to 'Global Leveling' section of EEPROM;
* minor update to G29 Sx notes/instructions;
* renamed mesh load and save parameter to 'slot' from 'm' for clarity;
2017-04-22 18:44:39 -05:00
Brian
f1a4758cef use progmem instead of sram for mesh_index_to_x/ypos array;
fix maximum mesh_index_ array size at 16 (15+1);
2017-04-22 18:34:49 -05:00
Scott Lahteine
d5ec34e7ed Merge pull request #6431 from thinkyhead/rc_bilinear_super_optimize
Minor cleanup, optimize number-to-string
2017-04-22 17:05:24 -05:00
Scott Lahteine
87d240042a Optimize number-to-string functions, no-fan display 2017-04-22 16:23:15 -05:00
Scott Lahteine
959566cf0a Update note about M163 / M164 2017-04-22 16:23:15 -05:00
Scott Lahteine
830851df13 Spend some SRAM to optimize bilinear leveling 2017-04-22 16:19:31 -05:00
Scott Lahteine
091179d960 bed_level_grid => z_values (also *_virt array) 2017-04-22 16:19:31 -05:00
Scott Lahteine
23cdbbb2d3 Add a method to refresh bilinear bed level after a change 2017-04-22 16:19:30 -05:00
Scott Lahteine
ccda63c473 Drop the accessor form for LCD value editing 2017-04-22 16:19:30 -05:00
Scott Lahteine
10da175be5 Fix a pair of compiler complaints 2017-04-22 16:19:30 -05:00
Scott Lahteine
ff0018e287 Format hex values as uppercase 2017-04-21 21:42:41 -05:00
android444
77aa16005d Polish font
Add polish font for GLCD displays only.
HD44780 work properly without polish character.
Update language_pl.h.
2017-04-21 21:42:41 -05:00
teemuatlut
244f67590e Delta probe height bug solved 2017-04-22 02:23:56 +03:00
Hans Raaf
406a83ff2d Fix for Meshpositions if printer has negative endstop positions 2017-04-22 00:16:16 +02:00
benlye
3ed737425d Fix typo in new SET_COM macro 2017-04-21 15:08:18 -05:00
Brian
88649b06a6 use planner.z_fade_height, etc. instead of private, ubl-specific g29 fade height 2017-04-21 09:09:09 -05:00
LVD-AC
004928148c Tower angles
Adding '7-point' tower angle correction calibration
2017-04-21 12:48:45 +03:00
LVD-AC
76ec7a0f80 Adding upto 7*7 probe grids
- adding Cn 5, 6 and 7
2017-04-21 11:58:39 +03:00
LVD-AC
d4f593d200 Delete 'expert level'
and getting rid off verbose level 3 and configuration_adv settings
2017-04-21 11:58:39 +03:00
LVD-AC
13c8493878 M665 rework and related issues (all delta's)
- Making M665 compatible with repetier (see
http://reprap.org/wiki/G_code#M665:_Set_delta_configuration)

- M665 B also sets the radius for manual calibration menu

- Converting tower ajustment definitions to arrays - tower angle
corrections compatible with Esher 3D wizzard

- Only tower angles need to be adjustable with M665 and stored to EEPROM
- tower radius and diag rod can be adjusted in the FW only with #define
2017-04-21 11:58:39 +03:00
Scott Lahteine
e66d9f1313 Merge pull request #6406 from thinkyhead/test_remote
Refresh Marlin git helper scripts
2017-04-20 23:45:24 -05:00
Scott Lahteine
dd436ceeb7 Add 'mfdoc' and 'mfpub' scripts to help with documentation 2017-04-20 21:37:26 -05:00
Scott Lahteine
78308b1c0b New git helper scripts 'mfadd' and 'mfqp'
- `mfadd` adds and fetches a user’s fork of Marlin
- `mfqp` invokes `git commit -m`, `mfrb`, `git push -f`
2017-04-20 21:37:25 -05:00
Scott Lahteine
7b4c245de3 Improve existing git helper scripts 2017-04-20 21:37:25 -05:00
Scott Lahteine
06f4776be4 mfprune: fetch remotes, offer checkout option 2017-04-20 21:37:25 -05:00
Scott Lahteine
c73b62447c Merge pull request #6403 from thinkyhead/rc_flsun_clean
FLSUN and trailing whitespace cleanup
2017-04-20 20:48:41 -05:00
Scott Lahteine
e0e069c6d8 Clean up trailing whitespace 2017-04-20 17:52:07 -05:00
Scott Lahteine
9b94210394 Bring FLSUN config more up to date 2017-04-20 17:52:06 -05:00
Scott Lahteine
b0aa256bc0 Updates for all configs 2017-04-20 17:52:05 -05:00
Scott Lahteine
b6ed69571a Merge pull request #6400 from thinkyhead/rc_interrupt_macros
Add and apply interrupt helper macros
2017-04-20 17:17:21 -05:00
Scott Lahteine
ee46ce1743 Add and apply interrupt helper macros 2017-04-20 16:04:29 -05:00
Scott Lahteine
6131c62499 General cleanup 2017-04-20 16:04:29 -05:00
benlye
2c86dfd3b5 Fix compiler type conversion errors after LCD changes 2017-04-20 16:04:29 -05:00
Scott Lahteine
55f9e76610 Merge pull request #6367 from thinkyhead/rc_cleanup_followup
Cleanup after some direct commits
2017-04-20 15:13:24 -05:00
Scott Lahteine
d38a792a91 Merge pull request #6382 from MagoKimbra/fix_configuration_store
Fix double definition in configuration_store
2017-04-20 15:06:58 -05:00
Scott Lahteine
b98bc034ae Replace c_assert hack with static_assert 2017-04-19 13:07:35 -05:00
Scott Lahteine
5eb2b1a790 Clear up G29 compiler warnings 2017-04-19 13:07:35 -05:00
Scott Lahteine
4ce2a63db0 Apply const, spacing to Marlin_main.cpp 2017-04-19 13:07:34 -05:00
Scott Lahteine
e97f1284c1 Cleanup of pins testing code 2017-04-19 13:07:34 -05:00
Scott Lahteine
e9b53ae00c Cleanup after some direct commits
https://github.com/MarlinFirmware/Marlin/commit/5e9726530ff21d3bc62beaa6
ac1b9437c276130a
2017-04-19 13:07:34 -05:00
Scott Lahteine
e05d050a1e Add hex routine to print an address 2017-04-19 13:07:34 -05:00
Scott Lahteine
4542282f5e Fix broken TOGGLE macro in fastio.h 2017-04-19 12:38:13 -05:00
MagoKimbra
ed52275a14 Fix double definition in configuration_store 2017-04-18 17:57:40 +02:00
Scott Lahteine
de569e3d4e Merge pull request #6327 from Bob-the-Kuhn/M43-toggle-&-Z-probe-fixes
M43 Toggle & Z servo test - fix bug & add another check
2017-04-18 03:21:57 -05:00
Scott Lahteine
f33a650ecc Merge pull request #6368 from thinkyhead/rc_linear_advance_eeprom
Add Linear Advance values to EEPROM and LCD
2017-04-18 02:54:12 -05:00
Scott Lahteine
a00ae4790a Replace M905 with unique code M900 2017-04-17 16:39:37 -05:00
Scott Lahteine
1286d9603d Clean up and organize ultralcd.cpp 2017-04-17 16:39:36 -05:00
Scott Lahteine
3cdf78a79f MSG_VOLUMETRIC => MSG_FILAMENT 2017-04-17 16:39:36 -05:00
Thomas Moore
f8e77d6545 Add Linear Advance values to EEPROM and enable configuration of K via LCD 2017-04-17 16:39:36 -05:00
Scott Lahteine
eb2d073dae Add M905 R for setting the E/D ratio directly 2017-04-17 16:39:36 -05:00
Scott Lahteine
69dfa54a84 Use code_value_linear_units for known-linear axes 2017-04-17 16:39:36 -05:00
Scott Lahteine
b956f2642b Show M503 report with current linear units 2017-04-17 16:39:36 -05:00
Scott Lahteine
ba4a005ceb Merge pull request #6373 from mtowara/mt_makefile_fix
Fix Makefile build
2017-04-17 16:16:37 -05:00
towara
150b15c311 fix compiler errors generated by more stringent flags in Makefile:
- use volatile for registers
- avoid implicit casts
2017-04-17 11:59:47 +02:00
towara
f6095c9325 fix missing serial.cpp in Makefile 2017-04-17 11:59:03 +02:00
Scott Lahteine
871f92378c Tweak headings in EEPROM structure 2017-04-16 18:42:33 -05:00
Scott Lahteine
bf2548be4a Merge pull request #6362 from tcm0116/babystepping
Only queue babysteps if axis is in a known position
2017-04-16 17:46:06 -05:00
Scott Lahteine
bddd75aa5c Merge pull request #6363 from dot-bob/display_reset
Identifed a display initialization issue.
2017-04-16 17:44:44 -05:00
dot-bob
9c410ddf68 Fixed an issue where a display with a hardware reset pin (LCD_RESET) may not get initialized properly. 2017-04-15 22:45:15 -06:00
Thomas Moore
72a7fac461 Only queue babysteps if axis is in a known position 2017-04-15 23:19:43 -05:00
Roxy-3D
5e9726530f Setup to find data corruption and general clean up
This data corruption problem is very difficult.  Just changing the code
a little bit changes whether the problem even happens and what is
affected.  I need these changes in the main branch so I can operate with
the extra debug code always available and turned on.

Everything is setup such that if M100 is turned off or DEBUG(ECHO) is
turned off, the code is not affected.   M100 has been made a little bit
more inteligent so it can display the serial command buffers in a more
meaningful way (because the data corruption seems to often times end up
in that area).
2017-04-15 19:26:43 -05:00
Scott Lahteine
e519e95953 Merge pull request #6358 from thinkyhead/rc_doubleclick_fix
Show Cancel/Continue screen for ABL "Level Bed"
2017-04-15 17:25:37 -05:00
Scott Lahteine
a81606c680 Show Cancel/Continue screen for ABL "Level Bed" 2017-04-15 16:51:03 -05:00
Scott Lahteine
51021bc7b8 Merge pull request #6353 from thinkyhead/rc_endstop_coolness
Clean up endstop triggering code
2017-04-15 16:49:54 -05:00
Scott Lahteine
857dec0990 Merge pull request #6342 from benlye/benlye-fix-softspi
Fix softspi variant conditional for 1284p
2017-04-15 16:33:50 -05:00
Scott Lahteine
4e04383d18 Merge pull request #6354 from thinkyhead/rc_doubleclick_fix
Fix undefined symbol if DOUBLECLICK_FOR_Z_BABYSTEPPING and HAS_BED_PROBE defined
2017-04-15 16:06:29 -05:00
Thomas Moore
8dd0492e68 Show lcd_babystep_zoffset screen if DOUBLECLICK_FOR_Z_BABYSTEPPING is enabled and HAS_BED_PROBE is defined 2017-04-15 14:44:50 -05:00
benlye
0a2f60fab4 Make spi.h inclusion conditional
spi.h is only needed if HEATER_0_USES_MAX6675 is defined, so making its inclusion conditional on HEATER_0_USES_MAX6675 being defined.
2017-04-15 16:22:42 +01:00
Bob-the-Kuhn
60471b7592 minor improvements
Configuration_store.cpp - changed a couple of print statements so the
values were printed.  The old method resulted in the formula being
printed.

ubl_G29
1) added support for R option to P4.  Now probes all points unless R is
present and the number is greater than 0.

2) P2 - moved map print statement so it showed the point that was
currently being probed,  The old location did this only for the first
point.

3) P4 - Moved the map print for the same reason.

ultralcd.cpp - changed "Mesh Editor :" to "Mesh Editor" because the LCD
draw routine puts a ":" in automatically so you end up with an extra ":"
using the old message.
2017-04-15 09:31:55 -05:00
Scott Lahteine
25a61e9061 Improve motion-based endstop triggering code 2017-04-15 06:16:50 -05:00
Scott Lahteine
5a97a7be97 Merge pull request #6352 from thinkyhead/rc_patch_menu_bug
Fix compiler warning about z-offset callback
2017-04-15 03:35:16 -05:00
Scott Lahteine
a2356c2825 Fix compiler warning about z-offset callback 2017-04-15 02:50:27 -05:00
Scott Lahteine
3a40e637cd Merge pull request #6350 from thinkyhead/rc_more_dualx_logging
Add more Dual X logging
2017-04-15 02:02:54 -05:00
Scott Lahteine
037c964d26 Reverse bools on prepare_move sub-functions 2017-04-15 01:08:19 -05:00
Scott Lahteine
d9c4333806 Extra logging of Dual X modes 2017-04-15 01:08:19 -05:00
Scott Lahteine
8cccf69ef7 Merge pull request #6348 from thinkyhead/rc_tmc2130_clean_clean
TMC2130 update. Fixes, tune-ups, new features
2017-04-14 23:40:56 -05:00
Scott Lahteine
4067d15c92 Cleanup, extend TMC2130 implementation 2017-04-14 23:00:00 -05:00
Scott Lahteine
d60c02c5b1 Cleanup, extend TMC2130 configuration 2017-04-14 22:43:56 -05:00
Scott Lahteine
0e97b3d6d0 Fix some configuration spacing 2017-04-14 22:36:10 -05:00
Scott Lahteine
cf6f483378 Merge pull request #6187 from thinkyhead/rc_flsun_delta_autocal
Delta: DELTA_HEIGHT, G33 Auto-Calibrate, drop M206/M428, add M665 H
2017-04-14 22:32:12 -05:00
Scott Lahteine
24882adfbf Allow NO_WORKSPACE_OFFSETS with DELTA_AUTO_CALIBRATION
- On `DELTA` the `M665 H` option supplants `M206`
- On `DELTA` `NO_WORKSPACE_OFFSETS` only reverts `G92` behavior
- Spawn 4 conditionals based on `NO_WORKSPACE_OFFSETS`
- Optimize coordinate space conversion for `DELTA` workspace
- To keep EEPROM version, retain `home_offset[XYZ]`, just ignore XY
2017-04-14 21:56:49 -05:00
Bob-the-Kuhn
1acb84ba02 fix 1 bug, add error messages
===============================================

make changes requested by reviewers

===============================================

add M43 test to Travis, fix EOL, remove trailing spaces
2017-04-14 20:57:45 -05:00
Scott Lahteine
40dfafbe89 Add Travis CI test for FLSUN config 2017-04-14 19:46:31 -05:00
LVD-AC
8821963873 Implement delta auto-calibration and delta_height 2017-04-14 19:46:31 -05:00
Scott Lahteine
b305699046 Merge pull request #6341 from benlye/benlye-lcd_babystep_zoffset
Fix lcd_babystep_zoffset()
2017-04-14 19:11:46 -05:00
LVD-AC
03bda24d19 Add delta auto-calibration and configuration for Flsun AC 2017-04-14 19:08:14 -05:00
Scott Lahteine
396bd7b377 Update "firstpush" to open branch commits on Github 2017-04-14 19:06:31 -05:00
Scott Lahteine
1bd25fd2b3 Clean up config spacing, section headings, etc. 2017-04-14 19:06:31 -05:00
Scott Lahteine
153b0ae967 Tweak Delta Printer configuration note 2017-04-14 19:06:06 -05:00
Scott Lahteine
81ffd98dd9 Allow faux leveling 2017-04-14 19:06:06 -05:00
Scott Lahteine
2355d87e11 Merge pull request #6346 from thinkyhead/rc_broken_abl_test
Add support for SOLENOID_PROBE
2017-04-14 18:36:32 -05:00
Scott Lahteine
f4685c28b7 Reorder Conditionals_post.h and add comments 2017-04-14 18:18:21 -05:00
Scott Lahteine
5135be14ea Include Travis CI tests for 5 extruders / e-steppers 2017-04-14 18:18:20 -05:00
Scott Lahteine
0ac2b5c045 Additional 5 extruders support (solenoids, microstepping) 2017-04-14 18:18:20 -05:00
Scott Lahteine
fd2a0784ba Add support for SOLENOID_PROBE 2017-04-14 17:24:36 -05:00
Scott Lahteine
5803ba43a9 Expose EXT_SOLENOID as an advanced option 2017-04-14 17:24:36 -05:00
Scott Lahteine
ea734f910b Use direct pin manipulation whenever possible 2017-04-14 16:55:35 -05:00
Scott Lahteine
19d0c6a0c0 Patch to init W with RGBW_LED 2017-04-14 16:55:23 -05:00
Scott Lahteine
3e079660b0 Never define SLED_PIN 2017-04-14 16:36:32 -05:00
Scott Lahteine
76765a8279 Merge pull request #6337 from thinkyhead/rc_core_endstop_fix
CORExx endstop detection fixes
2017-04-14 14:24:58 -05:00
benlye
1a447d0047 Fix variant conditional for 1284p 2017-04-14 18:46:09 +01:00
benlye
1f9ee42750 Fix lcd_babystep_zoffset()
Resolve 'steps_to_mm was not declared in this scope' compilation error after recent changes to merge babystepping with M851
2017-04-14 18:38:35 +01:00
Bob-the-Kuhn
445d39e95a CORExx endstop detection fixes
1. The CORExx printers were checking more endstop axis than needed.

2. Removed all the CORE_xx_NOT logic.  The motor_direction(xx) routine
always returns the correct data so it is not needed.  It was actually
cause the wrong direction to be checked in some cases.

3. Made the logic/defines for X, Y & Z axis all the same.  The old logic
checked inappropriate configurations for Y and didn't check all the
correct configurations on Z.

4. Added a check for zero steps before the X, Y & Z axis.  Previously
would check the they axis even if there were no movement.
2017-04-13 21:43:37 -05:00
Roxy-3D
28fec61f92 M100 Fixes and Features
All the memory accesses need to be unsigned char in  order to avoid
false errors being detected.   Two new features are available for
developers to call into the M100 functionality to look for data
corruption.
2017-04-13 18:20:53 -05:00
Scott Lahteine
2f2835e622 Merge pull request #6332 from thinkyhead/rc_babystep_zprobe
Make BABYSTEP_ZPROBE_OFFSET an optional feature
2017-04-13 16:50:08 -05:00
Scott Lahteine
52c3ace102 Add BABYSTEP_ZPROBE_OFFSET as an optional feature 2017-04-13 16:29:43 -05:00
Scott Lahteine
cd4e6abec8 Group BABYSTEPPING options together 2017-04-13 16:26:45 -05:00
Scott Lahteine
972c9655e9 Merge pull request #6245 from thinkyhead/rc_babystep_zprobe
BABYSTEPPING updates Z probe offset
2017-04-13 16:06:07 -05:00
Scott Lahteine
60ac41a32c Add code to handle changes to zprobe_zoffset 2017-04-13 15:46:35 -05:00
Scott Lahteine
8fa4209916 Movement/adjustment should be reverse of probe offset change 2017-04-13 15:46:05 -05:00
Thomas Moore
361655828f Use babystepping to adjust bed probe z-offset 2017-04-13 15:46:05 -05:00
Scott Lahteine
36e5c7c389 Merge pull request #6330 from thinkyhead/rc_improvements
Sanity check per-axis options' array sizes
2017-04-13 13:08:44 -05:00
Scott Lahteine
02fca543bb Merge pull request #6272 from thinkyhead/rc_adc_variable_rate
Make ADC sensor reading frequency adjustable
2017-04-13 12:49:31 -05:00
Scott Lahteine
34308368c0 Sanity check per-axis settings for size 2017-04-13 11:35:20 -05:00
Scott Lahteine
ac96ae89f9 Apply const in Stepper::isr 2017-04-13 06:20:36 -05:00
Scott Lahteine
2fa1e882d0 Merge pull request #6325 from thinkyhead/rc_M20_with_size
Simplified M20 with size
2017-04-13 05:06:52 -05:00
Bob-the-Kuhn
1b12fea0fa simplified M20 with size 2017-04-13 04:56:58 -05:00
Scott Lahteine
4022b971db Merge pull request #6315 from thinkyhead/rc_unify_M421
Unify M421
2017-04-12 19:43:28 -05:00
Scott Lahteine
b236562354 Merge pull request #6306 from thinkyhead/cleanup_after_6302
Adjustments to M100
2017-04-12 19:12:27 -05:00
Scott Lahteine
5e4f4d387f Swap MBL z_values dimensions to [X][Y] 2017-04-12 17:24:05 -05:00
Scott Lahteine
f81b518a03 Add Travis tests for optional M100 features 2017-04-12 17:07:22 -05:00
Scott Lahteine
063f641651 Unify M421 2017-04-11 15:46:13 -05:00
Scott Lahteine
6d5400dc31 Merge pull request #6240 from thinkyhead/rebuild_rgb_led
Extend RGB LED with Printer Events
2017-04-11 15:16:57 -05:00
Scott Lahteine
dac21ec680 Add support for an RGBW LED 2017-04-11 12:58:55 -05:00
Scott Lahteine
e7746ffee4 Extend RGB LED support, adding Printer Events 2017-04-11 12:15:41 -05:00
Scott Lahteine
c7063eb55c theTarget => target_temp 2017-04-11 12:15:41 -05:00
Scott Lahteine
36bda2bade Add HAS_RESUME_CONTINUE shorthand macro 2017-04-11 12:15:40 -05:00
Scott Lahteine
53e6c33c37 2 is DXC_DUPLICATION_MODE 2017-04-11 12:15:40 -05:00
Scott Lahteine
a2cb0a3d54 Use multiply for delta probe constraint 2017-04-11 12:15:40 -05:00
Scott Lahteine
6487c96a4a Merge pull request #6313 from Kaibob2/patch-10
Allow 10mm Movements for Z-Axis
2017-04-11 12:04:10 -05:00
Scott Lahteine
944218f7da Merge pull request #6309 from thinkyhead/rc_fix_minimum_pulse
Fix MINIMUM_STEPPER_PULSE calculations
2017-04-11 11:54:26 -05:00
Kai
001bc14255 Allow 10mm Movements for Z-Axis
I use the movement options via LCD quite often. Especially to get the nozzle out of the way. I see no reason, why the 10mm option is disabled for the Z-Axis, this is why i always delete this line when i compile a new version.
If this is unwanted, please just close this PR
2017-04-11 18:39:26 +02:00
Scott Lahteine
6a9b008044 Fix MINIMUM_STEPPER_PULSE maths 2017-04-11 11:11:17 -05:00
Scott Lahteine
68773f4486 Simplify stepper macros by renaming enable/disable macros 2017-04-11 11:10:26 -05:00
Scott Lahteine
e02a5a6371 Add macros for delays by machine cycle 2017-04-11 09:18:32 -05:00
Scott Lahteine
4ea447959e Merge pull request #6311 from thinkyhead/rc_bare_M109_M190
Have M109 / M190 do nothing with no parameters
2017-04-11 06:10:31 -05:00
Scott Lahteine
ecc537015a Have M109 / M190 do nothing with no parameters 2017-04-11 05:06:25 -05:00
Scott Lahteine
03aa9a390e Apply coding standards to M100, break up into functions 2017-04-10 21:09:43 -05:00
Scott Lahteine
48c16fc6ef Merge pull request #6307 from thinkyhead/rc_less_no_reentrance
Only lcd_synchronize needs no_reentry
2017-04-10 20:58:32 -05:00
Scott Lahteine
4fcfe926d6 Only lcd_synchronize needs no_reentry 2017-04-10 20:13:23 -05:00
Scott Lahteine
67fb7f82ac Merge pull request #6283 from thinkyhead/rc_eeprom_z_fade
Save / restore z_fade_height in EEPROM
2017-04-10 20:05:20 -05:00
Scott Lahteine
eff5af569b Merge pull request #6300 from MagoKimbra/rc_fix_mesh_report
Fix mbl_mesh_report
2017-04-10 19:37:19 -05:00
Scott Lahteine
4a18968c10 Merge pull request #6297 from Kaibob2/patch-9
Fix EPROM -> EEPROM
2017-04-10 19:35:30 -05:00
Roxy-3D
ba85faabc0 Fix M100 Free Memory Checker
M100 had numerious changes and quit working.   Part of the problem is
the overloading of the SERIAL_PROTOCOL functions.   Also, some of the
address arithmatic was changed to use char *ptr and passing ptr into the
SERIAL_PROTOCOL functions caused them to try to print a string instead
of a number.     M100 is working again.   Let's keep it that way!

M100 has been expanded to now have a function  int
free_memory_is_corrupted()  that can be called from other code to see if
the free space is still contiguous.  It may make sense to add a flag to
control its verbose nature but right now, the extra chit chat is very
helpful to know int free_memory_is_corrupted()  is doing the right thing
and what it found at various points when it was called.     A 'Show &
Tell' is coming up with int free_memory_is_corrupted().
2017-04-10 15:33:55 -05:00
Kai
3b82db5fe9 Missing semicolon in ultralcd.cpp
When PARK_HEAD_ON_PAUSE is defined Marlin won't compile because of two missing semicolon.
2017-04-10 14:45:51 -05:00
MagoKimbra
7d2e637867 Fix mbl_mesh_report 2017-04-10 20:50:19 +02:00
Kai
afeb0452ef Fix EPROM -> EEPROM
These fixes are neede because before it showed the englisch text even if language = de was selected
2017-04-10 18:37:00 +02:00
Scott Lahteine
7f950a80c0 Make ADC sensor reading frequency adjustable 2017-04-09 22:18:21 -05:00
Scott Lahteine
dad907b923 Merge pull request #6293 from thinkyhead/rc_move_toshiba
Put TOSHIBA with other stepper driver options
2017-04-09 22:08:36 -05:00
Scott Lahteine
786af73e24 Convert config code to a static class 2017-04-09 22:06:41 -05:00
james94jeans2
5b9476fe78 Added z_fade_height to EEPROM-Settings
Firmware was forgetting the z_fade_height in Planner, set by M420 Z<f>,
after each reset or loading settings from EEPROM. Added the float
z_fade_height to EEPROM-Storage, now remembers the value.
2017-04-09 21:16:58 -05:00
Scott Lahteine
9343f6a95f Put TOSHIBA with other stepper driver options 2017-04-09 20:52:49 -05:00
Scott Lahteine
7a704af5e6 Merge pull request #6284 from thinkyhead/rc_wt150_rebase
wt150 (Mightyboard Rev E) & RRD Full Graphic Smart Controller
2017-04-09 20:27:44 -05:00
Scott Lahteine
2bde7940e0 Merge pull request #6289 from zlowred/RCBugFix
Fixed comparison of float values to NaN
2017-04-09 19:39:04 -05:00
Max Matveev
2031fb913b Fixed comparison of float values to NaN 2017-04-09 20:28:46 +02:00
Scott Lahteine
e48a52a530 Patch a display issue with LCD_DECIMAL_SMALL_XY
The `ftostr4sign` function got munged by the `WITHIN` patch
2017-04-09 10:25:35 -05:00
Scott Lahteine
1a3cd6a090 Merge pull request #6213 from thinkyhead/rc_gitattributes
Init bed_level_virt_interpolate on EEPROM load
2017-04-09 08:13:11 -05:00
Scott Lahteine
314a02e2d5 Toggle with XOR 2017-04-09 07:58:47 -05:00
Scott Lahteine
cfad4736cd Merge pull request #6285 from thinkyhead/rc_cheaptronic_v2
Cheaptronic V2
2017-04-09 07:09:23 -05:00
Scott Lahteine
8bc0d90b00 Init bed_level_virt_interpolate on EEPROM load 2017-04-09 07:04:20 -05:00
MD
20dd5376b8 Cheaptronic V2
Add support for new electronics
www.reprapobchod.cz
2017-04-09 06:57:43 -05:00
Scott Lahteine
4cdda5615b Bring other configs up to date with wt150 changes 2017-04-09 06:45:42 -05:00
Paweł Stawicki
9b0885f4f6 Allow boards without a thermistor 2017-04-09 06:45:41 -05:00
Paweł Stawicki
64cfcebe66 Update SlowSoftI2CMaster link. MightyBoard digipots I2C bus has no resistors. 2017-04-09 06:45:03 -05:00
Paweł Stawicki
0eb16d9ff7 Add example config for the wt150 printer with RepRapDiscount Full Graphic Smart Controller 2017-04-09 06:44:54 -05:00
Paweł Stawicki
652bedfa18 Add RepRapDiscount Full Graphic Smart Controller support to MIGHTYBOARD REVE 2017-04-09 06:44:53 -05:00
Paweł Stawicki
44cdebb8f1 Add software spi support for max6675 2017-04-09 06:44:53 -05:00
Paweł Stawicki
191fec009f Add digipot i2c control for MCP4018 2017-04-09 06:44:53 -05:00
Scott Lahteine
e5b16081cb Update TinyBoy2 configurations 2017-04-09 06:44:53 -05:00
Scott Lahteine
1855534f20 Config files cleanup 2017-04-09 06:44:52 -05:00
Scott Lahteine
2f5e934a19 Merge pull request #6282 from thinkyhead/rc_cleanup_and_5_extruders
Additional missed patches
2017-04-09 04:35:08 -05:00
Scott Lahteine
c26a315d0b Additional missed patches 2017-04-09 04:24:23 -05:00
Scott Lahteine
635f182478 Merge pull request #6281 from thinkyhead/rc_cleanup_and_5_extruders
More patches for 5 extruders
2017-04-09 04:07:22 -05:00
Scott Lahteine
39617e10b8 Patch configs comment formatting 2017-04-09 03:49:16 -05:00
Scott Lahteine
c54f6cf23d Updates to support 5 extruders 2017-04-09 03:49:16 -05:00
Scott Lahteine
2b88ccd0aa Apply UBL mesh bounds to remaining configs 2017-04-09 03:49:15 -05:00
Scott Lahteine
60be3d264b Macros to print floats, hiding imprecision 2017-04-09 03:48:40 -05:00
Scott Lahteine
b356d73239 Merge pull request #6278 from thinkyhead/pr_delta_angles
Followup to additional delta trim options
2017-04-08 22:25:57 -05:00
Jimmy Envall
f78d44e91a Added support for delta tower angle corrections. 2017-04-08 21:13:44 -05:00
Scott Lahteine
d3b4d84586 Merge pull request #6277 from thinkyhead/pr_roxy3d_rcbugfix
Unify UBL Command Parsing
2017-04-08 20:17:46 -05:00
Scott Lahteine
98c9de11e1 Merge pull request #6266 from thinkyhead/rc_cleanup_after
Cleanup after recent merges
2017-04-08 20:08:15 -05:00
Scott Lahteine
d4ce839351 Cleanup following Pins Debug update 2017-04-08 18:59:57 -05:00
Scott Lahteine
c7a8f7970b Formatting / cleanup 2017-04-08 18:59:57 -05:00
Scott Lahteine
29d4ec8257 Support 5 extruder auto fans 2017-04-08 18:59:57 -05:00
Scott Lahteine
824f3c1c0d Fix up configuration comments 2017-04-08 18:59:56 -05:00
Scott Lahteine
995ed90248 Clean up Filament Width Sensor comments 2017-04-08 18:59:56 -05:00
Scott Lahteine
5a7b810fdd General comment cleanup 2017-04-08 18:58:33 -05:00
Scott Lahteine
0027c22839 Drop extraneous calls to lcd_update 2017-04-08 18:58:33 -05:00
Scott Lahteine
d6db7a9b03 patch "step_remaining" 2017-04-08 18:13:20 -05:00
Scott Lahteine
cbc2331187 Use LCD_MESSAGEPGM over lcd_setstatuspgm 2017-04-08 18:04:39 -05:00
Scott Lahteine
3729510b1e Set and check main parameter values, report all errors 2017-04-08 17:15:55 -05:00
Roxy-3D
34d3ed9ab1 These items were removed from the UBL Command Parsing
Having these items randomly (and errorniously) disappear cost me several
hours of work yesterday.
2017-04-08 15:30:20 -05:00
Scott Lahteine
15edb41cee Patches to UBL 2017-04-08 14:59:14 -05:00
Roxy-3D
14cf527bb8 Getting setup for debugging 2017-04-08 14:59:14 -05:00
Scott Lahteine
f8408036f2 Merge pull request #6264 from thinkyhead/rc_five_extruders
Support up to 5 extruders in Marlin
2017-04-07 12:48:56 -05:00
Bob-the-Kuhn
5212cb8304 Merge pull request #6271 from Bob-the-Kuhn/MCP4728-consistency-2
MCP4728 consistency ... Finish name change
2017-04-07 11:31:19 -05:00
Bob-the-Kuhn
f7fc49c3a3 Finish name change
DAC_STEPPER_DFLT wasn't changed to DAC_MOTOR_CURRENT_DEFAULT in all
places on PR #6124
2017-04-07 11:05:24 -05:00
Scott Lahteine
832064e4f2 Implementation changes to support 5 extruders 2017-04-07 10:46:37 -05:00
Scott Lahteine
04050237f0 Header and pins changes to support 5 extruders 2017-04-07 10:46:36 -05:00
Scott Lahteine
2a84122edd Configuration changes to support 5 extruders 2017-04-07 10:46:35 -05:00
Scott Lahteine
edf18977c1 Patch pins files hotends/e-steppers sanity check 2017-04-07 10:46:33 -05:00
Scott Lahteine
dc84678fc1 Fix HOTEND_STATUS_ITEM for graphical display 2017-04-06 23:07:30 -05:00
Scott Lahteine
a0de5d94e2 Merge pull request #6258 from benlye/benlye-bilinearfix2
Better fix for bilinear Z offset and G29 Z (update to #6251)
2017-04-06 20:51:57 -05:00
Scott Lahteine
b23aef5b8d Merge pull request #6190 from Bob-the-Kuhn/Stop-and-Kill-prints---round-2
Message for every KILL and STOP (also need delays)
2017-04-06 20:40:12 -05:00
Roxy-3D
945303c0d5 eleminate bootscreen.h 2017-04-06 19:55:41 -05:00
Roxy-3D
ef3da3971e Update ubl.h 2017-04-06 19:55:41 -05:00
Roxy-3D
8644dc170b get synchronized to current file names 2017-04-06 19:55:41 -05:00
Roxy-3D
1451b7eacf UBL's Grid Based Leveling code
Pretty much...  The code is in place.  Still more work to do.    But it
has a lot of hooks and variables in other code, so commit and merge
before I pick up a million 'Conflicts'.
2017-04-06 19:55:41 -05:00
Bob-the-Kuhn
549055f20c Merge pull request #6124 from Bob-the-Kuhn/MCP4728-consistency
MCP4728 consistency & fix ultralcd.cpp (PRINTRBOARD Rev F and RIGIDBOARD V2)
2017-04-06 16:35:50 -05:00
Bob-the-Kuhn
a77875c9d2 Merge pull request #6114 from Bob-the-Kuhn/try2-add-BLTouch-retry
Another BLTouch retry place (replaces PR #6108)
2017-04-06 16:25:55 -05:00
Bob-the-Kuhn
3b9ff2cb12 Merge pull request #5676 from Bob-the-Kuhn/configuration.h
Configuration.h - reword Z PROBE section
2017-04-06 16:18:34 -05:00
Bob-the-Kuhn
6643d553f6 # This is a combination of 2 commits.
# This is the 1st commit message:

MCP4728 consistency & fix ultralcd.cpp

The MCP4728 DAC controls the stepper motor current strenth on the
PRINTRBOARD Rev F and RIGIDBOARD V2 boards.

PR #5792 on 9 FEB 2017 implemented default drive percentages but only on
the RIGIDBOARD V2.

This change moves the default settings to Configuration_adv.h.

Also, ultralcd.cpp won't compile because of a type def conflict.
Changed it to match the one in stepper_dac.cpp

===========================================================

reword stepper curent section for clarity

===========================================================

change name & improve comments

===========================================================

changed name from A4JP to SCOOVO_X9H per PR #6139

# This is the commit message #2:

fix typo
2017-04-06 16:16:27 -05:00
Bob-the-Kuhn
a44b3432c1 add BLTouch retry to a second place & add/update delays
=================================================

implement requested changes

=================================================

remove delays (they're in another PR) & move return
2017-04-06 16:13:07 -05:00
Bob-the-Kuhn
a5abc61fb9 Merge pull request #6219 from Bob-the-Kuhn/Servo-probe-and-toggle-pins
M43 - add Toggle utility and Z servo utility (replaces PR #5864)
2017-04-06 16:10:50 -05:00
Bob-the-Kuhn
f87012a063 Merge pull request #5762 from Bob-the-Kuhn/Z_DUAL_ENDSTOP-make-offset-a-configuration-item
Z_DUAL_ENDSTOPS -  make offset a configuration item
2017-04-06 16:09:15 -05:00
Bob-the-Kuhn
3b8926bd09 improved wording, consolidation of info, BLTouch warning
==============================================

clarified BLTouch calculation & changed comment delimitters/flags

I found it hard to pickout the various sections in this area so I
changed most comments from // style to /** ... */

Made the BLTouch calculation simpler and clarified the units of measure
for the result.

============================================

add changes to example configurations

============================================

add TinyBoy2 to this PR & add BLTouch Delay
2017-04-06 16:06:01 -05:00
Scott Lahteine
55d296aaf0 pinsDebug with more features, uses less RAM
I've just uploaded a major change to pinsDebug.
The big change was creating an array in FLASH that contained every
active pin definition. That reduced the RAM memory usage considerably
but increased the FLASH usage.
Creating the array requires going through the pin list twice. Rather
than having two copies of it in the code I moved the list out to another
file (pinsDebug_list.h) and then just did two #includes.
From the user’s view they’ll see the following changes:
1. Now reports all the names assigned to a pin
2. The port is now reported in addition to the pin number.
3. When PWM0A & PWM1C share a pin, both PWMs are reported
4. More PWM/Timer info is reported
One new item that may cause some concern is the usage of the LINE
predefined preprocessor macro. It may not be available if the Arduino
IDE goes to a different compiler.

Includes support for 1284 & 1286 families.

Memory usage changes when enabling PINS_DEBUGGING:
ATmega2560
FLASH
.           without   52576
.           with new  64592
.           with old  62826
.           new-out   12016
.           old-out   10250
.           new-old   1766
.
RAM
.           without   2807
.           with new  2875
.           with old  3545
.           new-out   68
.           old-out   738
.           new-old   -670

==================================================================

minor changes - mostly formatting

1) added newline to end of teensyduino file

2) changed flag name from TEENSYDUINO to TEENSYDUINO_IDE.  Got warnings
about redefining TEENSYDUINO

3) removed some trailing spaces

reduce PROGMEM size & update pin list

Reduced PROGMEM usage by
1) converting often used macro to a function
2) moved as much as possible into the function

This required creating two arrays of address pointers for the PWM
registers.

==================================================================

update with new M3, M4, M5 pin names

==================================================================

report I/O status for unused/unknown pins
2017-04-06 16:06:01 -05:00
Scott Lahteine
e116723b8b Adjust indentation in ubl.h 2017-04-06 16:06:00 -05:00
Scott Lahteine
1b3a26f2f5 Rename all UBL files with a ubl_ prefix 2017-04-06 16:06:00 -05:00
Scott Lahteine
d13991ae18 Use same config name for all mesh dimensions 2017-04-06 16:05:59 -05:00
Bob-the-Kuhn
f9686a108c add Z servo test and toggle pins to M43 2017-04-06 15:59:38 -05:00
Scott Lahteine
62cbaa302e Z_DUAL_ENDSTOP - make offset a configuration item
The offset for Z_DUAL_ENDSTOP (z_endstop_adj) is already in Marlin.
This PR just makes it a configuration item.

z_endstop_adj is initialized in two places so both had to be modified.
2017-04-06 15:57:10 -05:00
Bob-the-Kuhn
3b6333c613 Merge pull request #5668 from Bob-the-Kuhn/pinsDebug-PROGMEM
pinsDebug with more features, uses less RAM
2017-04-06 15:51:45 -05:00
Scott Lahteine
c9e35004e7 pinsDebug with more features, uses less RAM
I've just uploaded a major change to pinsDebug.
The big change was creating an array in FLASH that contained every
active pin definition. That reduced the RAM memory usage considerably
but increased the FLASH usage.
Creating the array requires going through the pin list twice. Rather
than having two copies of it in the code I moved the list out to another
file (pinsDebug_list.h) and then just did two #includes.
From the user’s view they’ll see the following changes:
1. Now reports all the names assigned to a pin
2. The port is now reported in addition to the pin number.
3. When PWM0A & PWM1C share a pin, both PWMs are reported
4. More PWM/Timer info is reported
One new item that may cause some concern is the usage of the LINE
predefined preprocessor macro. It may not be available if the Arduino
IDE goes to a different compiler.

Includes support for 1284 & 1286 families.

Memory usage changes when enabling PINS_DEBUGGING:
ATmega2560
FLASH
.           without   52576
.           with new  64592
.           with old  62826
.           new-out   12016
.           old-out   10250
.           new-old   1766
.
RAM
.           without   2807
.           with new  2875
.           with old  3545
.           new-out   68
.           old-out   738
.           new-old   -670

==================================================================

minor changes - mostly formatting

1) added newline to end of teensyduino file

2) changed flag name from TEENSYDUINO to TEENSYDUINO_IDE.  Got warnings
about redefining TEENSYDUINO

3) removed some trailing spaces

reduce PROGMEM size & update pin list

Reduced PROGMEM usage by
1) converting often used macro to a function
2) moved as much as possible into the function

This required creating two arrays of address pointers for the PWM
registers.

==================================================================

update with new M3, M4, M5 pin names

==================================================================

report I/O status for unused/unknown pins
2017-04-06 14:46:28 -05:00
Scott Lahteine
7dfe2cc132 Merge pull request #6254 from thinkyhead/rc_ubl_rename
Group all UBL files via a common prefix
2017-04-06 05:46:18 -05:00
Scott Lahteine
4abd53f65a Adjust indentation in ubl.h 2017-04-06 05:36:16 -05:00
Scott Lahteine
f5c5c1f771 Rename all UBL files with a ubl_ prefix 2017-04-06 05:33:27 -05:00
Scott Lahteine
11430b6d33 Merge pull request #6256 from thinkyhead/rc_unify_grid_size
Use same config name for all mesh dimensions
2017-04-06 05:30:28 -05:00
benlye
f1d50ac1dc Fixing bilinear Z offset and G29 Z
The fix in #6251 for bilinear Z offset was flawed and broke the Z parameter of G29 for bilinear levelling.  This is reverted and a different fix is used for the double-addition of the Z-probe offset to the bilinear correction grid.
2017-04-06 07:41:46 +01:00
Scott Lahteine
eb1e6aa29b Use same config name for all mesh dimensions 2017-04-06 00:42:52 -05:00
Scott Lahteine
034e912c85 Merge pull request #6248 from thinkyhead/rc_marlin_scad_mesh
Add hidden option to output Bilinear grids in JSON
2017-04-06 00:36:45 -05:00
Scott Lahteine
c961dd084d Add hidden option to output Bilinear grids in JSON 2017-04-05 23:43:17 -05:00
Scott Lahteine
bc09e862a9 Re-enable .cpp as LF in .gitattributes 2017-04-05 22:30:30 -05:00
Scott Lahteine
df7b4252fd Reduce M420 code for UBL slightly 2017-04-05 22:30:29 -05:00
Scott Lahteine
8866158d03 Add LEVELING_DATA as a capability 2017-04-05 22:30:28 -05:00
benlye
0a2b4f3486 Fix bilinear levelling z offset
Since run_probe was altered to return the probe Z position rather than the nozzle Z position bilinear levelling has been broken because the Z-offset has been applied twice - once in the run_probe function, and then again in the G29 code for bilinear levelling.
2017-04-05 22:01:40 -05:00
Scott Lahteine
44a849bdce Fix broken M206/M428/G92 offsets 2017-04-05 22:01:37 -05:00
Roxy-3D
52978e5ba5 Fix spelling mistake when UBL's mesh is Inactive 2017-04-02 20:07:09 -05:00
Roxy-3D
0423e93c42 Fix M421 AUTO_BED_LEVELING_BILINEAR and AUTO_BED_LEVELING_UBL
M421 was not connected up for AUTO_BED_LEVELING_BILINEAR.
M421 needed to migrate mesh data to new UBL EEPROM layout.
2017-04-02 16:46:37 -05:00
Scott Lahteine
3412950abc Merge pull request #6209 from thinkyhead/rc_psu_zero
Power Supply 0 as "General"
2017-04-02 16:44:42 -05:00
Roxy-3D
3e9e94801f Fix problem described in issue # 6175
As it turns out...   an unsigned int can not go to less than 0,  so the
loop never terminates.
2017-04-02 13:00:27 -05:00
Scott Lahteine
a37a605fee Merge pull request #6217 from thinkyhead/rc_fix_invisibles_to_most
Patch .gitattributes till UBL line endings are fixed
2017-04-02 12:52:26 -05:00
Scott Lahteine
01a293b6e3 Patch .gitattributes till UBL line endings are fixed 2017-04-02 12:50:02 -05:00
Scott Lahteine
289e3d6844 Merge pull request #6215 from thinkyhead/rc_bed_false_alarm
Fix thermal runaway when nonexistent bed temp is set
2017-04-02 11:59:58 -05:00
Scott Lahteine
1c69a155cf Merge pull request #6214 from thinkyhead/rc_bltouch_delay_opt
Configurable delay for BLTouch servo emulation
2017-04-02 11:59:34 -05:00
Scott Lahteine
948728e63b Fix line-endings in UBL_G29 2017-04-02 11:48:26 -05:00
Scott Lahteine
699310d1d2 Fix: Thermal runaway if nonexistent bed's temp is set 2017-04-02 11:48:10 -05:00
Scott Lahteine
c56eec29f0 Configurable delay for BLTouch servo emulation 2017-04-02 11:14:53 -05:00
Scott Lahteine
deaad78df9 Merge pull request #5678 from Bob-the-Kuhn/G38-optional-double-tap
G38 bug fix, made double touch optional & reverted to Z_MIN_PROBE
2017-04-02 10:32:04 -05:00
Scott Lahteine
b3e9977f97 Merge pull request #6212 from thinkyhead/rc_gitattributes
Fix LCD preheat menus
2017-04-02 09:54:13 -05:00
Scott Lahteine
5bce731962 Fix LCD preheat menus 2017-04-02 09:32:22 -05:00
Scott Lahteine
9faa8c4704 Merge pull request #6210 from thinkyhead/rc_gitattributes
Add .gitattributes to normalize line endings
2017-04-02 08:56:51 -05:00
Scott Lahteine
4c72167af3 Prevent a warning on echo_command 2017-04-02 08:36:58 -05:00
Scott Lahteine
9b5fd9522e Fix formatting, order for a UBL change 2017-04-02 07:15:40 -05:00
Scott Lahteine
f0ef8a1cbd Add .gitattributes to normalize line endings 2017-04-02 06:47:52 -05:00
Tannoo
54173c80ad Power Supply 0 as "General" 2017-04-02 06:21:34 -05:00
Scott Lahteine
883c6762c4 Merge pull request #6208 from thinkyhead/rc_parity_with_32bit
Patch MarlinSerial to match up with 32-bit version
2017-04-02 05:13:03 -05:00
Scott Lahteine
a2775d0c70 can wstring be removed? 2017-04-02 04:43:33 -05:00
Scott Lahteine
de4e19f17e Patch MarlinSerial to match up with 32-bit version 2017-04-02 04:39:18 -05:00
Scott Lahteine
34b23ff312 Merge pull request #6202 from thinkyhead/rc_fix_broken_ubl
Patching up UBL, vetting recent commits
2017-04-02 03:51:38 -05:00
Scott Lahteine
2cbc7b4b73 Relocate serial macros and functions 2017-04-02 01:05:25 -05:00
Scott Lahteine
eaa66f3c46 Indent MarlinSerial code 2017-04-02 01:05:25 -05:00
Scott Lahteine
7a7a80e6c5 status_printf => lcd_status_printf_P 2017-04-02 01:05:25 -05:00
Scott Lahteine
0e6ec34228 Use PSTR versions of lcd_status... to save SRAM 2017-04-02 00:45:39 -05:00
Scott Lahteine
34e2420b9b Apply const args, clean up find_closest_circle_to_print 2017-04-01 23:15:41 -05:00
Scott Lahteine
e19fbd27ce Minor spelling patch 2017-04-01 23:08:00 -05:00
Scott Lahteine
790a3e9a8c Remove extraneous check of UBL_G26_MESH_EDITING 2017-04-01 23:03:40 -05:00
Scott Lahteine
7310110ec0 Fix logic of UBL::fade_scaling_factor_for_z 2017-04-01 22:52:48 -05:00
Scott Lahteine
a7aa70e79a Merge pull request #6201 from thinkyhead/rc_fix_broken_ubl
Fix broken auto#.g, some other regressions
2017-04-01 22:14:04 -05:00
Scott Lahteine
1a775cecac Revert behavior of enqueue_and_echo_commands_P 2017-04-01 21:53:46 -05:00
Scott Lahteine
79d42d87c1 Syntax cleanup 2017-04-01 21:53:46 -05:00
Scott Lahteine
b47fd31c37 Revert some changes to UBL 2017-04-01 21:53:45 -05:00
Bob-the-Kuhn
185337e787 add delays to allow stop & kill messages to get out 2017-04-01 00:23:14 -05:00
Scott Lahteine
63abb65146 Update description of PINS_DEBUGGING 2017-03-31 18:57:48 -05:00
Scott Lahteine
f75aa4d5be Merge pull request #6050 from thinkyhead/rc_probe_manually
Add PROBE_MANUALLY — ABL without a probe
2017-03-31 12:27:33 -05:00
Scott Lahteine
73e193da1d Implement LCD_BED_LEVELING for PROBE_MANUALLY 2017-03-31 11:50:18 -05:00
Scott Lahteine
fcadc7bb1a Implement the "manual" option for ABL 2017-03-31 11:50:18 -05:00
Scott Lahteine
9e22184936 Add a "manual" option for ABL 2017-03-31 11:50:18 -05:00
Scott Lahteine
541165e878 Merge pull request #6181 from thinkyhead/rc_ubl_further_fixes
Further adjustments to UBL code
2017-03-31 11:35:02 -05:00
Scott Lahteine
b19a15fa7f Within applied to UBL 2017-03-31 11:12:57 -05:00
Scott Lahteine
342ee458ae Additional UBL fixes, optimizations 2017-03-31 11:12:57 -05:00
Scott Lahteine
a5e085cbea Have run_probe() return probe Z, not nozzle Z 2017-03-31 09:27:49 -05:00
Scott Lahteine
4487d22d56 Apply FIXFLOAT macro 2017-03-31 09:27:48 -05:00
Scott Lahteine
6cac0f43eb MBL fiddle 2017-03-31 09:27:48 -05:00
Scott Lahteine
25a6bfa7ed Add and apply WITHIN macro 2017-03-31 09:27:48 -05:00
Scott Lahteine
81136c1e82 Merge pull request #6177 from thinkyhead/rc_tinyboy
Support for TinyBoy 2 3D printer (and its OLED display)
2017-03-31 04:31:47 -05:00
Scott Lahteine
93aad54dc1 Clean up code, remove _now command function 2017-03-31 04:17:31 -05:00
Stefan Brüns
6ba6c92a81 Add example configuration for TinyBoy L10/L16
The TB2 is a Indiegogo funded 3d printer. It uses a MKS SMELZI V1.0
main board (based on MELZI, i.e. Sanguinololu). I comes as a complete kit,
including display and panel.
Two variants exists, L10 and L16, with a height of 100 and 160 mm.
The heating function of the provided bed can enabled by soldering a
thermistor and some wires to it.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-31 04:05:35 -05:00
Stefan Brüns
0fe57ad4f5 Add Support TinyBoy2 OLED/Encoder panel
The OLED is driven by an SSD1306, connected to the board via
I2C, the rotary encoder is connected to 3 GPIO pins.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-31 04:05:34 -05:00
Scott Lahteine
baadb11536 Merge pull request #6174 from thinkyhead/rc_ubl_continued
UBL additional cleanup
2017-03-31 03:39:50 -05:00
Scott Lahteine
65ca6472ba Make G26 compatible with G92 and M206 2017-03-31 02:20:20 -05:00
Scott Lahteine
4902fd4e95 More data in UBL class, make it a static class
- Make all `unified_bed_leveling` data/methods static
- Move some UBL-related variables into the class
- Replace `map_[xy]_index_to_bed_location` with `mesh_index_to_[xy]pos`
2017-03-31 02:20:20 -05:00
Scott Lahteine
edbc024d76 Disable UBL_G26_MESH_EDITING by default 2017-03-31 02:20:20 -05:00
Scott Lahteine
9e4bd6b3b5 Further repairs to UBL, comments, spacing 2017-03-31 02:20:20 -05:00
Bob-the-Kuhn
f3618c3337 Reduce UBL RAM usage by making G26/G29 optional 2017-03-31 02:20:19 -05:00
Scott Lahteine
e746d68a12 Merge pull request #6176 from thinkyhead/rc_mbl_abl_optimize
Make MBL a static class, use lookup for index-to-point conversion
2017-03-31 02:12:49 -05:00
Scott Lahteine
c9eb1d6ab7 Make MBL a static class, use lookup for index-to-point conversion 2017-03-31 01:28:07 -05:00
Scott Lahteine
de9d2cddc3 Merge pull request #6152 from thinkyhead/rc_cleanup_6150_etc
UBL cleanup, optimization
2017-03-30 17:40:29 -05:00
Scott Lahteine
9217e4b8ec Various UBL cleanups and bug fixes 2017-03-30 17:09:49 -05:00
Scott Lahteine
9924199802 Merge pull request #5908 from thinkyhead/rc_fix_slowdown
General minor cleanup
2017-03-29 21:43:33 -05:00
Scott Lahteine
0e71e7b2fb Cleanup to planner.cpp 2017-03-29 06:48:07 -05:00
Scott Lahteine
f105cad43c Marlin: Slight cleanup to Marlin_main.cpp 2017-03-29 06:40:29 -05:00
Scott Lahteine
499f9e04e1 Marlin: Temperature soft-PWM cleanup 2017-03-29 06:37:27 -05:00
Scott Lahteine
7ddd94dc61 Merge pull request #5994 from StefanBruens/fix_Makefile_errors
Fix makefile errors, cleanup
2017-03-29 06:32:08 -05:00
Scott Lahteine
af09095f03 Merge pull request #6154 from thinkyhead/rc_fil_sensor_vs_sd
Show Filament Width on LCD when SD is disabled
2017-03-29 05:24:48 -05:00
Remo Kallio
d38b1bc4b1 Show filament width sensor values in LCD constantly if SD card support is not enabled. 2017-03-29 04:03:08 -05:00
Scott Lahteine
e3459ec178 Merge pull request #5989 from MagoKimbra/rc_fix_delta_angles
Fix delta_angles
2017-03-29 03:35:18 -05:00
Scott Lahteine
592300922c Merge pull request #6149 from thinkyhead/rc_scara_feedrate
Convert feedrate on SCARA from mm/s to deg/s
2017-03-29 03:31:44 -05:00
Scott Lahteine
f49aec057f Tweak "can not" => "can't" in RUMBA pins 2017-03-29 01:04:50 -05:00
Scott Lahteine
0a23a1bb3b Dynamic feedrate on SCARA, converting target mm/s to deg/s 2017-03-28 17:21:07 -05:00
Roxy-3D
d8724bb546 Get G29's P1 (Automated Probing) working again.
Incorrect optimizations of data types and ternary operators caused some
issues.
2017-03-28 17:11:02 -05:00
Scott Lahteine
8d53298a6d Merge pull request #6139 from thinkyhead/rc_a4jp_scoovo
Board A4JP should be SCOOVO_X9H
2017-03-28 14:06:39 -05:00
Scott Lahteine
c7f6ee9c93 Board A4JP should be SCOOVO_X9H 2017-03-27 22:22:13 -05:00
Scott Lahteine
8c07ac7f7c Merge pull request #6133 from thinkyhead/rc_use_safe_delay
Use safe_delay to ensure watchdog reset
2017-03-27 00:18:02 -05:00
Scott Lahteine
a9fc30ae2e Use safe_delay to ensure watchdog reset 2017-03-26 23:49:56 -05:00
Roxy-3D
171904b6c7 Make G29 What command print reliably and fix G29 P1 bug Waldo found 2017-03-26 17:05:58 -05:00
Roxy-3D
9d3ac66f73 Map clean up of UBL
UBL's maps are cleaner.   And with a 1 value, G29 O 1  will generate a
map suitable to be Cut & Pasted into Excel so a Suface Map can be
generated.
2017-03-25 18:55:05 -05:00
Roxy-3D
9a1949a91e Cleaned up G26 ready to replace existing one at MarlinFirmware/Marlin 2017-03-25 10:15:40 -05:00
Roxy-3D
aec85ad45a Start of process to get UBL running again.
The wait_for_user change totally broke UBL.   But there is stuff wrong
now in the thermal code and/or LCD Panel code.
2017-03-24 18:38:27 -05:00
Scott Lahteine
b47eaf14ae Merge pull request #6109 from thinkyhead/rc_soft_pwm_dither
PWM dithering followup
2017-03-24 18:21:07 -05:00
Scott Lahteine
34d1c41b5f Merge pull request #6111 from benlye/benlye-patch-echo_command
Fix type conversion issue with echo_command
2017-03-24 17:57:28 -05:00
Scott Lahteine
7d65911c00 Merge pull request #6110 from thinkyhead/rc_bilinear_and_m851
Adjust bilinear grid in M851
2017-03-24 17:51:25 -05:00
benlye
6a601aca35 Fix type conversion issue with echo_command
With the the current definition of echo_command I cannot compile RCBugFix (Arduino IDE 1.8.1) with the error "invalid conversion from 'const char*' to 'char*'".  This change resolves that.
2017-03-24 17:23:02 +00:00
Scott Lahteine
009a6ddd39 Adjust bilinear grid in M851 2017-03-24 06:28:59 -05:00
Scott Lahteine
eab7854a73 Merge pull request #6074 from thinkyhead/rc_immediate_shove
Immediate commands take precedence
2017-03-24 05:52:27 -05:00
Stefan Brüns
5699e2b881 Add SOFT_PWM_DITHER to other configurations 2017-03-24 05:02:24 -05:00
Scott Lahteine
5a2abeca78 Merge pull request #6100 from thinkyhead/rc_soft_pwm_dither
Enhancement of PWM, with dithering
2017-03-24 04:57:40 -05:00
Scott Lahteine
043be2856b Use "& 0x3F" instead of "% 64" 2017-03-24 04:13:50 -05:00
Stefan Brüns
6a040a6967 SOFT_PWM: Do not switch off heaters twice on pwm_count wraparound
After wraparound, pwm_count <= pwm_mask holds, thus soft_pwm_X <= pwm_count
guarantees soft_pwm_X < pwm_mask is true, and the heater will be switched
off in the first branch.
Do not evaluate the pwm conditions a second time, this reduces the
instruction count (4 instructions per PWM) and text size (6 byte).

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-24 04:13:50 -05:00
Stefan Brüns
0a74774af1 soft_pwm: avoid useless refetches of pwm_count
The compiler is not able to reuse the value of pwm_count, but reloads it
on every evaluation, if is stored in a static variable, as it cannot prove
it will be unchanged. A variable with local scope may not be modified from
the outside, so its value can be reused.
Doing so reduces text size and instruction count.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-24 04:13:50 -05:00
Stefan Brüns
35a55d5757 SOFT_PWM: Implement dithering if SOFT_PWM_SCALE is 1 or more
If dithering is enabled, the remainder of the soft_pwm_X duty value at
turnoff time is added to the next cycle. If e.g. the duty is set to 9 and
SCALE is set to 2, the PWM will be active for 8 counts for 3 cycles and
12 counts on each fourth cycle, i.e. the average is 9 cycles.

This compensates the resolution loss at higher scales and allows running
fans with SOFT_PWM with significantly reduced noise.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-24 04:13:36 -05:00
Stefan Brüns
2aed66a955 temperature: Fix SOFT_PWM off by one
A 128 step PWM has 127 intervals (0/127 ... 127/127 duty). Currently, a
PWM setting of 1/127 is active for 2/128, i.e. double the expected time,
or, in general n+1/128 instead of n/127.
Fixes issue#6003.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-24 04:13:36 -05:00
Scott Lahteine
4433b63d7a Merge pull request #6099 from thinkyhead/rc_cleanup_ubl_1
Patch till UBL is integrated with planner-based leveling
2017-03-24 02:07:55 -05:00
Scott Lahteine
b5711a99a2 Patches to bring UBL closer to compliance 2017-03-24 01:37:52 -05:00
Scott Lahteine
d076c1b604 Apply some general cleanup to code 2017-03-24 01:37:51 -05:00
Scott Lahteine
d1e6b0e21a Reduce STEP_PULSE_CYCLES code slightly 2017-03-24 00:50:05 -05:00
Scott Lahteine
783338a0b8 Add UBL_MESH_EDIT_ENABLED to configs 2017-03-24 00:44:55 -05:00
Scott Lahteine
8d54ffbf05 Adjust vector_3 code with const, some optimization 2017-03-23 19:41:42 -05:00
Roxy-3D
8ee2612ebb The hex nibble routine can print again!
The code to print a hex nibble got broke.   SERIAL_ECHO( (char) ) isn't
suitable for its use.
2017-03-23 16:08:37 -05:00
Roxy-3D
b8e4a6970b Get UBL up and running again
All the changes to get the code into compliance with Marlin coding
standards made UBL sick.   This pretty much gets UBL back up and
running.
2017-03-23 16:08:37 -05:00
Roxy-3D
5de1da2b3c Make UBL honor the #define ENABLE_LEVELING_FADE_HEIGHT option 2017-03-23 16:08:37 -05:00
Scott Lahteine
8f9face956 Merge pull request #6088 from rafaljot/patch-3
Update Marlin_main.cpp
2017-03-23 01:51:51 -05:00
Scott Lahteine
782634b6c9 Merge pull request #6081 from Sebastianv650/MIN_STEPPER_PULSE_for_Babystepping
Add MINIMUM_STEPPER_PULSE ability to babystepping
2017-03-22 21:57:36 -05:00
Scott Lahteine
d29ab8f2a6 Merge pull request #6075 from thinkyhead/rc_cleanup_ubl_1
Additional cleanup of UBL code
2017-03-22 21:45:59 -05:00
Scott Lahteine
af2ea23e9c EXTRUDER_RUNOUT_PREVENT uses buffer_line_kinematic 2017-03-22 20:51:12 -05:00
Scott Lahteine
cd882b88db #if defined => #ifdef / PIN_EXISTS 2017-03-22 20:51:11 -05:00
Scott Lahteine
e244399766 Additional cleanup of UBL code 2017-03-22 20:51:10 -05:00
Bob-the-Kuhn
0934563b97 G38 optional double touch
Made the double touch portion a conditional compile based on the
PROBE_DOUBLE_TOUCH flag.

==============================================

Bugfix

The current G38 only stopped a move if it involved the Z axis.

Moved all the G38 code to it's own section and put it where it would
always be executed no matter what axis was moving or if the endstop was
enabled.

Also added a comment to configuration_adv to alert the user the double
tap had to be turned on.

==============================================

Change G38 back to using Z_MIN_PROBE

There's no Z_MIN endstop if Z_DUAL_ENDSTOPS is enabled and you have them
set to the top of the gantry.

G38 started out as using the Z_MIN_PROBE pin.  I don't remember why we
changed it to the Z_MIN endstop.
2017-03-22 15:08:49 -05:00
Scott Lahteine
cc3204509c UBL patch from Bob-the-Kuhn 2017-03-22 07:54:20 -05:00
Scott Lahteine
100c9bc52d Merge pull request #6079 from thinkyhead/rc_audio_feedback
Standard audio feedback. Use for settings store/load/reset
2017-03-22 07:35:57 -05:00
Scott Lahteine
b904b5ae8d Audible feedback for settings store/load/reset 2017-03-22 02:15:21 -05:00
Sebastianv650
bf57eb2447 Protect Babystepping against other ISRs
Especialy against stepper ISR.
This is even more important when a minimum pulse width is set,
increasing the runtime of a babystep.
2017-03-21 18:05:44 +01:00
Sebastianv650
80830919dc Add MINIMUM_STEPPER_PULSE ability to babystepping 2017-03-21 17:50:38 +01:00
rafaljot
6da949bbf0 Update Marlin_main.cpp
Sometimes after killing heaters are still on.
2017-03-21 15:06:01 +01:00
Roxy-3D
72f7b14e66 Make G29's Interactive Mesh Editor Work 2017-03-20 12:52:51 -05:00
Roxy-3D
3fd74b121f Get G29's Interactive Mesh Editor running
G29 P4 R O  should work now.
2017-03-20 12:52:51 -05:00
Roxy-3D
1d58558bec Spelling fix 2017-03-20 12:52:51 -05:00
Scott Lahteine
2573f4dd05 Merge pull request #6052 from thinkyhead/rc_lift_on_pause
Add PARK_HEAD_ON_PAUSE feature / M125
2017-03-20 03:36:31 -05:00
Scott Lahteine
48c6284c91 Immediate commands take precedence 2017-03-19 21:50:48 -05:00
Scott Lahteine
786fe2ba2a Include PARK_HEAD_ON_PAUSE in Travis testing 2017-03-19 18:34:58 -05:00
Roxy-3D
b3c4f71c6f Merge pull request #6071 from Roxy-3D/RCBugFix
Allow FWRETRACT with UBL Enabled
2017-03-19 16:54:57 -05:00
Roxy-3D
76c270fdf2 Allow FWRETRACT with UBL Enabled
The retraction flag in UBL's G26 was conflicting with the FWRETRACT option.

All fixed!
2017-03-19 15:43:12 -06:00
Roxy-3D
06c31daa53 Merge pull request #6070 from Roxy-3D/RCBugFix
Allow G29 P1 R to generate the mesh
2017-03-19 16:34:48 -05:00
Roxy-3D
c377c59d47 Allow G29 P1 R to generate the mesh
Fix the logic change that happened when UBL got merged.
2017-03-19 15:13:33 -06:00
Scott Lahteine
ff0dd162b7 PARK_HEAD_ON_PAUSE implementation 2017-03-19 07:27:35 -05:00
Scott Lahteine
26473cab6d Add PARK_HEAD_ON_PAUSE feature 2017-03-19 05:06:55 -05:00
Scott Lahteine
4cf51157b3 Use XYZE rather than NUM_AXIS 2017-03-19 01:14:39 -05:00
Scott Lahteine
4c7f14752a Add disable_e_steppers function 2017-03-19 01:14:39 -05:00
Scott Lahteine
8eb29f91e6 Patch filament change options and beep code 2017-03-19 01:14:39 -05:00
Scott Lahteine
56c9dfc83b Merge pull request #6066 from thinkyhead/rc_felix_fix
Update Felix config for UBL
2017-03-19 01:11:02 -05:00
Scott Lahteine
9b2b53f63a Merge pull request #6042 from thinkyhead/rc_fix_toolchange_z
Move Z last in tool-change for SWITCHING_EXTRUDER
2017-03-19 00:34:41 -05:00
Scott Lahteine
f98fb6b38e Update Felix config for UBL 2017-03-19 00:28:48 -05:00
Scott Lahteine
7cabe81373 Merge pull request #6057 from thinkyhead/rc_followup_6054
Followup 6054 with some cleanup
2017-03-18 13:49:20 -05:00
Scott Lahteine
4bca27ab89 Fix Kelvin conversion
Thanks to @ospalh -- #6056
2017-03-18 13:23:08 -05:00
Scott Lahteine
143ab8f329 Remove Roxy's personal configurations 2017-03-18 12:35:02 -05:00
Scott Lahteine
2512871a36 Patch configs UBL followup 2017-03-18 12:32:03 -05:00
Scott Lahteine
27b5666e15 Move Allen Key probe definition to the top 2017-03-18 12:27:37 -05:00
Scott Lahteine
77cf648ed3 Move menu selection past static items in 1 screen 2017-03-18 12:26:21 -05:00
Scott Lahteine
2c630a1b5c Merge pull request #6054 from thinkyhead/rc_ubl_renewal
UBL for RCBugFix — cleanup, rebase, patch
2017-03-18 12:07:57 -05:00
Scott Lahteine
0492a3a8f1 Merge pull request #6027 from Bob-the-Kuhn/add_kill_info
Message for every KILL and STOP
2017-03-18 11:49:35 -05:00
Scott Lahteine
fba22652fc Add UBL testing to Travis 2017-03-18 11:35:21 -05:00
Scott Lahteine
6618346148 Patches to work around "register spill" compiler bug 2017-03-18 11:35:21 -05:00
Scott Lahteine
be7dd90382 Add Thermistor 75: MGB18 silicon pad 2017-03-18 11:35:20 -05:00
Scott Lahteine
f890ceba9e Add 'tags' to .gitignore 2017-03-18 11:35:20 -05:00
Scott Lahteine
b0a9c82c31 Fix single-char echo and pinMode usage 2017-03-18 11:35:20 -05:00
Scott Lahteine
fb60aa3736 UBL implementation 2017-03-18 11:35:20 -05:00
Scott Lahteine
238b8fd2a3 UBL core and support files 2017-03-18 11:35:19 -05:00
Scott Lahteine
cf94688925 Univeral Bed Leveling - configuration 2017-03-18 11:35:19 -05:00
Scott Lahteine
03aa424ccb Merge pull request #6053 from thinkyhead/rc_clean
Remove extraneous whitespace
2017-03-18 03:26:45 -05:00
Scott Lahteine
af644871bf Merge pull request #6045 from thinkyhead/rc_remove_raw_kinematics
Remove delta optimization concepts… for now
2017-03-18 03:26:24 -05:00
Scott Lahteine
77491dd924 Remove extraneous whitespace 2017-03-18 03:17:39 -05:00
Scott Lahteine
ed4f9d7e1c Merge pull request #6046 from robbycandra/RCBugFix-ignore_visual_studio_files
Ignore Visual Studio Files
2017-03-17 22:25:01 -05:00
Scott Lahteine
d15f25539b Merge pull request #6031 from thinkyhead/rc_mbl_z_unhack
MBL: Disable sw endstops instead of altering Z
2017-03-17 17:20:35 -05:00
Robby Candra
0dada36e5a Ignore Visual Studio Files 2017-03-17 22:13:46 +07:00
Scott Lahteine
b865b21d32 Can't use Z fade height with DELTA 2017-03-17 08:34:47 -05:00
Scott Lahteine
1e57b0c269 Remove delta interpolation concept 2017-03-17 06:32:11 -05:00
Scott Lahteine
e46898f8e5 Remove kinematic optimizations 2017-03-17 06:30:22 -05:00
Scott Lahteine
11f1fdfab4 _lcd_level_bed_position => manual_probe_index 2017-03-17 06:05:17 -05:00
Scott Lahteine
0e410c9dfd Software endstop options as simple switches 2017-03-17 06:05:17 -05:00
Scott Lahteine
d01b915085 Implement soft_endstops_enabled for clamping 2017-03-17 06:05:17 -05:00
Scott Lahteine
e4649c9044 Add HAS_SOFTWARE_ENDSTOPS macro 2017-03-17 06:05:17 -05:00
Scott Lahteine
3e927ff204 Replace MBL Z hacking 2017-03-17 06:05:17 -05:00
Scott Lahteine
4e53124681 Merge pull request #6039 from Bob-the-Kuhn/M114-sync-with-stepper
M114 - wait for move completion before reporting position
2017-03-17 05:22:46 -05:00
Scott Lahteine
734f9ea133 Merge pull request #6040 from thinkyhead/rc_sanity_use_assert
Simplify some sanity checks with static_assert
2017-03-17 05:22:17 -05:00
Scott Lahteine
f02af83d42 Remove some extraneous spaces 2017-03-16 23:59:11 -05:00
Scott Lahteine
672e45652e Improved solution to tool-change bug 2017-03-16 23:59:10 -05:00
Scott Lahteine
23f1cfb46f Fix stuck CHDK pin as suggested in #6041 2017-03-16 21:49:39 -05:00
Scott Lahteine
0b22069e82 Merge pull request #6021 from Bob-the-Kuhn/BUG-FIX--Switching-extruder-tool-change-Z-height
Bug Fix: Switching extruder tool change leaves Z in wrong position
2017-03-16 21:15:20 -05:00
Scott Lahteine
e7e4500629 Simplify some sanity checks with static_assert 2017-03-16 16:31:34 -05:00
Bob-the-Kuhn
34ff0c3439 M114 - wait for move completion before reporting position 2017-03-16 15:10:45 -05:00
Bob-the-Kuhn
b31604a492 Message for every KILL and STOP
No more mystery halts & resets

Moved messages to language.h

Added current command to inactive timeout message
2017-03-15 21:05:11 -05:00
Roxy-3D
48925b7298 Merge pull request #6032 from Kaibob2/patch-7
Update language_de.h
2017-03-15 10:31:09 -05:00
Kai
13b44d019b Update language_de.h
Addition of missing strings to match language_en.h
2017-03-15 16:06:52 +01:00
Bob-the-Kuhn
685ed5393a Bug Fix: Switching extruder tool change leaves Z in wrong position
The tool_change function saves the current_position to the destination
array soon after starting.  Later in the switching extruder section, the
destination array is modified when moving the Z axis up & down.  A later
section of tool_change moves the head back to the “original location”
using the destination array.  This later section assumes that the
destination array hasn’t been modified.

The fix is to save the destination Z position and then restore it after
the Z movements have completed.

Going back to using the current_position array for the switching
extruder Z axis moves (and  leaving the destination array untouched)
doesn’t fix the problem.

This bug was introduced by the “Make tool_change kinematic compatible”
commit # 847429eff4 which was merged on 10
Oct 2016 as part of PR 4982.

This bug was discovered in Issue 5966.
2017-03-14 02:36:24 -05:00
Scott Lahteine
51353f8fea Merge pull request #6000 from trivalik/NoWorkspaceWarning
prevent warning with define of NO_WORKSPACE_OFFSETS
2017-03-12 00:00:51 -06:00
Scott Lahteine
54dada56a7 Merge pull request #6010 from MagoKimbra/rc_fix_bug_set_position_mm
Fix BUG set_position_mm
2017-03-12 00:00:16 -06:00
MagoKimbra
a4a9bd8bc9 Fix BUG set_position_mm
Set postion must have axis and not E_AXIS + active_extruder.
2017-03-11 14:13:39 +01:00
Trivalik
71ac6f9d42 prevent warning with define of NO_WORKSPACE_OFFSETS 2017-03-09 23:49:57 +01:00
Stefan Brüns
9ba6c051a1 Makefile: add nozzle.cpp too CXXSRC list
The file is required by the optional NOZZLE_PARK_FEATURE.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-09 03:08:49 +01:00
Stefan Brüns
9cc8d495b8 Makefile: remove no longer existing search paths
ArduinoAddons has been removed from Marlin, remove any references to it.
Replace HARDWARE_SRC and HARDWARE_DIR with its expanded equivalents.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-09 01:46:47 +01:00
Stefan Brüns
bf563e62c1 Makefile: add printcounter.cpp too CXXSRC list
The file is required by the optional PRINTCOUNTER feature.

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-09 01:45:54 +01:00
Stefan Brüns
ddecc1441d Makefile: Fix linker error
Instantiation of the static singleton instance thermalManager in general
requires locking, but we know its safe to do without.

Add -fno-threadsafe-statics to avoid using locking primitives, which
result in linking errors:
	undefined reference to `__cxa_guard_acquire'
	undefined reference to `__cxa_guard_release'

Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
2017-03-09 01:45:38 +01:00
MagoKimbra
37a26dfc09 Fix delta_angles 2017-03-08 09:23:30 +01:00
Scott Lahteine
6caf0830ae Merge pull request #5985 from thinkyhead/rc_better_endstops_init
Use SET_INPUT_PULLUP where appropriate
2017-03-08 00:08:30 -06:00
Scott Lahteine
2defb1d748 Use SET_INPUT_PULLUP where appropriate 2017-03-07 23:43:33 -06:00
Scott Lahteine
deb9d0dabd Merge pull request #5984 from thinkyhead/rc_delta_angles
Add delta_tower_angle_trim
2017-03-07 19:41:24 -06:00
Scott Lahteine
58b3e98878 Use arrays for delta tower parameters 2017-03-07 19:00:22 -06:00
Scott Lahteine
47242a40bb Apply updated changes for delta_tower_angle_trim 2017-03-07 18:15:11 -06:00
Jimmy Envall
00b6b3da79 Added support for delta tower angle corrections. 2017-03-07 16:35:58 -06:00
Scott Lahteine
7c9e2e2a1a Merge pull request #5981 from thinkyhead/rc_tmc2130_redo
TMC2130 Library: @teemuatlut replaces @makertum
2017-03-07 16:23:52 -06:00
Scott Lahteine
5a456c832a Apply TMC2130 to example configurations 2017-03-07 04:22:06 -06:00
Scott Lahteine
45f949d833 TMC2130 Library: @teemuatlut replaces @makertum 2017-03-07 04:22:06 -06:00
Scott Lahteine
33f8a8a344 Merge pull request #5973 from thinkyhead/rc_circle_pattern
Add circle pattern to nozzle clean
2017-03-06 04:47:01 -06:00
Scott Lahteine
94b3e0a483 Merge pull request #5959 from benlye/benlye-fixm48
Remove extra carriage return in M48 V1 output
2017-03-06 04:24:28 -06:00
Scott Lahteine
a9a1971295 Merge pull request #5972 from thinkyhead/rc_cooldown_before
Fix preheat menu formatting
2017-03-06 03:21:29 -06:00
Scott Lahteine
6aa81255a9 Patch and clean up "flsun" kossel. Followup to #5911. 2017-03-06 03:15:00 -06:00
Scott Lahteine
b2270b3f3e Apply prior nozzle clean update 2017-03-06 03:14:59 -06:00
Marek Pikuła
7698c5617a Added circle nozzle cleaning parameters to example configurations 2017-03-06 03:04:58 -06:00
Marek Pikuła
6836b94eea Added circle pattern for nozzle cleaning feature 2017-03-06 03:03:00 -06:00
Scott Lahteine
3b75518ef6 Merge pull request #5911 from aphex3k/flsun_kossel_mini
Configuration.h and Configuration_adv.h for the kossel mini by flsun
2017-03-06 02:26:01 -06:00
Scott Lahteine
3830778852 Apply NO_WORKSPACE_OFFSETS to lcd menu 2017-03-06 02:21:42 -06:00
Scott Lahteine
7e3aab889d Fix preheat menu formatting 2017-03-06 02:07:07 -06:00
Scott Lahteine
fea0d3f20f Endstop and temp-isr general cleanup 2017-03-06 02:07:07 -06:00
Scott Lahteine
aef08e8780 Compact some macro substitutions 2017-03-06 02:07:07 -06:00
Scott Lahteine
2f620f86d9 Merge pull request #5970 from thinkyhead/rc_cooldown_before
Preheat Hotend Only menu items
2017-03-06 01:56:05 -06:00
Scott Lahteine
02de8e6f18 Merge pull request #5957 from MagoKimbra/rc_stepper_indirection_fix
Stepper indirection fix tmc driver
2017-03-06 01:16:40 -06:00
Scott Lahteine
6c5312559c Menu item to preheat only the hotend 2017-03-06 01:14:54 -06:00
Scott Lahteine
9d0142e8ae Move Change Filament above Cooldown 2017-03-06 01:13:12 -06:00
Scott Lahteine
0c55095c5e Move Cooldown above Preheat 2017-03-06 01:13:12 -06:00
Scott Lahteine
c15c65f18a Merge pull request #5971 from thinkyhead/rc_fix_e_factors
Patch DISTINCT_E_FACTORS bug
2017-03-06 01:11:17 -06:00
Scott Lahteine
bfb0007573 Patch DISTINCT_E_FACTORS bug 2017-03-05 23:19:31 -06:00
Scott Lahteine
be98016674 Merge pull request #5963 from thinkyhead/rc_no_offsets_optim
New option: NO_WORKSPACE_OFFSETS
2017-03-05 21:46:49 -06:00
Scott Lahteine
8e89a802f7 Document PROTOCOL_VERSION 2017-03-05 04:43:46 -06:00
Scott Lahteine
87b03b16bd Use a macro for array copies 2017-03-05 04:43:46 -06:00
Scott Lahteine
e141f3a03f Optimize coordinate transformation
Pre-compute the combined position shift and home offset to save a
single float fetch-and-add per conversion. Great for delta/scara and
bed leveling.
2017-03-05 04:43:16 -06:00
Scott Lahteine
5f7e85398b Implement NO_WORKSPACE_OFFSETS 2017-03-05 04:43:15 -06:00
Scott Lahteine
05abe853f9 New option: NO_WORKSPACE_OFFSETS 2017-03-05 04:43:15 -06:00
Scott Lahteine
20addc6e32 Merge pull request #5955 from thinkyhead/rc_eeprom_fail_better
Display a message for EEPROM version mismatch
2017-03-04 17:15:07 -06:00
benlye
dead89062a Update Marlin_main.cpp
Remove unnecessary line break from M48 V1 output.
2017-03-04 17:58:10 +00:00
MagoKimbra
ae277aebc6 Stepper indirection fix tmc driver 2017-03-04 12:17:39 +01:00
Scott Lahteine
8f4e4b1995 Display a message for EEPROM version mismatch 2017-03-04 01:20:36 -06:00
Scott Lahteine
177ad245f6 Merge pull request #5953 from thinkyhead/fix_fc_e_index
Fix submenu hotend status display
2017-03-04 00:12:29 -06:00
Scott Lahteine
cea3ea772c Fix submenu hotend status display 2017-03-03 22:12:22 -06:00
Scott Lahteine
b27f69ba51 Merge pull request #5813 from thinkyhead/rc_fix_makrpanel
Fix MAKRPANEL assignments
2017-03-03 21:40:49 -06:00
Scott Lahteine
1ef6ccd919 Merge pull request #5951 from thinkyhead/rc_print_2d_array
Reduce code size (40b, or 166b with bilinear subdivision)
2017-03-03 21:27:44 -06:00
Scott Lahteine
b9b203bfb2 Merge pull request #5950 from thinkyhead/rc_cleanup_mar3
General cleanup, const usage, var naming
2017-03-03 21:25:34 -06:00
Scott Lahteine
53f5086905 Fix MAKRPANEL assignments
MAKRPANEL is a DOGLCD+ULTRA_LCD+NEWPANEL so customize its pins within
that block.
2017-03-03 21:22:21 -06:00
Scott Lahteine
98c7b682ca General cleanup, const usage, var naming 2017-03-03 20:57:49 -06:00
jes
369bfc8a1e Reduce code size (40b, or 166b with bilinear subdivision) 2017-03-03 20:36:32 -06:00
Scott Lahteine
21fb347eee Merge pull request #5948 from thinkyhead/rc_fix_status_printf
Fix "Heating..." message
2017-03-03 12:28:27 -06:00
Scott Lahteine
0d13412105 Fix "Heating..." message 2017-03-03 12:12:51 -06:00
Scott Lahteine
5065636023 Merge pull request #5934 from thinkyhead/rc_advance_ed_ratio
LIN_ADVANCE: Fixed E/D ratio option
2017-03-03 03:24:41 -06:00
Scott Lahteine
903808bb97 Merge pull request #5943 from thinkyhead/catalan_march_2017
Update Catalan language
2017-03-03 03:13:51 -06:00
divendres
75ad82baab Update Catalan language 2017-03-02 20:40:06 -06:00
Scott Lahteine
34253497d4 Babysteps code tweak
As suggested by https://github.com/MarlinFirmware/Marlin/pull/5887#issuecomment-283832163
2017-03-02 20:35:45 -06:00
Scott Lahteine
e309e980ce Merge pull request #5942 from thinkyhead/rc_cleanup_finish_5887
Clean up and finish #5887
2017-03-02 20:26:13 -06:00
Scott Lahteine
fb4aead2b1 Clean up and finish #5887 2017-03-02 20:16:29 -06:00
Scott Lahteine
b3e2bd6f29 Reduce E_D_ratio code 2017-03-02 01:00:37 -06:00
Sebastianv650
de6c40ed8f Add option to fix E/D ratio
Work around for slicers producing buggy gcode.
2017-03-02 01:00:37 -06:00
Scott Lahteine
eeb490221f Remove BEEPER_PIN override in pins_RIGIDBOARD.h
Resolves #5926. This override is no longer needed since the RAMPS LCD controller pins were fixed.
2017-03-01 18:26:29 -06:00
Roxy-3D
11e892bd84 Merge pull request #5887 from Roxy-3D/RCBugFix
Double Click of Encoder Wheel Jumps to Z-BabyStepping
2017-03-01 17:15:02 -07:00
Scott Lahteine
cbeff12f8a Merge pull request #5933 from teemuatlut/lcd_days_hours
Fix formatting of SD print time hours above one day
2017-03-01 15:44:10 -06:00
Scott Lahteine
8a4e9d08a3 Merge pull request #5931 from thinkyhead/rc_core_endstop_fix
Fix CoreYX / YZ / ZX endstop logic
2017-03-01 15:32:11 -06:00
teemuatlut
9175d16660 Fix formatting of print time hours above one day 2017-03-01 18:55:25 +02:00
Scott Lahteine
b6d9eb229f Extend Core endstop commentary 2017-03-01 10:01:50 -06:00
Bob-the-Kuhn
c5e08e8761 CoreYX/YZ/ZX needs different endstop logic than CoreXY/YZ/XZ
In the endstop testing section, add the "reverse" logic in addition to "normal" core handling.

In CoreXY/YZ/XZ steppers rotating the same direction gives X movement. Opposing directions produces Y movement.

In CoreYX/ZY/ZX this is reversed. Same = Y, Opposite = X.

----

Fixes the issue where the Y endstop was being checked when moving in the X direction, etc.
2017-03-01 09:40:24 -06:00
Scott Lahteine
05b217c0d0 Merge pull request #5930 from thinkyhead/rc_lcd_timeout_config
Make LCD_TIMEOUT_TO_STATUS configurable
2017-02-28 19:42:27 -06:00
Scott Lahteine
c759c26cca Make LCD_TIMEOUT_TO_STATUS configurable
As suggested in
https://github.com/MarlinFirmware/Marlin/issues/5570#issuecomment-283059
065
2017-02-28 19:02:50 -06:00
Michael Henke
47729918fc enable ENSURE_SMOOTH_MOVES 2017-02-27 20:42:49 -08:00
Michael Henke
330b981912 created Configuration.h and Configuration_adv.h for the kossel mini sold by flsun 2017-02-25 21:31:37 -08:00
Scott Lahteine
493e738575 Merge pull request #5910 from thinkyhead/rc_more_nozzle_wipe
Bidirectional Zig-Zag Nozzle Wipe
2017-02-25 22:03:33 -06:00
Colin Gilgenbach
48b7e0f8d8 Nozzle Wipe Vertical Zig-Zag
- Add configuration support for zigzags in either the X or Y axis, for
wipe pads significantly longer in one dimension.
- Add configuration for default number of zig-zag triangles, vs. a
magic number in `Marlin_main.cpp`.
- Update description of auto nozzle wiping to match functionality
2017-02-25 21:52:43 -06:00
Scott Lahteine
f17b81b765 Add MAPPER_C2C3 to French language 2017-02-25 18:49:00 -06:00
Roxy-3D
7e607b06eb Better comments on DOUBLE_CLICK_TIME_WINDOW 2017-02-23 13:13:57 -07:00
Scott Lahteine
f9e4717f5b Merge pull request #5892 from thinkyhead/rc_msg_heating_pstr
Use PSTR for MSG_HEATING
2017-02-22 12:26:08 -06:00
Scott Lahteine
34cba42104 Use PSTR for MSG_HEATING 2017-02-22 11:30:19 -06:00
Roxy-3D
584d147a02 fixup the indentation 2017-02-22 07:23:54 -07:00
Roxy-3D
e443e0e2a9 Fix scoping issues for double click to Z-Babystepping 2017-02-21 18:15:28 -07:00
Roxy-3D
17d1cd7c09 Double Click of Encoder Wheel Jumps to Z-BabyStepping 2017-02-21 18:08:19 -07:00
Roxy-3D
48d862377a Double Click of Encoder Wheel Jumps to Z-BabyStepping 2017-02-21 18:04:31 -07:00
Scott Lahteine
cfdc189796 Merge pull request #5856 from thinkyhead/rc_fix_bad_comment
Remove non-applicable comment on MANUAL_Z_HOME_POS
2017-02-20 17:54:30 -06:00
Scott Lahteine
2efdc72aa5 Merge pull request #5876 from thinkyhead/rc_hotend_status
Add status_printf to print messages to the lcd status line.
2017-02-20 17:29:27 -06:00
dot-bob
cd68380ce6 Add status_printf to print messages to the lcd status line.
Also add a hotend indicator to the heating message displayed on the lcd status line.
2017-02-20 15:26:54 -06:00
Scott Lahteine
012aff6823 Merge pull request #5862 from thinkyhead/rc_fix_a_thing
Finish reducing of ABL_BILINEAR_SUBDIVISION
2017-02-18 21:36:28 -06:00
Scott Lahteine
b9187020c4 Finish reducing of ABL_BILINEAR_SUBDIVISION 2017-02-18 20:01:19 -06:00
Scott Lahteine
e282b72151 Remove non-applicable comment on MANUAL_Z_HOME_POS 2017-02-18 05:14:43 -06:00
Scott Lahteine
49d562d23d Merge pull request #5855 from thinkyhead/rc_followup_5840
Apply DISTINCT_E_FACTORS to sync_from_steppers
2017-02-18 04:51:01 -06:00
Scott Lahteine
57f92a4632 Apply DISTINCT_E_FACTORS to sync_from_steppers
Followup to #5840
2017-02-18 04:36:41 -06:00
Scott Lahteine
4da8b1494b Merge pull request #5854 from thinkyhead/rc_fixup_m600
M600 cleanup and bugfix
2017-02-18 04:27:13 -06:00
Scott Lahteine
dd02dba6e6 Merge pull request #5840 from MagoKimbra/rc_fix_lin_advanced_step_to_mm
Fix steps_to_mm for active extruders
2017-02-18 04:25:53 -06:00
Scott Lahteine
6e0b3fcc08 Optimize M600 heater status LCD items 2017-02-18 04:08:00 -06:00
Scott Lahteine
44b4e116bd Commentary / style in gcode_M600 2017-02-18 04:08:00 -06:00
Scott Lahteine
561904345f Tweak config ordering for M600 2017-02-18 00:01:31 -06:00
Scott Lahteine
7fdc620ef7 Merge pull request #5850 from thinkyhead/drop_some_comments
Remove some old code comments
2017-02-17 16:45:44 -06:00
Scott Lahteine
284d6de9da Remove some old code comments 2017-02-17 15:25:56 -06:00
MagoKimbra
3685224c1a Fix steps_to_mm for active extruders 2017-02-15 21:45:39 +01:00
Scott Lahteine
babe1d211c Merge pull request #5794 from thinkyhead/rc_m600_improve
M600 wait for heatup, prevent stepper timeout, etc.
2017-02-15 05:38:06 -06:00
Scott Lahteine
4578c573fe Pause the print job timer while in M600 2017-02-15 05:29:34 -06:00
Scott Lahteine
bfe6f71794 Simplify filament_change_beep function 2017-02-15 05:29:34 -06:00
Scott Lahteine
8289ea1316 Use a short name for the filament "endstop" 2017-02-15 05:29:34 -06:00
Scott Lahteine
d9dcef8a87 Spacing, coding standards 2017-02-15 05:29:34 -06:00
Scott Lahteine
931914e679 Apply M600 updates to all configs 2017-02-15 05:29:34 -06:00
Roxy-3D
8bf0b496b9 Improve M600 with timeout, wait for heatup. 2017-02-15 05:29:34 -06:00
Scott Lahteine
58b8e0cae7 Merge pull request #5837 from thinkyhead/rc_fix_mbl_homing
Fix broken homing in MBL
2017-02-15 04:48:30 -06:00
Tannoo
c40fe2113c Fix for broken MBL
LCD call was waiting forever, causing the system to hang.
2017-02-15 04:39:22 -06:00
Scott Lahteine
4d4745c0eb Parenthesize some menu defines for safety 2017-02-14 23:12:27 -06:00
Scott Lahteine
20ef0a6e27 Merge pull request #3152 from thinkyhead/sd_alpha_sort
SD files alphabetical sort in LCD menus
2017-02-14 21:48:57 -06:00
Scott Lahteine
47f9883b0f Dynamic allocation for SDCARD_SORT_ALPHA 2017-02-14 21:37:25 -06:00
Scott Lahteine
a561bd5e3a New feature: SDCARD_SORT_ALPHA 2017-02-14 21:37:24 -06:00
Scott Lahteine
c04d6b5aa6 Merge pull request #5829 from thinkyhead/rc_fix_isr_reentry
Combine fixes for LIN_ADVANCE and temperature ISR
2017-02-14 20:36:58 -06:00
Scott Lahteine
467f01435f Merge pull request #5816 from thinkyhead/rc_abl_virt_reduce
Reduce memory use by ABL_BILINEAR_SUBDIVISION slightly
2017-02-14 08:41:44 -06:00
Scott Lahteine
97b6fb6381 Reduce / optimize LIN_ADVANCE code 2017-02-14 07:52:03 -06:00
Sebastianv650
271ced7341 Prevent re-entering of temperature ISR
If Marlin is inside the temperature ISR, the stepper ISR is enabled. If
a stepper event is now happening Marlin will proceed with the stepper
ISR. Now, at the end of the stepper ISR, the temperatre ISR gets enabled
again. While Marlin proceed the rest of the temperature ISR, it's now
vulnerable to a second ISR call.
2017-02-14 07:52:03 -06:00
Sebastianv650
1b59766fcb Cleanup position_float
Hopefully fixes Marlin #5481
2017-02-12 13:09:06 +01:00
Scott Lahteine
a950c31e2d Merge pull request #5815 from thinkyhead/rc_pulses_per_step
Give encoder pulse/steps conditionals their own block
2017-02-12 04:14:00 -06:00
Scott Lahteine
7176de8605 Merge pull request #5814 from thinkyhead/hotend_loop_always
Make HOTEND_LOOP more consistent, let compiler optimize it
2017-02-12 04:13:14 -06:00
Scott Lahteine
adec219ca5 Merge pull request #5811 from thinkyhead/fix_two_strings
No space after X: or A: in M114 output
2017-02-12 04:11:51 -06:00
jes
eaa829b58c Reduce memory use by ABL_BILINEAR_SUBDIVISION slightly 2017-02-12 04:09:48 -06:00
Scott Lahteine
1c99ca82d8 Give encoder pulse/steps conditionals their own block 2017-02-12 03:57:57 -06:00
Scott Lahteine
e44294bb4d Make HOTEND_LOOP more consistent, let compiler optimize it 2017-02-12 02:50:38 -06:00
Scott Lahteine
701f4a6d9d Merge pull request #5729 from Bob-the-Kuhn/guaranteed-BLTouch-detection
guaranteed BLTouch detection
2017-02-12 01:13:35 -06:00
Scott Lahteine
c15b9a6a06 No space after X: or A: in M114 output 2017-02-12 00:10:03 -06:00
Scott Lahteine
e1702816f6 Fix SD_CHECK_AND_RETRY condition
Addressing #5806
2017-02-11 23:55:56 -06:00
Scott Lahteine
c64ecf95e2 Merge pull request #5808 from thinkyhead/rc_delta_float_radius
Cast DELTA_PRINTABLE_RADIUS to float in sq()
2017-02-11 23:43:46 -06:00
Scott Lahteine
1bc5be3bdf Cast DELTA_PRINTABLE_RADIUS to float in sq()
Addressing #5625
2017-02-11 23:28:39 -06:00
Bob-the-Kuhn
0369f97ec1 guaranteed BLTouch detection
To guarantee that the 5mS pulse from a BLTouch is recognized you need to
have the endstops.update() routine run twice in that 5mS period.

At 200 steps per mm, my system has problems  below a feedrate of 120 mm
per minute.

Two things were done to guarantee the two updates within 5mS:
1) In interrupt mode, a check was added to the temperature ISR.  If the
endstop interrupt flag/counter is active then it'll kick off the endstop
update routine every 1mS until the flag/counter is zero.  This
flag/counter is decremented by the temperature ISR AND by the stepper
ISR.

2) In poling mode, code was added to the stepper ISR that will make sure
the ISR runs about every 1.5mS.  The "extra" ISR runs only check the
endstops.  This was done by grabbing the intended ISR delay and, if it's
over 2.0mS, splitting the intended delay into multiple smaller delays.
The first delay can be up to 2.0mS, the next ones 1.5mS (as needed) and
the last no less than 0.5mS.

=========================================

BLTouch error state recovery

If BLTouch already active when deploying the probe then try to reset it
& clear the probe.

If that doesn't fix it then declare an error.

Also added BLTouch init routine to startup section
2017-02-11 12:01:34 -06:00
Scott Lahteine
1e4d4e5915 Fix typo in language_uk
Thanks to @pavlus for this one
2017-02-10 15:34:31 -06:00
Scott Lahteine
7fe7a0c8be Merge pull request #5793 from thinkyhead/rc_adjust_probe_output
Adjust probe_pt() terminal output to respect probe z-offset
2017-02-09 23:05:02 -06:00
Scott Lahteine
633c253bc1 Merge pull request #5792 from thinkyhead/rc_default_dac_vals
Default DAC values for RigidBoard V2
2017-02-09 22:56:03 -06:00
Florian Heilmann
7bbc31704c Adjust probe_pt() terminal output to respect probe z-offset 2017-02-09 22:54:22 -06:00
Scott Lahteine
6dac1fe07e Merge pull request #5701 from tohara/RCBugFixCmake
Updated CMakeLists
2017-02-09 22:45:05 -06:00
Scott Lahteine
a245656db3 Merge pull request #5713 from gege2b/RCBF-French
French translation : Added missing strings as well as missing accents
2017-02-09 22:43:56 -06:00
jaysonkelly
713931338a Default DAC values for RigidBoard V2 2017-02-09 22:39:00 -06:00
Scott Lahteine
fb11e52cd2 Merge pull request #5787 from thinkyhead/rc_bob_pins_added
pinsDebug for 644/1284 & USB646/1286 families
2017-02-09 15:07:55 -06:00
Bob-the-Kuhn
ae706233a8 pinsDebug for 644/1284 & USB646/1286 families
added conditional compilation for PWMs 1C & 3C

add Teensyduino compatibility

==========================================

changes per review - minor formatting changes

1) remove non-printable character at the end of line 687

2) split a really long comment into two lines

3) got rid of some trailing spaces

============================================

Made pinsDebug_Teensyduino.h the same between this PR and PR 5668 which
is for a re-written pinsDebug.h file.

The changes were:
1) added copyright @ GNU license header
2) a blank line crept in.
2017-02-09 07:24:02 -06:00
Gege2B
22dfcc9a71 French translation : Added missing strings as well as missing accents 2017-01-17 23:29:23 +01:00
Tom Haraldseid
1d65b4b316 Updated CMakeLists 2017-01-15 13:39:26 +08:00
Scott Lahteine
9b5515926a Merge pull request #5696 from thinkyhead/rc_volumetric_default
Allow enabling volumetric filament on config load
2017-01-14 05:48:51 -08:00
Robert Kirk
0d147ead66 Allow enabling volumetric filament on config load 2017-01-14 04:37:49 -08:00
Scott Lahteine
d3cb1a86be Merge pull request #5691 from AnHardt/fix5677
Fix M110 without leading N
2017-01-14 03:22:26 -08:00
AnHardt
fa26767efe Replace all remaining 'boolean' with 'bool' 2017-01-13 13:03:52 +01:00
AnHardt
f6858d9974 Fix M110 without leading N
Store N in the right variable.
This is too rarely used.

"mea culpa, mea culpa, mea maxima culpa"
2017-01-13 12:33:50 +01:00
Scott Lahteine
0c0c840ba8 Merge pull request #5683 from emartinez167/EMartinez-Changes
Updates to some incorrectly ended strings in the Spanish translation
2017-01-12 07:49:15 -08:00
Scott Lahteine
738b87091a Merge pull request #5684 from Kaibob2/patch-6
Update language_de.h
2017-01-12 07:48:41 -08:00
Kai
25dae3bccc Update language_de.h
Small corrections
2017-01-12 16:06:58 +01:00
emartinez167
7292145f4e Fix for some wrong strings
On last commit, some strings were ended with the incorrect character.
This fixes it.
2017-01-12 22:35:04 +08:00
emartinez167
3dee35888e Merge remote-tracking branch 'MarlinFirmware/RCBugFix' into EMartinez-Changes 2017-01-12 22:22:52 +08:00
Scott Lahteine
93a9aa6b76 Merge pull request #5682 from thinkyhead/rc_spanish_jan
Updates to Spanish language
2017-01-12 06:14:10 -08:00
Scott Lahteine
7a9c1a279b Merge pull request #5681 from thinkyhead/rc_prevent_boot_loop
Reset watchdog in SD init to prevent reboot
2017-01-12 06:13:56 -08:00
Scott Lahteine
e409c7f9e8 Merge pull request #5645 from esenapaj/From-microseconds-to-milliseconds
From "microseconds" to "milliseconds"
2017-01-12 06:02:55 -08:00
emartinez167
020c6af7b0 Updates to Spanish language
Add missing Spanish language definitions.
2017-01-12 05:53:39 -08:00
Hans Raaf
d29cc8f7bc Reset watchdog in SD init to prevent reboot
If the watchdog is enabled and bootscreen + SD card checks take too long, Marlin may hang at boot time because of the reset loop. We have this happen all the time with the Anet board if no SD card is inserted.
2017-01-12 05:33:38 -08:00
Scott Lahteine
7743849608 Merge pull request #5680 from thinkyhead/rc_configs_puhlease
code_value_float tweak
2017-01-12 05:22:47 -08:00
Scott Lahteine
16357fbfdf Merge pull request #5619 from Ocarthon/RCBugFix
Disable SD Detect for K8400
2017-01-12 05:22:03 -08:00
Scott Lahteine
e57c0fce66 Move MOSFET changes above #include for RIGIDBOARD
Correction to #5629
2017-01-12 04:46:49 -08:00
Scott Lahteine
c376f6a2cb code_value_float tweak 2017-01-12 04:38:09 -08:00
Scott Lahteine
fb3c30e24c Fix lcd_wait_for_homing causing menu to block
As a showcase function for how to do waiting in the lcd menu, this function should be preserved.
2017-01-12 04:37:23 -08:00
Scott Lahteine
f8ae0fd29f Merge pull request #5647 from manianac/RCBugFix-PrepareMenuFix
Fix empty Prepare menu
2017-01-12 04:20:18 -08:00
Robert Kirk
aab5118c6a Remove error causing break command
Use index macro instead of e
2017-01-01 17:47:01 -05:00
esenapaj
d38e335272 From "microseconds" to "milliseconds"
delay() is milliseconds
2017-01-02 01:19:33 +09:00
Scott Lahteine
34d5eb5201 Merge pull request #5589 from thinkyhead/rc_configs_puhlease
Better sanity check for FILAMENT_CHANGE_FEATURE, FILAMENT_RUNOUT_SCRIPT
2016-12-30 04:56:30 -08:00
emartinez167
a2fe24f319 Fix some errors and update a message 2016-12-29 23:34:42 +08:00
Philip Standt
8ae2bc7e2e Disable SD Detect for K8400 2016-12-28 23:21:18 +01:00
emartinez167
0844da794d Updates to Spanish language
Add missing Spanish language definitions.
2016-12-24 22:11:14 +08:00
Scott Lahteine
4061fca1ad Sanity checks for FILAMENT_CHANGE_FEATURE and FILAMENT_RUNOUT_SCRIPT 2016-12-23 19:55:12 -08:00
Scott Lahteine
5ab7b91615 Comment on filament runout sensor config 2016-12-23 19:50:27 -08:00
Scott Lahteine
922c67f17d Merge pull request #5588 from thinkyhead/rc_remove_biv25
Drop biv2.5 delta configurations
2016-12-23 19:14:50 -08:00
Scott Lahteine
78459d5de1 Merge pull request #5587 from thinkyhead/rc_never
Define ADV_NEVER, ADV_RATE
2016-12-23 19:00:57 -08:00
Scott Lahteine
8c6c048551 drop biv2.5 delta configurations 2016-12-23 18:56:07 -08:00
Scott Lahteine
92dbeebf40 Define ADV_NEVER, ADV_RATE 2016-12-23 18:43:23 -08:00
Scott Lahteine
71378f72af Merge pull request #5577 from manianac/RCBugFix-M600Dryrun
Allow M600 when dryrun debugging
2016-12-22 19:07:05 -08:00
Robert Kirk
306c184b1a Allow M600 when dryrun debugging 2016-12-21 20:30:51 -05:00
Scott Lahteine
fe2ea2906f Merge pull request #5573 from thinkyhead/rc_unify_stepper_isr
LIN_ADVANCE with unified stepper ISR
2016-12-21 02:53:32 -08:00
Sebastianv650
84c685f8b5 First draft of Unified Stepper / E Advance ISR 2016-12-21 01:34:39 -08:00
Scott Lahteine
83021d82c6 Merge pull request #5502 from AnHardt/symbol-strings
Add symbol-strings
2016-12-21 00:51:59 -08:00
Scott Lahteine
036eccfd6e Merge pull request #5572 from Kaibob2/patch-5
Update language_de.h
2016-12-21 00:50:40 -08:00
Scott Lahteine
b794b76836 Merge pull request #5567 from AnHardt/fix5194
Fix 5194
2016-12-21 00:49:52 -08:00
Scott Lahteine
451ba5df01 Merge pull request #5516 from esenapaj/Suppress-warning
Suppress warning
2016-12-21 00:00:35 -08:00
Scott Lahteine
92dbc63949 Merge pull request #5571 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-12-20 23:59:55 -08:00
Kai
ade72535c4 Update language_de.h
Added tarnslation for
```
#define MSG_DEBUG_MENU 
#define MSG_PROGRESS_BAR_TEST
```
2016-12-21 08:57:39 +01:00
Scott Lahteine
06153add6b Merge pull request #5565 from thinkyhead/rc_negative_retract_in_menu
Followup to #5550 - spacing before "mm"
2016-12-20 18:42:37 -08:00
esenapaj
ab6b005867 Suppress warning 2016-12-21 09:13:03 +09:00
AnHardt
61f15ef7e7 Fix 5194
I have been a bit too radical in cleaning up this section.
2016-12-21 00:45:29 +01:00
esenapaj
60515ff700 Update Japanese translation
・Add new translation
2016-12-21 08:44:07 +09:00
Scott Lahteine
1e419655f3 Followup to #5550 - spacing before "mm" 2016-12-20 02:27:54 -08:00
Scott Lahteine
1a26ce1cdc Merge pull request #5550 from FHeilmann/patch-2
Allow negative retract values in the LCD
2016-12-20 02:10:22 -08:00
Scott Lahteine
bec30c89e7 Merge pull request #5522 from esenapaj/Add-description-for-dual-x
Add description for choice of DEFAULT_DUAL_X_CARRIAGE_MODE
2016-12-20 01:31:53 -08:00
Florian Heilmann
780dabf32b Merge pull request #8 from thinkyhead/rc_negative_retract_in_menu
Replace "+mm" with "mm." Allow negative recover-swap length.
2016-12-20 10:31:07 +01:00
Scott Lahteine
7739c0affa Change "+mm" to "mm" in most languages
- Japanese and Chinese still need update
2016-12-20 01:16:51 -08:00
Scott Lahteine
1cba425308 Allow negative recover-swap length from LCD 2016-12-20 01:16:08 -08:00
Scott Lahteine
298a8c6a3c Merge pull request #5561 from thinkyhead/rc_no_case_light
Support for M335 case light "no case light"
2016-12-20 01:06:59 -08:00
Scott Lahteine
644f45cbd8 Merge pull request #5563 from akaJes/m600
FILAMENT_CHANGE_FEATURE allowed in idle mode
2016-12-20 01:06:10 -08:00
Scott Lahteine
4213330d22 Merge pull request #5562 from thinkyhead/rc_char_lcd_tweaks
Fix various LCD-related issues
2016-12-20 01:03:38 -08:00
Scott Lahteine
0d2fc13516 Place "Level Bed" closer to "Auto Home" 2016-12-20 00:51:03 -08:00
Scott Lahteine
b031d28ebf Encoder events should not skip stripes 2016-12-20 00:21:51 -08:00
Scott Lahteine
22881f38b9 Fix updating of "bool" menu items 2016-12-20 00:21:51 -08:00
Scott Lahteine
eb68715b94 No "Cooldown" menu if heaters are off 2016-12-20 00:21:51 -08:00
Jesus
4ed976b5ff m600 fixes 2016-12-20 09:47:46 +02:00
Damien
4e2639942b Support for M335 case light "no case light" 2016-12-19 23:23:08 -08:00
Scott Lahteine
18ba31e9b5 Add Debug Menu with LCD_PROGRESS_BAR_TEST as an example 2016-12-19 22:57:14 -08:00
Scott Lahteine
03af5961b0 Hide (or remove) custom character change on boot screen 2016-12-19 22:27:28 -08:00
Scott Lahteine
1642f5ed31 Add macro to some en strings 2016-12-19 22:27:28 -08:00
Scott Lahteine
dbb2d56c89 Correct comment on watchdog timer 2016-12-19 22:27:28 -08:00
Scott Lahteine
41a30923f3 Merge pull request #5559 from thinkyhead/rc_minimum_gcc_version
Throw an error for gcc before 4.7
2016-12-19 19:50:44 -08:00
Scott Lahteine
04f77df6c0 Merge pull request #5560 from thinkyhead/rc_bl_status
Have bed leveling status output current status, not requested.
2016-12-19 19:18:06 -08:00
Scott Lahteine
6d6a1db6ec Apply const to _EEPROM_writeData value param 2016-12-19 18:50:43 -08:00
Robert Kirk
f724ef5820 Have bed leveling status output current status, not requested. 2016-12-19 18:47:45 -08:00
Scott Lahteine
20218e553d Merge pull request #5527 from MagoKimbra/rc_configuration_store_fix_size
Fix size
2016-12-19 18:47:28 -08:00
Scott Lahteine
dcfbe2bd3c Throw an error for gcc before 4.7 2016-12-19 18:30:51 -08:00
Scott Lahteine
82fde7df2e Merge pull request #5512 from AnHardt/speed-compare-bbr
Optimize handling of block_buffer_runtime()
2016-12-19 18:21:06 -08:00
Scott Lahteine
64a44f697c Merge pull request #5557 from thinkyhead/rc_thermistor_breakup
Split up thermistor tables
2016-12-19 15:01:18 -08:00
Scott Lahteine
8986225752 Spacing, cleanup in speed_lookuptable.h 2016-12-19 14:52:45 -08:00
Scott Lahteine
e12c8e5cac Split up thermistor tables 2016-12-19 14:47:54 -08:00
Florian Heilmann
a7334fd2a0 Allow negative retract values in the LCD
This can already be done via G-Code, so adding the capability to the LCD should be straight forward.
2016-12-19 14:19:06 +01:00
AnHardt
292eb365c6 Optimize handling of block_buffer_runtime()
millis_t is long - divisions take for ever.

Return a kind of millisecond instead of microsecond -
divided by 1024 instead of 1000 for speed. (2.4% error)

That does not matter because block_buffer_runtime is
already a too short estimation.
Shrink the return-type.
2016-12-19 11:47:28 +01:00
esenapaj
6854f44bf2 Add description for choice of DEFAULT_DUAL_X_CARRIAGE_MODE 2016-12-19 02:21:10 +09:00
Scott Lahteine
3f6f036f7c Merge pull request #5524 from thinkyhead/rc_optional_dogm_splitup
Report EEPROM data size, not final index
2016-12-16 18:55:48 -08:00
MagoKimbra
86ba7e4542 Fix size
Fix size for writeData and readData.
For bilinear grid 11 x 11 for example, size is 4 (float) x 11 x 11 = 484. uint8_t max is 255.
2016-12-16 14:49:33 +01:00
Scott Lahteine
f9f75c8016 Fix USE_RAW_KINEMATICS in prepare_kinematic_move_to 2016-12-15 23:15:38 -08:00
Scott Lahteine
87921f390a Clarify what are "logical" positions in the planner 2016-12-15 23:15:38 -08:00
Scott Lahteine
a4f10f59c3 Write the E parameter length correctly 2016-12-15 23:15:38 -08:00
Scott Lahteine
2e904cb4f9 Merge pull request #5514 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-12-15 21:38:40 -08:00
Scott Lahteine
0b6817e0f9 Merge pull request #5505 from android444/patch-4
Update for translations language_pl.h
2016-12-15 21:38:18 -08:00
Scott Lahteine
3bd76f60e4 Report EEPROM data size, not final index 2016-12-15 20:26:28 -08:00
Scott Lahteine
78d6d6e076 Merge pull request #5452 from thinkyhead/rc_save_your_mesh
Save Bed Leveling to EEPROM
2016-12-15 20:23:01 -08:00
Scott Lahteine
0d0aa6c20d Patch type for max_acceleration_mm_per_s2 save/restore 2016-12-15 20:05:42 -08:00
Scott Lahteine
d4f5418802 Merge pull request #5517 from esenapaj/Fix-for-PR-#5255
Fix for the PR #5255 (Case light menu (3rd attempt))
2016-12-15 20:01:22 -08:00
Scott Lahteine
fa7010b0a1 Merge pull request #5515 from esenapaj/Remove-unnecessary-tabs-and-spaces
Remove unnecessary tabs and spaces
2016-12-15 19:58:32 -08:00
Scott Lahteine
6d7b1cdf6c Add M421 for ABL Bilinear 2016-12-15 19:39:11 -08:00
Scott Lahteine
32e65dc429 Extend M420 to print state and, with V, the matrix / mesh 2016-12-15 19:39:11 -08:00
Scott Lahteine
d04258753b Don't throw away the bed level matrix on G28 2016-12-15 19:21:18 -08:00
Scott Lahteine
8f0f225d10 Save ABL Planar Matrix to EEPROM 2016-12-15 19:21:15 -08:00
Scott Lahteine
e2429a9da1 Generalize Bed Leveling flag in EEPROM 2016-12-15 19:20:52 -08:00
Scott Lahteine
e42fd7813a Save ABL Bilinear Grid to EEPROM 2016-12-15 19:20:48 -08:00
Scott Lahteine
492b68f8e3 Better EEPROM read/write error handling 2016-12-15 19:08:44 -08:00
Scott Lahteine
55722c09da Use "UNPROBED" for un-probed bed_level_grid points 2016-12-15 19:08:44 -08:00
Scott Lahteine
2643404ac8 Throw an error in M420 if can't enable 2016-12-15 19:08:43 -08:00
Scott Lahteine
b1539394fd Use planner.unapply_leveling to undo tilt in G29 2016-12-15 19:08:43 -08:00
Scott Lahteine
04636f78eb Re-enable MBL/ABL after M48 2016-12-15 19:08:43 -08:00
Scott Lahteine
9b41638672 Minor tweak to G29 grid points 2016-12-15 19:08:42 -08:00
Scott Lahteine
daa2cad21f Fix comment on G29 to include 'Z' 2016-12-15 19:08:42 -08:00
Scott Lahteine
8244fefcc2 Tweak call to reset_bed_level in G29 2016-12-15 19:08:42 -08:00
Scott Lahteine
0995a5d734 Fixup reset_bed_level 2016-12-15 19:08:42 -08:00
Scott Lahteine
1b2fb2bdc7 ABL_GRID_POINTS_* => ABL_GRID_MAX_POINTS_* 2016-12-15 19:08:41 -08:00
Scott Lahteine
b091c9ceb7 Merge pull request #5520 from esenapaj/Fix-for-commented-section
Fix for commented section of Config_RetrieveSettings()
2016-12-15 18:16:30 -08:00
esenapaj
d486361c69 Fix for commented section of Config_RetrieveSettings() 2016-12-16 04:34:47 +09:00
esenapaj
88157ba529 Fix for the PR #5255 (Case light menu (3rd attempt)) 2016-12-16 00:57:32 +09:00
esenapaj
069c6b38dd Remove unnecessary tabs and spaces 2016-12-16 00:21:32 +09:00
esenapaj
9c8116aedf Update Japanese translation
・Add new translation
2016-12-16 00:06:58 +09:00
AnHardt
57b1275cde Add symbol-string to _de
Add symbol-string for _de
to reduce the frquencey of regenerating 'mappers' and 'fonts'
with the new utf-system.
2016-12-15 14:37:18 +01:00
android444
3363d2c937 Update for translations language_pl.h 2016-12-14 17:32:33 +01:00
Scott Lahteine
7ca4f16a5c Merge pull request #5430 from thinkyhead/rc_optional_dogm_splitup
Move Hollow Frame options to config-adv
2016-12-14 04:55:15 -08:00
Scott Lahteine
06af3b62ba Move HOLLOW_FRAME options to config_adv 2016-12-14 04:31:27 -08:00
Scott Lahteine
67ca6c7bfe Codestyle tweaks to ultralcd.cpp 2016-12-14 04:20:33 -08:00
Scott Lahteine
8d9fcd8e6f Merge pull request #5495 from AnHardt/autoadjusting_display-updates
Adaptive screen updates for all kinds of displays
2016-12-14 04:16:26 -08:00
Scott Lahteine
77a360912d Merge pull request #5491 from yhfudev/devel-rcbugfix-language-headers
UTF-8 language header files
2016-12-14 02:23:09 -08:00
Scott Lahteine
efb8b8425c Merge pull request #5493 from thinkyhead/rc_fix_recover_unhop
Prevent retract un-hop at wrong height
2016-12-14 02:20:08 -08:00
AnHardt
d0e24e0876 Adaptive screen updates for all kinds of displays
The target here is to update the screens of graphical and char base
displays as fast as possible, without draining the planner buffer too much.

For that measure the time it takes to draw and transfer one
(partial) screen to the display. Build a max. value from that.
Because ther can be large differences, depending on how much the display
updates are interrupted, the max value is decreased by one ms/s. This way
it can shrink again.
On the other side we keep track on how much time it takes to empty the
planner buffer.
Now we draw the next (partial) display update only then, when we do not
drain the planner buffer to much. We draw only when the time in the
buffer is two times larger than a update takes, or the buffer is empty anyway.

When we have begun to draw a screen we do not wait until the next 100ms
time slot comes. We draw the next partial screen as fast as possible, but
give the system a chance to refill the buffers a bit.

When we see, during drawing a screen, the screen contend has changed,
we stop the current draw and begin to draw the new content from the top.
2016-12-13 18:44:34 +01:00
yhfudev
2dbd38ce16 tag the utf-8 strings 2016-12-13 11:54:35 -05:00
Scott Lahteine
94ffb58da7 Prevent retract un-hop at wrong height 2016-12-13 08:24:12 -08:00
Scott Lahteine
0772c8e55f Merge pull request #5487 from thinkyhead/rc_easier_move_axis
Rearrange Move Menu, Fix up Delta Calibration
2016-12-13 07:07:05 -08:00
Scott Lahteine
b2c8de856b Merge pull request #5478 from AnHardt/stepspermm
Replace ftostr62sign with ftostr62rj
2016-12-13 07:05:42 -08:00
Scott Lahteine
1fd8185d37 Merge pull request #5492 from thinkyhead/rc_fix_language_es
Fix multiple definitions of message macros in the language-es.h
2016-12-13 06:57:52 -08:00
yhfudev
1cdffdede7 fix multiple definitions of message macros in the language-es.h 2016-12-13 06:48:38 -08:00
Scott Lahteine
b67f8cb499 Merge pull request #5490 from jbrazio/update-bqhp2
Update the bq Hephestos 2 example configuration
2016-12-13 05:04:24 -08:00
Scott Lahteine
93b2833347 Move Menu: Select axis first, resolution after 2016-12-13 03:11:14 -08:00
Scott Lahteine
48aa0f6475 Merge pull request #5475 from AnHardt/utf-mapper-tr
utf8-mapper for Turkish
2016-12-13 03:03:22 -08:00
Scott Lahteine
b9ee0d7bd3 Merge pull request #5488 from thinkyhead/rc_fade_compiler_warn
Patch fade_factor compiler warning
2016-12-13 03:00:47 -08:00
Scott Lahteine
641e0936d4 Patch up Delta Calibration Menu 2016-12-13 02:42:28 -08:00
Scott Lahteine
b4dbf4d18a Non-reentrant "Moving..." screen to safely wait in LCD 2016-12-13 02:42:27 -08:00
Scott Lahteine
7b625e0048 Patch fade_factor compiler warning 2016-12-13 02:29:01 -08:00
Scott Lahteine
6fa8fd15e2 Add negative temperatures for Thermistor 1
Changes from #5485 by @AndKe
2016-12-13 02:06:16 -08:00
Scott Lahteine
2b5d424394 Use handle_reprapworld_keypad for keypad handling 2016-12-13 01:41:08 -08:00
Scott Lahteine
887ed73c9b Expose delta_clip_start_height for use by others 2016-12-13 01:41:08 -08:00
João Brázio
3f75edb1d6 Updated bq Hephestos 2 example configuration 2016-12-13 09:26:07 +00:00
Scott Lahteine
6080ac566a Merge pull request #5483 from thinkyhead/rc_aragonese_fixup
Update Aragonese translation
2016-12-12 18:26:07 -08:00
Daniel Martinez
b796e7031d Update Aragonese translation 2016-12-12 17:36:33 -08:00
AnHardt
cd2b74e88d Replace ftostr62sign with ftostr62rj
`ftostr62sign()` is used only when displaing/editing
Steps/mm. A sign is not needed - the value is always positive.
Because the number part is long there is no't much place for the values name.
With this PR the is one more char for the name possible.
2016-12-12 20:25:20 +01:00
AnHardt
795541f87e utf8-mapper for Turkish
The non utf8 version of turkish is a bit unhandy.

Delete `language_tr.h`
Rename `language_tr_utf.h` to `language_tr.h`
Provide a propper utf8-mapper for Turkish and use it.
2016-12-12 15:56:59 +01:00
Scott Lahteine
7c71bb2900 Merge pull request #5471 from thinkyhead/rc_planner_report_m503
Patch to show E factors in M503
2016-12-11 17:47:41 -08:00
Scott Lahteine
39401b7472 Patch to show E factors in M503 2016-12-11 17:37:29 -08:00
Scott Lahteine
6b50230022 Merge pull request #5447 from thinkyhead/rc_update_dutch
Dutch cleanup, ordering, placeholders
2016-12-10 22:13:20 -08:00
Scott Lahteine
2c97c11731 Merge pull request #5454 from thinkyhead/rc_fix_delta_g29
Fix G29 starting height on DELTA
2016-12-10 22:10:33 -08:00
Scott Lahteine
8239c45b30 Merge pull request #5448 from thinkyhead/rc_eeprom_bump
EEPROM: Prolong life. Better support for `DISTINCT_E_FACTORS`.
2016-12-10 22:06:00 -08:00
Scott Lahteine
21ed43df5f New Dutch terms 2016-12-10 21:59:45 -08:00
Scott Lahteine
4bc6536f54 Move to safe zone on DELTA if using do_blocking_move_to* 2016-12-10 21:28:24 -08:00
Scott Lahteine
6f389158d7 Compile less code with EEPROM off 2016-12-09 06:05:32 -08:00
Scott Lahteine
f2301a2a04 Add e-stepper count to EEPROM (for planner vars) 2016-12-09 06:05:31 -08:00
Scott Lahteine
53c9fca0f6 Only write to EEPROM when a byte changes 2016-12-09 06:05:31 -08:00
Scott Lahteine
72fe995c42 Merge pull request #5449 from AnHardt/volatile-bbru
Make block_buffer_runtime_us volatile
2016-12-09 05:57:45 -08:00
AnHardt
13eebd11cf volatile_block_buffer_runtime_us
`block_buffer_runtime_us` is mangled in the planner and in the stepper-ISR.
So it needs to be volatile and interrupt protected.
2016-12-09 14:49:02 +01:00
Scott Lahteine
8383f35b40 Merge pull request #5445 from thinkyhead/rc_reduce_jerk_code
Slightly shrink jerk and advance code
2016-12-09 02:54:03 -08:00
Scott Lahteine
52f8924f6e Merge pull request #5446 from gege2b/RCBugFix-french
Update french translation (LIGHTS str)
2016-12-09 02:49:32 -08:00
Gege2B
40453c1b9a Update french translation (LIGHTS str) 2016-12-09 11:18:29 +01:00
Scott Lahteine
fc2fc828b3 Prettify LIN_ADVANCE code with the positive condition 2016-12-09 00:29:07 -08:00
Scott Lahteine
1929502e15 Add const to some variables 2016-12-09 00:29:06 -08:00
Scott Lahteine
2da4d22520 Pretty up ADVANCE code 2016-12-08 22:51:28 -08:00
Scott Lahteine
af024e1d7c Pretty up coast / reverse jerk code 2016-12-08 22:50:25 -08:00
Scott Lahteine
3f3b5c86d8 Slightly shrink code for jerk-based reduction of safe_speed 2016-12-08 22:24:29 -08:00
Scott Lahteine
dfdb180db4 Merge pull request #5440 from AnHardt/simplify-long_move
Simplify long_move()
2016-12-08 18:03:20 -08:00
AnHardt
87fe20b5f5 Simplify long_move()
We are not really interested in, if there are blocks.
All information we need is in `block_buffer_runtime_us`.
2016-12-09 00:13:35 +01:00
Scott Lahteine
574d9c7d3d Merge pull request #5432 from Kaibob2/patch-2
Update language_de.h
2016-12-08 13:14:04 -08:00
Scott Lahteine
f089279263 Merge pull request #5431 from esenapaj/Suppress-warnings,-etc
Suppress warnings, etc
2016-12-08 13:10:12 -08:00
Scott Lahteine
d92ccb230c Merge pull request #5438 from AnHardt/patch-long_move
Patch long_move()
2016-12-08 13:08:36 -08:00
Scott Lahteine
a1e0842c8b Merge pull request #5436 from esenapaj/Remove-redundant-E,-etc-plan-B
Remove redundant "E", etc plan B
2016-12-08 13:06:07 -08:00
AnHardt
706b240251 Patch long_move()
While the last move in the planner_buffer is running
it's duration is already subtracted from block_buffer_runtime_us.
2016-12-08 21:03:26 +01:00
esenapaj
a298a58684 Remove redundant "E" 2016-12-09 02:27:34 +09:00
Kai
390a6d976a Update language_de.h
#define MSG_ENDSTOP_ABORT  doesn't fit in Display 
See https://github.com/MarlinFirmware/Marlin/issues/5401#issuecomment-265714487
2016-12-08 12:18:19 +01:00
esenapaj
e9393c3634 Suppress warnings, etc
・Suppress warnings
・Remove unused variable "did_update"
2016-12-08 17:47:59 +09:00
Scott Lahteine
4ea87b8f34 Merge pull request #5414 from thinkyhead/rc_sanitycheck_inverting
Sanity-check inverting for Z probe and Z endstop
2016-12-08 00:28:33 -08:00
Scott Lahteine
da6a094424 Sanity-check inverting and pullups for Z probe and Z endstop
`Z_MIN_ENDSTOP_INVERTING` must match `Z_MIN_PROBE_ENDSTOP_INVERTING`
when using `Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN`.
This is easy to overlook.
2016-12-08 00:12:19 -08:00
Scott Lahteine
a9f64537ff Merge pull request #5429 from thinkyhead/rc_mention_M205
Fix compile error with LCD_I2C_VIKI
2016-12-07 22:16:57 -08:00
Scott Lahteine
3fb43c11fc Fix compile error with LCD_I2C_VIKI 2016-12-07 23:29:45 -06:00
Scott Lahteine
c1e1f63ffa Merge pull request #5424 from thinkyhead/rc_mention_M205
Include M205 note in configurations
2016-12-07 18:18:59 -06:00
Scott Lahteine
aa241c63b3 Include M205 note in configurations 2016-12-07 14:45:44 -06:00
Scott Lahteine
c8a95ec514 Merge pull request #5413 from MagoKimbra/rc_fix_mesh
Fix Mesh without Fade Height
2016-12-07 03:16:02 -06:00
Scott Lahteine
35ad9626f1 Merge pull request #5410 from thinkyhead/rc_polish_update
Update Polish language, reduce filament change messages
2016-12-07 03:15:53 -06:00
Scott Lahteine
01e5d46ea7 Patch some planner compile errors 2016-12-07 02:26:24 -06:00
MagoKimbra
5383212a28 Fix Mesh without Fade Height 2016-12-07 09:23:42 +01:00
Scott Lahteine
dbe1dc1452 Merge pull request #5406 from Rigid3D/RCBugFix
Turkish Translation Update
2016-12-07 00:56:08 -06:00
Scott Lahteine
66f1b7cce3 Merge pull request #5409 from thinkyhead/rc_croatian_update
Updates to Croatian language
2016-12-07 00:55:45 -06:00
Scott Lahteine
4783a59249 Remove filament-change empty lines from languages 2016-12-07 00:53:03 -06:00
Scott Lahteine
1705099c3e Save space by not defining unused filament change message lines 2016-12-07 00:53:03 -06:00
Scott Lahteine
29bc83ead8 Optimize findMissingTranslations.sh 2016-12-07 00:53:02 -06:00
android444
9b1f4b514b Update Polish language
Translation of messages in English to Polish.
2016-12-06 22:28:33 -06:00
Robert Marko
84f7e1de04 Updates to Croatian language 2016-12-06 22:24:12 -06:00
Scott Lahteine
b6bb4daea9 Merge pull request #5408 from esenapaj/README-and-Version-for-1.1.0-RCBugFix
README and Version for 1.1.0-RCBugFix
2016-12-06 22:21:19 -06:00
esenapaj
08cdaaf19b README and Version for 1.1.0-RCBugFix
Sync with RC8
2016-12-07 10:43:58 +09:00
Mehmet Sutas
f4663cb677 Update language_tr_utf8.h 2016-12-07 00:21:56 +03:00
Mehmet Sutas
b4fd115d4e Update language_tr.h 2016-12-07 00:20:07 +03:00
Scott Lahteine
83c5026db1 Ignore homing button when SD printing
As suggested in #5404 by @android444
2016-12-06 14:22:34 -06:00
Scott Lahteine
312caef472 Merge pull request #5398 from thinkyhead/rc_croatian_cleanup
Fix Croatian spacing, extra #endif
2016-12-06 03:22:19 -06:00
Scott Lahteine
46b65773ea Fix Croatian spacing, extra #endif 2016-12-06 03:10:37 -06:00
Scott Lahteine
3f2faac9d1 Merge pull request #5388 from thinkyhead/rc_subdivide_bilinear
Subdivide Bilinear Grid with Catmull Rom Splines
2016-12-05 20:28:50 -06:00
Scott Lahteine
b5b5edd9ad Merge pull request #5394 from thinkyhead/rc_drop_board_99
Remove mystery-board 99
2016-12-05 20:28:35 -06:00
Scott Lahteine
c48901f355 Remove mystery-board 99 2016-12-05 20:16:50 -06:00
akaJes
d7b948610a Experimental bilinear subdivision option 2016-12-05 20:11:24 -06:00
Scott Lahteine
6253b765aa Merge pull request #5389 from thinkyhead/distribute_screen_updates
Distribute GLCD screen updates in time
2016-12-05 20:08:33 -06:00
Scott Lahteine
b203901143 Merge pull request #5393 from AnHardt/Fix-auto_report_temperatures
Fix auto_report_temperatures()
2016-12-05 19:38:23 -06:00
AnHardt
59a27ed27d Fix auto_report_temperatures()
The `auto_report_temperatures` needs a linefeed to be recognized by Repetier Host.
2016-12-06 01:26:44 +01:00
AnHardt
a6fbd4a5d8 Distribute GLCD screen updates in time
Currently we draw and send the screens for a graphical LCD all at once.
We draw in two or four parts but draw them directly behind each other.
For the tested status screen this takes 59-62ms in a single block.
During this time nothing else (except the interrupts) can be done.
When printing a sequence of very short moves the buffer drains - sometimes until it's empty.

This PR splits the screen update into parts.
Currently we have 10 time slots. During the first one the complete screen is drawn. (60,0,0,0,0,0,0,0,0,0,0)
Here i introduce pauses for doing other things. (30,30,0,0,0,0,0,0) or (15,15,15,15,0,0,0,0,0,0)
Drawing in consecutive time slots prevents from lagging too much. Even with a 4 stripe display all the drawing is done after 400ms.
Previous experiments with a even better distribution of the time slots like
(30,0,0,0,0,30,0,0,0,0) and (15,0,15,0,15,0,15,0,0,0) did not feel good when using the menu, because of too much lag.

Because of the previous PRs to speed up the display updates and especially reducing the difference between drawing 2 or 4 stripes,
it now makes sense for the REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER to go from 2 to 4 stripes. This costs about 1-2ms per complete
screen update, but is payed back by having partial updates lasting only the half time and two additional brakes. Also ~256 byte of
framebuffer are saved in RAM.

13:45:59.213 : echo: #:17 >:13 s:30;   #:16 >:13 s:29;   S#:33 S>:26 S:59
13:46:00.213 : echo: #:16 >:14 s:30;   #:17 >:13 s:30;   S#:33 S>:27 S:60
13:46:01.215 : echo: #:17 >:13 s:30;   #:16 >:13 s:29;   S#:33 S>:26 S:59
13:46:02.215 : echo: #:16 >:13 s:29;   #:16 >:14 s:30;   S#:32 S>:27 S:59
13:46:03.214 : echo: #:17 >:13 s:30;   #:17 >:13 s:30;   S#:34 S>:26 S:60
13:46:04.214 : echo: #:16 >:13 s:29;   #:16 >:14 s:30;   S#:32 S>:27 S:59
13:46:05.212 : echo: #:16 >:14 s:30;   #:17 >:13 s:30;   S#:33 S>:27 S:60
13:46:06.212 : echo: #:17 >:13 s:30;   #:16 >:13 s:29;   S#:33 S>:26 S:59

03:30:36.779 : echo: #:8 >:7 s:15;   #:10 >:7 s:17;   #:8 >:6 s:14;   #:8 >:7 s:15;   S#:34 S>:27 S:61
03:30:37.778 : echo: #:8 >:6 s:14;   #:10 >:7 s:17;   #:9 >:7 s:16;   #:8 >:6 s:14;   S#:35 S>:26 S:61
03:30:38.778 : echo: #:8 >:6 s:14;   #:11 >:7 s:18;   #:8 >:6 s:14;   #:8 >:7 s:15;   S#:35 S>:26 S:61
03:30:39.777 : echo: #:8 >:6 s:14;   #:10 >:7 s:17;   #:8 >:8 s:16;   #:8 >:6 s:14;   S#:34 S>:27 S:61
03:30:40.780 : echo: #:8 >:6 s:14;   #:11 >:7 s:18;   #:8 >:6 s:14;   #:8 >:6 s:14;   S#:35 S>:25 S:60
03:30:41.780 : echo: #:9 >:6 s:15;   #:10 >:7 s:17;   #:8 >:6 s:14;   #:9 >:6 s:15;   S#:36 S>:25 S:61
03:30:42.779 : echo: #:8 >:6 s:14;   #:10 >:8 s:18;   #:8 >:6 s:14;   #:8 >:6 s:14;   S#:34 S>:26 S:60
03:30:43.778 : echo: #:9 >:6 s:15;   #:10 >:7 s:17;   #:8 >:7 s:15;   #:9 >:6 s:15;   S#:36 S>:26 S:62

#: draw a stripe
>: transfer a stripe
s: sum of of draw and transfer for one stripe
S#: sum of draws for a complete screen
S>: sum of transfers for a complete screen
S: time to draw and transfer a complete screen
2016-12-05 12:22:54 -06:00
Scott Lahteine
f882355994 Merge pull request #5318 from Sebastianv650/Account_for_LCD_improvements
Account for LCD improvements in ENSURE_SMOOTH_MOVES
2016-12-05 11:23:58 -06:00
Scott Lahteine
20e834461d Merge pull request #5385 from thinkyhead/rc_ftostr4sign_decimal
Show decimal for small numbers in ftostr4sign
2016-12-05 11:22:45 -06:00
Scott Lahteine
b6b100c471 Merge pull request #5371 from thinkyhead/rc_extruders_can_differ
Allow distinct factors for multiple extruders
2016-12-05 11:22:31 -06:00
Scott Lahteine
1aca2dfe0c Merge pull request #5387 from thinkyhead/rc_polish_update
Polish language update – plus placeholders
2016-12-05 10:52:20 -06:00
Scott Lahteine
449d9cbf60 Add placeholders for Polish translatable strings 2016-12-05 10:37:00 -06:00
c64pl
643dc4b64e Update language_pl.h
Fixed translations
2016-12-05 10:37:00 -06:00
Scott Lahteine
0974b75fb6 Merge pull request #5386 from thinkyhead/rc_galician_update
Galician language update.
2016-12-05 10:36:26 -06:00
Rafa Couto
2b9115330d Galician language update. 2016-12-05 10:11:28 -06:00
Scott Lahteine
1f3e2440bc Merge pull request #5175 from thinkyhead/rc_dualx_homing
Unpark when using Z_SAFE_HOMING with Dual X
2016-12-05 10:02:56 -06:00
Scott Lahteine
d5bf1684fe Implement as optional feature LCD_DECIMAL_SMALL_XY
And reduce the function size to simplify
2016-12-05 09:26:05 -06:00
Guthenberg
bfb8d3b53e Show more decimals in Display, if possible
_123, -123, _-12, __-1  plus  1234, 12.3, -1.2
2016-12-05 09:05:46 -06:00
Scott Lahteine
1e30d1da47 Simplify itostr4sign
- This function becomes obsolete if ftostr4sign is re-written.
2016-12-05 09:05:46 -06:00
Scott Lahteine
82a187acae Merge pull request #5359 from AnHardt/update-de
Add missing translations to lang-de
2016-12-05 07:31:28 -06:00
Scott Lahteine
4bafdf4b66 Support DISTINCT_E_FACTORS in LCD Motion Menu 2016-12-05 07:26:18 -06:00
Scott Lahteine
3391c785c6 Support for distinct E factors 2016-12-05 07:26:18 -06:00
Scott Lahteine
0dfe95eaba Adjust formatting in Planner 2016-12-05 07:26:17 -06:00
Scott Lahteine
c9c6e084ce Merge pull request #5383 from thinkyhead/rc_fixup_5378
Fix rows error in DOGM
2016-12-05 07:24:44 -06:00
Scott Lahteine
09587f7c0d Fix rows error in DOGM 2016-12-05 07:14:11 -06:00
Scott Lahteine
c47e07d129 Fix Dual X software endstops 2016-12-05 06:51:41 -06:00
Scott Lahteine
4217e9653e Adjust park code in tool_change 2016-12-05 06:51:41 -06:00
Scott Lahteine
b20405db31 Only DXC_AUTO_PARK_MODE should auto-move in tool_change 2016-12-05 06:48:43 -06:00
Scott Lahteine
ca24af7d5d Dual X with home_z_safely is not parked 2016-12-05 06:43:26 -06:00
Scott Lahteine
0e15b4f434 Dual X set_axis_is_at_home can use x_home_pos for both 2016-12-05 06:43:26 -06:00
Scott Lahteine
54109dfaec Reduce code size for Dual X un-park 2016-12-05 06:43:26 -06:00
Scott Lahteine
fe96f74db1 Use const arguments in Dual X helper functions 2016-12-05 06:43:26 -06:00
Scott Lahteine
41278c1e8b Apply LOGICAL_POSITION to home positions on Dual X 2016-12-05 06:43:26 -06:00
Scott Lahteine
053fb55af6 Fix modes ordering in prepare_move_to_destination_dualx 2016-12-05 06:43:26 -06:00
Scott Lahteine
ee50928eee Make LOGICAL and RAW position macros ternary-compatible 2016-12-05 06:43:26 -06:00
Scott Lahteine
56dd15c0ad Use SET_INPUT for PS_ON_PIN in kill 2016-12-05 06:43:26 -06:00
Scott Lahteine
200cf3e9f9 Merge pull request #5381 from thinkyhead/rc_fix_fade_factor
Properly apply fade_factor to MBL
2016-12-05 06:06:13 -06:00
Scott Lahteine
84ff78c1e3 Pass the fade factor to mbl.get_z 2016-12-05 03:01:51 -06:00
Scott Lahteine
85c2b96685 Apply const to MBL class methods 2016-12-05 02:50:59 -06:00
Scott Lahteine
c06161b773 Use apply_leveling, not MBL directly 2016-12-05 01:53:36 -06:00
Scott Lahteine
818f8b93d3 Merge pull request #5378 from thinkyhead/rc_duration_rj
Better alignment of elapsed print time
2016-12-04 22:42:23 -06:00
Scott Lahteine
9d88a61d52 Better alignment of elapsed print time 2016-12-04 21:30:49 -06:00
Scott Lahteine
21c7b7ef87 Merge pull request #5374 from thinkyhead/rc_lcd_edit_tweaks
Fix garbled negative values on LCD
2016-12-04 16:32:12 -06:00
Scott Lahteine
0b53d78046 Tweak editable items for debugging 2016-12-04 03:51:10 -06:00
Scott Lahteine
0b9b529745 Merge pull request #5368 from thinkyhead/rc_croatian_update
Save PROGMEM with string changes
2016-12-03 19:37:23 -06:00
Scott Lahteine
fccc97de6d Save PROGMEM with string changes
Unlike RAM-based strings, PROGMEM strings aren’t consolidated by the
compiler.
2016-12-03 19:21:46 -06:00
AnHardt
e7fc353f08 Add missing translations to lang-de 2016-12-03 20:51:49 +01:00
Scott Lahteine
ea13c68515 Merge pull request #5365 from thinkyhead/rc_croatian_update
Add placeholders for Bulgarian translation
2016-12-03 12:30:22 -06:00
Scott Lahteine
3f2cb376e0 Add placeholders for Bulgarian translation 2016-12-03 12:14:02 -06:00
Scott Lahteine
b22d37ba52 Merge pull request #5364 from thinkyhead/rc_croatian_update
Update Croatian to include missing strings
2016-12-03 11:37:42 -06:00
Robert Marko
b796a687ca Update Croatian to include missing strings
Added all missing strings according to English
2016-12-03 11:15:41 -06:00
Scott Lahteine
3bb76b254d Merge pull request #5363 from thinkyhead/rc_fix_hotend_offset_M503
Fix hotend offset report in M503
2016-12-03 10:28:49 -06:00
Scott Lahteine
255ed80164 Fix hotend offset report in M503 2016-12-03 10:17:35 -06:00
Scott Lahteine
7273a18c8d Merge pull request #5358 from thinkyhead/rc_fixup_scripts
Enhance findMissingTranslations, format the output
2016-12-03 09:37:32 -06:00
Scott Lahteine
b44f06a296 Extend findMissingTranslations, reformat output 2016-12-03 08:48:51 -06:00
Scott Lahteine
1dfe39f0d7 Merge pull request #5351 from petrzjunior/RCBugFix
[LANGUAGE] Update Czech (Case light)
2016-12-03 03:52:18 -06:00
Petr Zahradník
c66f3ed34b Update Czech 2016-12-03 10:32:34 +01:00
Scott Lahteine
cbf208ea1f Merge pull request #5348 from Kaibob2/patch-1
Update language_de.h
2016-12-03 01:53:24 -06:00
Scott Lahteine
a2660cf688 Merge pull request #5347 from tnw513/fix-italian
Added missing translations
2016-12-03 01:52:45 -06:00
Scott Lahteine
27dd5acc22 Fix set_led_color for BLINKM
Follow-up to #5330
2016-12-03 01:51:11 -06:00
Kai
8530c32309 Update language_de.h
Grammar corrections
2016-12-02 19:40:36 +01:00
Silvio Didonna
f1d5ffa211 Added missing translations 2016-12-02 18:49:39 +01:00
Scott Lahteine
b0361ebe4f Merge pull request #5343 from thinkyhead/rc_invert_case_light
Allow case light pin to be active low
2016-12-02 01:17:11 -06:00
Scott Lahteine
f60b4f8659 Allow case light pin to be active low 2016-12-01 23:32:34 -06:00
Scott Lahteine
3f4c02e42f Merge pull request #5259 from Sebastianv650/Allow_UART-ISR_inside_Stepper
Allow UART ISRs inside the stepper ISR
2016-12-01 23:17:42 -06:00
Scott Lahteine
115f81840b Merge pull request #5342 from thinkyhead/rc_reliable_redraw
Fix redraw in SD Card menus
2016-12-01 22:42:24 -06:00
Scott Lahteine
d07229f185 Fix redraw in SD Card menus 2016-12-01 18:15:58 -06:00
Scott Lahteine
47b4b21308 Merge pull request #5331 from esenapaj/Fix-for-the-PR-#5072
Fix for the PR #5072 (Add predefined AUTO_FAN_PINs to pins files), etc
2016-12-01 13:37:02 -06:00
Scott Lahteine
14b1500525 Merge pull request #5338 from thinkyhead/rc_fix_fade_factor
Fix compile without ENABLE_LEVELING_FADE_HEIGHT
2016-12-01 12:06:39 -06:00
Scott Lahteine
8d14420331 Fix compile without ENABLE_LEVELING_FADE_HEIGHT 2016-12-01 11:37:24 -06:00
Scott Lahteine
415294801f Merge pull request #5330 from thinkyhead/rc_rgb_led
Support for an RGB LED using 3 pins
2016-11-30 14:14:00 -06:00
esenapaj
0909cf3d46 Adjust spacing 2016-11-30 19:39:39 +09:00
esenapaj
8e9e9c17b0 Follow-up the PR #5323 (Adding ukrainian language support)
・Update forgotten Configuration_adv.h of Felix\DUAL and K8400\Dual-head
2016-11-30 19:39:39 +09:00
esenapaj
d92ce8849b Fix for the PR #5072 (Add predefined AUTO_FAN_PINs to pins files), etc
・Make descriptions the same as others
2016-11-30 19:39:38 +09:00
Scott Lahteine
e00b380489 Merge pull request #5323 from akaJes/lang-ua
Adding ukrainian language support
2016-11-30 01:10:40 -06:00
Scott Lahteine
862e3c93d9 Merge pull request #5328 from esenapaj/Suppress-warning
Suppress warning
2016-11-30 01:05:20 -06:00
Scott Lahteine
65c50e062e Support for an RGB LED using 3 pins 2016-11-30 00:02:31 -06:00
esenapaj
3047f3c85c Suppress warning 2016-11-30 00:32:56 +09:00
jes
f674246397 extend Configurations files 2016-11-29 15:04:36 +02:00
jes
c90191faaf adding ukrainian laguage support 2016-11-29 14:49:45 +02:00
Sebastianv650
912704a0d8 Enable ISRs inside temperature ISR
to capture chars at UART at 250000 baud.
2016-11-28 20:08:50 +01:00
Sebastianv650
f62f4006af Account for LCD improvements in ENSURE_SMOOTH_MOVES
.. and give the hint to try lower values if possible.
2016-11-28 17:44:19 +01:00
Scott Lahteine
092e949b58 Merge pull request #5169 from thinkyhead/rc_core_inverted
Support for COREYX, COREZX, COREZY
2016-11-28 02:26:41 -06:00
Scott Lahteine
e9e4208ff1 Merge pull request #5274 from Sebastianv650/improve_smooth_moves
Improvement for ENSURE_SMOOTH_MOVES
2016-11-28 02:22:08 -06:00
Scott Lahteine
c7935bb0d2 Merge pull request #5299 from thinkyhead/rc_bed_correction_fade
Add a fade factor for mesh leveling
2016-11-28 02:07:51 -06:00
Scott Lahteine
a69b1ee691 Merge pull request #5313 from thinkyhead/rc_fix_menu_actions
Keep drawing menu unless screen changes
2016-11-28 02:01:39 -06:00
Scott Lahteine
32ee3acf86 Merge pull request #5315 from thinkyhead/rc_fixup_material_menus
Refine material heatup menu items
2016-11-28 01:46:51 -06:00
Scott Lahteine
c70a06daf1 lcd_save_previous_menu => lcd_save_previous_screen 2016-11-28 01:46:18 -06:00
Scott Lahteine
13ea43cc8d Only exit menu handler when the screen changes 2016-11-28 01:46:18 -06:00
Scott Lahteine
f45b6a7762 Merge pull request #5314 from thinkyhead/case_light_menu_fix
Fix and optimize case-light code
2016-11-28 01:45:27 -06:00
Scott Lahteine
59fafb93b2 Merge pull request #5304 from AnHardt/pixel-shifting
MENU_HOLLOW_FRAME for the menu screens
2016-11-28 01:41:47 -06:00
Scott Lahteine
0951d385ce Don't set heater temperature above its maximum 2016-11-28 01:37:24 -06:00
Scott Lahteine
c9193e856d Limit preheat parameters based on all nozzles 2016-11-28 01:37:24 -06:00
Scott Lahteine
bb4529f7d2 PLA / ABS => Material 1 / 2 2016-11-28 01:37:24 -06:00
Scott Lahteine
61437d988a Fix and optimize case-light code 2016-11-28 01:34:52 -06:00
AnHardt
7a9fa78822 MENU_HOLLOW_FRAME for the menu screens
MENU_HOLLOW_FRAME for the menu screens and
some pixel shifting to optimize the look with tall fonts. (cn)
2016-11-27 22:59:05 +01:00
Scott Lahteine
20b0889602 Merge pull request #5303 from AnHardt/reduce-sripes
Not more then 4 stripes for u8g-devices
2016-11-26 18:47:43 -06:00
AnHardt
24ca1a6289 Not more then 4 stripes for u8g-devices
To optimise speed.
Costs well invested 128Byte of RAM.
2016-11-26 19:08:33 +01:00
Scott Lahteine
668e737893 Merge pull request #5288 from thinkyhead/rc_selective_rendering
Optimize graphical display with selective rendering
2016-11-26 06:54:41 -06:00
Scott Lahteine
aee71c543e Minor formatting in language.h 2016-11-26 06:53:52 -06:00
Scott Lahteine
05d8d189f6 Adjust spacing in utf_mapper.h 2016-11-26 06:53:52 -06:00
Scott Lahteine
5460a529da Add option DOGM_SPI_DELAY_US 2016-11-26 06:53:52 -06:00
Scott Lahteine
71842b6a17 Apply const to LCD arguments and locals 2016-11-26 06:53:52 -06:00
Scott Lahteine
b1abd7edef Optimize graphical display with selective rendering 2016-11-26 06:53:52 -06:00
Scott Lahteine
23935dd23a Merge pull request #5301 from AnHardt/fix-USE_BIG_EDIT_FONT
Fix USE_BIG_EDIT_FONT
2016-11-26 06:53:21 -06:00
AnHardt
b91fab2d7d Fix USE_BIG_EDIT_FONT 2016-11-26 13:50:25 +01:00
Scott Lahteine
4cd73e183d Hide hidden files and folders 2016-11-26 06:26:28 -06:00
Scott Lahteine
f6f77d34a1 Add a fade factor for mesh leveling 2016-11-26 03:41:26 -06:00
Scott Lahteine
679d37f83f Merge pull request #5298 from AnHardt/fonts-unterlaengen
Change font decent to -1 for tr and gr
2016-11-25 20:01:11 -06:00
AnHardt
75fdcc14b7 Activate font and mapper for el-gr 2016-11-26 02:30:37 +01:00
AnHardt
a0004e7cd3 Change font decent to -1 for tt and gr
For speeding up font drawing unify font decent.
Tr and Gr have ben the only fonts with a font decent of -2.
Sorry for some, a bit compressd, but hopefully still readeble symbols.
2016-11-26 02:29:23 +01:00
Scott Lahteine
307f263f89 Merge pull request #5292 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-11-25 16:56:49 -06:00
Scott Lahteine
9d177c93a2 Merge pull request #5291 from esenapaj/Follow-up-the-PR-#5255
Follow-up the PR #5255 (Case light menu (3rd attempt))
2016-11-25 16:56:15 -06:00
esenapaj
7070143042 Update Japanese translation
・Add new translation
2016-11-24 21:10:40 +09:00
esenapaj
ef97645002 Follow-up the PR #5255 (Case light menu (3rd attempt)) 2016-11-24 19:42:05 +09:00
Scott Lahteine
2a9b3376a9 Merge pull request #5289 from thinkyhead/rc_which_menu_actions
Drop "static" keyword in ultralcd.cpp function declarations
2016-11-23 23:04:05 -06:00
Scott Lahteine
b97dafe4b8 Drop "static" keyword in ultralcd.cpp function declarations 2016-11-23 20:43:01 -06:00
Scott Lahteine
2e966f8e5b Patch Capabilities Report for "PROGRESS" 2016-11-23 19:31:46 -06:00
Scott Lahteine
f60321d3e3 Merge pull request #5284 from thinkyhead/rc_turkish_update
Turkish update (squashed)
2016-11-23 14:57:52 -06:00
Mehmet Sutas
a26668b10c Add UTF8 Turkish Translation 2016-11-23 14:19:16 -06:00
Mehmet Sutas
61aa796307 Added Human Readable Comments 2016-11-23 14:19:16 -06:00
Mehmet Sutas
6fb9c6fe07 Follow-up for #5167 Turkish Language
Add check for Turkish Font before setting better font for graphic displays
2016-11-23 14:19:15 -06:00
Scott Lahteine
d891324830 Merge pull request #5258 from mosh1/mbl_speed_fix
Fix z feedrate value when doing mesh bed leveling. probe feedrate use…
2016-11-23 14:15:01 -06:00
Scott Lahteine
7f8133a51f Merge pull request #5255 from Kaibob2/CaseLightMenu
Case light menu (3rd attempt)
2016-11-23 13:46:33 -06:00
Kai
e9b42f4f47 Update language_de.h 2016-11-23 19:29:19 +01:00
Kai
0c341f0c50 Added Menu entry for Case light 2016-11-23 19:29:15 +01:00
Scott Lahteine
3bc2273ac9 Comment M540 2016-11-21 18:08:00 -06:00
Scott Lahteine
14b74181f5 Merge pull request #5179 from thinkyhead/rc_TMC2130
TMC2130 "Silent StepStick" support
2016-11-21 14:10:52 -06:00
Scott Lahteine
bb2114a060 Merge pull request #5264 from thinkyhead/rc_delta_safe_zone
Add an option for delta to home to the top
2016-11-21 13:56:44 -06:00
Scott Lahteine
38466b1d2f Merge pull request #5271 from esenapaj/Fix-for-the-PR-#5267
Fix for thePR #5267 (Introduce a +1234.56 format for over 999 steps/mm)
2016-11-21 13:55:56 -06:00
Scott Lahteine
9b96a4a53b Merge pull request #5246 from thinkyhead/rc_some_cleanup
Minor stepper cleanup
2016-11-21 13:55:25 -06:00
Sebastianv650
8190483eeb Improvement for ENSURE_SMOOTH_MOVES
Instead of waiting for a single long block, compare the complete block
buffer runtime for the long_move() check.
2016-11-21 17:58:24 +01:00
esenapaj
da67037550 Fix for thePR #5267 (Introduce a +1234.56 format for over 999 steps/mm)
・Fix memory leak
2016-11-21 22:31:01 +09:00
Scott Lahteine
0f891e848b Merge pull request #5268 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-11-21 03:18:36 -06:00
Scott Lahteine
c91325e904 Merge pull request #5267 from esenapaj/Introduce-a-+1234.56-format
Introduce a +1234.56 format for over 999 steps/mm
2016-11-21 03:17:52 -06:00
esenapaj
190a04c467 Update Japanese translation
・Change translation for 16 width LCD
2016-11-21 17:51:43 +09:00
esenapaj
7b836a4000 Introduce a +1234.56 format for over 999 steps/mm 2016-11-21 17:45:07 +09:00
Scott Lahteine
76f47aebb6 Travis test TMC2130 options 2016-11-21 00:52:19 -06:00
Scott Lahteine
3e0376b45e Reorder M114 and M119 gcode cases 2016-11-21 00:52:19 -06:00
Scott Lahteine
644fac5d34 Reduce all stepper_indirection init code with macros 2016-11-21 00:52:18 -06:00
Scott Lahteine
4e4f37b6c2 Code formatting for TMC and L6470 config options 2016-11-21 00:52:18 -06:00
Scott Lahteine
127e21ae00 Extend M122 for all steppers 2016-11-21 00:52:18 -06:00
Scott Lahteine
bf5f5f44cc Make TMC2130 init code auto-configure
Simply apply enabled settings instead of requiring users to edit
stepper_indirection.cpp
2016-11-21 00:52:17 -06:00
Moritz
d67c1d825f Add TMC2130 support 2016-11-21 00:17:45 -06:00
Scott Lahteine
11effeee2c Add an option for delta to home to the top 2016-11-20 23:12:07 -06:00
Sebastianv650
50059690e0 Allow UART ISRs inside the stepper ISR
If the stepper ISR takes too long, chars are lost which leads to serial
communication errors like "Line number not +1" or "Wrong checksum". In
worst case, the printer can even do crazy moves.

With this changes, UART interrupts are handled inside the stepper ISR.
This way, no chars should be lost.
2016-11-20 13:09:12 +01:00
Scott Lahteine
8bf07684d2 Merge pull request #5256 from AnHardt/e-interrupts-2
Endstop interrupt refinement
2016-11-20 02:27:02 -06:00
Moshen Chan
29b174bfb9 Fix z feedrate value when doing mesh bed leveling. probe feedrate uses XY_PROBE_SPEED 2016-11-19 16:34:41 -08:00
AnHardt
88b38eafd8 Endstop interrupt refinement
At the start of a move, check if the endstops are already triggered.
The 'change' interrupts will not see a change if already triggered.
2016-11-19 13:30:49 +01:00
Scott Lahteine
79c8591192 Merge pull request #5253 from thinkyhead/rc_smooth_move_ex-lax
Ensure smooth print moves even with LCD enabled
2016-11-19 01:38:41 -06:00
Scott Lahteine
0215cacb30 Merge pull request #5247 from esenapaj/Re-follow-the-PR-#4634
Re-follow the PR #4634 (Set language display charset in language.h)
2016-11-19 01:32:40 -06:00
Scott Lahteine
2cc32d85a3 Adjust ENSURE_SMOOTH_MOVES coding style 2016-11-19 01:28:48 -06:00
Scott Lahteine
072541f286 Update ENSURE_SMOOTH_MOVES in all configs 2016-11-19 01:28:47 -06:00
Sebastianv650
de89dc9f04 Ensure smooth print moves even with LCD enabled
lcd_update can take so much time that the block buffer gets drained if
there are only short segments. This leads to jerky printer movements for
example in circles and a bad print quality.

This change implements a simple check: Only if the block currently
executed is long enough, run lcd_update.
This also means the printer will not show actual values on the LCD nor
will it respond to buttons pressed. A option that keeps the menu
accessible is also available.
Aditionaly, slow down if a block would be so fast that adding a new
block to the buffer would take more time. In this case, the buffer would
drain until it's empty in worst case.
2016-11-19 01:28:47 -06:00
Scott Lahteine
7b95918e84 Merge pull request #5251 from thinkyhead/rc_cmake_support
Added CMake support
2016-11-18 23:53:09 -06:00
Scott Lahteine
87b6b19256 Patch CASE_LIGHT typo 2016-11-18 23:49:12 -06:00
Scott Lahteine
0be6167f14 Merge pull request #5250 from CONSULitAS/RCBugFix_K8200_backinsync_2016-11-18
K8200: Example configuration back in sync
2016-11-18 22:49:18 -06:00
Scott Lahteine
de3eea920d Merge pull request #5252 from thinkyhead/rc_endstop_interrupt_followup
Endstop interrupts followup
2016-11-18 22:35:25 -06:00
Scott Lahteine
eb714ee873 Move dummy thermistor opts, fix redundant sensor comment 2016-11-18 22:24:48 -06:00
Scott Lahteine
7a99c6ce4f Reformat temp sensor listing 2016-11-18 22:24:47 -06:00
Scott Lahteine
181cdb3cfe Move GCode list above include lines 2016-11-18 22:24:46 -06:00
Scott Lahteine
25d0c167bd More detailed static_assert messages 2016-11-18 22:24:46 -06:00
Scott Lahteine
eb120e518c Followup to new endstop interrupts feature
- Fix typos, verbiage
- Fix naming of `setup_endstop_interrupts`
- Some formatting, indentation, spacing
2016-11-18 21:53:45 -06:00
Scott Lahteine
832fe284b4 Merge pull request #5184 from AnHardt/endstop_interrupts
Introduce endstop interrupts
2016-11-18 20:50:24 -06:00
tohara
f579ec2e7a Added CMake support 2016-11-18 20:18:34 -06:00
CONSULitAS
cbae44df64 K8200: Example configuration back in sync
Configuration.h: back in sync, new features configured
Configuration_adv.h: back in sync, new features configured
README.md: text updated
2016-11-18 22:55:02 +01:00
esenapaj
5db3738fe7 Re-follow the PR #4634 (Set language display charset in language.h) 2016-11-18 17:44:49 +09:00
Scott Lahteine
32247c1b80 Merge pull request #5244 from thinkyhead/rc_danish_nov_2016
Update to Danish language 10/11-2016
2016-11-18 01:29:25 -06:00
Scott Lahteine
6eb6f12c64 Patch up some language formatting 2016-11-18 01:16:58 -06:00
Bo Herrmannsen
8cffa60cc5 Update to Danish language 10/11-2016 2016-11-18 01:16:57 -06:00
Scott Lahteine
98600e1433 Minor stepper cleanup 2016-11-18 01:15:57 -06:00
Florian Heilmann
d08867986e Add autotemp capabilities to M104
This allows M104 to pass the F and B parameters to enable autotemp as well
2016-11-17 11:28:19 -06:00
Sebastianv650
c11b2bb777 Bugfix LIN_ADV
Advance has nothing todo with Z_AXIS, strange copy&paste error?
2016-11-17 11:28:19 -06:00
Scott Lahteine
ee0765e872 Merge pull request #5233 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-11-17 03:38:19 -06:00
Scott Lahteine
2330619da0 Merge pull request #5191 from petrzjunior/const
Replace const bool with #define for consistency
2016-11-17 03:37:32 -06:00
esenapaj
b278b7a395 Update Japanese translation
Only adjust spacing
2016-11-17 09:05:51 +09:00
Petr Zahradník junior
d7ce5d271b Replace const bool with #define for consistency 2016-11-16 18:55:21 +01:00
Scott Lahteine
d63230d73e Merge pull request #5192 from Kaibob2/patch-7
Printer Stats / Completed prints line doesn't fit in display (when german)
2016-11-16 00:16:36 -06:00
Scott Lahteine
548b45026d Merge pull request #5214 from Sebastianv650/RCBugFix_planner_opt
Save some cycle inside the planner
2016-11-16 00:06:55 -06:00
Scott Lahteine
5d23e52d75 Merge pull request #5228 from thinkyhead/rc_keep_last_mix
Fix DIRECT_MIXING_IN_G1 to preserve the previous mix
2016-11-15 19:12:01 -06:00
Scott Lahteine
db47aa983d Merge pull request #5226 from mtowara/RCBugFix
bump -std in Makefile to c++11
2016-11-15 16:13:32 -06:00
Scott Lahteine
99b0c1fe56 Fix DIRECT_MIXING_IN_G1 to preserve the previous mix 2016-11-15 16:12:26 -06:00
Scott Lahteine
a0aad8d686 Merge pull request #5224 from thinkyhead/rc_limit_G30_xy
Fix G30 with limits, print correct probe XY
2016-11-15 15:20:12 -06:00
Markus Towara
23a675f621 reduce binary size of .hex
still a few bytes bigger than with arduino but nothing major
2016-11-15 21:57:15 +01:00
Markus Towara
5b6e2cecf5 bump c/c++ standard to gnu11
needed for constexpr
2016-11-15 21:54:12 +01:00
Scott Lahteine
410657b050 Fix G30 with limits, print correct probe XY 2016-11-15 14:10:28 -06:00
AnHardt
f3eee02596 Introduce endstop interrupts
If ENDSTOP_INTERRUPTS_FEATURE is enabled this tries to set up interrupt routines
for all used endstop pins. If this worked without errors, `endstops.update()` is called
only if one of the endstops changed its state.

The new interrupt routines do not really check the endstops and react upon them. All what they
do, is to set a flag if it makes sense to call the endstop test we are used to.

This can be used on:
* ARM (DUE) based boards - all pins can raise interrupts,
* RAMPS - all 6 endstop pins plus some other on EXT-2 can raise interrupts,
* RAMPS based boards - as long the designers did not change the pins for the endstops or at least left enough,
* all boards, if there are enough pins that can raise interrupts, and you are willing/able to swap with pins dedicated to other purpose.
2016-11-15 12:07:41 +01:00
Sebastianv650
e3ffb58fbd Save some cycle inside the planner
planner.h:
fan speed is used to set integer variables, so no need for long.
Basicaly a byte should be enough for all the fan things, as it's 0-255?

planner.cpp:
Save some float multiplications.
We could squeeze out even more by defining feedrate_percentage,
saved_feedrate_percentage and flow_percentage as float instead of int.
Everytime they are used in the time-critical planner, they are casted to
float and multiplied by 0.01. Not done jet, as they are used in LCD menu
functions I don't know well enough.
2016-11-13 13:34:12 +01:00
Scott Lahteine
665b7f3893 Merge pull request #5212 from thinkyhead/rc_mixing_faster
Store mix factors as reciprocals and multiply
2016-11-12 18:47:11 -06:00
Scott Lahteine
60cc9342a4 Merge pull request #5188 from thinkyhead/rc_extended_host_support
Extended host support: M155 Auto temp report, M115 capabilities
2016-11-12 15:38:06 -06:00
Scott Lahteine
f663220e87 Store Mix factors as reciprocals and multiply 2016-11-12 15:19:18 -06:00
Scott Lahteine
ea3c08d249 Merge pull request #5186 from esenapaj/Follow-up-the-PR-#5167-etc
Follow up the PR #5167 (Add Turkish Language) again, etc
2016-11-12 13:11:54 -06:00
Scott Lahteine
c488378532 Merge pull request #5205 from Sebastianv650/RCBugFix_stepperpatch
Remove useless line from stepper ISR
2016-11-12 12:43:07 -06:00
Scott Lahteine
7972378828 Merge pull request #5209 from floyd871/RCBugFix
Megatronics 3.0 has no SD-Card detect
2016-11-12 12:42:02 -06:00
Michael Neumann
8bdf303da0 Update pins_MEGATRONICS_3.h 2016-11-12 12:26:07 +01:00
Michael Neumann
3890366c83 Update pins.h 2016-11-12 12:25:45 +01:00
Michael Neumann
c0d45ca7f2 Update boards.h 2016-11-12 12:24:47 +01:00
Sebastianv650
cdc18f8c22 Remove useless line from stepper ISR
The flag is already set inside planner.get_current_block(). Doing it
twice isn't making it better..
2016-11-11 19:35:03 +01:00
Kai
8e8b4398f3 Printer Stats / Completed prints line doesn't fit in display (when german) 2016-11-09 22:03:25 +01:00
Scott Lahteine
b31a07e261 Stateful M355 with separate P parameter 2016-11-09 03:28:18 -06:00
Scott Lahteine
c8d4cd35d8 Include more features in Travis testing 2016-11-09 02:32:59 -06:00
Scott Lahteine
3c9a838651 Extended capabilities report in M115 2016-11-09 02:32:58 -06:00
Scott Lahteine
68b866b5dd Add M155 - Auto-report temperature with interval 2016-11-09 02:32:58 -06:00
Scott Lahteine
68b46fb2c9 Allow send to i2c address 0 (broadcast) 2016-11-08 17:54:55 -06:00
Scott Lahteine
75bfde9945 M155=>M260, M156=>M261 2016-11-08 17:54:54 -06:00
esenapaj
2ae72b0491 Follow up the PR #5167 (Add Turkish Language) again, etc
・Update forgotten K8400\Dual-head\Configuration.h
・Adjust spacing
2016-11-09 06:31:21 +09:00
Scott Lahteine
06f2282f82 Merge pull request #5176 from thinkyhead/rc_filchange_feedback
Give instant feedback for filament change
2016-11-07 12:11:54 -06:00
Scott Lahteine
dcfd7c69e8 Merge pull request #5163 from nzinov/RCBugFix
Improve G30 probing command - add optional arguments
2016-11-07 11:37:13 -06:00
Scott Lahteine
e765eebfb0 Patch spacing in bilinear grid report 2016-11-07 04:08:25 -06:00
Scott Lahteine
7780052fb3 Give instant feedback for filament change 2016-11-07 03:48:16 -06:00
Scott Lahteine
de6f2ef2a3 Merge pull request #5171 from esenapaj/Follow-up-the-PR-#5167-etc
Follow up the PR #5167 (Add Turkish Language), etc
2016-11-07 00:05:44 -06:00
esenapaj
24e3f7abe7 Update Turkish translation
・Add new translation
2016-11-07 04:59:18 +09:00
esenapaj
be48792e9c Follow up the PR #5167 (Add Turkish Language), etc
・Remove all the #ifndef
・Follow the PR #4603 (Strip never-translated strings from language
files)
・Follow the PR #4634 (Set language display charset in language.h)
・Follow the PR #4936 (Put max_jerk vars in array, clean up jerk code)
・Adjust spacing
2016-11-06 23:59:02 +09:00
Scott Lahteine
1864b282c5 Implement reversed CORE options 2016-11-05 23:47:51 -05:00
Scott Lahteine
e3c8318504 Add reversed CORE options 2016-11-05 23:47:46 -05:00
Scott Lahteine
5aee8d892c Merge pull request #5167 from thinkyhead/rc_turkish_squashed
Add Turkish Language
2016-11-05 21:31:34 -05:00
Rigid3D
2327764980 Add Turkish Language 2016-11-05 21:06:16 -05:00
Nikolay Zinov
dea00bbcf1 improve G30 probing
Add optional parameters
X, Y for probe point
S sets stowing on and off
2016-11-05 13:22:45 +03:00
Scott Lahteine
1614c9d207 Merge pull request #5155 from thinkyhead/rc_core_babystepping
BABYSTEPPING-oriented cleanup
2016-11-03 23:46:04 -05:00
Scott Lahteine
00662b8635 Minor babystep cleanup patches 2016-11-03 23:31:45 -05:00
Scott Lahteine
cad792e702 Reduce code for invariant lcd_detected 2016-11-03 23:31:45 -05:00
Scott Lahteine
b23d255491 Move macros above Stepper::babystep 2016-11-03 23:31:45 -05:00
Scott Lahteine
cc57d46158 Fix set_position for CoreYZ 2016-11-03 23:31:45 -05:00
Scott Lahteine
0269347682 Merge pull request #5141 from thinkyhead/rc_old_slowdown_what
OLD_SLOWDOWN does nothing, so remove it
2016-11-03 23:30:43 -05:00
Scott Lahteine
e92e2b2446 Merge pull request #5144 from Sebastianv650/RCBugFix_LIN_ADV_wipe
Account for wipe moves
2016-11-03 23:19:25 -05:00
Scott Lahteine
28a039c0e1 Merge pull request #5154 from thinkyhead/rc_bilinear_splits
Don't define bilinear_line_to_destination on kinematic setups
2016-11-03 15:29:31 -05:00
Scott Lahteine
176aeafc19 Don't define bilinear_line_to_destination on kinematic setups 2016-11-03 14:10:07 -05:00
Sebastianv650
d448500643 Account for moves with negative E movements
Added a rule so that LIN_ADVANCE isn't used for moves with negative E movements (de_float will be negative in this cases).
I also added a more detailed comment to make it more clear what the if statement does.
2016-11-03 17:01:17 +01:00
Scott Lahteine
2185973e39 Merge pull request #5150 from thinkyhead/rc_bilinear_splits
Corrections to bilinear_line_to_destination
2016-11-03 04:54:39 -05:00
Scott Lahteine
236853df22 Corrections to bilinear_line_to_destination
- Allow more than 9x9 probe points
- Account for the probe starting position
2016-11-03 04:43:59 -05:00
Scott Lahteine
3b6a43f7ad Merge pull request #5148 from thinkyhead/rc_dual_tool_z_limit
Fix Z raise with DXC_AUTO_PARK_MODE
2016-11-02 21:52:44 -05:00
Scott Lahteine
0115e495fe Fix up Dual X switch blocks 2016-11-02 21:38:50 -05:00
Scott Lahteine
2495ab7af2 Make dual_x_carriage_mode an enumeration 2016-11-02 21:38:49 -05:00
Scott Lahteine
d6c36f5bb9 Fix Z raise with DXC_AUTO_PARK_MODE 2016-11-02 21:36:50 -05:00
Scott Lahteine
0c79553fc5 Cast int to AxisEnum for some accessors 2016-11-02 17:42:24 -05:00
Scott Lahteine
adbf1f7dca Add M355 to the GCodes list. 2016-11-02 16:43:52 -05:00
Scott Lahteine
63efc10599 Merge pull request #5134 from thinkyhead/rc_bilinear_split_lines
Split cartesian moves on grid boundaries with bilinear ABL
2016-11-02 16:14:55 -05:00
Scott Lahteine
12167bc8f3 OLD_SLOWDOWN does nothing, so remove it 2016-11-02 01:28:19 -05:00
Scott Lahteine
1ee0fdcad7 Merge pull request #5140 from esenapaj/Follow-up-the-PR-#5089
Follow-up the PR #5089 (Centralize click-handling in the LCD loop)
2016-11-02 01:13:56 -05:00
esenapaj
c8c1a28f6f Follow-up the PR #5089 (Centralize click-handling in the LCD loop)
bool feedback is no longer used
2016-11-02 08:36:02 +09:00
Scott Lahteine
b0be2e41ff Merge pull request #5136 from esenapaj/Follow-up-the-PR-#5133
Follow-up the PR  #5133 (M355 Case light)
2016-11-01 11:04:48 -05:00
esenapaj
c3a105186d Follow-up the PR #5133 (M355 Case light)
・Add CASE_LIGHT_PIN into pinsDebug.h
2016-11-02 00:31:50 +09:00
Scott Lahteine
ee5b8d6dc8 Split moves on grid boundaries with bilinear ABL on cartesian 2016-11-01 08:25:47 -05:00
Scott Lahteine
66744a6076 Merge pull request #5133 from thinkyhead/rc_M355_case_light
M355 Case light
2016-11-01 07:51:27 -05:00
Scott Lahteine
955d14acb0 Patch photo pin code style 2016-11-01 06:30:14 -05:00
Stanley
ab3f966f5f Case light G-code M355
implemented G-Code M355 into Marlin
2016-11-01 06:30:14 -05:00
Scott Lahteine
8b44413498 Merge pull request #5124 from Sebastianv650/RCBugFix_LIN_ADV-Patch
BugFix for incorrect E-speed calculation
2016-11-01 05:13:17 -05:00
Scott Lahteine
f418e82b15 Remove redundant definition of EN_C 2016-11-01 05:10:07 -05:00
Sebastianv650
f9bea7968f BugFix for incorrect E-speed calculation
The extrusion speed was wrong due to a not high enough precision of
esteps to XY steps, therefore now the target float values are used to
calculate the ratio between XY movement and extrusion speed.
The e_speed_multiplier8 was replaced by an absolute multiplier called
abs_adv_steps_multiplier8, therefore one multiplication and bitshift can
be saved inside the stepper ISR. Due to this, also extruder_advance_k is
better suited inside the planner and not the stepper files any more.
2016-11-01 08:08:47 +01:00
Scott Lahteine
9c108aea18 Merge pull request #5132 from thinkyhead/rc_fix_M43
Followup to #5118 - pins debugging cleanup
2016-11-01 02:05:21 -05:00
Bob-the-Kuhn
c20b4098be 2 bug fixes & some minor changes
see detailed  description in PR #5118
2016-11-01 01:29:41 -05:00
Scott Lahteine
fa6bf12697 Merge pull request #5118 from thinkyhead/rc_expanded_M43
Enhancements to M43 pins debugging
2016-10-31 08:29:53 -05:00
Scott Lahteine
3a107e280d Developer note in pins_MIGHTYBOARD_REVE.h 2016-10-31 08:22:39 -05:00
Scott Lahteine
85e307dcd8 No FAN0_PIN 2016-10-31 08:08:03 -05:00
Scott Lahteine
ff3a8ca0d1 Use NUM_DIGITAL_PINS instead of custom DIO_COUNT 2016-10-31 08:08:03 -05:00
Scott Lahteine
04a1fac029 Some cleanup to M43 2016-10-31 08:08:03 -05:00
Scott Lahteine
24f6612551 Reduce and optimize endstop_monitor code 2016-10-31 08:08:03 -05:00
Scott Lahteine
b4444e91ae Reduce code and build size of PWM_details 2016-10-31 08:08:02 -05:00
Scott Lahteine
dbe414ef03 Squash redundant code in PWM_status 2016-10-31 08:08:02 -05:00
Scott Lahteine
af26d22741 Clean up some spacing and semantics 2016-10-31 08:08:02 -05:00
Bob-the-Kuhn
81397d7a9a EXTRUDER_x_AUTO_FAN name change to Ex_AUTO_FAN
I stumbled across a name change that'll be used a lot so I'm updateing
the name list.
2016-10-31 08:08:02 -05:00
Bob-the-Kuhn
c7f1f0dae6 Add endstop monitor & make pins report pretty 2016-10-31 08:08:02 -05:00
Scott Lahteine
d567b426d5 Merge pull request #4894 from thinkyhead/rc_mightyboard_rev_e
Mightyboard Revision E preliminary support
2016-10-31 08:01:41 -05:00
Scott Lahteine
43df9ace4e Merge pull request #5110 from thinkyhead/rc_z2_min_allowed
Support Z2 min in M119 report
2016-10-31 07:59:45 -05:00
Scott Lahteine
8a4c51f313 Merge pull request #5115 from thinkyhead/rc_buffer_line_wait_later
Optimize buffer_line by calculating before wait-for-free-block
2016-10-30 16:46:18 -05:00
Scott Lahteine
23f05f8be7 Use bit-length types in block_t 2016-10-30 16:16:29 -05:00
Scott Lahteine
8dc7807d85 Add support for CoreYZ to planner.buffer_line 2016-10-30 16:16:28 -05:00
Scott Lahteine
1cf878fdb1 Calculate dm and e-steps earlier in planner 2016-10-30 16:16:28 -05:00
Scott Lahteine
75dbb71dd7 Replace block.busy with a block.flag bit 2016-10-30 16:16:28 -05:00
Scott Lahteine
c7f22f688f buffer_line can calculate while it's waiting 2016-10-29 17:08:42 -05:00
Scott Lahteine
3c3fe1a1ba Merge pull request #5089 from thinkyhead/rc_break_m1_fix
Centralize click-handling in the LCD loop
2016-10-29 16:07:08 -05:00
Scott Lahteine
f3720f4e81 const arguments to test_dual_z_endstops 2016-10-29 16:01:27 -05:00
Scott Lahteine
8cebd2a7db Arrange Z2 min before Z2 max 2016-10-29 01:54:19 -05:00
Scott Lahteine
accabf088a Add support for Z2 min endstop to M119 2016-10-29 01:54:02 -05:00
Scott Lahteine
396434a445 Fix compiler warning in M145 2016-10-28 20:57:36 -05:00
Scott Lahteine
8e787304c9 const float ref args in planner.h 2016-10-28 20:57:36 -05:00
Scott Lahteine
07bfc45df8 Adjust spacing in gcode_M149 2016-10-28 20:57:36 -05:00
Scott Lahteine
1a2310c494 Make LCD preheat vars an array to reduce code size 2016-10-28 20:57:36 -05:00
Scott Lahteine
1226ae1912 Some cleanup in ultralcd.h 2016-10-28 20:57:21 -05:00
Scott Lahteine
50ee749082 Centralize click-handling in the LCD loop 2016-10-28 20:57:21 -05:00
Scott Lahteine
47ad97c35e Merge pull request #5109 from thinkyhead/rc_eeprom_M218_tool_offset
Save hotend_offset array (M218) in EEPROM
2016-10-28 20:08:29 -05:00
Scott Lahteine
d095c7933b Merge pull request #5108 from MagoKimbra/Fix_M420
Fix Command M420
2016-10-28 19:23:40 -05:00
Scott Lahteine
bff6bbdb12 Indentation in configuration_store.cpp 2016-10-28 18:55:42 -05:00
Scott Lahteine
97115d56f9 Print error for M500 with disabled EEPROM 2016-10-28 18:53:48 -05:00
Scott Lahteine
67ab54185b Save hotend_offset array (M218) in EEPROM 2016-10-28 18:45:23 -05:00
MagoKimbra
dfcdbb437b Fix Command M420 2016-10-28 20:53:48 +02:00
Scott Lahteine
c34dbfb248 Merge pull request #5072 from thinkyhead/rc_preset_auto_fans
Add predefined AUTO_FAN_PINs to pins files
2016-10-27 17:12:11 -05:00
Scott Lahteine
1e00f5a4bd Merge pull request #5097 from thinkyhead/rc_fix_endstop_issue
Don't trigger endstops that are actually Z2 or probe
2016-10-27 08:32:48 -05:00
Scott Lahteine
9a23f73765 Don't trigger endstops that are actually Z2 or probe 2016-10-27 08:12:17 -05:00
Scott Lahteine
c07cc9e3f1 Revert changes made to z dual endstop test
#3631 broke z dual endstops. Solved by @Nocturnal42 in https://github.com/MarlinFirmware/Marlin/issues/5078#issuecomment-256572248
2016-10-27 07:41:39 -05:00
Scott Lahteine
c4c53856a4 Merge pull request #5094 from esenapaj/Fix-for-the-PR-#5088
Fix for the PR #5088 (Handle M108 in M1 also with ULTIPANEL)
2016-10-26 21:51:18 -05:00
Scott Lahteine
2e3110539b Merge pull request #5095 from thinkyhead/rc_fix_bilinear_math
Fix bilinear grid constraints
2016-10-26 21:48:19 -05:00
Scott Lahteine
4ec7ed554d Merge pull request #5093 from esenapaj/Follow-up-the-PR-#5087-etc
Follow-up the PR #5087 (Fixed SERVO pins on Azteeg X3), etc
2016-10-26 21:23:34 -05:00
esenapaj
d5a5042d23 Fix for the PR #5088 (Handle M108 in M1 also with ULTIPANEL) 2016-10-27 10:32:20 +09:00
Scott Lahteine
9cbedab91b Use DPM where possible 2016-10-26 18:38:32 -05:00
Scott Lahteine
ad38d91692 Sanity check that auto fan pins can do PWM 2016-10-26 18:38:32 -05:00
Scott Lahteine
95275eb9b3 Predefine auto fan pins in some pins files 2016-10-26 18:38:32 -05:00
Scott Lahteine
3f94b15cef Fix bilinear grid constraints
Followup to #5090
2016-10-26 18:11:26 -05:00
Scott Lahteine
d439fb95f7 Sanity check for the renamed options 2016-10-26 17:51:26 -05:00
Scott Lahteine
b6aa894893 Rename auto fan pins and add auto fan flags 2016-10-26 17:51:26 -05:00
Scott Lahteine
ada935de87 Allow TEMP_STAT_LEDS with only one LED defined 2016-10-26 17:51:26 -05:00
Scott Lahteine
4b056d8184 Fix warning in ultralcd.cpp 2016-10-26 17:51:26 -05:00
Scott Lahteine
9dfd029911 Fix bug in fastio.h _GET_TIMER 2016-10-26 17:51:25 -05:00
esenapaj
8b1d90e281 Follow-up the PR #5087 (Fixed SERVO pins on Azteeg X3), etc
・Add header
・Adjust spacing
2016-10-27 06:46:03 +09:00
Scott Lahteine
bfd3b3c604 Merge pull request #5087 from Fulg/azteeg-x3-pins
Fixed SERVO pins on Azteeg X3
2016-10-26 06:01:16 -05:00
Scott Lahteine
208d720614 Merge pull request #5082 from Fulg/RCBugFix
Only issue MAXTEMP when heating
2016-10-26 05:55:33 -05:00
Scott Lahteine
b5d9639dd0 Merge pull request #5090 from thinkyhead/rc_fix_bilinear_math
Fix for bilinear grid outside bounds
2016-10-26 05:45:17 -05:00
Scott Lahteine
f0d673561f Fix for bilinear grid outside bounds 2016-10-26 05:00:03 -05:00
Scott Lahteine
24bcea6c02 Merge pull request #5088 from thinkyhead/rc_break_m1_fix
Handle M108 in M1 also with ULTIPANEL
2016-10-26 00:44:01 -05:00
Scott Lahteine
1ba1ec0db9 Handle M108 in M1 also with ULTIPANEL 2016-10-25 23:25:47 -05:00
Scott Lahteine
7ad33422e3 Clear dir_t size, not pointer size 2016-10-25 22:59:40 -05:00
Benoit Miller
1c716034ec Fixed SERVO pins on Azteeg X3 2016-10-25 17:11:26 -04:00
Benoit Miller
2aa12d78dc Only issue MAXTEMP when heating 2016-10-24 17:09:29 -04:00
Scott Lahteine
3fcf915808 Fix uninitialized var in reset_acceleration_rates 2016-10-24 11:55:41 -05:00
Scott Lahteine
14f824c3de Merge pull request #5071 from esenapaj/Extend-measuring-range-of-thermocouple
Extend measuring range of thermocouple for MAX31855
2016-10-24 02:00:12 -05:00
Scott Lahteine
1097a50694 Merge pull request #5070 from gcormier/rcbugfix
Fix #4995 - M48/G29 on CoreXY maybe others?
2016-10-24 00:56:36 -05:00
Scott Lahteine
fed6cfc5f5 Merge pull request #5074 from Sebastianv650/Accel_calc_v2
Planner acceleration bugfix and speedup v2
2016-10-23 16:42:57 -05:00
Sebastianv650
c397b9d60a Planner acceleration bugfix and speedup v2
.) Use already existing inverse_millimeters instead of /
block->millimeters.
.) Prevent overflow during acceleration calculation by checking if float
is necessary. Idea modified from Sailfish.
.) Save two uint32_t or even float multiplications by checking if
step[AXIS] has steps and if max acceleration is lower than accel. If
not, there is no need to check this axis.
2016-10-23 12:47:46 +02:00
Scott Lahteine
aa99bd8d13 Merge pull request #5068 from esenapaj/Fix-for-PR-#5066
Fix for the PR #5066 (Updated french translation)
2016-10-23 02:56:36 -05:00
esenapaj
70e287ca8c Extend measuring range of thermocouple for MAX31855 2016-10-23 10:22:39 +09:00
Greg Cormier
f0aed9dac7 Fix #4995 - M48/G29 on CoreXY maybe others? 2016-10-22 20:45:13 -04:00
esenapaj
e50992694f Fix for the PR #5066 (Updated french translation)
MSG_INFO_PRINT_TIME is still being used
2016-10-23 06:09:56 +09:00
Scott Lahteine
483082387c Merge pull request #5022 from esenapaj/Fix-for-the-PR-#4553
Fix for the PR #4553 (Save bytes for custom chars (Hitachi LCD))
2016-10-22 13:54:09 -05:00
Scott Lahteine
8b967a9ff0 Merge pull request #5058 from thinkyhead/rc_reverse_arrow_buttons
Apply encoder reverse options to keypad arrows
2016-10-22 13:52:35 -05:00
esenapaj
523c7eaa6c Fix for the PR #4553 (Save bytes for custom chars (Hitachi LCD)) 2016-10-23 03:29:00 +09:00
Scott Lahteine
ca48a49fdb Merge pull request #5065 from petrzjunior/transl
[LANGUAGE] Update Czech (BLTOUCH and DAC strings)
2016-10-22 12:46:10 -05:00
Scott Lahteine
f0744fc815 Merge pull request #5066 from thinkyhead/rc_french_update
Updated french translation
2016-10-22 12:45:51 -05:00
Gege2B
88b7f6eb46 Updated french translation 2016-10-22 12:30:22 -05:00
Scott Lahteine
3544c3632f Merge pull request #5062 from thinkyhead/rc_warnings_fix
Warnings fixed redux
2016-10-22 12:21:36 -05:00
Petr Zahradník junior
8323d78ed7 Translated BLTOUCH and DAC strings 2016-10-22 19:12:21 +02:00
Scott Lahteine
e151f952a3 Apply encoder reverse options to keypad arrows 2016-10-22 11:51:33 -05:00
Scott Lahteine
cfb47929ca Merge pull request #5060 from thinkyhead/rc_fix_ugly_code
Reduce, clean up MINTEMP / MAXTEMP test code
2016-10-22 11:27:30 -05:00
Josef Pavlik
dca50737f5 fixed warning: ISO C++ forbids compound-literals 2016-10-22 11:23:16 -05:00
Josef Pavlik
0bd66807b2 fixed warning: extra ; 2016-10-22 11:12:29 -05:00
Josef Pavlik
d35dc407a8 fixed warning: ISO C99 requires rest arguments to be used 2016-10-22 11:12:29 -05:00
Josef Pavlik
c2b51af3ba fixed warning: ISO C does not permit named variadic macros 2016-10-22 11:12:29 -05:00
Scott Lahteine
0d3fc7dd89 Merge pull request #5059 from gcormier/fixbaby
Set defer delay back to false when exiting babystepping.
2016-10-22 10:59:17 -05:00
Scott Lahteine
f888597197 Reduce, clean up code for mintemp/maxtemp tests 2016-10-22 10:31:03 -05:00
Scott Lahteine
ad64723354 Move MAX_EXTRUDERS to pins.h 2016-10-22 10:07:51 -05:00
Scott Lahteine
5f5a55a0de Add a ZERO macro to clear arrays 2016-10-22 10:07:18 -05:00
Greg Cormier
0009725637 Set defer delay back to false when exiting babystepping. 2016-10-22 09:43:30 -04:00
Scott Lahteine
627f9d5285 Merge pull request #5056 from thinkyhead/rc_lin_adv_opt
LIN_ADVANCE optimizations
2016-10-22 07:06:39 -05:00
Scott Lahteine
0908329d96 Merge pull request #5057 from thinkyhead/rc_mbl_lcd_logical
Fix manual leveling coordinates
2016-10-22 06:31:02 -05:00
Scott Lahteine
14e60f0d3b Correct typo in configs
As pointed out by #5044
2016-10-22 05:56:32 -05:00
Scott Lahteine
1165e83263 MBL coordinates are logical 2016-10-22 05:55:44 -05:00
Scott Lahteine
dbfabb4c0a Merge pull request #5043 from Kaibob2/patch-5
Correct grammar and translation in language_de.h
2016-10-22 05:52:54 -05:00
Scott Lahteine
b19bba275f No LCD timeout during babystepping
As requested in #5031
2016-10-22 05:26:07 -05:00
Scott Lahteine
b9109b2875 Improve LIN_ADVANCE commentary (all configs) 2016-10-22 05:03:09 -05:00
Sebastianv650
9818d97587 Fix Z-hops during retract/prime lead to blobs
We don't want to have retract/prime movements done with LIN_ADVANCE, that's also true with simultaneously executed Z-hops.
2016-10-22 04:54:59 -05:00
Sebastianv650
599649e45d Add formula for LIN_ADVANCE_K
With this formula, a start value for K for further fine-calibration can be calculated.
2016-10-22 04:54:59 -05:00
Scott Lahteine
be7d245eff Merge pull request #5008 from thinkyhead/test_endstop_hits
Save some PROGMEM in MBL G28
2016-10-22 03:35:52 -05:00
Scott Lahteine
7c0e52256d Merge pull request #5053 from thinkyhead/rc_fix_baud_config
Patch BAUDRATE line in configs
2016-10-22 03:27:45 -05:00
Scott Lahteine
2783dcb4cc Save some RAM in MBL's G29 2016-10-22 02:52:56 -05:00
Scott Lahteine
4f5a8c05d5 Tweaks to endstops macros 2016-10-22 02:52:56 -05:00
Scott Lahteine
083d41a2c2 Remove redundant estep rate code from LIN_ADVANCE
As noted by https://github.com/MarlinFirmware/Marlin/pull/4971#issuecomment-252503295
2016-10-22 02:19:14 -05:00
Scott Lahteine
4f6bfabaad Patch BAUDRATE line in configs 2016-10-22 00:48:52 -05:00
Kai
2bfedb74d5 Correct grammar and translation in language_de.h
Made Filament change Text sound like correct german.
2016-10-19 14:56:46 +02:00
Roxy-3D
8ddd039e68 Merge pull request #5037 from esenapaj/Fix-for-the-commit-dc2cb84
Fix for the commit dc2cb84 (Revert acceleration limiting to avoid overflow)
2016-10-18 15:33:06 -05:00
esenapaj
1e1edeadd3 Fix for the commit dc2cb84 (Revert acceleration limiting to avoid overflow)
・Add forgotten '\'
2016-10-18 18:07:20 +09:00
Scott Lahteine
dc2cb8454c Revert acceleration limiting to avoid overflow 2016-10-17 17:08:41 -05:00
Scott Lahteine
6ae5cf17a9 Merge pull request #5033 from esenapaj/Fix-freezing-with-MAX31855
Fix freezing and MINTEMP Error with MAX31855 thermocouple
2016-10-17 16:22:20 -05:00
Scott Lahteine
f257c4bcae Merge pull request #5036 from thinkyhead/rc_dac_code_deps
Fix DAC current code
2016-10-17 16:19:00 -05:00
Scott Lahteine
b80cc0cbb5 Fix DAC current code 2016-10-17 15:17:57 -05:00
esenapaj
385bd8a4a3 Fix freezing and MINTEMP Error with MAX31855 thermocouple 2016-10-16 07:33:14 +09:00
Scott Lahteine
ca7275a67a Disable EXTRAPOLATE_FROM_EDGE by default 2016-10-14 14:44:28 -05:00
Scott Lahteine
0921c7da84 Merge pull request #4997 from thinkyhead/rc_jerk_from_mk2
Adapt Jerk / Speed code from Prusa MK2
2016-10-12 06:38:50 -05:00
Scott Lahteine
4d89652bc2 Apply minor optimizations to planner.cpp 2016-10-12 04:42:15 -05:00
Scott Lahteine
1092319b19 Adapt speed/jerk code based on Prusa MK2 branch 2016-10-12 04:42:14 -05:00
Scott Lahteine
37643fef63 Merge pull request #4972 from bgort/platformio-improvements
Move platformio directories out of source tree
2016-10-12 03:42:33 -05:00
Scott Lahteine
8e1cc9332a Replace block flag bools with flag bits
…and apply const to some method parameters
2016-10-10 23:17:49 -05:00
Scott Lahteine
d41f2bdbd8 Merge pull request #4991 from thinkyhead/rc_max31855_fix
Patches for Stepper DAC and MAX31855
2016-10-10 20:12:06 -05:00
Scott Lahteine
d2da14459f Merge pull request #4993 from thinkyhead/rc_planner_deps
Sort out some header dependencies
2016-10-10 20:11:27 -05:00
Scott Lahteine
e7cf566fc5 Do kinematic segments with buffer_line_kinematic
This breaks the raw option, but in the future perhaps all planner moves
will be sent in raw form instead of logical.
2016-10-10 17:14:03 -05:00
Scott Lahteine
a10e81dc2a Minor cleanup of set_bed_leveling_enabled 2016-10-10 17:14:03 -05:00
Scott Lahteine
029824bc49 Patch ADJUST_DELTA macro for SCARA 2016-10-10 17:14:03 -05:00
Scott Lahteine
5ce5a9c822 Marlin: planner.h tweak 2016-10-10 17:14:03 -05:00
Scott Lahteine
d963020532 Sort out some header dependencies 2016-10-10 17:14:03 -05:00
Scott Lahteine
e17f9b8b99 DAC patches
As suggested by #4985
2016-10-10 14:08:04 -05:00
Scott Lahteine
2cb5df8a56 Merge pull request #4984 from esenapaj/Small-fix-for-PR-#4980
Small fix for the PR #4980 (LIN_ADVANCE bug fix and optimization)
2016-10-10 13:30:47 -05:00
Scott Lahteine
b6221df3f3 Merge pull request #4983 from MarlinFirmware/revert-4933-rc_drop_pid_func_range
Revert "Removal of PID functional range"
2016-10-10 13:29:54 -05:00
Scott Lahteine
a07033a6c1 Merge pull request #4974 from esenapaj/Follow-up-the-PR-#4955
Fix and follow-up the PR #4955 (PINS_DEBUGGING and M43: Read pin states), etc
2016-10-10 13:27:52 -05:00
Scott Lahteine
f8199b2cc1 Merge pull request #4982 from thinkyhead/rc_abl_bugfix
Fix planner with kinematics, delta ABL
2016-10-10 13:24:22 -05:00
esenapaj
f41c60d4a4 Follow-up the PR #4955, etc
・More ANALOG NUMBERING to Analog Input
・Add comment header to all the section of all the pins files

・Sort sections as follows:
1. Some special definitions (USBCON, LARGE_FLASH, etc)
2. Servos
3. Limit Switches
4. Z Probe
5. Steppers
6. Temperature Sensors
7. Heaters / Fans
8. Misc. Functions
9. LCD / Controller

・Move MAX6675_SS into "Temperature Sensors" section
・Adjust spacing
2016-10-10 14:22:43 +09:00
esenapaj
00456b0cb3 Fix compilation errors 2016-10-10 14:22:43 +09:00
esenapaj
cfb5c24bc9 Small fix for the PR #4980 (LIN_ADVANCE bug fix and optimization)
・Fix a comment about timer
2016-10-10 07:48:42 +09:00
Scott Lahteine
149b8d9e4b Handle MAX31855 error conditions 2016-10-09 17:12:50 -05:00
Scott Lahteine
f4ec265363 Fix a typo 2016-10-09 16:45:29 -05:00
Scott Lahteine
4ec2d459e6 Fix mcp4728_setVref_all as followup to #4967 2016-10-09 16:45:00 -05:00
Scott Lahteine
1e551c0688 Revert "Squashed - Removal of PID functional range" 2016-10-09 16:27:45 -05:00
Scott Lahteine
4037df82b0 Merge pull request #4981 from esenapaj/Update-Japanese-language
Update Japanese translation, etc
2016-10-09 16:11:53 -05:00
Scott Lahteine
e4e290d957 Make EXTRUDER_RUNOUT_PREVENT kinematic compatible 2016-10-09 15:58:33 -05:00
Scott Lahteine
847429eff4 Make tool_change kinematic compatible 2016-10-09 15:58:32 -05:00
Scott Lahteine
a4a7ca10ca Make USE_DELTA_IK_INTERPOLATION compatible with ABL 2016-10-09 15:58:32 -05:00
Scott Lahteine
c5cac486f5 Use a, b, c instead of lx, ly, lz 2016-10-09 14:34:24 -05:00
Scott Lahteine
bbeaca5839 Merge pull request #4980 from thinkyhead/rc_lin_update
LIN_ADVANCE bug fix and optimization
2016-10-09 14:29:09 -05:00
Josef Pavlik
f8c2473a71 Improve planner kinematics, fix delta ABL 2016-10-09 13:32:46 -05:00
Scott Lahteine
48761f2021 Patch delta endstop adjustment config 2016-10-09 13:32:45 -05:00
Josef Pavlik
28d41b48e3 delta endstop adjustment configurable 2016-10-09 13:09:34 -05:00
Scott Lahteine
ff6b23cb0f Fix an issue with shifted LCD lines 2016-10-09 13:00:00 -05:00
Scott Lahteine
e4d2662d81 Use some macros in M48 2016-10-09 12:21:05 -05:00
Scott Lahteine
3752d9aca8 Fix timer comments 2016-10-09 12:11:00 -05:00
Sebastianv650
a448cedbc5 LIN_ADVANCE bug fix and optimization
.) long to int: Extruder stalls at 10kHz / 20kHz step limits with long.
.) Take the delta_adv_steps calculation out of the step_loops loop. Wasted calculation performance if done inside.
.) >> 2 replaced by 3: Is divide by 8. Reason: Timer 0 runs at 16/8=2MHz, Timer 1 at 16/64=0.25MHz. ==> 2/0.25=8.
2016-10-09 11:55:02 -05:00
esenapaj
b27080c1dd Update Japanese translation
・Add new translation
2016-10-10 01:52:51 +09:00
esenapaj
0780146034 Move DAC section from inside of the changing filament section 2016-10-10 01:17:46 +09:00
Scott Lahteine
fc93796e42 Merge pull request #4967 from thinkyhead/rc_dac_menu
Revised DAC Drive Strength Menu
2016-10-09 00:52:48 -05:00
Brian
9c0404eae4 Move platformio directories out of source tree 2016-10-08 13:45:26 -04:00
Scott Lahteine
a1b50f1102 Cleanup of code style 2016-10-07 15:57:24 -05:00
jaysonkelly
13c9dcc600 Add LCD menu for DAC 2016-10-07 15:13:03 -05:00
Scott Lahteine
00261cbfcb Merge pull request #4933 from thinkyhead/rc_drop_pid_func_range
Squashed - Removal of PID functional range
2016-10-07 15:07:55 -05:00
Scott Lahteine
ee01def16d Merge pull request #4955 from thinkyhead/rc_debug_pins
PINS_DEBUGGING and M43: Read pin states
2016-10-07 14:47:34 -05:00
Scott Lahteine
a0df34fd4c Add PINS_DEBUGGING advanced config option 2016-10-07 14:20:13 -05:00
Scott Lahteine
e21bab5243 PINS_DEBUGGING and M43 Read Pins 2016-10-07 14:11:48 -05:00
Scott Lahteine
3c97fa6e29 Merge pull request #4963 from esenapaj/Fix-for-advance-algorithm
Move routine of direction signal of ADVANCE and LIN_ADVANCE from Stepper::isr() to Stepper::advance_isr()
2016-10-07 00:33:42 -05:00
Scott Lahteine
48e63c4730 Comment some globals 2016-10-06 22:06:33 -05:00
Scott Lahteine
9a6c66602f Fix formatting of extrapolate debug output 2016-10-06 17:04:22 -05:00
Scott Lahteine
cd77eb5c40 Clear grid for bilinear G29 2016-10-06 17:00:53 -05:00
Scott Lahteine
53a0856f5c Print Y as int in print_bed_level 2016-10-06 16:46:54 -05:00
esenapaj
f8df88f271 Move routine of direction signal of ADVANCE and LIN_ADVANCE from Stepper::isr() to Stepper::advance_isr() 2016-10-07 02:01:29 +09:00
Roxy-3D
30fee51e86 Merge pull request #4958 from bgort/m48_improvements
Improve M48 output; Add min, max, range, etc.
2016-10-06 10:02:22 -05:00
Brian
357854a7ef tweak variables; 2016-10-05 19:49:05 -04:00
Brian
48cf19151a Improve M48 output; Add min, max, range, etc. 2016-10-05 16:09:39 -04:00
Scott Lahteine
c63cb45268 Fix thermal runaway timeout 2016-10-05 08:42:39 -05:00
Scott Lahteine
e6164d254d Clean up GCode command short comments 2016-10-05 06:13:30 -05:00
Scott Lahteine
47bd142b29 Should marlinAnalogInputToDigitalPin use analogInputToDigitalPin? 2016-10-05 06:13:30 -05:00
Scott Lahteine
bd8520e61d Label analog pins in a similar way
Some other pins formatting also
2016-10-05 06:13:30 -05:00
Scott Lahteine
0c0deb5194 Common pin_is_protected function 2016-10-05 04:41:27 -05:00
Scott Lahteine
49d77720d5 More support for 4th extruder or heater 2016-10-05 04:40:22 -05:00
Scott Lahteine
9dd56e61bd Merge pull request #4954 from thinkyhead/rc_more_debug_homing
Fix buzzer when both i2c and beeper pin are set
2016-10-05 03:39:47 -05:00
Scott Lahteine
46839c222a Comment and clean up some vars 2016-10-04 23:40:45 -05:00
Scott Lahteine
8910bb7c97 Fix buzzer conditional compile 2016-10-04 21:38:41 -05:00
Scott Lahteine
de7e798e6f Replace single-char S_ECHOs with S_CHAR 2016-10-04 21:38:41 -05:00
Scott Lahteine
0e83f34174 Tweak debugging of probe_pt 2016-10-04 21:38:00 -05:00
Scott Lahteine
cc02f6edf8 Merge pull request #4943 from esenapaj/Small-update-of-language_kana_h
Small update of language_kana.h
2016-10-04 03:21:57 -05:00
Scott Lahteine
ca26011e3c Merge pull request #4941 from MagoKimbra/rc_fix_M205
Add note for M205
2016-10-04 03:21:20 -05:00
Scott Lahteine
9485aa8f13 Include negative Z probe offset in clearance move 2016-10-03 16:18:04 -05:00
Scott Lahteine
5c1eb595e6 Fix for G2/G3 negative radius
As suggested in #4940
2016-10-03 14:48:44 -05:00
esenapaj
f09ae96f28 Small update of language_kana.h 2016-10-03 23:41:39 +09:00
MagoKimbra
7b37539fe7 Add note for M205 2016-10-03 08:54:15 +02:00
Scott Lahteine
d5f598cd82 Tweak probe debug, add newline 2016-10-02 17:35:40 -05:00
Scott Lahteine
c592ccb6f5 Patch max_jerk[Z] menu item 2016-10-02 10:12:47 -05:00
Scott Lahteine
d80a79eb77 Use right-shift instead of / 2, why not? 2016-10-02 07:01:40 -05:00
Rerouter
02fe9cf558 Removal of functional range constraint
Also lined up the >> 1 and / 2 mentioned earlier in the unconstrained I term issue,
2016-10-02 07:01:40 -05:00
Rerouter
5f5d87cad3 Update Configuration.h 2016-10-02 07:01:40 -05:00
Scott Lahteine
6abfc96165 Merge pull request #4936 from thinkyhead/rc_more_debug_homing
Put max_jerk vars in array, clean up jerk code
2016-10-02 06:54:54 -05:00
Scott Lahteine
761593b74b Cleanup some vars, use of min/max 2016-10-02 06:34:56 -05:00
Scott Lahteine
d19cfcfc1d max_jerk array, DEFAULT_XYJERK => DEFAULT_[XY]JERK 2016-10-02 06:34:56 -05:00
Scott Lahteine
911f7e436c Merge pull request #4934 from thinkyhead/rc_more_debug_homing
More detailed debugging of G28 delta
2016-10-02 03:17:58 -05:00
Scott Lahteine
e7dc174f30 More detailed debugging of G28 delta 2016-10-02 02:18:57 -05:00
Scott Lahteine
473f4a17a8 Merge pull request #4914 from Rerouter/PID-Unconstrained-Itemp
Pid unconstrained itemp
2016-10-01 06:58:07 -05:00
Scott Lahteine
bad8899ebc Merge pull request #4900 from thinkyhead/rc_g38_changes
Cleanup of G38.2 / G38.3
2016-10-01 06:57:17 -05:00
Scott Lahteine
73ce3a61c7 Cleanup, comment zigzag 2016-10-01 05:21:52 -05:00
Scott Lahteine
0d538f3db6 Add to all configurations 2016-10-01 05:00:53 -05:00
Scott Lahteine
919fe3e4b8 Rename feature to G38_PROBE_TARGET 2016-10-01 05:00:53 -05:00
Scott Lahteine
a2864ab7fe Patched up, cleaned up 2016-10-01 05:00:53 -05:00
Bob-the-Kuhn
2911aa7ffa code changes to implement G38 commands
1) modified 3 code files
Marlin.h
Marlin_main.cpp
endstops.cpp

2) modified config files so I could test on my machine

Testing was done on an AzteegX3pro based machine.

The probe was hooked to the Z_MIN endstop.

My controller doesn't have a dedicated Z_PROBE input so I couldn't test
that functionality.

Verified that a large file (without any G38 commands) executed the same
before and after the changes.

Verified that the head moves as expected when G38.2 and G38.3 commands
are issued. Single & multiple axis moves were tested along with + and -
directions.

Code was added to the main ISR. In normal operation only one extra IF
statement is evaluated. I didn't notice any performance degradation
because of the added code.

The G38 commands are expected to be issued manually by the operator
during machine setup. The G38 commands wait until the machine is idle
before proceeding. That way the other commands are minimally impacted
by the extra ISR overhead when a G38 command is in the queue.

The G38 commands are very similar to the G28 commands except 1) only the
Z_PROBE is used and movement can be in the + or - direction.

See issue 4677 for a discussion on adding G38 commands to Marlin.
Feature request: add ability to use G38.2 command (CNC)
MarlinFirmware/Marlin#4677
2016-10-01 05:00:53 -05:00
Scott Lahteine
74d048e77e Merge pull request #4927 from thinkyhead/rc_bltouch_noraise
Don't check Z_MAX on raise when the probe pwns the pin
2016-10-01 04:52:56 -05:00
Scott Lahteine
4afa293289 Say "BLTOUCH" in machine info report 2016-09-30 17:13:27 -05:00
Scott Lahteine
ed7d2694fc Don't check Z_MAX on raise when the probe pwns the pin 2016-09-30 16:41:30 -05:00
Rerouter
638b809d90 Merge pull request #3 from thinkyhead/rc_unconstrain_pid
Apply changes to all configs
2016-09-30 17:41:32 +10:00
Scott Lahteine
3bbdd48a4d Merge pull request #4918 from thinkyhead/rc_abl_patchups
Fix up ABL - Add PROBE_Y_FIRST option. Arduino 1.6.8 required.
2016-09-29 15:29:01 -05:00
Scott Lahteine
dac7a75054 Merge pull request #4919 from thinkyhead/rc_k8400_stops
K8400 has 1xXY an 2xZ endstop plugs
2016-09-29 15:24:57 -05:00
Scott Lahteine
fffc9fefa8 Apply changes to all configs 2016-09-29 02:17:33 -05:00
Scott Lahteine
587cb6c283 K8400 has 1xXY an 2xZ endstop plugs 2016-09-29 02:07:22 -05:00
Scott Lahteine
d234bc160e Require Arduino 1.6.8 to compile 2016-09-29 02:00:27 -05:00
Scott Lahteine
2d2c9bdf92 Add PROBE_Y_FIRST option for probe order 2016-09-29 02:00:27 -05:00
Scott Lahteine
c8c57e59fc Patch the end of G29 to sync plan position 2016-09-29 02:00:27 -05:00
Scott Lahteine
81b8c9f8ec Add XY parameters to G29 for mesh dimensions 2016-09-29 02:00:27 -05:00
Scott Lahteine
56cf674150 M420 can now enable/disable ABL 2016-09-29 02:00:26 -05:00
Scott Lahteine
06790977c4 Use updated position methods 2016-09-29 01:31:05 -05:00
Scott Lahteine
e8f2604a6f Patch print_bed_level numbering 2016-09-29 01:31:05 -05:00
Scott Lahteine
d066610514 Patch up bilinear_z_offset 2016-09-29 01:31:05 -05:00
Scott Lahteine
850e38d013 G30 will only disable bed leveling 2016-09-29 01:31:04 -05:00
Scott Lahteine
510ef5d14a Standard function to turn bed leveling on/off 2016-09-29 01:27:37 -05:00
Scott Lahteine
ecf7cdde65 Augment planner/stepper getters/setters 2016-09-29 01:27:37 -05:00
Scott Lahteine
2febd8ec82 Double-touch debugging 2016-09-29 01:27:37 -05:00
Scott Lahteine
b331077c32 Use stepper.get_axis_position_degrees 2016-09-29 01:27:37 -05:00
Scott Lahteine
0d9efb24f3 Fix up bilinear_z_offset 2016-09-29 01:26:22 -05:00
jaysonkelly
3b3d282f8e Adjusted values for Rigidboard Configuration
Rigidboard differs a little in configuration from the PrinterBoardRevF we modeled the code after.
2016-09-28 14:14:04 -05:00
Scott Lahteine
850259bb25 Watch bed temp also for Control menu item 2016-09-28 14:14:04 -05:00
esenapaj
92c03a44a9 Fix the PR #4899 (ABL: Enable by type. Bilinear for all.) etc.
About Configuration.h:
・Fix the PR #4899 (ABL: Enable by type. Bilinear for all.)
Remove Duplicated contents

・Fix the PR #4305 (Custom boot screen feature improvement)
Revert from "during boot" to "during bootup" in all the example
Configuration.h

・Fix the PR #4207 (Clean up, simplify and generalize the Allen-key-probe
code.)
Resolve and relocate the duplicated definitions in Z_PROBE_ALLEN_KEY
section

・Follow-up the PR #4805 (Additional documentation of Configuration.h)
Add forgotten changes to all the example Configuration.h

Adjust spacing

About Configuration_adv.h:
Add missing description of SLOWDOWN for DELTA

Adjust spacing
2016-09-28 14:14:04 -05:00
Rerouter
50e5ee4de4 Update Configuration.h 2016-09-28 17:38:09 +10:00
Rerouter
1a2f1d4974 Update temperature.cpp 2016-09-28 17:36:53 +10:00
Rerouter
a765c98850 Removal of the constraints of the Iterm 2016-09-28 17:26:49 +10:00
Scott Lahteine
8b46eb3766 Fix bilinear interpolation 2016-09-27 03:18:49 -05:00
Scott Lahteine
5100bdac81 Improve Bilinear Grid
- Extrapolate properly for even numbered grid points
- Extrapolate using average, not median
- Improve bilinear grid report output
- Add debug output for bilinear extrapolation
- Add option to extrapolate from edge, not center
2016-09-27 00:03:19 -05:00
Scott Lahteine
a3e91ec65e Add 'Q' option to G29 when debug leveling is on 2016-09-27 00:03:19 -05:00
Scott Lahteine
1fceda4fb0 Add leveling type and details to machine_info 2016-09-27 00:03:19 -05:00
Scott Lahteine
e0e0166075 Fix auto bed leveling - turn on after successful G29 2016-09-27 00:03:19 -05:00
Scott Lahteine
f4b9052529 Merge pull request #4899 from thinkyhead/rc_nonlinear_grid
ABL: Enable by type. Bilinear for all.
2016-09-26 15:25:09 -05:00
Scott Lahteine
18e40de39c Adjust final Z after bilinear G29 2016-09-26 00:22:22 -05:00
Scott Lahteine
ea0dbee3c9 Enable ABL by type, support bilinear on cartesian 2016-09-25 23:35:37 -05:00
Scott Lahteine
9cebbabd05 Merge pull request #4893 from thinkyhead/rc_stat_led_check
Define status LED pins without condition
2016-09-25 18:50:47 -05:00
Scott Lahteine
fd64233182 Merge pull request #4895 from thinkyhead/rc_implemented_codes
Include requirements in "Implemented Codes"
2016-09-25 11:49:31 -05:00
Scott Lahteine
5fff8d148b Clean up digital pots and microsteps 2016-09-25 11:16:22 -05:00
Scott Lahteine
570676d265 Include requirements in "Implemented Codes" 2016-09-25 07:50:33 -05:00
Scott Lahteine
cb48292338 Use fastio for literal pins 2016-09-25 06:33:38 -05:00
Scott Lahteine
07703d2bd6 Use _PIN suffix on some pins 2016-09-25 06:33:38 -05:00
Scott Lahteine
203e519bf4 Sanity check for status LED pins 2016-09-25 06:33:38 -05:00
Scott Lahteine
ba43277429 Always define status LED pins 2016-09-25 06:33:37 -05:00
Scott Lahteine
ad691022d7 Fix up spacing in A4JP pins 2016-09-25 06:33:37 -05:00
Scott Lahteine
fba0b67f7d Rename status led pins 2016-09-25 06:33:37 -05:00
Scott Lahteine
9d86c07702 Clean up some fastio.h spacing 2016-09-25 06:33:37 -05:00
Scott Lahteine
ab84ed22ca No such thing as G6 and G7 pins 2016-09-25 05:28:22 -05:00
Scott Lahteine
c2f13be750 Mightyboard Revision E 2016-09-25 05:28:04 -05:00
Scott Lahteine
041d127cd3 Match bltouch test in do_homing_move with new code 2016-09-24 23:58:08 -05:00
Scott Lahteine
eb4fa8adf8 Merge pull request #4889 from thinkyhead/rc_tweaky_fix
Fix HEATERS_PARALLEL
2016-09-24 14:46:00 -05:00
Scott Lahteine
16461900c2 Fix for HEATERS_PARALLEL 2016-09-24 05:34:40 -05:00
Scott Lahteine
1583d37edd Comment on M851 case 2016-09-24 05:34:36 -05:00
Scott Lahteine
076f3a8284 unsigned char => uint8_t 2016-09-24 05:23:40 -05:00
Scott Lahteine
8935bed594 MIDDLE_DEAD_ZONE => MIDDLE_DEAD_ZONE_R 2016-09-24 05:18:36 -05:00
Scott Lahteine
6cf0952bf9 Merge pull request #4887 from thinkyhead/rc_autumn_fixups
Improve MINIMUM_STEPPER_PULSE
2016-09-24 03:23:42 -05:00
Scott Lahteine
8061f1fac9 Merge pull request #4888 from thinkyhead/fix_warnings_etc
Suppress warnings, fix nonlinear_z_offset
2016-09-24 03:22:49 -05:00
esenapaj
7bdc58a818 Suppress warnings, fix nonlinear_z_offset 2016-09-24 03:06:08 -05:00
Scott Lahteine
9ecea6f445 Merge pull request #4885 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-09-24 02:49:18 -05:00
Scott Lahteine
eabff30e75 Improve MINIMUM_STEPPER_PULSE 2016-09-24 02:23:43 -05:00
esenapaj
3ed8f8331c Update Japanese translation
・Add new translation
2016-09-24 09:24:38 +09:00
Scott Lahteine
da1644313d Merge pull request #4883 from esenapaj/Follow-up-the-PR-#4860
Follow-up the PR #4860 (Fix BLTOUCH string and SERVO_DELAY)
2016-09-23 16:39:37 -05:00
Scott Lahteine
903b8bb60c No need for auto_bed_leveling_was_enabled 2016-09-23 16:38:22 -05:00
esenapaj
ee60225c07 Follow-up the PR #4860 (Fix BLTOUCH string and SERVO_DELAY) 2016-09-24 06:18:27 +09:00
Scott Lahteine
d0796fc54c Merge pull request #4868 from thinkyhead/rc_autumn_fixups
Cleanups for the Autumn release
2016-09-23 16:11:37 -05:00
Scott Lahteine
0951bffcc0 Sanity check homing bumps 2016-09-23 15:39:02 -05:00
Scott Lahteine
a9a21db39f No homing bump if bump distance is 0 (or less) 2016-09-23 15:39:02 -05:00
Scott Lahteine
2b4da57ea7 Patch Z safe homing for probe Z homing 2016-09-23 15:39:02 -05:00
Scott Lahteine
c6dd539c84 Print error for M42 bad pin 2016-09-23 15:39:02 -05:00
Scott Lahteine
8b399610fb Skip raw moves to current position 2016-09-23 15:39:02 -05:00
Scott Lahteine
22ece0081e Pass array pointer to unapply_leveling 2016-09-23 15:39:01 -05:00
Scott Lahteine
cbc158eb62 Add a proper flag for ABL enabled 2016-09-23 15:39:01 -05:00
Scott Lahteine
666e944336 Init xProbe/yProbe for compiler 2016-09-23 15:39:01 -05:00
Scott Lahteine
2c52e6ecf4 Clean up G28 MBL code 2016-09-23 15:39:01 -05:00
Scott Lahteine
0bf1054bb2 Patch do_homing_move for SCARA 2016-09-23 15:39:00 -05:00
Scott Lahteine
6ad0da661c Report position in G92 2016-09-23 15:39:00 -05:00
Scott Lahteine
199a7b5dd5 Tweak SCARA debugging 2016-09-23 15:39:00 -05:00
Scott Lahteine
865ad25781 Fix prepare_kinematic_move_to precision 2016-09-23 15:39:00 -05:00
Scott Lahteine
85e607153b Improve kinematic optimization options 2016-09-23 03:03:15 -05:00
Scott Lahteine
2846531f0b const argument in do_homing_move 2016-09-23 03:03:15 -05:00
Scott Lahteine
cc639d7d9c Less indentation in Stepper::isr 2016-09-23 03:03:14 -05:00
Scott Lahteine
7dec8071b2 Always synchronize in Stepper::set_position 2016-09-23 03:03:14 -05:00
Scott Lahteine
c6142aa2a1 Minor cleanups in Marlin_main.cpp 2016-09-23 03:03:14 -05:00
Scott Lahteine
0427f3cc3b Use memcpy/memset in planner 2016-09-23 03:03:14 -05:00
Scott Lahteine
6b9bf8e8fe Add Planner::sync_from_steppers
Use to sync the planner after an interrupted move (when not overriding
the logical position).
2016-09-23 03:03:14 -05:00
Scott Lahteine
be11a8a938 Fix debug in Planner::buffer_line 2016-09-23 03:03:13 -05:00
Scott Lahteine
b211df818e Make movement functions more available 2016-09-23 03:03:13 -05:00
Scott Lahteine
6335acbf5c Patch bug in linear unapply_leveling 2016-09-23 03:03:13 -05:00
Scott Lahteine
1370d9a52b Merge pull request #4875 from thinkyhead/rc_bltouch_update
Use probe clearance for bump when homing Z with probe
2016-09-22 16:57:08 -05:00
Scott Lahteine
e8d5073a90 Use probe clearance for bump when homing Z with probe 2016-09-22 15:41:28 -05:00
Scott Lahteine
dbe41245f1 Merge pull request #4821 from thinkyhead/rc_revert_to_raises
Z Raise/Clearance rather than Height
2016-09-22 15:30:07 -05:00
Scott Lahteine
747a2257dd Only deploy/stow BLTOUCH on downward move 2016-09-22 15:26:19 -05:00
Scott Lahteine
e242946ac3 Patch G29 for linear leveling, reachable with probe 2016-09-22 15:26:19 -05:00
Scott Lahteine
b800eb0fed Add probe option to position_is_reachable 2016-09-22 15:26:19 -05:00
Scott Lahteine
fafafcf9d1 Use unapply_leveling in set_current_from_steppers_for_axis 2016-09-22 15:26:18 -05:00
Scott Lahteine
e69d1e2879 Homing/probing feedrate, comments 2016-09-22 15:26:18 -05:00
Scott Lahteine
7d72ed688c Revert motor_current_setting to constexpr
We should use `constexpr` wherever it makes sense, for its added benefits. See http://stackoverflow.com/questions/13346879/const-vs-constexpr-on-variables
2016-09-22 15:26:18 -05:00
Scott Lahteine
145d9005d1 Fix BLTOUCH string and SERVO_DELAY 2016-09-21 01:45:23 -05:00
Scott Lahteine
2b7cc27c37 Merge pull request #4840 from thinkyhead/rc_G2_G3_arc_r_method
Add support for G2/G3 with R parameter
2016-09-21 01:30:37 -05:00
Scott Lahteine
e0e10e0e45 Merge pull request #4859 from thinkyhead/rc_kinematic_and_scara
Kinematic and SCARA patches
2016-09-21 01:21:49 -05:00
Scott Lahteine
31f03c838a Only deploy/stow BLTouch for Z axis 2016-09-21 00:54:54 -05:00
Scott Lahteine
0c951436e4 Extend SCARA test, stress-test ABL_GRID_POINTS_* 2016-09-20 18:48:06 -05:00
Scott Lahteine
3913e04ac7 Add Delta kinematic optimization options 2016-09-20 18:48:06 -05:00
Scott Lahteine
8e31640229 Optimize prepare_kinematic_move_to 2016-09-20 18:48:06 -05:00
Scott Lahteine
fd9b8ae4d4 Use position_is_reachable in G29, M48 2016-09-20 18:48:06 -05:00
Scott Lahteine
7194e4434f SCARA support in position_is_reachable 2016-09-20 18:48:06 -05:00
Scott Lahteine
1c5f9821c4 SCARA support in homeaxis 2016-09-20 18:48:05 -05:00
Scott Lahteine
92b4459f6c Simpler G92 for SCARA 2016-09-20 18:48:05 -05:00
Scott Lahteine
46cc2e3f6a Fix get_cartesian_from_steppers 2016-09-20 18:31:36 -05:00
Scott Lahteine
435c3ed404 Patch SCARA_move_to_cal for coordinate space 2016-09-20 18:31:36 -05:00
Scott Lahteine
5efb12e889 Simpler report_current_position for SCARA 2016-09-20 18:31:36 -05:00
Scott Lahteine
83fc5e1540 No line_to_* functions with IS_KINEMATIC 2016-09-20 18:31:36 -05:00
Scott Lahteine
59d39d7655 G0 direct move for SCARA 2016-09-20 18:31:36 -05:00
Scott Lahteine
ad9d6870ed SCARA support in do_blocking_move_to 2016-09-20 18:31:36 -05:00
Scott Lahteine
8542ebcecd prepare_move_to_destination_raw => prepare_uninterpolated_move_to_destination 2016-09-20 18:31:36 -05:00
Scott Lahteine
f900f97611 Update sw endstops in set_axis_is_at_home 2016-09-20 18:31:36 -05:00
Scott Lahteine
0d43cef1de M206 for MORGAN_SCARA 2016-09-20 18:31:36 -05:00
Scott Lahteine
e94cb7a380 MORGAN_SCARA kinematics 2016-09-20 18:31:36 -05:00
Scott Lahteine
890bade2fa Additions, mods to SCARA config 2016-09-20 18:31:36 -05:00
Scott Lahteine
01f1028510 Try on "CLEARANCE" for size 2016-09-20 18:29:49 -05:00
Scott Lahteine
0e7d638a7a Revert to Probe Raise rather than Probe Height 2016-09-20 18:29:49 -05:00
Scott Lahteine
82b0014f5e Merge pull request #4856 from thinkyhead/rc_bltouch_update
Fix and extend BLTouch support
2016-09-20 17:13:52 -05:00
Scott Lahteine
51e42a2d77 Adjust BLTouch probe behavior
Addressing #4855
- Have the pin deploy only immediately before probing
- Have the pin retract immediately after every probe
2016-09-20 16:20:36 -05:00
Scott Lahteine
13523cbf29 Fix and extend BLTouch support 2016-09-20 16:20:36 -05:00
Scott Lahteine
5cbed13f41 'constexpr' => 'const' for PWM_MOTOR_CURRENT 2016-09-20 15:57:48 -05:00
Scott Lahteine
be3a8f4126 Merge pull request #4857 from thinkyhead/rc_fix_travis_u8glib
Arduino 1.6.10, direct download U8glib in Travis CI
2016-09-20 15:52:53 -05:00
Scott Lahteine
ed759626fe Arduino 1.6.10, direct download U8glib in Travis CI 2016-09-20 15:35:33 -05:00
Scott Lahteine
7ae351c92f Merge pull request #4842 from thinkyhead/rc_DISABLE_Z_MIN_PROBE_ENDSTOP_whassup
Drop DISABLE_Z_MIN_PROBE_ENDSTOP, clean up probe config
2016-09-20 12:16:51 -05:00
Scott Lahteine
ba94c89e21 Merge pull request #4852 from esenapaj/Fix-for-advance-extrusion-algorithms
Fix for advance extrusion algorithms
2016-09-20 11:33:14 -05:00
Scott Lahteine
e87ad155cc Merge pull request #4851 from thinkyhead/rc_linear_grid
Patch G29 for 3-point leveling
2016-09-20 11:29:59 -05:00
esenapaj
954563d603 Adjust spacing 2016-09-20 19:35:44 +09:00
esenapaj
7e9576dc5b Extend the e_steps[] from int to long for allowing more than 32,767 E steps
Probably needed for long straight lines when using high microstepping
2016-09-20 19:35:44 +09:00
esenapaj
b04ed8f9c3 Fix inverted stepper signal of ADVANCED and LIN_ADVANCED 2016-09-20 19:35:44 +09:00
esenapaj
8692748ecd Fix broken direction signal of ADVANCED and LIN_ADVANCED
Remove a setting proccess of E direction in advance_isr()
2016-09-20 19:35:44 +09:00
Scott Lahteine
e9ce42353e Patch G29 for 3-point leveling 2016-09-20 04:46:41 -05:00
Scott Lahteine
c2744d8a8b Add support for G2/G3 with R parameter 2016-09-19 00:35:09 -05:00
Scott Lahteine
e05af606a8 Clean up probe config options 2016-09-19 00:26:16 -05:00
Scott Lahteine
153e240cdd Probe conditionals to Conditionals_LCD.h 2016-09-19 00:25:53 -05:00
Scott Lahteine
ff38a3c3b1 Use SD Detect Pin 53 for 3DRAG, K8200, and K8400
See #4316
2016-09-18 23:46:09 -05:00
Scott Lahteine
9a9e9afcf8 Merge pull request #4839 from thinkyhead/rc_bltouch_servo_nr
Better BLTOUCH support
2016-09-18 23:42:16 -05:00
Scott Lahteine
f38a33a5d8 Add handling of BLTouch error state 2016-09-18 22:00:32 -05:00
Scott Lahteine
c4dcfa254e Allow override of Z_ENDSTOP_SERVO_NR with BLTOUCH 2016-09-18 22:00:32 -05:00
Scott Lahteine
7d9ebda478 Remove redundant servo probe sanity check 2016-09-18 21:46:18 -05:00
Scott Lahteine
f0beae7641 Fix stupid, stupid, stupid oversight in G29 update
Mea culpa!
2016-09-18 16:24:47 -05:00
Scott Lahteine
127d796420 Merge pull request #4837 from thinkyhead/rc_nonlinear_in_planner
Handle nonlinear bed-leveling in Planner
2016-09-18 15:31:51 -05:00
Scott Lahteine
77639672d7 Move NONLINEAR bed leveling to planner
This is in advance of moving non-linear bed leveling to the planner
class.
2016-09-18 13:50:38 -05:00
Scott Lahteine
9429c7db89 Use ABC indices in delta[] 2016-09-18 13:50:38 -05:00
Scott Lahteine
5f2f991192 Use 'logical' rather than 'target' or 'cartesian' 2016-09-18 13:50:38 -05:00
Scott Lahteine
40d3e854f6 Remove redundant extern delta[] 2016-09-18 13:39:47 -05:00
Scott Lahteine
2ebfbc4c8d Merge pull request #4836 from thinkyhead/rc_some_comments
Some comments, const args, debug output tweaks
2016-09-18 13:38:07 -05:00
Scott Lahteine
48fe2fdc9e Merge pull request #4835 from thinkyhead/rc_abl_non_square_grid
Allow non-square Auto Bed Leveling grid
2016-09-18 13:37:43 -05:00
Scott Lahteine
e5505e3b33 Allow non-square leveling grid 2016-09-18 13:11:20 -05:00
Scott Lahteine
2fc9ad6657 Use const ref args in probe_pt 2016-09-18 12:58:43 -05:00
Scott Lahteine
2c2688d7ad Adjust comments, spacing 2016-09-18 12:58:42 -05:00
Scott Lahteine
b9d19b0008 Tweak extrapolate_one_point 2016-09-18 12:58:42 -05:00
Scott Lahteine
3c0b591935 Fix nozzle position description 2016-09-18 12:58:42 -05:00
Scott Lahteine
18d8dd4c0f set_current_from_steppers_for_axis const arg 2016-09-18 12:58:42 -05:00
Scott Lahteine
edfaf1c582 Stepper::report_positions patch 2016-09-18 12:58:42 -05:00
Scott Lahteine
d1f4c3d73b Patch sync_plan_position comment 2016-09-18 12:58:41 -05:00
Scott Lahteine
0c25af30d4 Document homeaxis 2016-09-18 12:58:41 -05:00
Scott Lahteine
e7882e45e3 Document set_axis_is_at_home 2016-09-18 12:58:40 -05:00
Scott Lahteine
fef959c31a Merge pull request #4834 from thinkyhead/rc_code_bool
Standardize code_value_bool
2016-09-18 12:44:20 -05:00
Scott Lahteine
07ac9a1152 Merge pull request #4822 from blubbfish/patch-3
Tweak some german language strings
2016-09-18 11:38:22 -05:00
Scott Lahteine
661fe09ce7 Standardize code_value_bool 2016-09-18 11:32:32 -05:00
Scott Lahteine
20e5140e75 Merge pull request #4833 from thinkyhead/rc_no_scara_axis_scaling
Remove SCARA axis_scaling
2016-09-18 11:31:50 -05:00
Scott Lahteine
37258956d5 Merge pull request #4832 from thinkyhead/rc_fix_M0_M1
Enable M0/M1 with Emergency Parser
2016-09-18 11:31:36 -05:00
Scott Lahteine
a501f430eb Enable M0/M1 with Emergency Parser 2016-09-18 11:14:10 -05:00
Philip Schell
cd8b22b527 Tweak some german language strings
Change some string to get a better wording in german
2016-09-16 22:29:39 +02:00
Scott Lahteine
83a41c7ceb Remove SCARA axis_scaling 2016-09-16 15:21:18 -05:00
Scott Lahteine
d41eeb62af Merge pull request #4781 from thinkyhead/rc_final_z_correction
Use simplified Z correction in G29 when possible
2016-09-16 15:14:19 -05:00
Scott Lahteine
502150046c Merge pull request #4805 from thinkyhead/rc_config_adjustment
Additional documentation of Configuration.h
2016-09-16 15:13:20 -05:00
Scott Lahteine
a1812b55f6 Space out array values 2016-09-16 14:41:05 -05:00
Scott Lahteine
d4599fd8ed Comment patches to Configuration.h 2016-09-16 14:41:05 -05:00
Scott Lahteine
723e983073 Default EXTRUDE_MAXLENGTH to 200mm 2016-09-16 14:41:04 -05:00
Scott Lahteine
b08bd84f8e Merge pull request #4806 from blubbfish/patch-2
Update language_de.h
2016-09-16 14:39:20 -05:00
Scott Lahteine
939bf1057c Merge pull request #4820 from darrelhunt/RCBugFix
Fixing Pin Definition Files to Define USBCON
2016-09-16 14:33:38 -05:00
darrelhunt
7b8bfa4358 Update pins_TEENSYLU.h 2016-09-16 11:26:37 -07:00
darrelhunt
829c8592f2 Update pins_TEENSY2.h 2016-09-16 11:26:09 -07:00
darrelhunt
e0aee20327 Update pins_SAV_MKI.h 2016-09-16 11:25:42 -07:00
darrelhunt
88d3fc0bcf Update pins_PRINTRBOARD.h 2016-09-16 11:25:14 -07:00
darrelhunt
4277221abb Update pins_BRAINWAVE_PRO.h 2016-09-16 11:24:32 -07:00
darrelhunt
b8ecbe9116 Update pins_BRAINWAVE.h 2016-09-16 11:23:52 -07:00
darrelhunt
60f757077e Update pins_5DPRINT.h 2016-09-16 11:22:52 -07:00
Scott Lahteine
4ca837b6cf Merge pull request #4815 from tnw513/fix-italian
Added missing translation (Italian)
2016-09-15 19:08:28 -05:00
Silvio Didonna
ff2b2d5939 Added missing translations 2016-09-16 01:17:58 +02:00
Philip Schell
2b11c3274c Update language_de.h 2016-09-15 15:16:11 +02:00
Philip Schell
54e6d12382 Update language_de.h
@MarlinFirmware/language-team updated german languagefile to the latest english version
2016-09-14 14:17:21 +02:00
Scott Lahteine
57564ae576 Use last probe point to correct Z when possible 2016-09-14 02:03:43 -05:00
Scott Lahteine
e40646de42 Merge pull request #4803 from thinkyhead/rc_lcd_button_fix
Clear LCD button state, apply timer to all
2016-09-13 18:03:39 -05:00
Scott Lahteine
2fce217576 Merge pull request #4804 from thinkyhead/rc_fix_broken_G29
Fix some regressive typos in G29
2016-09-13 17:51:38 -05:00
Scott Lahteine
29f224594c Fix some regressive typos in G29 2016-09-13 17:31:02 -05:00
Scott Lahteine
5ecc7d9f25 Clear LCD button state, apply timer to all
Addressing #3007
2016-09-13 16:10:27 -05:00
Scott Lahteine
94d5cf8721 Merge pull request #4789 from thinkyhead/rc_better_leveling_etc
Various cleanups ahead of more…
2016-09-13 05:21:17 -05:00
Scott Lahteine
9b0931ef74 Apply fixed EXTRUDER_RUNOUT_PREVENT 2016-09-13 03:33:04 -05:00
Scott Lahteine
b1a60e8954 Reformat, rearrange, tweak, and document
- Add comments to several functions
- Add an option to use Fast SQRT for Delta IK
- Group related functions together
- Outdent some leveling-related functions
2016-09-13 03:33:04 -05:00
Scott Lahteine
61284cbd8c Various code style adjustments 2016-09-13 03:33:04 -05:00
Scott Lahteine
788a16fc46 Clean up serial out code 2016-09-13 03:33:03 -05:00
Scott Lahteine
0e38bea79d Shrink 3-point leveling code 2016-09-13 03:33:03 -05:00
Scott Lahteine
4f75ce6957 Unify reset_bed_level for linear/non-linear 2016-09-13 03:33:03 -05:00
Scott Lahteine
41d8149bce Sanity check for more than 1 controller 2016-09-13 03:33:02 -05:00
Scott Lahteine
40785ce8ac Use count method for kinematic sanity check 2016-09-13 03:33:02 -05:00
Scott Lahteine
3236762e07 Clean up sanity check for LCD_PROGRESS_BAR 2016-09-13 03:33:02 -05:00
Scott Lahteine
a9ed23225f bed_level => bed_level_grid 2016-09-13 03:33:02 -05:00
Scott Lahteine
82be65065c Fix up untilted_stepper_position and set_current_from_steppers_for_axis 2016-09-13 03:33:01 -05:00
Scott Lahteine
d65f5d816f Patch to fix kinematics 2016-09-13 03:33:01 -05:00
Scott Lahteine
e529c6407e Rename set_cartesian_from_steppers, cartesian_position 2016-09-13 03:33:01 -05:00
Scott Lahteine
c109399bf6 Fix planner leveling and rename arguments
Use lx, ly, lz for “logical” positions
2016-09-13 03:33:01 -05:00
Scott Lahteine
d4f21af6b3 sync_plan_position_delta => sync_plan_position_kinematic 2016-09-13 03:33:01 -05:00
Scott Lahteine
acd1b6e9c0 Rename delta_grid spacing for general nonlinear 2016-09-13 03:33:00 -05:00
Scott Lahteine
c5fa70809b Implement M0/M1 for EMERGENCY_PARSER 2016-09-13 03:33:00 -05:00
Scott Lahteine
786d1afb72 Add position_is_reachable, use in home_z_safely 2016-09-13 03:33:00 -05:00
Scott Lahteine
b4034915f8 Move z safe homing to its own function 2016-09-13 03:33:00 -05:00
Scott Lahteine
c84b14c77a Move delta homing to its own function 2016-09-13 03:32:59 -05:00
Scott Lahteine
f9a192c7e3 Move setup() and loop() to the end 2016-09-13 03:32:59 -05:00
Scott Lahteine
8ff338c2b9 Patch stepper.h for SCARA 2016-09-13 03:32:59 -05:00
Scott Lahteine
74d7f5e57b Patch SCARA example config 2016-09-13 03:32:59 -05:00
Scott Lahteine
6ab54c60b1 Add conditionals for kinematics, leveling 2016-09-13 03:32:59 -05:00
Scott Lahteine
21514568fd Add enum for ALL_AXES 2016-09-13 03:32:58 -05:00
Scott Lahteine
413b61e64a Add HYPOT2 and float comparison macros 2016-09-13 03:32:58 -05:00
Scott Lahteine
0ea7ed6db6 Merge pull request #4797 from thinkyhead/rc_runout_comments
Fix comment on FILAMENT_RUNOUT_SENSOR
2016-09-13 02:25:26 -05:00
Scott Lahteine
a6f6ed352b Fix comment on FILAMENT_RUNOUT_SENSOR 2016-09-13 02:14:34 -05:00
Scott Lahteine
48e14d049a Merge pull request #4710 from thinkyhead/rc_fix_leveling_maths
Bed leveling that accounts for home XYZ
2016-09-10 15:47:39 -05:00
Scott Lahteine
416821a71c Merge pull request #4765 from thinkyhead/rc_endstop_direction
Sanitycheck endstop plugs based on homing direction
2016-09-10 14:49:50 -05:00
Scott Lahteine
9248cfb0ad Bed leveling that accounts for home XYZ 2016-09-10 13:47:21 -05:00
Scott Lahteine
2e8fd70fb1 Merge pull request #4779 from thinkyhead/rc_cleanups_1
Minor code cleanup, tweak M109/M190
2016-09-10 13:47:05 -05:00
Scott Lahteine
6ac9d895ca Tweak Filament Width variables 2016-09-10 13:29:25 -05:00
Scott Lahteine
68ba45572e Don't say "heating complete" unless done 2016-09-10 13:29:25 -05:00
Scott Lahteine
2bfc6fe1b0 Move XYZ constants closer to the top 2016-09-10 13:25:44 -05:00
Scott Lahteine
12b94e419f Sanitycheck endstop plugs based on homing direction 2016-09-08 13:56:32 -05:00
Scott Lahteine
29c4f67a29 Additional path - followup to #4743 2016-09-07 15:08:12 -05:00
Scott Lahteine
8a8d6e00b7 Merge pull request #4756 from thinkyhead/rc_makefilefix
makefile fix for arduino 1.6.9 unzipped
2016-09-03 20:24:26 -05:00
Robert Bartl
494d5770b8 makefile fix for arduino 1.6.9 unzipped 2016-09-03 19:45:27 -05:00
Scott Lahteine
6f71bd7372 Merge pull request #4754 from thinkyhead/rc_mixing_regression
Unify counter_m and counter_M
2016-09-02 12:27:43 -05:00
Scott Lahteine
9bf78ef465 Fix capitalization of counter_m 2016-09-02 11:31:45 -05:00
Scott Lahteine
42b5616327 Try bool for direction instead of long 2016-09-02 11:28:48 -05:00
Scott Lahteine
cbe9ab902c Merge pull request #4747 from thinkyhead/rc_sd_show_percent
Option to show SD percent on Graphical LCD
2016-09-02 07:44:42 -05:00
Scott Lahteine
f20b2b21eb Optimize LCD string/char printing 2016-09-02 06:41:24 -05:00
Scott Lahteine
3b2f7ba225 Merge pull request #4748 from thinkyhead/rc_sd_print_timer
Patch duration_t toDigital method
2016-09-02 04:41:11 -05:00
Scott Lahteine
dad94d2fef Merge pull request #4749 from thinkyhead/rc_minumum_minimum
Fix a misspelling of minimum
2016-09-02 04:41:00 -05:00
Kai
445d8215e4 Option to show SD percent on Graphical LCD 2016-09-02 02:17:36 -05:00
Scott Lahteine
d07a913f21 Tweak to stepper advance e_steps update 2016-09-02 02:06:17 -05:00
Scott Lahteine
aaef7c6b89 Fix a misspelling of minimum 2016-09-02 01:42:38 -05:00
Scott Lahteine
ad659b5f91 Merge pull request #4725 from thinkyhead/rc_log_machine_info
Log machine info in G28 and G29
2016-09-01 23:58:59 -05:00
Scott Lahteine
c6859a1e54 Handle hours >= 100 2016-09-01 23:54:48 -05:00
Kai
9f706a9635 Patch duration_t toDigital method 2016-09-01 23:34:15 -05:00
Scott Lahteine
c3caa42630 Merge pull request #4738 from thinkyhead/rc_ensure_floats
Optimize stepper ISRs, plus cleanup, shorthand
2016-09-01 14:36:22 -05:00
Scott Lahteine
3ff657e729 Merge pull request #4727 from thinkyhead/rc_homing_together
Add heading for movement settings
2016-09-01 14:26:46 -05:00
Scott Lahteine
426f662586 Apply MINIMUM_STEPPER_PULSE in stepper advance_isr 2016-08-30 14:31:48 -05:00
Scott Lahteine
8c7ee4599e Optimize stepper advance_isr 2016-08-30 14:31:48 -05:00
Scott Lahteine
9725bcd099 Minor "optimizations" in stepper ISR 2016-08-30 14:21:43 -05:00
Scott Lahteine
4ec3d1ea58 Add some commentary to stepper ISR 2016-08-30 14:21:15 -05:00
Scott Lahteine
d9bcc7bb45 Set a bool when a stepper block is done 2016-08-30 14:20:48 -05:00
Scott Lahteine
08f717e5f7 Use bit-size typedefs for some stepper vars 2016-08-30 14:19:49 -05:00
Scott Lahteine
d554c1dda8 Clean up planner kernel pass methods 2016-08-30 14:16:13 -05:00
Scott Lahteine
b2e5ec85d7 Add [XYZ]_CENTER conditionals 2016-08-30 14:15:41 -05:00
Scott Lahteine
7e20448a2d Add HOMING_Z_WITH_PROBE conditional 2016-08-30 13:29:26 -05:00
Scott Lahteine
0e4107da34 Minor cleanup of homeaxis, etc. 2016-08-30 13:29:26 -05:00
Scott Lahteine
f1201e11c7 Improve the Jerk description 2016-08-29 12:39:21 -05:00
Scott Lahteine
3f038bef00 Heading for movement settings 2016-08-29 02:01:34 -05:00
Scott Lahteine
fd2269f489 Log machine info in G28 and G29 2016-08-28 20:48:28 -05:00
Scott Lahteine
6eaf4f4909 Fix spacing of debug output in homeaxis 2016-08-28 19:43:33 -05:00
Scott Lahteine
1e6d1c39ea Improve verbiage of dropsegments sanity error 2016-08-28 19:40:32 -05:00
Scott Lahteine
0729a8f08d Use the probe travel height for pre-probe move
Instead of using the home_bump for Z to move close to the bed before doing a slow probe, use the probe travel height.
2016-08-28 19:13:08 -05:00
Scott Lahteine
dd94d0b9d5 Fix bed probing bug without PROBE_DOUBLE_TOUCH
If `PROBE_DOUBLE_TOUCH` wasn't enabled, the probe move could be way too short! See #4701 for example.
2016-08-28 19:00:25 -05:00
Scott Lahteine
35a0c46f16 Tweak debug output for probe in G29 2016-08-28 18:44:44 -05:00
Scott Lahteine
a82a89bc58 Merge pull request #4722 from thinkyhead/rc_minimum_stepper_pulse
MINIMUM_STEPPER_PULSE option
2016-08-28 10:03:32 -05:00
Scott Lahteine
73c5c312c9 Merge pull request #4723 from thinkyhead/rc_fix_some_text
Fix Danish encoding and an error message
2016-08-28 10:02:46 -05:00
Scott Lahteine
a2572d2854 Fix Danish encoding and an error message 2016-08-28 09:51:06 -05:00
Scott Lahteine
759234af60 MINIMUM_STEPPER_PULSE option 2016-08-27 23:58:40 -05:00
Scott Lahteine
2cb63f0bf7 Merge pull request #4719 from thinkyhead/rc_delta_homing_patch
Marlin patches for homing, esp. Delta
2016-08-27 20:46:50 -05:00
Scott Lahteine
8241cf9901 Merge pull request #4720 from thinkyhead/rc_allow_stepper_omission
Patch stepper.cpp to allow omitting steppers
2016-08-27 20:36:22 -05:00
Scott Lahteine
7e893f4309 Merge pull request #4721 from thinkyhead/rc_temperature_isr_comments
Rc temperature isr comments
2016-08-27 20:36:03 -05:00
Scott Lahteine
73d86098b7 Marlin patches for homing, esp. Delta 2016-08-27 20:32:05 -05:00
Scott Lahteine
338bc768b1 Merge pull request #4717 from thinkyhead/rc_log_the_probe
Debug logging of nozzle type and offsets
2016-08-27 20:24:19 -05:00
Scott Lahteine
fae92e3f3c Merge pull request #4718 from thinkyhead/rc_twibus_patch_20160827
TWIBus patch for proper use of Wire.requestFrom
2016-08-27 20:22:53 -05:00
Scott Lahteine
a485a19052 Added optional planner logging 2016-08-27 20:12:22 -05:00
Scott Lahteine
e9bfca5870 Additional comments for Temperature::isr 2016-08-27 20:12:22 -05:00
Scott Lahteine
a255945f29 Add DEBUG_ALL enum 2016-08-27 20:12:22 -05:00
Scott Lahteine
a28e15399f Patch stepper.cpp to allow omitting steppers 2016-08-27 20:11:17 -05:00
Scott Lahteine
2b226bc5c2 TWIBus patch for proper use of Wire.requestFrom 2016-08-27 20:09:28 -05:00
Scott Lahteine
d641344d3a Remove redundant probe offset in homing 2016-08-27 19:58:56 -05:00
Scott Lahteine
fb19a3cdec Merge pull request #4649 from thinkyhead/rc_boelle_danish_update
Danish update (18 Aug 2016)
2016-08-27 19:06:05 -05:00
Scott Lahteine
00638131e5 Debug logging of nozzle type and offsets 2016-08-27 15:21:01 -05:00
Scott Lahteine
8e9ac72191 Merge pull request #4709 from thinkyhead/rc_log_the_reason
Log whether homing with probe or endstop
2016-08-26 17:05:55 -05:00
Scott Lahteine
991a34aff2 Log whether homing with probe or endstop 2016-08-26 15:50:10 -05:00
Scott Lahteine
3b93b79f5c Merge pull request #4703 from bgort/RCBugFix
Add note suggesting RAMBo users use the RAMBo board type or platformio environment
2016-08-26 14:53:56 -05:00
Scott Lahteine
00cdb15cec Move invariant LCD strings to language.h 2016-08-26 02:48:57 -05:00
Bo Herrmannsen
d2ae5b00d9 Danish up to date (18 Aug 2016) 2016-08-26 02:48:57 -05:00
Scott Lahteine
0c892357a7 Merge pull request #4693 from thinkyhead/rc_pins_cleanup_aug23
Cleanup of pins files, Conditionals
2016-08-25 21:35:36 -05:00
Scott Lahteine
e78274a7f4 Consistent order/formatting of pins files 2016-08-25 20:59:45 -05:00
Scott Lahteine
11e9530111 Properly handle probe pin for BQ printers 2016-08-25 20:59:44 -05:00
Scott Lahteine
1968983f35 Move PROBE_SELECTED to an earlier point 2016-08-25 20:59:44 -05:00
Brian
2fae32f35f Add note suggesting RAMBo users use the RAMBo board type or platformio environment;
Add note that Viki 2.0 wiring diagram v1.2 has a mistake in it;
2016-08-25 15:05:29 -04:00
Scott Lahteine
2c3de5ee46 Merge pull request #4691 from esenapaj/Suppress-warnings
Suppress warnings
2016-08-24 21:35:18 -05:00
Scott Lahteine
37ac540a26 Fix unsigned/signed comparison in fanPin loop 2016-08-24 21:34:30 -05:00
esenapaj
1749a7fae3 Suppress warning 2016-08-24 00:18:06 +09:00
Scott Lahteine
d07d85ac9f Ensure probe points at the delta edge are kept 2016-08-23 05:09:56 -05:00
Scott Lahteine
13e337ac4b Merge pull request #4688 from AnHardt/crittical_section
Repair MarlinSerial with TX-buffer
2016-08-23 03:31:12 -05:00
AnHardt
7e36b76af2 Repair MarlinSerial with TX-buffer
These '{' are important to avoid the redefinition of `unsigned char _sreg = SREG;`
at the same level.
Used in
```
#define CRITICAL_SECTION_START  unsigned char _sreg = SREG; cli();
```
2016-08-22 23:40:09 +02:00
Scott Lahteine
6b274e563d Merge pull request #4685 from thinkyhead/rc_gege2b_french
Update french language
2016-08-22 14:20:54 -05:00
Gege2B
1e65f1a1d8 Update french language 2016-08-22 12:46:58 -05:00
Scott Lahteine
d8f4f263e0 Merge pull request #4673 from thinkyhead/rc_segments_steps_move
MIN_SEGMENTS_FOR_MOVE => MIN_STEPS_PER_SEGMENT
2016-08-21 09:34:06 -05:00
Scott Lahteine
ab59280075 MIN_SEGMENTS_FOR_MOVE => MIN_STEPS_PER_SEGMENT
Follow-up to #4666
2016-08-21 08:56:03 -05:00
Scott Lahteine
27b80b1dd1 Merge pull request #4667 from thinkyhead/rc_M211_sw_endstop_switch
M211: Enable/Disable Software Endstops
2016-08-21 06:44:00 -05:00
Scott Lahteine
f9e3347d6f Merge pull request #4669 from thinkyhead/rc_config_descriptions
PREVENT_DANGEROUS_EXTRUDE => PREVENT_COLD_EXTRUSION
2016-08-21 06:41:57 -05:00
Scott Lahteine
14a03727e1 Tweak serialprintPGM 2016-08-21 00:10:09 -05:00
Scott Lahteine
2f223b8c79 Use ABC and XYZ for "3" 2016-08-21 00:10:08 -05:00
Scott Lahteine
4cd1ad8f28 Adjustments to M209, G28, M605 2016-08-21 00:10:08 -05:00
Scott Lahteine
e354cf5884 Apply sw_endstops_enabled to manual move 2016-08-21 00:10:08 -05:00
Scott Lahteine
280534c06f Add M211: Enable/Disable Software Endstops 2016-08-21 00:10:08 -05:00
Scott Lahteine
01d4703429 PREVENT_DANGEROUS_EXTRUDE => PREVENT_COLD_EXTRUSION
Also improve the documentation of this and related options, and set
EXTRUDE_MINTEMP to 170 everywhere.
2016-08-20 23:35:27 -05:00
Scott Lahteine
a1f6cf1e5d Merge pull request #4665 from thinkyhead/rc_lcd_not_ultipanel
Clean up ultralcd code, dependencies on ULTIPANEL
2016-08-20 22:43:17 -05:00
Scott Lahteine
1a255afa36 Merge pull request #4666 from thinkyhead/rc_dropsegments_adj
dropsegments => MIN_SEGMENTS_FOR_MOVE
2016-08-20 22:42:16 -05:00
Scott Lahteine
374f8d2014 dropsegments => MIN_SEGMENTS_FOR_MOVE 2016-08-20 18:52:15 -05:00
Scott Lahteine
76c3f326ff Clean up DOGM code, comments 2016-08-20 18:33:12 -05:00
Scott Lahteine
71319adbb8 Wrap ULTIPANEL-dependent code 2016-08-20 18:33:11 -05:00
Scott Lahteine
305913545e Move number-to-string function to utility.* 2016-08-20 18:33:11 -05:00
Scott Lahteine
394c80c87b Merge pull request #4655 from thinkyhead/rc_serial_static
Optimize, reduce size of MarlinSerial
2016-08-20 15:51:57 -05:00
Scott Lahteine
b15f8ca641 Merge pull request #4660 from MagoKimbra/Fix_Zig_Zag
Fix_Zig_Zag
2016-08-20 15:44:25 -05:00
MagoKimbra
28d1e5a946 Fix_Zig_Zag 2016-08-20 11:28:08 +02:00
Scott Lahteine
14395a1a96 Optimize, reduce size of MarlinSerial 2016-08-19 16:53:20 -05:00
Scott Lahteine
4d4c00d69c Merge pull request #4651 from thinkyhead/rc_homing_vs_leveling_z
Improvements to homing / leveling
2016-08-19 15:45:49 -05:00
Scott Lahteine
f3a54316e6 Merge pull request #4652 from bgort/RCBugFix
Add Rambo support/env to platformio.ini; properly maps extended pins
2016-08-19 09:30:59 -05:00
Brian Gortney
8fae3e1f9f Add Rambo support/env to platformio.ini; properly maps extended pins 2016-08-19 07:11:23 -04:00
Scott Lahteine
12d72363cb Do Delta radius check without sqrt 2016-08-19 05:05:48 -05:00
Scott Lahteine
044f800be9 Use SERIAL_PROTOCOLLNPGM in G28 2016-08-19 04:45:33 -05:00
Scott Lahteine
d309a9647d Include probe offset for moving "close to the bed" 2016-08-19 04:45:33 -05:00
Scott Lahteine
35a08eeaeb Use Z_HOME_DIR over axis_home_dir where we can 2016-08-19 04:45:32 -05:00
Scott Lahteine
99b22d5785 Default AUTO_BED_LEVELING_GRID_POINTS to 3 2016-08-19 04:45:32 -05:00
Scott Lahteine
9b1f3f7d12 Sanity-check DELTA + AUTO_BED_LEVELING_GRID_POINTS 2016-08-19 04:45:32 -05:00
Scott Lahteine
733453569b Merge pull request #4650 from thinkyhead/rc_percent_is_percent
extruder_multiplier => flow_percentage
2016-08-19 04:38:18 -05:00
Scott Lahteine
55355a4fb8 Make probed points more symmetrical 2016-08-19 04:32:03 -05:00
Scott Lahteine
1f776f6034 Tweak some code comments 2016-08-19 04:32:02 -05:00
Scott Lahteine
748228cf40 Use named indices for delta_grid_spacing 2016-08-19 04:32:02 -05:00
Scott Lahteine
ead333e7da line_to_axis_pos => do_homing_move 2016-08-19 04:32:02 -05:00
Scott Lahteine
7a4ccd7967 Add do_probe_move with Z fixes 2016-08-19 04:32:02 -05:00
Scott Lahteine
a1bad589c9 Augment debug/homing logging 2016-08-19 04:32:02 -05:00
Scott Lahteine
41b5c48129 Update software endstops if EEPROM is loaded 2016-08-19 04:32:01 -05:00
Scott Lahteine
628dcbc764 extruder_multiplier => flow_percentage 2016-08-18 22:13:47 -05:00
Scott Lahteine
6970c24ee6 Merge pull request #4642 from zenmetsu/ru-Lang
Ru lang updated
2016-08-18 17:11:46 -05:00
Jason Westervelt
d222ee4de2 Update language_ru.h
Updated missing translations.  Caught up on change to MSG_HOME.
2016-08-17 13:55:44 -07:00
Scott Lahteine
464d594450 Merge pull request #4608 from thinkyhead/rc_more_twibus_tweaks
Additional details for I2C_SLAVE_ADDRESS
2016-08-15 19:37:03 -07:00
Scott Lahteine
d63b8e2b2b Additional details for I2C_SLAVE_ADDRESS 2016-08-15 19:27:53 -07:00
Scott Lahteine
7427290d3a Merge pull request #4634 from thinkyhead/rc_lang_disp_char
Set language display charset in language.h
2016-08-15 19:25:56 -07:00
Scott Lahteine
aa30550b21 Keep SIMULATE_ROMFONT only language.h 2016-08-15 19:11:31 -07:00
Scott Lahteine
cec61c350d Set language display charset in language.h 2016-08-15 19:01:12 -07:00
Scott Lahteine
165d7abb1b Merge pull request #4625 from thinkyhead/rc_i2c_request_capture_flush
Add request, capture, flush to TWIBus
2016-08-15 18:15:43 -07:00
Scott Lahteine
0e6b41a34a Merge pull request #4624 from RicardoGA/RCBugFix
Update Spanish Lenguage
2016-08-15 18:15:23 -07:00
RicardoGA
507784b846 Fix Messages length 2016-08-15 10:30:51 -05:00
Scott Lahteine
bd928a69ec Add request, capture, flush to TWIBus 2016-08-15 00:04:20 -07:00
RicardoGA
7b7f319ed5 Update Spanish Lenguage
Adds missing messages
2016-08-14 23:30:43 -05:00
Scott Lahteine
132322e4d9 Fix #4614: currentScreen only defined with ULTIPANEL 2016-08-14 00:29:46 -07:00
Scott Lahteine
dcd26b0403 Merge pull request #4621 from thinkyhead/rc_fan_set_output
Init PWM-able AUTO_FAN pins with SET_OUTPUT
2016-08-13 21:22:27 -07:00
Scott Lahteine
79ba983782 Allow reply() to use const string with no warning 2016-08-13 21:05:44 -07:00
Scott Lahteine
27570c08ba Merge pull request #4620 from thinkyhead/rc_twibus_further
Further refinements of TWIBus
2016-08-13 20:56:09 -07:00
Scott Lahteine
3a0a94b21a Always init configured fan pins 2016-08-13 20:38:40 -07:00
Scott Lahteine
c63003ed3e Use matching auto-fan flags 2016-08-13 20:38:40 -07:00
Scott Lahteine
3475fd7b0f Init PWM-able auto fan pins with SET_OUTPUT 2016-08-13 20:38:40 -07:00
Scott Lahteine
abf9696db1 Loop fan-pins based on array size 2016-08-13 20:05:32 -07:00
Scott Lahteine
e88575c8ec Init next_auto_fan_check_ms to zero 2016-08-13 20:05:32 -07:00
Scott Lahteine
7272ec5608 Update HAS_FAN flags for 4 auto fans 2016-08-13 20:05:32 -07:00
Scott Lahteine
7b21811a9a Flags for matching auto-fans 2016-08-13 20:05:32 -07:00
Scott Lahteine
97e0aed304 Further refinements of TWIBus 2016-08-13 18:32:41 -07:00
Scott Lahteine
38fa1b1939 Merge pull request #4196 from cimbalo/Platformio_support
Add working PlatformIO support
2016-08-12 17:32:09 -07:00
Scott Lahteine
d7edc039af Merge pull request #4605 from thinkyhead/rc_3drag_fan_is_8
Fixup 3DRAG pins based on updated RAMPS pins
2016-08-12 17:30:27 -07:00
Scott Lahteine
7147c86e9f Merge pull request #4611 from tnw513/patch-2
Fix acceleration and feedrate following bq/Marlin
2016-08-12 17:30:02 -07:00
Silvio
923388e0c7 Fix acceleration and feedrate following bq/Marlin 2016-08-12 15:42:20 +02:00
Scott Lahteine
405afec393 Include decimeters in filamentUsed display 2016-08-12 05:16:43 -07:00
Scott Lahteine
fef0e8ba86 Merge pull request #4610 from thinkyhead/rc_sd_pause_and_stop
Fix stopSDPrint so it works when paused
2016-08-12 04:09:22 -07:00
Scott Lahteine
192ac2dfd7 Squish some CardReader code 2016-08-12 03:32:42 -07:00
Scott Lahteine
61932b859e Fix bug in CardReader::stopSDPrint
If the SD print is paused, it cannot be stopped
2016-08-12 03:21:10 -07:00
Scott Lahteine
9e5d5a3b7c Merge pull request #4597 from tnw513/italian_fix
Added hyphenated strings for full graphic display
2016-08-12 02:37:53 -07:00
Silvio Didonna
f999292eea added hyphenated letters for full graphic display and fixed some strings 2016-08-12 08:57:22 +02:00
Scott Lahteine
11027a56b6 Merge pull request #4606 from thinkyhead/rc_more_i2c_slave
Add an i2c request handler
2016-08-11 23:51:56 -07:00
Scott Lahteine
67f119d18b Add an i2c request handler 2016-08-11 18:09:18 -07:00
Scott Lahteine
2d3db5b5bd Fixup pins_3DRAG based on updated RAMPS pins 2016-08-11 15:49:47 -07:00
Scott Lahteine
d29a64d4b3 Merge pull request #4603 from thinkyhead/rc_less_MSG_MOVE
Strip never-translated strings from language files
2016-08-11 14:21:58 -07:00
Scott Lahteine
d6a7ca6553 Merge pull request #4584 from thinkyhead/rc_delta_cal_more
Use configured feedrates, center in DELTA_CALIBRATION_MENU
2016-08-11 14:04:05 -07:00
Scott Lahteine
64f15ac451 Merge pull request #4602 from thinkyhead/rc_marlinserial_clean
Minor cleanup of SdFatUtil.h, MarlinSerial.cpp
2016-08-11 13:42:16 -07:00
Scott Lahteine
d3b432adca Strip never-translated strings from language files 2016-08-11 13:41:07 -07:00
Scott Lahteine
1a558ef486 Tweak MarlinSerial precursor 2016-08-11 12:47:06 -07:00
Scott Lahteine
802818f7ab Cleanup SdFatUtil.h 2016-08-11 12:47:06 -07:00
Scott Lahteine
52560e257f Merge pull request #4595 from thinkyhead/rc_i2c_slave
Add support for i2c slave address
2016-08-11 12:39:26 -07:00
Scott Lahteine
432e9a1f50 Use configured feedrates, center for DELTA_CALIBRATION_MENU 2016-08-11 12:05:55 -07:00
Scott Lahteine
cd496dd9bd do_blocking_move_to can't be 'inline', takes const ref args 2016-08-11 12:05:55 -07:00
Scott Lahteine
dd75fca4d9 Make M155 / M156 a bit more flexible 2016-08-11 00:52:01 -07:00
Scott Lahteine
30afac64c4 Merge pull request #4594 from thinkyhead/rc_fix_serial_output
Fix serial output for MBL, M303
2016-08-11 00:05:30 -07:00
Scott Lahteine
e3efb04295 Shoehorn EXPERIMENTAL_I2CBUS into Travis test 2016-08-10 23:35:46 -07:00
Scott Lahteine
a99ecf71d8 Add support for i2c slave address 2016-08-10 23:30:35 -07:00
Scott Lahteine
b63d70b186 Fix serial output for MBL, M303 2016-08-10 18:49:52 -07:00
Scott Lahteine
a36a168af2 Use the truly configured middle on Delta 2016-08-10 00:03:22 -07:00
Scott Lahteine
58c8e6cef2 Fixes #4576: Convert filamentUsed to long for display 2016-08-09 23:57:28 -07:00
Scott Lahteine
01f1f779a5 Followup to #4574, specify L for long 2016-08-09 23:43:37 -07:00
Scott Lahteine
fa2467a834 Merge pull request #4578 from Kaibob2/patch-2
Update language_de.h with MSG_MOVE_E1 - E4
2016-08-09 23:04:15 -07:00
Kaibob2
1c7bd17e60 Update language_de.h with MSG_MOVE_E1 - E4
MSG_MOVE_E1 was missing
MSG_MOVE_E2 was missing
MSG_MOVE_E3 was missing
MSG_MOVE_E4 was missing

I assigned "0" to "MSG_MOVE_E1", "1" to "MSG_MOVE_E2" and so on, as this is what i assume to be the standard naming for the first (E0) and second (E1) extruder. This would have to be changed inthe other languages too :(
2016-08-09 20:49:26 +02:00
Scott Lahteine
bd8ea21abe Merge pull request #4574 from thinkyhead/rc_graphical_days
Include days in Graphical LCD print timer
2016-08-08 23:53:31 -07:00
Scott Lahteine
880cdb553b Include days in Graphical LCD print timer 2016-08-08 23:21:36 -07:00
Scott Lahteine
f4ac8c15e3 Merge pull request #4573 from thinkyhead/rc_mintemp_bed_later
Throw MINTEMP BED error only if heating
2016-08-08 23:02:42 -07:00
Scott Lahteine
b7b5b50a84 Throw bed min temp error only if heating 2016-08-08 22:49:22 -07:00
Scott Lahteine
d3ba878f70 Drop intermediate float in HEATER_0_USES_MAX6675 test 2016-08-08 22:49:22 -07:00
Scott Lahteine
3e8f9ecd1c Extend min/max_temp_error for the bed 2016-08-08 22:49:21 -07:00
Scott Lahteine
1f15f0df5f Merge pull request #4572 from thinkyhead/rc_digital_clock_100h
Show up to 99:59 in digital time
2016-08-08 22:28:29 -07:00
Scott Lahteine
b772172c84 Merge pull request #4571 from thinkyhead/rc_proper_delta_calibration
Patch command order in delta calibration menu
2016-08-08 21:50:42 -07:00
Scott Lahteine
8100a4dace Fix a compile error in EMERGENCY_PARSER sanity check 2016-08-08 21:49:57 -07:00
Scott Lahteine
45f67164b6 Simplify the delay in kill() 2016-08-08 21:49:34 -07:00
Scott Lahteine
30b1c731b5 Show up to 99:59 in digital time 2016-08-08 21:26:34 -07:00
Scott Lahteine
3be4511230 Patch command order in delta calibration menu 2016-08-08 21:15:25 -07:00
Scott Lahteine
9afa060ed6 Merge pull request #4570 from thinkyhead/rc_proper_delta_calibration
Make DELTA_CALIBRATION_MENU more universal
2016-08-08 21:11:40 -07:00
Scott Lahteine
46c8862635 Merge pull request #4564 from AnHardt/max-spi-setup
MISO is an input
2016-08-08 21:01:15 -07:00
Scott Lahteine
dad4702e85 Merge pull request #4569 from thinkyhead/rc_disable_slowdown_on_delta
Always disable SLOWDOWN for DELTA/SCARA
2016-08-08 20:58:40 -07:00
Scott Lahteine
88540d8ecf Fix: LCD displays SD status at startup 2016-08-08 20:53:18 -07:00
Scott Lahteine
b16ea09498 Make DELTA_CALIBRATION_MENU more universal 2016-08-08 20:42:58 -07:00
Scott Lahteine
85c4d5d2b5 Include DELTA_CALIBRATION_MENU in DELTA travis test 2016-08-08 20:35:04 -07:00
Scott Lahteine
3a56836ead Always disable SLOWDOWN for DELTA/SCARA 2016-08-08 18:06:46 -07:00
AnHardt
aa9b52b2e7 MISO is an input 2016-08-08 20:09:57 +02:00
Scott Lahteine
67c4acf750 Merge pull request #4562 from thinkyhead/rc_fix_z_dual_endstops
Fix Z_DUAL_ENDSTOPS with Z MIN Homing
2016-08-07 19:23:09 -07:00
Scott Lahteine
1edbea0fcb Merge pull request #4563 from thinkyhead/rc_explain_probe_heights
Explain that Z_PROBE_*_HEIGHT options are nozzle-relative
2016-08-07 19:22:19 -07:00
Scott Lahteine
e113740fa3 Specify that Z_PROBE_*_HEIGHT is nozzle-relative 2016-08-07 17:54:17 -07:00
Scott Lahteine
462e189edd Move pullups after Z_DUAL_ENDSTOPS block 2016-08-07 17:43:02 -07:00
Scott Lahteine
367dad5902 Sanity check Z_DUAL_ENDSTOPS with DELTA 2016-08-07 17:08:41 -07:00
Scott Lahteine
5fca110e0d Fix Z_DUAL_ENDSTOPS with MIN homing 2016-08-07 17:08:41 -07:00
Scott Lahteine
fc11f05c11 Merge pull request #4556 from thinkyhead/rc_all_feedrates_mm_s
Within Marlin, maintain most feed rates in mm/s
2016-08-07 16:14:16 -07:00
Scott Lahteine
7b2abe6fc8 Use steps_to_mm in extruder runout prevent 2016-08-07 00:28:52 -07:00
Scott Lahteine
d320065320 Within Marlin, maintain most feed rates in mm/s 2016-08-07 00:28:52 -07:00
Scott Lahteine
ed0b50ebee Merge pull request #4555 from thinkyhead/rc_mbl_index_rounding
Remove premature int-cast from MBL cell index methods
2016-08-06 23:34:01 -07:00
Scott Lahteine
bad286d52f Save CPU by multiplying by pre-compiled values 2016-08-06 23:24:07 -07:00
Scott Lahteine
dce6026e0e Remove premature cast to int 2016-08-06 23:01:29 -07:00
Scott Lahteine
cffe77c537 Merge pull request #4553 from thinkyhead/rc_lcd_chars_save_ram
Save bytes for custom chars (Hitachi LCD)
2016-08-06 18:29:16 -07:00
Scott Lahteine
0a1a2fea30 Merge pull request #4554 from thinkyhead/rc_anhardt_rep-max6675
Repair SPI-pins, some other pins
2016-08-06 18:10:55 -07:00
Scott Lahteine
42927530fe Explicitly clear the screen in lcd_goto_screen 2016-08-06 18:10:39 -07:00
Scott Lahteine
a6d2c2479f Minor cleanup of lcd_goto_screen calls 2016-08-06 18:10:39 -07:00
Scott Lahteine
e47c8b9829 Save bytes for custom chars (Hitachi LCD) 2016-08-06 18:10:39 -07:00
Scott Lahteine
0ff5005c9b Allow connector flexibility for BQ ZUM Mega 2016-08-06 17:19:12 -07:00
Scott Lahteine
98437bd488 Allow override of CONTROLLERFAN_PIN with RAMPS EFF 2016-08-06 17:19:12 -07:00
Scott Lahteine
93eafa1785 Use DISABLED to check TEENSY pin option 2016-08-06 17:19:12 -07:00
AnHardt
98392abb78 Clean warnings for pins_BQ_ZUM_MEGA_3D.h 2016-08-06 17:19:12 -07:00
AnHardt
1f239ac9a7 Extend travis test to check MAX6675 2016-08-06 17:19:11 -07:00
Scott Lahteine
31cad77ba9 Chmod a+x opt_disable_adv 2016-08-06 17:19:11 -07:00
AnHardt
020cd32d28 Update restore_configs
for travis builds.
2016-08-06 17:19:11 -07:00
AnHardt
98e96feee9 Repair SPI-pins
SCK_PIN can't be defined as DIO[number] they mus be defined as pure number.
So rebuilding the structure of fastio.h in pins.h.
2016-08-06 17:19:11 -07:00
Scott Lahteine
7145bd085d Merge pull request #4551 from thinkyhead/rc_anhardt_rep_stow_allen
Make Allen Key Probe stow
2016-08-06 16:31:51 -07:00
Scott Lahteine
a00783c41f Format probe stowed test code 2016-08-06 14:31:07 -07:00
AnHardt
f37e8a31d7 Make Allen Key Probe stow
by switching off the tests for the probe before the stow move.
2016-08-06 14:30:38 -07:00
Scott Lahteine
5347f39fce Merge pull request #4542 from AnHardt/rep-de
Repair-language.de
2016-08-05 23:50:35 -07:00
Scott Lahteine
5ef4a5577c Merge pull request #4537 from thinkyhead/rc_fix_some_flaws
Patch up some flaws here and there
2016-08-05 23:49:57 -07:00
AnHardt
0d3b67a580 Repair-language.de 2016-08-06 01:00:40 +02:00
Scott Lahteine
938e6d15c4 Patch up some flaws, here and there 2016-08-05 08:17:37 -07:00
Scott Lahteine
3a3984e67a Merge pull request #4535 from thinkyhead/rc_old_symbols_first
Move tests for old symbols to the top of sanity check
2016-08-04 21:24:02 -07:00
Scott Lahteine
d7b882e430 Move tests for old symbols to the top of sanity check 2016-08-04 21:03:55 -07:00
Scott Lahteine
479107d04f Merge pull request #4530 from Kaibob2/patch-1
Added / Update language_de.h
2016-08-04 16:58:50 -07:00
Scott Lahteine
dddaeb3f8c Merge pull request #4528 from thinkyhead/rc_make_it_so
Z-Height options replace Z-Raise options
2016-08-04 13:46:44 -07:00
Kaibob2
1abd7fa670 Update language_de.h
Added german translation for MSG_INFO_PRINT_LONGEST and  MSG_INFO_PRINT_FILAMENT.
MSG_HEATING_COMPLETE changed from "Aufgeheizt" to "Extr. aufgeheizt"
MSG_HEATING changed from "Aufheizen" to "Extr. aufheizen"
2016-08-04 09:40:38 +02:00
Scott Lahteine
7e2bd9a233 Z_RAISE_PROBE_* => Z_PROBE_*_HEIGHT 2016-08-03 21:18:38 -07:00
Scott Lahteine
445458c221 Don't include zprobe_zoffset in do_probe_raise 2016-08-03 21:12:02 -07:00
Scott Lahteine
4cf66cfa62 Merge pull request #4522 from rafacouto/RCBugFix
Update of Galician language
2016-08-03 14:41:33 -07:00
Rafa Couto
0114676953 Update of Galician language 2016-08-03 2016-08-03 15:00:18 +02:00
Rafa Couto
433a22189b Merge pull request #1 from MarlinFirmware/RCBugFix
Update August
2016-08-03 08:43:22 +02:00
Scott Lahteine
bd7a96ed42 Merge pull request #4517 from thinkyhead/rc_min_probe_pin
Define Z_MIN_PROBE_PIN always, allowing override
2016-08-02 21:35:59 -07:00
Scott Lahteine
704ae1b737 Merge pull request #4516 from thinkyhead/rc_short_prints_quiet
Only report finished prints longer than 1 min
2016-08-02 21:14:30 -07:00
Scott Lahteine
7ed70305df Merge pull request #4515 from thinkyhead/rc_fix_speaker_tone
Prevent the 'tone(f,d)' function from being interrupted
2016-08-02 21:13:47 -07:00
Scott Lahteine
f1be87a85c Move probe pin sanity checks out of ABL block 2016-08-02 20:55:17 -07:00
Scott Lahteine
9cb596e88c Define Z_MIN_PROBE_PIN always, allowing override 2016-08-02 20:31:44 -07:00
Scott Lahteine
229f70f194 Only report finished prints longer than 1 min 2016-08-02 19:58:12 -07:00
Scott Lahteine
e040e00ae9 Merge pull request #4514 from thinkyhead/rc_cleanup_circularqueue
Patch up CircularQueue
2016-08-02 19:42:38 -07:00
Scott Lahteine
6110d57c16 Prevent the 'tone(f,d)' function from being interrupted 2016-08-02 19:37:47 -07:00
Scott Lahteine
b73203a0b7 Move some includes around to uncover missing deps 2016-08-02 19:37:46 -07:00
Scott Lahteine
52b6b8e36b Merge pull request #4512 from thinkyhead/rc_encoder_flex
Improved SCREEN / MENU macros
2016-08-02 18:59:42 -07:00
Scott Lahteine
f26d5425bf Patch up CircularQueue
- Use `size` and `count` instead of `length` and `size`
- Fix bug: `peek` should return the item
- Clean up comments, spacing, spelling
2016-08-02 18:57:15 -07:00
Scott Lahteine
c9123adc59 Improved SCREEN / MENU macros 2016-08-02 18:05:34 -07:00
Scott Lahteine
cebeb48005 Merge pull request #4511 from thinkyhead/rc_encoder_flex
Allow encoder pulse/step override for more LCDs
2016-08-02 16:50:50 -07:00
Scott Lahteine
3cccaa9885 Allow encoder pulse/step override for more LCDs 2016-08-02 15:57:26 -07:00
Scott Lahteine
58749cae94 Merge pull request #4510 from thinkyhead/rc_buzzer_needs_beeper
Patch for COREYZ, tweak to scaled feedrate macro
2016-08-02 15:55:06 -07:00
Scott Lahteine
14c5a46ee9 Use multiplication for MMM_SCALED 2016-08-02 15:05:17 -07:00
Scott Lahteine
d8945e8464 Fix Z_HEAD index for COREYZ 2016-08-02 15:05:17 -07:00
Scott Lahteine
0f030aface Merge pull request #4503 from AnHardt/fix-retract
Correct typo in retract()
2016-08-02 15:04:55 -07:00
Scott Lahteine
fbd8f06951 Merge pull request #4506 from thinkyhead/rc_buzzer_needs_beeper
Buzzer requires BEEPER_PIN
2016-08-02 14:40:43 -07:00
Scott Lahteine
330f82971b Buzzer requires BEEPER_PIN 2016-08-02 14:05:37 -07:00
Scott Lahteine
e0d7b8bf27 Fix Azteeg X3 servo pin / Viki i2c 2016-08-02 14:05:37 -07:00
Scott Lahteine
7cceb15925 Merge pull request #4505 from thinkyhead/rc_auto_select_dplugs
Auto-select power plugs for RAMPS derivatives
2016-08-02 12:56:52 -07:00
Scott Lahteine
1967e4216e Merge pull request #4504 from AnHardt/fix-baybystepping
Fix babystepping dependency
2016-08-02 12:46:50 -07:00
Scott Lahteine
593b37519a Boards with 4 power outputs are EFBF or EFBE 2016-08-02 12:34:28 -07:00
AnHardt
9ab94bd2c1 fix-babysrepping 2016-08-02 21:06:42 +02:00
AnHardt
39c4603598 Correct typo in retract. 2016-08-02 21:06:08 +02:00
Scott Lahteine
cebd2bfff0 Auto-select power plugs for RAMPS derivatives 2016-08-02 11:59:25 -07:00
Scott Lahteine
34c60f1b55 Merge pull request #4491 from thinkyhead/rc_fix_lcd_move_e
Use a default argument in _lcd_move_e
2016-08-01 16:45:25 -07:00
Scott Lahteine
38af251b91 Use a default argument in _lcd_move_e 2016-08-01 16:09:26 -07:00
Scott Lahteine
374ae6c099 Fix pins for RAMBO plus VIKI 2016-08-01 16:09:26 -07:00
Scott Lahteine
7594138740 Merge pull request #4493 from jbrazio/buildroot-cleanup
Move font folder
2016-08-01 15:57:23 -07:00
João Brázio
b15ef35568 Update the font README to link to marlinfw.org 2016-08-01 13:53:51 +01:00
Scott Lahteine
6eed37aafb Merge pull request #4486 from thinkyhead/rc_pid_add_extrusion_rate_off
PID_EXTRUSION_SCALING, disabled by default
2016-07-31 18:23:51 -07:00
Scott Lahteine
4bf3526d00 Merge pull request #4463 from thinkyhead/rc_azteeg_x3_eeb
Wrangle RAMPS variants and derivatives
2016-07-31 18:22:49 -07:00
Scott Lahteine
1993c45759 Merge pull request #4487 from thinkyhead/rc_refresh_pos_fix
Update refresh_positioning - no need for obj ref
2016-07-31 18:22:38 -07:00
Scott Lahteine
f83369b79c Update refresh_positioning - no need for obj ref 2016-07-31 18:01:13 -07:00
Scott Lahteine
63fd1f49a6 PID_EXTRUSION_SCALING, disabled by default 2016-07-31 17:49:34 -07:00
Scott Lahteine
49997e2e22 HI_VOLT_PIN => "RAMPS_Dn_PIN" 2016-07-31 15:42:52 -07:00
Scott Lahteine
f7da37002c Merge pull request #4482 from AnHardt/rep-s-spi
repair-software-spi
2016-07-31 15:25:44 -07:00
AnHardt
60ad365e21 repair-software-spi 2016-07-31 15:50:42 +02:00
Scott Lahteine
f388beafa1 Merge pull request #4476 from otvald/RCBugFix
FIX for endstop adjustemt on delta is offset
2016-07-31 01:09:54 -07:00
Scott Lahteine
3633d4978b Merge pull request #4475 from esenapaj/Fix-for-PR-#4452
Fix for PR #4452 (Additional heater-state output changes)
2016-07-31 01:08:27 -07:00
Scott Lahteine
448e5252c3 Merge pull request #4474 from esenapaj/Update-distribution-date-and-readme
Update distribution date and readme
2016-07-31 01:07:43 -07:00
Thomas Otvald Jensen
fe059f1221 During homing, line_to_axis_pos will make a path which moves across the
endstop trigger point. The move is stopped at endstop, so current_position
should also be adjusted to reflect this!

Caused error in subsequent call in endstop adjustment, since the movement
would assume a wrong starting position.
2016-07-30 16:50:31 +02:00
esenapaj
bd73e6d3c8 Fix for PR #4452 (Additional heater-state output changes)
・Add missing ';'
2016-07-30 22:49:30 +09:00
esenapaj
cd5b03d88f Update distribution date and readme 2016-07-30 21:27:29 +09:00
Scott Lahteine
f575e92f2e Merge pull request #4473 from esenapaj/Follow-up-the-PR-#4408-etc
Follow-up the PR #4408 (Add support for reprapworld LCD), etc
2016-07-30 04:45:27 -07:00
Scott Lahteine
a406b176b0 Merge pull request #4472 from thinkyhead/rc_old_conditional
Make Conditionals.h a catch-all for old configs
2016-07-30 04:34:43 -07:00
esenapaj
657ef8aded Follow-up the PR #4408 (Add support for reprapworld LCD), etc
・Put #define REPRAPWORLD_GRAPHICAL_LCD into all the example
configuration files
・Adjust spacing
2016-07-30 20:32:57 +09:00
Scott Lahteine
83d341c394 Make Conditionals.h a catch-all for old configs 2016-07-30 04:25:30 -07:00
Scott Lahteine
de951c64f1 Make pins for EFF a consistent order 2016-07-30 04:17:21 -07:00
Scott Lahteine
49f75b7891 pins_RAMPS_14.h => pins_RAMPS.h 2016-07-30 04:17:21 -07:00
Scott Lahteine
d3b713cebc Set flags for RAMPS "type" in pins.h 2016-07-30 04:17:21 -07:00
Scott Lahteine
223b7e473f RAMPS assignment for derivatives 2016-07-30 04:17:21 -07:00
Scott Lahteine
3865843283 Consolidate setting of RAMPS High Voltage PWM outputs 2016-07-30 04:17:21 -07:00
Scott Lahteine
bdac2eb13a Don't set non-existent SLED_PIN 2016-07-30 04:17:21 -07:00
Scott Lahteine
bfbd01e29a Merge pull request #4470 from thinkyhead/rc_fix_manual_move
Followup to #4468
2016-07-30 04:17:05 -07:00
Scott Lahteine
802d873fc1 Merge pull request #4469 from esenapaj/Fix-for-PR-#4453
Fix for PR #4453 (Improved MANUAL_[XYZ]_HOME_POS)
2016-07-30 04:08:54 -07:00
Scott Lahteine
8e2f095dde Merge pull request #4456 from jbrazio/speaker-type3
Improvement to non-blocking speaker
2016-07-30 04:07:08 -07:00
Scott Lahteine
ad68b4cb8b Followup to #4468 2016-07-30 03:49:42 -07:00
esenapaj
b8c112c490 Fix for PR #4453 (Improved MANUAL_[XYZ]_HOME_POS) 2016-07-30 19:37:43 +09:00
Scott Lahteine
2f76138645 Merge pull request #4468 from thinkyhead/rc_fix_manual_move
Specify manual-movable E axes by extruder type
2016-07-30 03:21:43 -07:00
Scott Lahteine
696b63e300 Specify manual-movable E axes by extruder type 2016-07-30 00:36:48 -07:00
Scott Lahteine
46c33f1cfa Merge pull request #4467 from jbrazio/safe_delay-millis_t
Makes safe_delay() to be fully compatible with delay()
2016-07-29 20:23:44 -07:00
Scott Lahteine
9e21b2e51d Merge pull request #4455 from AnHardt/double-bump-feature
double bump probing as a feature
2016-07-29 20:00:10 -07:00
Scott Lahteine
db4d03bc81 Merge pull request #4452 from thinkyhead/rc_fix_heaterstates_part_2
Additional heater-state output changes
2016-07-29 19:58:00 -07:00
Scott Lahteine
c68ca95345 Merge pull request #4464 from thinkyhead/rc_fix_steps_per_mm_handling
Account for DELTA in Planner::refresh_positioning
2016-07-29 19:34:59 -07:00
João Brázio
226e74a438 Fixes safe_delay() to be fully compatible with delay() 2016-07-30 02:56:26 +01:00
João Brázio
8e79e8cdb3 Adds types.h 2016-07-30 02:55:52 +01:00
Scott Lahteine
844a4e799e Account for DELTA in Planner::refresh_positioning 2016-07-29 18:41:11 -07:00
AnHardt
7188ce0ad6 double bump probing as a feature
Why double touch probing is not a good thing.

It's widely believed we can get better __probing__ results when using a double touch when probing.

Let's compare to double touch __homing__.
Or better let's begin with single touch __homing__.
We home to find out out position, so our position is unknown.
To find the endstop we have to move into the direction of the endstop.
The maximum way we have to move is a bit longer than the axis length.
When we arrive at the endstop - when it triggers, the stepper pulses are stopped immediately.
It's a sudden stop. No smooth deacceleration is possible.
Depending on the speed and the moving mass we lose steps here.
Only if we approached slow enough (below jerk speed?) we will not lose steps.

Moving a complete axis length, that slow, takes for ever.
To speed up homing, we now make the first approach faster, get a guess about our position,
back up a bit and make a second slower approach to get a exact result without losing steps.

What we do in double touch probing is the same. But the difference here is:
a. we already know where we are
b. if the first approach is to fast we will lose steps here to.
But this time there is no second approach to set the position to 0. We are measuring only.
The lost steps are permanent until we home the next time.

So if you experienced permanently rising values in M48 you now know why. (Too fast, suddenly stopped, first approach)

What can we do to improve probing?
We can use the information about our current position.
We can make a really fast, but deaccelerated, move to a place we know it is a bit before the trigger point.
And then move the rest of the way really slow.
2016-07-30 03:00:49 +02:00
Scott Lahteine
c31f56a38c Deprecate EXTRUDER_WATTS and BED_WATTS 2016-07-29 17:34:14 -07:00
Scott Lahteine
e1970b4b28 Show power output in same order as temp output 2016-07-29 14:55:22 -07:00
Scott Lahteine
74df828acc Show ADC values inline rather than after 2016-07-29 14:55:18 -07:00
João Brázio
2b5faa61e2 Consolidates Buzzer and Speaker into a single object 2016-07-29 19:25:39 +01:00
João Brázio
8093c5f534 Non-blocking speaker now uses arduino's tone() 2016-07-29 18:45:50 +01:00
João Brázio
3367e79fec Merge pull request #4458 from jbrazio/followup-4448
Fixes a compilation error introduced by #4448
2016-07-29 18:44:30 +01:00
João Brázio
8896f08074 Fixes a compilation error introduced by #4448 2016-07-29 18:33:42 +01:00
Scott Lahteine
c677d2ac56 Merge pull request #4453 from thinkyhead/rc_better_manual_home
Improved MANUAL_[XYZ]_HOME_POS
2016-07-28 20:09:33 -07:00
Scott Lahteine
ea5ac94804 Improved MANUAL_[XYZ]_HOME_POS
No need for `MANUAL_HOME_POSITIONS`. Just set each one as-needed to
override the automatic behavior.
2016-07-28 19:51:48 -07:00
Scott Lahteine
1734de4d4e Merge pull request #4447 from thinkyhead/rc_fix_heaterstates
Fix output of heater states
2016-07-28 17:51:11 -07:00
Scott Lahteine
b40661cb18 Fix output of heater states 2016-07-28 17:40:01 -07:00
Scott Lahteine
9083e5420a Merge pull request #4419 from AnHardt/sd2pinmap
Switch Sd2CardLib to fastio
2016-07-28 17:38:46 -07:00
Scott Lahteine
6f59560526 Merge pull request #4448 from jbrazio/speaker-followup
A little cleanup at speaker.h
2016-07-28 17:37:36 -07:00
Scott Lahteine
5d8d18d03d Merge pull request #4451 from thinkyhead/rc_arduino_160_minimum
Prevent compiling with old Arduino sooner
2016-07-28 17:37:10 -07:00
Scott Lahteine
c94b6dd3e7 Revert to SanityCheck on every .cpp file 2016-07-28 17:17:50 -07:00
Scott Lahteine
256b03598d Merge pull request #4450 from thinkyhead/rc_fix_delta_optimization
Fix DELTA speed calculation
2016-07-28 16:50:04 -07:00
Scott Lahteine
753283e020 inverse_second => inverse_mm_s 2016-07-28 16:35:18 -07:00
Scott Lahteine
83e1d90ca3 Undo errant optimization of block->millimeters 2016-07-28 16:26:52 -07:00
João Brázio
909e98b1af A little cleanup at speaker.h 2016-07-29 00:03:25 +01:00
Scott Lahteine
ae1c7bca1b Merge pull request #4445 from thinkyhead/rc_fix_rdfgsc_mega3
Fix for R.D.F.G.S.C. with MEGATRONICS 3 board
2016-07-28 15:55:30 -07:00
Scott Lahteine
03fdb26cd2 Wrangle encoder bits, LCD_CLICKED 2016-07-28 14:44:37 -07:00
Scott Lahteine
155def24c6 BLEN_A, B, C are defined in ultralcd headers 2016-07-28 14:38:50 -07:00
Scott Lahteine
42dcc3bf50 Remove "the click" comments 2016-07-28 14:38:50 -07:00
Scott Lahteine
0eba65f96b Fix for R.D.F.G.S.C. with MINITRONICS board 2016-07-28 14:38:50 -07:00
fabtopia
83d0d59303 Fix for R.D.F.G.S.C. with MEGATRONICS 3 board
The support for reprapworld LCD boke the code for the REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER. See Full Grapics Display does not work any more after #4408  #4439
2016-07-28 13:12:19 -07:00
João Brázio
4f191a384b Moves the font folder into the buildroot 2016-07-28 19:56:41 +01:00
Scott Lahteine
5367d56f87 Merge pull request #4434 from thinkyhead/rc_delta_safe_homing
DELTA should ignore Z_SAFE_HOMING
2016-07-27 23:41:52 -07:00
Scott Lahteine
2525528fb2 DELTA should ignore Z_SAFE_HOMING 2016-07-27 23:25:56 -07:00
Scott Lahteine
dc3d2b50cd Merge pull request #4426 from thinkyhead/rc_probeless_safe_homing
Allow Z_SAFE_HOMING without a probe
2016-07-27 05:12:33 -07:00
Scott Lahteine
ab4b2a66ff Allow zero Z_RAISE_BETWEEN_PROBINGS 2016-07-27 05:00:58 -07:00
Scott Lahteine
8953e3e984 Allow Z_SAFE_HOMING without a probe 2016-07-27 04:33:56 -07:00
AnHardt
e4942d2163 Switch SD2cadrLib to fastio
Replace all fastDigitalRead/Write() with READ/WRITE()

Define SCK_PIN, MISO_PIN, MOSI_PIN in pins.h if not already defined in the pins_*.h files.

Remove these conditional pin definitions from the pin-files. They are now always defined.

Define separate sets of SPI-pins for AT90USB with and without Teensy support in fastio.h.
Likely this was the main reason for all that confusion about the AT90USB-SPI pins.
2016-07-27 12:40:44 +02:00
Scott Lahteine
9f1dd6d431 Merge pull request #4420 from thinkyhead/rc_allow_no_deploy_raise
Allow zero raise for deploy/stow
2016-07-26 17:21:51 -07:00
Scott Lahteine
21e744c454 Allow zero raise for deploy/stow 2016-07-26 17:19:25 -07:00
Scott Lahteine
54084612fd Merge pull request #4415 from petrzjunior/transl
[LANGUAGE] Update Czech (Info screen strings)
2016-07-26 13:20:20 -07:00
Scott Lahteine
5597400cda Merge pull request #4414 from thinkyhead/rc_split_conditionals
Split up Conditionals.h into two files
2016-07-26 13:16:52 -07:00
Scott Lahteine
24ee50f4d9 Merge pull request #4417 from thinkyhead/rc_remove_old_lang
Remove MSG_PRINT_TIME from languages
2016-07-26 13:01:35 -07:00
Scott Lahteine
4be635ec6e Remove MSG_PRINT_TIME from languages 2016-07-26 12:47:45 -07:00
Scott Lahteine
3be49881c0 Make SanityCheck.h a catch-all for obsolete configs 2016-07-26 12:41:40 -07:00
Scott Lahteine
fa647cca23 Do the sanity check just once per build 2016-07-26 12:37:14 -07:00
Scott Lahteine
24a1a16e5d Move versioning to MarlinConfig.h 2016-07-26 12:37:14 -07:00
Scott Lahteine
7e70a0b05d Move pins / Arduino includes to MarlinConfig.h 2016-07-26 12:37:14 -07:00
Scott Lahteine
d9f7ed9a3c Move some macros from Marlin.h to macros.h 2016-07-26 12:37:13 -07:00
Scott Lahteine
277899c175 Move include _Bootscreen.h where needed 2016-07-26 12:37:13 -07:00
Scott Lahteine
83c4653c71 Include boards and macros ahead of configs 2016-07-26 12:19:50 -07:00
Scott Lahteine
5f4702ecb2 Make Conditionals.h a catch-all for old configs 2016-07-26 12:19:50 -07:00
Scott Lahteine
8a44928df3 Make Conditionals.h a catch-all for old configs 2016-07-26 12:19:50 -07:00
Petr Zahradník junior
3d9b878cf0 Czech update 2016-07-26 13:48:27 +02:00
Scott Lahteine
c6226bb0aa Unify config in a single include without nested includes 2016-07-25 23:04:19 -07:00
Scott Lahteine
2d378fac1b No need to include thermistortables.h in Configuration.h 2016-07-25 22:43:50 -07:00
Scott Lahteine
df27d01cd9 Arrange needed includes in Marlin.h 2016-07-25 20:53:36 -07:00
Scott Lahteine
93ea281061 Split up Conditionals.h into two files
Rather than include twice, which is tricky but may confuse
2016-07-25 20:30:45 -07:00
Scott Lahteine
8684570f68 Merge pull request #4412 from thinkyhead/rc_followup_4402
Followup #4402 fixing 3-point leveling
2016-07-25 16:10:50 -07:00
Scott Lahteine
c55b7d0750 Merge pull request #4405 from thinkyhead/rc_theres_always_something
Move HAS_DIGIPOTSS to Conditionals.h
2016-07-25 15:58:42 -07:00
Scott Lahteine
42eebcd518 Merge pull request #4409 from thinkyhead/rc_cleanup_comment
Clean up Transfer Buffer Size comment
2016-07-25 15:58:34 -07:00
Scott Lahteine
5272147f7c Followup #4402 fixing 3-point leveling 2016-07-25 15:56:34 -07:00
Scott Lahteine
fcc39e2b5f Clean up Transfer Buffer Size comment 2016-07-25 12:54:55 -07:00
Scott Lahteine
7e37c20839 Merge pull request #4408 from thinkyhead/rc_reprapworld_lcd
Add support for reprapworld LCD
2016-07-25 12:37:58 -07:00
Scott Lahteine
0c0a63322b Patches to prepare REPRAPWORLD_GRAPHICAL_LCD 2016-07-25 12:10:25 -07:00
brupje
a60a668f6b Support for REPRAPWORLD_GRAPHICAL_LCD 2016-07-25 12:10:25 -07:00
Scott Lahteine
4f2ff46ab9 Move HAS_DIGIPOTSS to conditionals 2016-07-25 00:10:46 -07:00
Scott Lahteine
54f4f80077 Merge pull request #4404 from thinkyhead/rc_better_stepper_indirection
Arrange stepper_indirection by axis
2016-07-24 19:26:39 -07:00
Scott Lahteine
169c21b477 Merge pull request #4402 from thinkyhead/rc_consistent_positioning
Account for coordinate space offsets
2016-07-24 19:23:20 -07:00
Scott Lahteine
750a1e5116 Arrange stepper_indirection by axis 2016-07-24 19:00:51 -07:00
Scott Lahteine
7c27f34996 Merge pull request #4397 from thinkyhead/rc_tweak_eeprom
Neaten up EEPROM read/write functions
2016-07-24 18:45:54 -07:00
Scott Lahteine
2595a40a61 Account for coordinate space more in G28 / G29 / M48 2016-07-24 18:34:05 -07:00
Scott Lahteine
060dc6d95a Neaten up EEPROM read/write functions 2016-07-24 18:19:39 -07:00
Scott Lahteine
b7b7c90477 Merge pull request #4389 from thinkyhead/rc_optimize_planner
Optimize planner with precalculation, etc.
2016-07-24 17:48:23 -07:00
Scott Lahteine
6900bb2286 Merge pull request #4395 from tnw513/italian_fix
Update Italian translations. Remove trailing spaces.
2016-07-24 17:47:48 -07:00
Scott Lahteine
e4816293a8 serial_echopair_P for uint16_t 2016-07-24 17:46:37 -07:00
Scott Lahteine
d8e5af6834 Use RAW_POSITION for MBL in planner.set_position_mm 2016-07-24 17:20:36 -07:00
Scott Lahteine
b183442c61 Fix inactive_extruder_x_pos for coordinate space 2016-07-24 17:20:36 -07:00
Scott Lahteine
f75b0c2ee1 Make POSITION macros global 2016-07-24 17:20:36 -07:00
Scott Lahteine
101b60ef42 Tweak Dual X Carriage data spacing 2016-07-24 17:20:35 -07:00
Scott Lahteine
1fe60b723f Merge pull request #4400 from thinkyhead/rc_sanity_check_temp_sensor
Sanity check for too many temp sensors
2016-07-24 15:38:41 -07:00
Scott Lahteine
bedda3be61 Patch generic delta error caught by sanity check 2016-07-24 15:24:40 -07:00
Scott Lahteine
a5212bf277 Sanity check for too many temp sensors 2016-07-24 13:47:27 -07:00
Scott Lahteine
d8f2876753 Replace some float division with multiplication 2016-07-24 13:27:50 -07:00
Scott Lahteine
ddde785b37 Code formatting in planner.cpp 2016-07-24 13:27:50 -07:00
Scott Lahteine
f8b5749235 Replace division in planner with multiplication 2016-07-24 13:27:49 -07:00
Scott Lahteine
b921f6b69d Optimize calculation of block->millimeters for DELTA 2016-07-24 13:27:49 -07:00
Scott Lahteine
db5df9500b Move sync_plan_position closer to the top 2016-07-24 13:27:49 -07:00
Scott Lahteine
2839c56f5a Merge pull request #4390 from jbrazio/duration_t
Renamed timestamp_t to duration_t
2016-07-24 13:24:05 -07:00
Scott Lahteine
450fe8134d Merge pull request #4398 from thinkyhead/rc_z_safe_sanity
Sanity checks for Z_SAFE_HOMING
2016-07-24 12:21:10 -07:00
Scott Lahteine
d6c50671d3 Sanitycheck: Z_SAFE_HOMING points are reachable 2016-07-24 10:54:47 -07:00
Scott Lahteine
a6203366b6 Sanitycheck: Z_SAFE_HOMING requires a probe 2016-07-24 10:54:25 -07:00
Scott Lahteine
bbe5b80492 Always define probe limits if there is a probe 2016-07-24 10:53:58 -07:00
Silvio Didonna
950397f2a0 Added missing translations. Removed trailing spaces for consistency (#4376) 2016-07-24 17:22:30 +02:00
João Brázio
50fb0f7cec M31 serial output is now always in EN 2016-07-24 15:52:03 +01:00
João Brázio
62d96d72f3 Renamed timestamp_t to duration_t 2016-07-24 03:16:02 +01:00
Scott Lahteine
3e2b3353b0 Fix axis indices for COREYZ 2016-07-23 19:02:14 -07:00
Scott Lahteine
c287846f46 Merge pull request #4387 from thinkyhead/rc_anhardt_more_4370
Update Z in a unified way in run_z_probe
2016-07-23 16:47:10 -07:00
Scott Lahteine
22d0654fe6 Merge pull request #4382 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-07-23 16:31:38 -07:00
Scott Lahteine
bb93b6822a Use set_current_from_steppers_for_axis 2016-07-23 15:25:54 -07:00
AnHardt
96a162beda Use implications from #4370 in run_z_probe()
See also https://github.com/MarlinFirmware/Marlin/pull/4370#issuecomment-234713680
2016-07-23 13:09:28 -07:00
Scott Lahteine
4e67a85a5d Macros to loop over axes 2016-07-23 13:09:28 -07:00
Scott Lahteine
a3b5d5eb65 Merge pull request #4383 from esenapaj/Follow-up-the-PR-#4353
Follow-up the PR #4353 (General cleanup: enum)
2016-07-23 12:17:45 -07:00
esenapaj
784be56e99 Follow-up the PR #4353 (General cleanup: enum)
・Update description of M111
2016-07-24 00:53:35 +09:00
esenapaj
3c11977558 Update Japanese translation
・Add translation
・Change translation
・Remove translation
2016-07-23 22:07:20 +09:00
Scott Lahteine
5167cb424a Merge pull request #4381 from thinkyhead/rc_blocking_move_logging
Banish do_blocking_move_to_axis_pos
2016-07-23 01:33:17 -07:00
Scott Lahteine
08459a003f Undo the self-sabotage that is do_blocking_move_to_axis_pos 2016-07-23 00:59:11 -07:00
Scott Lahteine
13387ac302 Merge pull request #4380 from esenapaj/Fix-the-PR-#4379
Fix for the PR #4379 (Additional logging of do_blocking_move_to)
2016-07-23 00:43:01 -07:00
esenapaj
d32c4056ad Fix for the PR #4379 (Additional logging of do_blocking_move_to)
・Remove unneeded PSTR()
2016-07-23 16:38:57 +09:00
Scott Lahteine
8099ee51a5 Merge pull request #4379 from thinkyhead/rc_blocking_move_logging
Additional logging of do_blocking_move_to
2016-07-23 00:10:55 -07:00
Scott Lahteine
8633b644cf Merge pull request #4378 from thinkyhead/rc_debug_leveling_docs
Document DEBUG_LEVELING_FEATURE
2016-07-22 23:57:01 -07:00
Scott Lahteine
ad16d5019e Additional logging of do_blocking_move_to 2016-07-22 23:53:08 -07:00
Scott Lahteine
bb9da6ebdd Document DEBUG_LEVELING_FEATURE 2016-07-22 23:37:41 -07:00
Scott Lahteine
652fd8a826 Merge pull request #4362 from thinkyhead/rc_duplication_mode
DUAL_NOZZLE_DUPLICATION_MODE
2016-07-22 21:17:59 -07:00
Scott Lahteine
1766b990b8 Merge pull request #4376 from jbrazio/timestamp_t-short
Adds short format to timestamp_t
2016-07-22 21:17:17 -07:00
Scott Lahteine
6da3729531 Merge pull request #4370 from thinkyhead/rc_delta_fwd_kinematics
Delta Forward Kinematics (and LOGICAL_POSITION)
2016-07-22 21:16:00 -07:00
Scott Lahteine
6b8b458106 Travis for ABL+SCARA, Z_MIN_PROBE_REPEATABILITY_TEST 2016-07-22 21:02:08 -07:00
João Brázio
9e5dbf67e8 Update the stats menu to include longest job and extruded filament 2016-07-23 03:05:45 +01:00
João Brázio
86d9311495 Rework LCD implementation to use timestamp_t 2016-07-23 03:05:36 +01:00
Scott Lahteine
b3eb0c8569 Add LOGICAL_POSITION macro, apply to kinematics 2016-07-22 18:38:13 -07:00
Scott Lahteine
35a610abf9 const arg to inverse_kinematics 2016-07-22 17:42:48 -07:00
João Brázio
b4aad85c9a Rework stats menu to use timestamp_t 2016-07-23 01:42:21 +01:00
João Brázio
ecd48027fa Adds short timestamp format to timestamp_t 2016-07-23 01:41:25 +01:00
Scott Lahteine
b6afa028f4 Don't call adjust_delta on SCARA 2016-07-22 16:36:34 -07:00
Scott Lahteine
d5e2d523c7 Generalize kinematics function names 2016-07-22 16:36:34 -07:00
Scott Lahteine
9c4ad7d7ef Clean up delta declarations in Marlin_main.cpp 2016-07-22 16:36:33 -07:00
Scott Lahteine
4b1725628b Move kinematic functions to "private" scope 2016-07-22 16:36:33 -07:00
Scott Lahteine
cde068ea42 Use set_current_from_steppers in quickstop_stepper 2016-07-22 16:36:33 -07:00
Scott Lahteine
9f30cc84ce Use set_current_from_steppers for other kinematics 2016-07-22 16:36:33 -07:00
AnHardt
5db9b940ee Use forwardKinematics in DELTA run_z_probe() 2016-07-22 16:36:33 -07:00
Scott Lahteine
b5a9647fec Use ENABLED in stepper_indirection.h 2016-07-22 16:26:06 -07:00
Scott Lahteine
cbc7f22ad9 Implement DUAL_NOZZLE_DUPLICATION_MODE 2016-07-22 16:23:58 -07:00
Scott Lahteine
91777dd76c Add DUAL_NOZZLE_DUPLICATION_MODE option 2016-07-22 16:22:56 -07:00
Scott Lahteine
260bbb3109 Fix a couple of simple typos 2016-07-22 16:22:56 -07:00
Scott Lahteine
179e091473 Merge pull request #4374 from thinkyhead/rc_jbrazio_timestamp_t
Implements timestamp_t structure
2016-07-22 16:08:10 -07:00
AnHardt
499e404fbf forwardKinematics for Delta printers 2016-07-22 16:01:51 -07:00
João Brázio
23043a1e05 Rework some code to use timestamp_t struct (saves 72 bytes) 2016-07-22 15:53:31 -07:00
João Brázio
9388dcfa49 Implements timestamp_t structure 2016-07-22 15:53:31 -07:00
Scott Lahteine
0b2c608d2f Merge pull request #4372 from jbrazio/gcc-bark
Fix minor gcc warning
2016-07-22 15:18:53 -07:00
Scott Lahteine
5655f8b331 Merge pull request #4373 from thinkyhead/rc_homing_leveling_wtf
Fix, cleanup DELTA G28 / G29 support functions
2016-07-22 14:34:23 -07:00
Scott Lahteine
311c7dadb6 Cleanup do_blocking_move_to for DELTA 2016-07-22 14:18:45 -07:00
Scott Lahteine
b78590e63d Patch and cleanup run_z_probe 2016-07-22 14:18:45 -07:00
João Brázio
2f7716987d Fix minor gcc warning 2016-07-22 16:08:56 +01:00
João Brázio
efd3aabda8 Adds missing documentation to the point_t structure 2016-07-22 15:19:20 +01:00
Scott Lahteine
39caef4279 Merge pull request #4361 from AnHardt/imp-dbmt-for-delta
DELTA do_blocking_move_to() more like the Chartesian one
2016-07-21 20:05:04 -07:00
Scott Lahteine
7d869ad98b Merge pull request #4365 from thinkyhead/rc_shrink_planner_accel
Adjustments to planner acceleration limit
2016-07-21 18:18:15 -07:00
AnHardt
376a57232e DELTA do_blocking_move_to() more like the Chartesian one 2016-07-22 03:12:46 +02:00
Scott Lahteine
824c6859e2 Merge pull request #4369 from thinkyhead/rc_no_static_moves
inline to fix warnings, smaller build size (sometimes)
2016-07-21 14:46:09 -07:00
Scott Lahteine
2c239b1bd3 Merge pull request #4368 from AnHardt/run-z-probe-delta
Revert to position-difference method in run_z_probe()
2016-07-21 14:03:28 -07:00
Scott Lahteine
976c31235d inline to fix warnings, smaller build size (sometimes) 2016-07-21 13:49:37 -07:00
AnHardt
6ef26a85d8 Back to the differences method in run_z_probe() 2016-07-21 18:16:38 +02:00
Scott Lahteine
4226f56f53 Revert the planner acceleration logic somewhat 2016-07-20 19:19:47 -07:00
Scott Lahteine
16e5348659 Merge pull request #4360 from thinkyhead/rc_toolchange_for_G28
Always switch to tool 0 for G28
2016-07-20 19:07:35 -07:00
Scott Lahteine
209f5c03d0 Fewer temporary vars in planner accel limit 2016-07-20 18:29:29 -07:00
Scott Lahteine
62ecd107ba Patch ultralcd_impl header conditional names 2016-07-20 09:36:55 -07:00
Scott Lahteine
d2e9a9c188 Always switch to tool 0 for G28 2016-07-20 09:36:55 -07:00
Scott Lahteine
194d9521c3 Merge pull request #4356 from thinkyhead/rc_simpler_run_z_probe
Unify run_z_probe
2016-07-19 19:02:39 -07:00
Scott Lahteine
4a6ed5e221 Use HOMING_FEEDRATE_Z for Z_PROBE_SPEED_FAST 2016-07-19 18:42:48 -07:00
AnHardt
09a3cc33e6 Unify run_z_probe
Unify run_z_probe
Add double touch for DELTAs.
Introduce Z_PROBE_SPEED_FAST and Z_PROBE_SPEED_SLOW
  defaulting to homing_feedrate_mm_m[Z_AXIS] and homing_feedrate_mm_m[Z_AXIS]/2
2016-07-19 18:42:48 -07:00
Scott Lahteine
6137a1d934 Merge pull request #4359 from thinkyhead/rc_wrangle_movement_etc
Use ENABLED(MAPPER_NON)
2016-07-19 18:22:55 -07:00
Scott Lahteine
792fff5771 Merge pull request #4358 from thinkyhead/rc_individual_homing_rates
Set homing feedrates individually
2016-07-19 18:20:30 -07:00
Scott Lahteine
0432613ad7 use enabled macro for mapper setting 2016-07-19 18:08:56 -07:00
Scott Lahteine
e44b37cdc2 motion section marker below homing speeds 2016-07-19 17:31:58 -07:00
Scott Lahteine
204fd6ec44 Set homing feedrates individually 2016-07-19 17:31:58 -07:00
Scott Lahteine
e6e4d4062d Merge pull request #4357 from thinkyhead/rc_fix_keypad_issues
Fix some Reprapworld Keypad issues
2016-07-19 17:31:37 -07:00
Scott Lahteine
2bad02e60d Reprapworld Keypad: F1 opens the Move Axis menu 2016-07-19 16:40:39 -07:00
Scott Lahteine
eaa6f568ee Prevent re-entrant call of Reprapworld Keypad handler 2016-07-19 16:40:39 -07:00
Scott Lahteine
6abf916575 Reprapworld Keypad move step is 1mm 2016-07-19 16:40:39 -07:00
Scott Lahteine
06ac1f3bcf Reduce Reprapworld Keypad move code size 2016-07-19 16:40:39 -07:00
Scott Lahteine
5d5affdfca Merge pull request #4355 from thinkyhead/rc_rename_ultralcd_files
Rename ultralcd implementation files for consistency
2016-07-19 16:14:27 -07:00
Scott Lahteine
bb225dedc6 Merge pull request #4354 from thinkyhead/rc_jbrazio_rework_g12
NOZZLE_CLEAN_FEATURE with no dependency on HAS_BED_PROBE
2016-07-19 15:26:59 -07:00
Scott Lahteine
8a2efd1155 Rename ultralcd implementation files for consistency 2016-07-19 15:26:14 -07:00
João Brázio
0149fc189a Update travis config so NOZZLE_CLEAN_FEATURE no longer depends on AUTO_BED_LEVELING_FEATURE 2016-07-19 15:07:03 -07:00
João Brázio
b869fbc05e Update all config files with the new G12 options 2016-07-19 15:07:03 -07:00
João Brázio
47fef80848 Nozzle::clean() no longer requires HAS_BED_PROBE 2016-07-19 15:07:02 -07:00
Scott Lahteine
f1f1bac0e1 Merge pull request #4341 from esenapaj/Update-Japanese-translation
Update Japanese translation
2016-07-19 15:04:22 -07:00
João Brázio
5cdd6f02ec Update travis config not to send email notifications 2016-07-19 13:44:24 -07:00
Scott Lahteine
6c899bb520 Merge pull request #4349 from jbrazio/gcc-bark-bark
Removes some minor GCC warnings
2016-07-19 13:42:33 -07:00
Scott Lahteine
ef0a22871e Merge pull request #4350 from jbrazio/followup-a875861
Adds utility.h
2016-07-19 13:40:52 -07:00
Scott Lahteine
9eba58a031 Merge pull request #4351 from jbrazio/u8glib-converter
Updates u8glib's bmp2hex converter
2016-07-19 13:39:33 -07:00
Scott Lahteine
c502018eab Merge pull request #4353 from jbrazio/global-enum-file
General cleanup: enum
2016-07-19 13:37:56 -07:00
Scott Lahteine
0f9953b031 Merge pull request #4342 from AnHardt/rep-cons-g28
Introduce line_to_axis_pos() for use in homeaxis()
2016-07-19 12:56:58 -07:00
Scott Lahteine
d76389b4d1 Merge pull request #4340 from esenapaj/Follow-up-the-PR-#4335
Follow-up the PR #4335 (Debug char, fix compile errors for lcd pins)
2016-07-19 12:43:50 -07:00
AnHardt
11c075c6b2 Introduce line_to_axis_pos(axis_codes axis, float where, float feed_rate = 0.0)
and use it in `homeaxis()` instead of `do_blocking_move_to_axis_pos()`.
`do_blocking_move_to_axis_pos` was wrong because it performed subdivided, delta-corrected moves for x- and y-axis.

The first common move for delta homing is like quick_home but for 3 towers.

Fix two warnings.
2016-07-19 17:24:44 +02:00
João Brázio
3ebad4e020 Moves all global enums to a central file 2016-07-19 14:31:09 +01:00
João Brázio
238fefcb00 Updates Stopwatch class to use internal state enum 2016-07-19 14:30:44 +01:00
João Brázio
30ac0782a9 Comment section style correction 2016-07-19 03:27:42 +01:00
João Brázio
8ecee431c4 Updates u8glib's bmp2hex converter 2016-07-19 03:16:30 +01:00
João Brázio
79e7721b76 Removes some minor GCC warnings 2016-07-19 03:03:11 +01:00
João Brázio
f4d63796b2 Adds utility.h 2016-07-19 02:55:23 +01:00
esenapaj
361307831e Follow-up the PR #4335 (Debug char, fix compile errors for lcd pins)
・Solve a flickering when SD card is inserted or removed at using a ASCII
LCD + language_kana.h
2016-07-18 20:09:24 +09:00
esenapaj
ff48bbb86a Update Japanese translation
・Add new translation
2016-07-18 17:01:56 +09:00
Scott Lahteine
46117593b9 Merge pull request #4185 from esenapaj/Update-Japanese-translation
Update Japanese translation (work in progress)
2016-07-17 18:36:34 -07:00
Scott Lahteine
3422103863 Merge pull request #4310 from thinkyhead/rc_mbl_position_shift
Fix position shift with MBL
2016-07-17 18:31:25 -07:00
Scott Lahteine
92757bd7b3 Merge pull request #4339 from esenapaj/Follow-up-the-PR-#4163
Follow-up the PR #4163 (Mixing and Switching Extruders)
2016-07-17 18:15:23 -07:00
Scott Lahteine
cbf9fa7995 Merge pull request #4338 from thinkyhead/rc_anhardt_58
Use blocking_move, current_position in G28 homing
2016-07-17 18:12:40 -07:00
Scott Lahteine
493d30cd97 Drop intermediate nx, ny, and set destination directly 2016-07-17 17:59:52 -07:00
Scott Lahteine
07a735ad22 We always use destination so modify mesh_buffer_line 2016-07-17 17:57:33 -07:00
Scott Lahteine
04a5b7b257 A macro to normalize positions 2016-07-17 17:57:32 -07:00
esenapaj
5c8e87a866 Follow-up the PR #4163 (Mixing and Switching Extruders)
・Update forgotten K8400 files
2016-07-18 09:48:13 +09:00
Scott Lahteine
86eb5251c5 Fix some debug messages 2016-07-17 17:10:02 -07:00
Scott Lahteine
1e57a6af73 Use blocking_move, current_position in G28 homing 2016-07-17 16:56:13 -07:00
Scott Lahteine
f6a3a1da09 nz and ne are always set, so drop them down 2016-07-17 14:12:39 -07:00
Scott Lahteine
d0009e013b Rename cell index vars 2016-07-17 14:12:39 -07:00
Scott Lahteine
697373b071 Reduce code size of mesh_buffer_line 2016-07-17 14:11:25 -07:00
Scott Lahteine
103d312f6d MBL can actually do up to 9 x 9 2016-07-17 14:11:25 -07:00
Scott Lahteine
f4a69281fc Only call mesh_buffer_line when MBL is active 2016-07-17 14:11:25 -07:00
Scott Lahteine
799a31cd30 Include the position_shift when splitting mesh lines 2016-07-17 14:08:20 -07:00
Scott Lahteine
f242aea032 Merge pull request #4319 from thinkyhead/rc_feedrates_to_mess_with_you
Wrangle feed rate variables
2016-07-17 14:07:52 -07:00
Scott Lahteine
0342661b3f Merge pull request #4335 from thinkyhead/rc_status_pad_jp
Debug char, fix compile errors for lcd pins
2016-07-17 14:07:08 -07:00
Scott Lahteine
81e01152bb Merge pull request #4336 from thinkyhead/rc_bltouch_sensor
BLTouch probe sensor
2016-07-17 14:06:32 -07:00
Scott Lahteine
d8c8d0a6a2 Merge pull request #4337 from thinkyhead/rc_inverts_as_macros
Endstop invert flags as macros instead of const bool
2016-07-17 14:06:10 -07:00
Scott Lahteine
1583177ef4 BLTOUCH probe config option 2016-07-17 13:55:38 -07:00
Scott Lahteine
176b9627c7 Some cleanup ahead of BLTOUCH support 2016-07-17 13:55:38 -07:00
Scott Lahteine
39706f3e57 Endstop invert flags as macros instead of const bool 2016-07-17 13:51:02 -07:00
Scott Lahteine
253f843da5 Merge pull request #4306 from thinkyhead/rc_stupid_name_okbai
ENDSTOPS_ONLY_FOR_HOMING is confusing
2016-07-17 13:50:19 -07:00
Scott Lahteine
7242d44810 Endstops vars already initialized 2016-07-17 13:38:48 -07:00
Scott Lahteine
5ed1e7a464 codenum => dwell_ms 2016-07-17 13:35:21 -07:00
Scott Lahteine
69d6016941 Revert default state of endstops in M502 2016-07-17 13:35:21 -07:00
Scott Lahteine
0fcd3706dd Replace ENDSTOPS_ONLY_FOR_HOMING with ENDSTOPS_ALWAYS_ON_DEFAULT 2016-07-17 13:35:21 -07:00
Scott Lahteine
671634bf11 Fix spacing after section header 2016-07-17 13:35:21 -07:00
Scott Lahteine
f38553b482 fix a debug message 2016-07-17 13:29:42 -07:00
Scott Lahteine
3d78b8f929 Use HYPOT macro instead of hypot function 2016-07-17 13:29:42 -07:00
Scott Lahteine
9f9fe043ba Apply sq macro throughout 2016-07-17 13:29:41 -07:00
Scott Lahteine
93ba5bddd7 Append units to feedrate variables 2016-07-17 13:29:41 -07:00
Scott Lahteine
889570029a Merge pull request #4332 from esenapaj/Update-URL
Update URL in createTemperatureLookupMarlin.py
2016-07-17 12:29:55 -07:00
Scott Lahteine
5e3d3918b6 Patch compile error for RAMPS LCD pins 2016-07-17 12:27:37 -07:00
Scott Lahteine
94955a8bf7 pad string in lcd_finishstatus 2016-07-17 12:27:37 -07:00
Scott Lahteine
21ee0612e3 Debug char 2016-07-17 12:27:36 -07:00
Scott Lahteine
c3cc24242c Merge pull request #4330 from thinkyhead/rc_debug_g28_more
Debugging of MBL in G28
2016-07-17 11:36:19 -07:00
Scott Lahteine
8f24e0a556 Debugging of MBL in G28 2016-07-17 11:08:30 -07:00
Scott Lahteine
f8973a7cec Merge pull request #4163 from thinkyhead/rc_new_extruders_diff
Mixing and Switching Extruders
2016-07-17 11:05:03 -07:00
Scott Lahteine
05da02f0a2 Implement MIXING_EXTRUDER and SWITCHING_EXTRUDER 2016-07-17 10:53:10 -07:00
esenapaj
ce2814ed60 Update URL in createTemperatureLookupMarlin.py 2016-07-17 21:08:09 +09:00
Scott Lahteine
22b4cff423 New extruder type configuration options 2016-07-17 00:13:56 -07:00
Scott Lahteine
9730a9355c Travis test for Mixing and Switching extruders 2016-07-17 00:13:56 -07:00
esenapaj
601015b73e Update Japanese translation 2016-07-17 16:04:12 +09:00
Scott Lahteine
9766e24504 Merge pull request #4277 from thinkyhead/rc_mks_13_viki2
Support for VIKI2 with MKS 1.3 / 1.4
2016-07-16 23:49:33 -07:00
Scott Lahteine
02285662f5 Merge pull request #4298 from jbrazio/feature/filament-counter
Adds filamentUsed and longestPrint stats to PrintCounter
2016-07-16 23:48:46 -07:00
Scott Lahteine
bf16ae5a70 Merge pull request #4299 from jbrazio/feature/g27-park-nozzle
Implements park nozzle feature
2016-07-16 23:47:12 -07:00
Scott Lahteine
aaa0d298b9 Merge pull request #4326 from thinkyhead/rc_no_static_items_fix
Suppress compiler warnings in ultralcd.cpp
2016-07-16 23:38:08 -07:00
Scott Lahteine
cc3ef73583 Merge pull request #4327 from thinkyhead/rc_petrzjr_long_print
LCD Longer print
2016-07-16 23:37:34 -07:00
Scott Lahteine
77c8fb627f Merge pull request #4329 from thinkyhead/rc_italian_fix
Added missing Italian translations
2016-07-16 23:37:15 -07:00
Scott Lahteine
b14888501b Merge pull request #4301 from Ingramz/RCBugFix
Add Cartesio CN Controls V11
2016-07-16 22:35:07 -07:00
Silvio Didonna
32e0d71729 Added missing translations 2016-07-16 22:26:46 -07:00
Scott Lahteine
0f3232065e Merge pull request #4305 from jbrazio/feature/splash-improvement
Custom boot screen feature improvement
2016-07-16 21:59:39 -07:00
Petr Zahradník junior
2d7fe9dc78 LCD Longer print 2016-07-16 18:21:06 -07:00
Scott Lahteine
eee903bd4b Format some DAC lines 2016-07-16 17:59:13 -07:00
Scott Lahteine
d53dcaa796 Suppress some compiler warnings 2016-07-16 17:59:01 -07:00
João Brázio
9775af0c24 Update travis to handle custom_bootscreen.h files 2016-07-17 01:31:44 +01:00
João Brázio
fa4274cf4c Improves the custom bootscreen logo feature 2016-07-17 01:31:44 +01:00
João Brázio
1f3283e3a5 Adds custom boot logos for bq Hephestos 2 and Cartesio 2016-07-17 01:31:36 +01:00
João Brázio
dfa1c45075 Adds a notice to vendors about the SHOW_CUSTOM_BOOTSCREEN directive 2016-07-17 01:15:17 +01:00
Scott Lahteine
ed468e848f Merge pull request #4321 from esenapaj/Follow-up-the-PR-#4287
Follow-up and fix the PR #4287 (Allow stopwatch and printcounter to go over 18:12:15)
2016-07-16 17:14:21 -07:00
João Brázio
a8758619ec The safe_delay() is now globaly accessible 2016-07-16 12:28:06 +01:00
João Brázio
9a00108cb6 Adds the WEBSITE_URL as the boot screen line 2 2016-07-16 12:24:37 +01:00
João Brázio
f5234b0695 Adds a customizable screen timeout for the default boot screen 2016-07-16 12:24:36 +01:00
João Brázio
2f26bc2153 Adds filamentUsed and longestPrint stats to PrintCounter 2016-07-16 12:12:27 +01:00
João Brázio
336481ea81 Added G27 configuration options to all configs 2016-07-16 12:07:59 +01:00
João Brázio
c711701626 Implements a nozzle parking command (G27) 2016-07-16 12:07:59 +01:00
João Brázio
7202383695 Merge pull request #4323 from jbrazio/followup-4320
Followup for #4320
2016-07-16 12:07:31 +01:00
João Brázio
5f368d1bc3 Followup for #4320 2016-07-16 11:57:35 +01:00
João Brázio
d7c51bc4b9 Merge pull request #4320 from jbrazio/followup/4307
Moves do_blocking_move_to_xy() out of the HAS_BED_PROBE define
2016-07-16 11:48:00 +01:00
esenapaj
af9b1d79b1 Follow-up and fix the PR #4287 (Allow stopwatch and printcounter to go over 18:12:15)
・Remove MSG_END_HOUR and MSG_END_MINUTE from all the language files
・Change from MSG_INFO_TOTAL_PRINTS to MSG_INFO_PRINT_COUNT in German
file
2016-07-16 18:39:22 +09:00
Scott Lahteine
e563634a25 Merge pull request #4314 from AnHardt/use-d_b_m_t-in-g28
Use do_blicking_move_to*() in G28
2016-07-15 20:22:02 -07:00
Scott Lahteine
59ae1811c2 Merge pull request #4303 from AnHardt/delta-g28
DELTA: Move out of the clip-zone after G28
2016-07-15 20:20:22 -07:00
Scott Lahteine
ead155399f Merge pull request #4311 from jbrazio/bugfix/print_xyz-overflow
Fixes an PSTR overflow with print_xyz()
2016-07-15 20:08:09 -07:00
João Brázio
fdea8b6e6a Moves do_blocking_move_to_xy() out of the HAS_BED_PROBE define 2016-07-16 03:59:49 +01:00
AnHardt
d2a49c016d DELTA: Move out of the clip-zone after G28
Move down to a safe height after G28 for DELTAs.
2016-07-15 15:22:44 +02:00
AnHardt
46994fd17d Use do_blicking_move_to*() in G28 2016-07-15 15:02:15 +02:00
João Brázio
ffbb31b235 Fixes an PSTR overflow with print_xyz() 2016-07-15 11:25:34 +01:00
Indrek Ardel
ecb23c1b65 Add Cartesio CN Controls V11 board 2016-07-15 12:55:47 +03:00
Indrek Ardel
c8f2dd7cd5 Fix CN Controls 12 styling 2016-07-15 09:54:09 +03:00
Scott Lahteine
cec7110409 Merge pull request #4308 from thinkyhead/rc_debug_gcode_t
Added logging related to gcode_T
2016-07-14 19:46:33 -07:00
Scott Lahteine
6446d3939a Merge pull request #4309 from thinkyhead/rc_static_item_fix_77
Fix skipping of static items
2016-07-14 19:28:49 -07:00
Scott Lahteine
84bf58db72 Merge pull request #4307 from jbrazio/feature/movement-unleash
Remove do_blocking_move_*() dependency on HAS_BED_PROBE
2016-07-14 19:23:30 -07:00
Scott Lahteine
95ab2fd3ae Fix skipping of static items 2016-07-14 19:16:16 -07:00
Scott Lahteine
166f19251e Add more debugging for leveling
- Especially in `gcode_T`
- In `update_software_endstops`
- Some tweaks to observe
2016-07-14 19:04:13 -07:00
Scott Lahteine
7ac0b91a45 Collapsible long comment in gcode_T 2016-07-14 18:28:41 -07:00
João Brázio
e71a631f8f do_blocking_move_*() no longer depend on HAS_BED_PROBE 2016-07-15 01:54:14 +01:00
Scott Lahteine
8bf6861af8 Merge pull request #4054 from jbrazio/feature/g12-clean-tool
Implements clean nozzle feature (Lulzbot's REWIPE)
2016-07-14 14:38:38 -07:00
Scott Lahteine
75901b616c Merge pull request #4287 from thinkyhead/rc_long_print_times
Allow stopwatch and printcounter to go over 18:12:15
2016-07-14 12:14:15 -07:00
Scott Lahteine
c5e51f6b96 finished => completed 2016-07-14 11:46:35 -07:00
Scott Lahteine
1618870c84 card.printingHasFinished does print_job_timer.stop 2016-07-14 11:39:58 -07:00
Scott Lahteine
34da77dad3 Simply run M31 at the end of an SD print 2016-07-14 11:39:58 -07:00
Scott Lahteine
23d2bc5ab0 Patch Greek for new strings 2016-07-14 11:39:58 -07:00
Scott Lahteine
a8d71f0ac6 Support longer print times in M31 2016-07-14 11:39:58 -07:00
Scott Lahteine
e481b79af1 Allow stopwatch and printcounter to go over 18 hours 2016-07-14 11:39:57 -07:00
João Brázio
68c343a09a Added G12 configuration options to all configs 2016-07-14 00:38:42 +01:00
João Brázio
4937f9ada4 Minor G12 tweaks and point_t struct extension 2016-07-14 00:07:36 +01:00
Scott Lahteine
6080924589 Merge pull request #4296 from jbrazio/feature/bqh2-update
Update the bq Hephestos 2 configuration
2016-07-13 13:18:09 -07:00
Scott Lahteine
ed89c71e53 Merge pull request #4291 from esenapaj/Follow-up-the-PR-#4278
Follow-up the PR #4278 (Fixups for PID_ADD_EXTRUSION_RATE and HOTENDS==1)
2016-07-13 13:17:03 -07:00
Scott Lahteine
f23689d9f1 Merge pull request #4292 from esenapaj/Follow-up-the-PR-#4252
Follow-up the PR #4252 (Replace PLA/ABS preheating with generic)
2016-07-13 13:16:30 -07:00
João Brázio
021544f572 Improves G12 zig-zag pattern 2016-07-13 21:14:56 +01:00
João Brázio
b05a75655a Implements a nozzle cleaning pattern generator (G12) 2016-07-13 21:14:19 +01:00
João Brázio
005af84140 Update the bq Hephestos 2 configuration 2016-07-13 21:06:31 +01:00
esenapaj
8f03f0be9b Follow-up the PR #4252 (Replace PLA/ABS preheating with generic) 2016-07-13 22:42:16 +09:00
esenapaj
c2c8ab4698 Follow-up the PR #4278 (Fixups for PID_ADD_EXTRUSION_RATE and HOTENDS==1) 2016-07-13 22:24:31 +09:00
Scott Lahteine
4f77adddbe Merge pull request #4286 from thinkyhead/rc_debug_clean
Prefix and suffix in debug output
2016-07-12 20:49:15 -07:00
Scott Lahteine
e5c7af5ddc Merge pull request #4222 from thinkyhead/rc_allow_cold_extrude
M302: Add "P" parameter, status output
2016-07-12 20:40:14 -07:00
Scott Lahteine
2224032568 Merge pull request #4285 from thinkyhead/rc_manual_move_fast_fine
No delay for the smallest LCD moves
2016-07-12 20:16:38 -07:00
Scott Lahteine
cdd77d23bb Neaten up temperature member data 2016-07-12 20:04:15 -07:00
Scott Lahteine
d4c68279c8 Add "P" parameter to M302 2016-07-12 20:04:15 -07:00
Scott Lahteine
a5bae3c7d5 Merge pull request #4229 from blubbfish/patch-1
Update language_de.h for German translation
2016-07-12 20:01:46 -07:00
Scott Lahteine
a8b6b6a128 Merge pull request #4252 from thinkyhead/rc_rename_hpb
Replace PLA/ABS preheating with generic
2016-07-12 20:00:33 -07:00
Scott Lahteine
1e14df876d Use varname as prefix in DEBUG_POS, string as suffix 2016-07-12 19:58:09 -07:00
Scott Lahteine
9e8b3e5ee6 Homing direction is irrelevant in probe raise! 2016-07-12 18:09:02 -07:00
Scott Lahteine
ecd5e810ac No delay for the smallest LCD moves 2016-07-12 18:09:01 -07:00
Scott Lahteine
2b9515d60f Merge pull request #4281 from AnHardt/lang-system
Don't use UTF-strlen() if the text is not UTF
2016-07-12 17:21:28 -07:00
Scott Lahteine
973a669aa3 Merge pull request #4264 from thinkyhead/rc_ultralcd_encoder_pos
Remove extraneous conditions for encoder position
2016-07-12 16:54:13 -07:00
Scott Lahteine
e9f62d8fdb Remove extraneous conditions for encoder position 2016-07-12 16:41:00 -07:00
Scott Lahteine
7c81398f95 Merge pull request #4279 from esenapaj/Follow-up-the-PR-#4271
Follow-up the PR #4271 (X_DUAL_STEPPER_DRIVERS)
2016-07-12 16:39:37 -07:00
Scott Lahteine
0554b65d22 Merge pull request #4284 from thinkyhead/rc_serial_ln_macros
Sled-probe sanity fix, conditionals for remaining types of leveling
2016-07-12 16:36:33 -07:00
Scott Lahteine
655c3fd55f Move delta ABL sanity checks up 2016-07-12 16:10:16 -07:00
Scott Lahteine
db0882d068 AUTO_BED_LEVELING_3POINT and DELTA_BED_LEVELING_GRID 2016-07-12 16:10:11 -07:00
Scott Lahteine
e974ac63ef Init matrix in planner.init 2016-07-12 15:55:27 -07:00
Scott Lahteine
47d55513ec Merge pull request #4280 from AnHardt/msg-file-upload
Finalalize MSG_SD_WRITE_TO_FILE message with a \n
2016-07-12 13:02:52 -07:00
AnHardt
b273736962 Make MAPPER_NON the fall back mapper
Make MAPPER_NON the fall back mapper - if no other is defined.
One list less to maintain.
2016-07-12 19:59:14 +02:00
AnHardt
54d35230df Don't use UTF-strlen() if the text is not UTF 2016-07-12 19:59:03 +02:00
Scott Lahteine
a1de96d152 Merge pull request #4278 from thinkyhead/rc_more_hotends_1
Fixups for PID_ADD_EXTRUSION_RATE and HOTENDS==1
2016-07-12 10:36:13 -07:00
AnHardt
87957c7b44 Finalalize MSG_SD_WRITE_TO_FILE message with a \n
Finalalize MSG_SD_WRITE_TO_FILE message with a \n
else RH hangs.
2016-07-12 13:13:04 +02:00
esenapaj
9b5cbf2423 Follow-up the PR #4271 (X_DUAL_STEPPER_DRIVERS)
・Update a forgotten Configuration_adv.h of K8400
2016-07-12 17:50:49 +09:00
Scott Lahteine
809da999dc Apply HOTEND_INDEX in preheat methods 2016-07-11 22:27:25 -07:00
Scott Lahteine
3d78b690e5 Single PID dataset with HOTENDS == 1 2016-07-11 22:27:24 -07:00
Scott Lahteine
bf9967c65d Apply HOTEND_INDEX in MILLISECONDS_PREHEAT_TIME 2016-07-11 22:27:24 -07:00
Scott Lahteine
11dcbae7a2 Only a single E axis. Can tool-change reseed position[E_AXIS]? 2016-07-11 22:27:24 -07:00
Scott Lahteine
4865447830 Merge pull request #4276 from esenapaj/Suppress-warnings
Suppress warnings
2016-07-11 19:08:59 -07:00
Scott Lahteine
815df28b0b Merge pull request #4274 from esenapaj/Follow-up-the-PR-#4024
Follow-up the PR #4024 (Greek Language by @psavva)
2016-07-11 19:04:44 -07:00
Scott Lahteine
44f739a5eb Merge pull request #4273 from esenapaj/Fix-for-the-PR-#4256
Fix for the PR #4256 (Additional tweaks for HOTENDS == 1)
2016-07-11 19:02:45 -07:00
Scott Lahteine
02f711fe00 Merge pull request #4275 from AnHardt/dont-deploy
Don't deploy/stow the probe if z-min-endstop is used for homing
2016-07-11 18:46:23 -07:00
Scott Lahteine
6a45aad893 Merge pull request #4272 from AnHardt/m100-rep
Repair M100
2016-07-11 18:45:13 -07:00
Scott Lahteine
243ad4312a Merge pull request #4271 from thinkyhead/rc_X_DUAL_STEPPER_DRIVERS
X_DUAL_STEPPER_DRIVERS
2016-07-11 18:38:45 -07:00
Scott Lahteine
6e68dd292b Merge pull request #4243 from thinkyhead/rc_fix_static_scrolling
Improve STATIC_ITEM implementation
2016-07-11 18:25:00 -07:00
Scott Lahteine
d17b161832 Don't draw current screen if simply changing screens 2016-07-11 18:14:04 -07:00
Scott Lahteine
096f9981d1 Scroll to the top when changing screens 2016-07-11 18:14:04 -07:00
Scott Lahteine
7ae84d768e Tweak conditionals for REPRAPWORLD_KEYPAD 2016-07-11 18:14:04 -07:00
Scott Lahteine
155af6b861 Rename vars, add comments for menu macros 2016-07-11 18:14:04 -07:00
Scott Lahteine
31f2cf5f6f Make encoderLine signed for proper compares 2016-07-11 18:14:03 -07:00
Scott Lahteine
d9f75f62c0 START_ROW => START_COL 2016-07-11 18:14:03 -07:00
Scott Lahteine
d2099fef0d Left-justify thermistor info 2016-07-11 18:14:03 -07:00
Scott Lahteine
85aeb02aa6 Invert headings on Graphical LCD 2016-07-11 18:14:03 -07:00
Scott Lahteine
3a67fb77b0 Concatenate LCD static strings 2016-07-11 18:14:02 -07:00
Scott Lahteine
13dc619f43 Scroll static screens more simply 2016-07-11 18:14:02 -07:00
Scott Lahteine
5051723c2e Redraw after cursor correction in STATIC_ITEM 2016-07-11 18:14:02 -07:00
esenapaj
58177a1602 Suppress warnings 2016-07-12 08:22:24 +09:00
Scott Lahteine
10ebf28ee3 Allow override of ENCODER_FEEDRATE_DEADZONE, lower default for Viki 2016-07-11 15:43:08 -07:00
Scott Lahteine
9b1ba1012a Support for VIKI2 with MKS Gen 1.3 / 1.4 2016-07-11 15:43:08 -07:00
Scott Lahteine
55dc8051d8 Cleanup of RAMPS LCD pins 2016-07-11 15:38:55 -07:00
AnHardt
7bcab26f2a Don't deploy/stow the probe if z-min-endstop is used for homing
Don't deploy/stow the probe if z-min-endstop is used for homing.
Don't apply `zprobe_zoffset` if probe was not used.
2016-07-11 22:01:44 +02:00
esenapaj
84ded1f659 Follow-up the PR #4024 (Greek Language by @psavva)
・Update forgotten Configuration.h of K8400
2016-07-12 04:19:09 +09:00
esenapaj
6af525e252 Fix for the PR #4256 (Additional tweaks for HOTENDS == 1) 2016-07-12 03:51:29 +09:00
AnHardt
23e0134596 Repair M100
M100 D was running too long - caused watchdog resets.
M100 I showed more free memory than a Arduino Mega has RAM.
2016-07-11 20:44:30 +02:00
Scott Lahteine
4b4a582c4f X_DUAL_STEPPER_DRIVERS implementation 2016-07-11 10:22:19 -07:00
Scott Lahteine
91bd6eade7 X_DUAL_STEPPER_DRIVERS configuration option 2016-07-11 10:22:19 -07:00
Scott Lahteine
6121c9018a Merge pull request #4265 from thinkyhead/rc_buzzer_patchup
Two strategies to address a stuck buzzer
2016-07-10 19:46:15 -07:00
Scott Lahteine
4a100c6832 Merge pull request #4250 from AnHardt/wait-for-cooling-slope
Adjust wait_for_cooling slope
2016-07-10 19:45:23 -07:00
Scott Lahteine
ed018c98d5 Merge pull request #4024 from thinkyhead/rc_greek_language
Greek Language by @psavva
2016-07-10 19:42:09 -07:00
Scott Lahteine
d1dffc7ad1 timestamp => endtime 2016-07-10 19:36:46 -07:00
Scott Lahteine
71674059c3 Two strategies to address a stuck buzzer 2016-07-10 19:25:23 -07:00
Scott Lahteine
928ff6487a Greek language pack from @psavva 2016-07-10 18:59:04 -07:00
AnHardt
e92e58df1f Adjust wait_for_cooling slope
Adjust wait_for_cooling slope
and drop mintemp for cooling.

See
https://github.com/MarlinFirmware/Marlin/pull/4169#issuecomment-231544532
2016-07-11 03:36:23 +02:00
Scott Lahteine
167f4aa0cc Merge pull request #4259 from clexpert/patch-3
Update language_cz.h
2016-07-10 18:26:23 -07:00
Scott Lahteine
8dda05e92a Merge pull request #4258 from clexpert/patch-2
Total print time for LCD correction (hours:minutes format)
2016-07-10 18:25:18 -07:00
Scott Lahteine
0ccc5d1dd9 Merge pull request #4244 from thinkyhead/rc_dyze_thermistor_diff
Dyze High Temp Thermistor Support
2016-07-10 18:08:44 -07:00
Scott Lahteine
182c8d7f8f Dyze High Temp Thermistor Support 2016-07-10 17:59:05 -07:00
Scott Lahteine
5b0e46c986 Merge pull request #4256 from thinkyhead/rc_fix_singlenozzle_temp
Additional tweaks for HOTENDS == 1
2016-07-10 17:57:00 -07:00
Scott Lahteine
5b87deebb6 Merge pull request #4257 from esenapaj/Follow-up-the-PR-#4253-etc
Follow-up the PR #4253 (Runout Sensor without SD Card, Print Timer support in M104), etc
2016-07-10 16:59:24 -07:00
Scott Lahteine
ee0983ab57 Further reduction when HOTENDS == 1 2016-07-10 16:54:30 -07:00
Scott Lahteine
3e1bbd5e27 Indentation in gcode_M100 2016-07-10 16:33:51 -07:00
Scott Lahteine
b72238f406 Invariant get_pid_output with HOTENDS < 2 2016-07-10 16:33:51 -07:00
Petr Zahradnik
66602f4af6 Update language_cz.h
New strings:
#define MSG_HALTED
#define MSG_PLEASE_RESET
Some texts shortened for smaller displays.
2016-07-10 13:25:50 +02:00
Petr Zahradnik
eaf9e615ce Total print time for LCD correction (hours:minutes format) 2016-07-10 13:08:05 +02:00
esenapaj
9e56d5825e Adjust spacing 2016-07-10 14:25:29 +09:00
esenapaj
5832f4b848 Follow-up the PR #4253 (Runout Sensor without SD Card, Print Timer support in M104)
・Update forgotten example configuration files
2016-07-10 14:24:57 +09:00
Scott Lahteine
77283f5bf0 Merge pull request #4245 from thinkyhead/rc_simpler_therm_check
Simpler/extensible thermistor test in thermistortables.h
2016-07-09 21:13:42 -07:00
Scott Lahteine
f9e08b1fcd Merge pull request #4254 from AnHardt/killscreen
Add a kill-screen
2016-07-09 20:44:42 -07:00
AnHardt
faac2bcfdb Add a kill-screen 2016-07-10 04:50:45 +02:00
Scott Lahteine
3b3e52616c Merge pull request #4253 from thinkyhead/rc_clexpert_runout
Runout Sensor without SD Card, Print Timer support in M104
2016-07-09 19:10:36 -07:00
Scott Lahteine
aa3ab93971 Merge pull request #4240 from AnHardt/sampler-8-7-16
Today's fix and cleanup collection
2016-07-09 19:09:45 -07:00
Scott Lahteine
4cd045791c Reduce code size by trusting the compiler 2016-07-09 18:17:44 -07:00
Scott Lahteine
a8538bd7ce General cleanup, code reduction in Marlin_main.cpp 2016-07-09 18:17:44 -07:00
Scott Lahteine
1026e5b071 Replace PLA/ABS preheating with generic 2016-07-09 18:06:51 -07:00
Petr Zahradnik
e282d69f63 Print job timer comment changed 2016-07-09 17:57:54 -07:00
Petr Zahradnik
a2159cfbc3 Error message change in SanityCheck.h 2016-07-09 17:57:54 -07:00
Petr Zahradník junior
315b4c2153 Runout sensor without SD Card 2016-07-09 17:57:53 -07:00
Scott Lahteine
51c9c3fe2c Indentation in MarlinSerial.cpp 2016-07-09 17:57:53 -07:00
Scott Lahteine
e03414b2dd Simpler/extensible thermistor test in thermistortables.h 2016-07-08 19:54:45 -07:00
Scott Lahteine
c23dd7eefc Merge pull request #4241 from AnHardt/adTXbuffer3
Add TX-buffer for MarlinSerial
2016-07-08 18:34:53 -07:00
AnHardt
4b44a23a36 Add TX-buffer for MarlinSerial
Similar to the current Arduino HardwareSerial
but with max. 256 byte buffer-size.

Deactivated by default.

The boards with AT90USB processor (USBCON) already use a TX-buffer.
2016-07-08 17:25:21 +02:00
AnHardt
468f7f03a2 homeaxis() can leave early
when no known axis needs to be homed.

Most changes are only caused from altering the indentation.
```
if (axis == X_AXIS ? HOMEAXIS_DO(X) : axis == Y_AXIS ? HOMEAXIS_DO(Y) : axis == Z_AXIS ? HOMEAXIS_DO(Z) : 0) {
  ...
}

to

if (!(axis == X_AXIS ? HOMEAXIS_DO(X) : axis == Y_AXIS ? HOMEAXIS_DO(Y) : axis == Z_AXIS ? HOMEAXIS_DO(Z) : 0)) return;
...

```
2016-07-08 15:59:33 +02:00
AnHardt
eff7912243 Ensble/disable hardware endstops in G28 globally.
For moving away from the endstops we do not have to disable them.
They are not tested anyway.
2016-07-08 15:49:10 +02:00
AnHardt
f69434d81c Eliminate void setup_for_endstop_move() 2016-07-08 15:23:20 +02:00
AnHardt
0ea6247fc2 Use logic in Z_SAFE_HOMING
Use logic in Z_SAFE_HOMING

From
```
if (home_all_axis || homeZ) {
  if (home_all_axis) {
  ...
  home z
  }
  else if (homeZ) { // Don't need to Home Z twice
  home z
  }
}

```
to
```
if (home_all_axis || homeZ) {
  if (home_all_axis) {
  ...
  }
  home z
}
```
2016-07-08 15:08:50 +02:00
AnHardt
de3a169336 Always define MIN_Z_HEIGHT_FOR_HOMING even if 0
Always define MIN_Z_HEIGHT_FOR_HOMING even if 0
Always make a potential rise to `home_offset[Z_AXIS]` possible in G28.
Get rid of some very ugly constructs in MBL (ultralcd.cpp).
2016-07-08 15:08:32 +02:00
AnHardt
88ed232f53 Remove HAS_BED_PROBE case in first raise in G28
Differentiating made sense here when we could save a dozen lines of code,
but not for one line.
2016-07-08 14:59:44 +02:00
AnHardt
653eff3b31 Clean up quick_home_xy()
Since we do the actual homing now in the 'normal' routines `quick_home_xy()`
can be simplified to a relative simple diagonal move.
2016-07-08 14:59:27 +02:00
Scott Lahteine
98d0167a57 Merge pull request #4226 from thinkyhead/rc_emergency_command_parser
MarlinSerial emergency-command parser (with M108)
2016-07-07 16:53:55 -07:00
Scott Lahteine
2ee4e4f791 Make wait_for_heatup volatile 2016-07-07 16:37:23 -07:00
Scott Lahteine
bd5a825b8b Wait for end of line before invoking action 2016-07-07 16:37:23 -07:00
Scott Lahteine
ea47803ae2 Simplify emergency parser (only parse initial command) 2016-07-07 16:37:22 -07:00
Scott Lahteine
834ad14c8d Add quickstop_stepper to update current position with stepper.quick_stop() 2016-07-07 16:37:22 -07:00
Scott Lahteine
ecffe92e20 Group EMERGENCY_PARSER commands 2016-07-07 16:37:22 -07:00
AnHardt
a129078927 Add an emergency-command parser to MarlinSerial (supporting M108)
Add an emergency-command parser to MarlinSerial's RX interrupt.

The parser tries to find and execute M108,M112,M410 before the commands disappear in the RX-buffer.

To avoid false positives for M117, comments and commands followed by filenames (M23, M28, M30, M32, M33) are filtered.

This enables Marlin to receive and react on the Emergency command at all times - regardless of whether the buffers are full or not. It remains to convince hosts to send the commands. To inform the hosts about the new feature a new entry in the M115-report was made. "`EMERGENCY_CODES:M112,M108,M410;`".

The parser is fast. It only ever needs two switch decisions and one assignment of the new state for every character.

One problem remains. If the host has sent an incomplete line before sending an emergency command the emergency command could be omitted when the parser is in `state_IGNORE`.
In that case the host should send "\ncommand\n"

Also introduces M108 to break the waiting for the heaters in M109, M190 and M303.

Rename `cancel_heatup` to `wait_for_heatup` to better see the purpose.
2016-07-07 16:37:22 -07:00
Scott Lahteine
9f42b1a075 Merge pull request #4235 from thinkyhead/rc_revert_quickhome_test
Fix quick homing, tweak MIN_Z_HEIGHT_FOR_HOMING
2016-07-07 13:37:14 -07:00
Scott Lahteine
ad968f2325 Merge pull request #4234 from thinkyhead/rc_better_position_logging
Move XYZ in print_xyz and DEBUG_POS to the front
2016-07-07 12:31:15 -07:00
Scott Lahteine
4036c73cdd Don't raise Z if only homing Z 2016-07-07 12:28:37 -07:00
Scott Lahteine
0b6f8f8244 Apply MIN_Z_HEIGHT_FOR_HOMING raise literally 2016-07-07 12:25:02 -07:00
Scott Lahteine
177ec20bf0 Revert quick-home changes 2016-07-07 12:17:34 -07:00
Scott Lahteine
9c5b462ef2 Move XYZ in print_xyz and DEBUG_POS to the front 2016-07-07 11:42:19 -07:00
Scott Lahteine
4e84c803a3 Merge pull request #4232 from thinkyhead/rc_no_axis_codes_needed
Don't use axis_codes if a literal will do
2016-07-06 20:05:16 -07:00
Scott Lahteine
e2f7cb0905 Don't use axis_codes if a literal will do 2016-07-06 18:37:21 -07:00
Scott Lahteine
e76aa9d79a Merge pull request #4231 from thinkyhead/rc_fix_homing_raise
Fix comment on Z raise for homing, save a few bytes
2016-07-06 16:23:29 -07:00
Scott Lahteine
6559f7359f Fix comment on Z raise for homing, save a few bytes 2016-07-06 16:21:51 -07:00
Scott Lahteine
799c60cadc Merge pull request #4217 from thinkyhead/rc_fix_homing_raise
Don't do_probe_raise with MIN_Z_HEIGHT_FOR_HOMING
2016-07-06 14:39:37 -07:00
Scott Lahteine
99a5a5dd65 Merge pull request #4228 from petrzjunior/patch-1
[LANGUAGE] Update Czech (filament change and info)
2016-07-06 14:00:31 -07:00
Scott Lahteine
d7e9647505 Sanity Check for probe raises 2016-07-06 13:46:06 -07:00
Scott Lahteine
d0b29cabf3 Don't re-home X and Y if you quick homed 2016-07-06 13:46:06 -07:00
Scott Lahteine
e0a6b978f5 Don't do_probe_raise with MIN_Z_HEIGHT_FOR_HOMING 2016-07-06 13:46:05 -07:00
Philip Schell
cf8ec1216a Update language_de.h for German translation
@MarlinFirmware/language-team my changes for the German language. Feel free to improve :)
2016-07-06 21:44:16 +02:00
petrzjunior
b81b77111b Update language_cz.h 2016-07-06 21:04:34 +02:00
Scott Lahteine
7735ec5e7a Merge pull request #4223 from thinkyhead/rc_rename_heatup
Change cancel_heatup to wait_for_heatup
2016-07-06 11:25:44 -07:00
Scott Lahteine
160a2be117 Change cancel_heatup to wait_for_heatup 2016-07-06 09:17:50 -07:00
Scott Lahteine
cb17871a48 Merge pull request #4207 from AnHardt/AllenKey2
Clean up, simplify and generalize the Allen-key-probe code.
2016-07-05 19:34:36 -07:00
AnHardt
16c83d203b Make use of the good features of a sled probe for all probes.
Move and extend axis_unhomed test to deploy/stow_z_probe().
Move and extend position store/restore to deploy/stow_z_probe().

Now all kinds of probes can use the 'E' parameter in G29/M48.
Allen key probes can be used now for grid and 3-point levelling.

Deploying the Allen Key probe uses big moves in z direction.
Too dangerous for an unhomed z-axis.
Throw a compile time error when we try to configure an
Allen Key probe homing to z-min and having no other z-min-endstop.
2016-07-06 04:11:04 +02:00
AnHardt
8555816a11 Generalize and simplify 'triggered when stowed test`
The `PROBE_IS_TRIGGERED_WHEN_STOWED_TEST` is able to detect if a probe is
successfully deployed/stowed.
It was part of the Allen Key probes code only.
Now the function is generally available.

Currently this test is compulsory for Allen Key probes to not alter the used behaviour
If you want to add the test for an other type of probe simply add
```
#define PROBE_IS_TRIGGERED_WHEN_STOWED_TEST
```
to your config.
2016-07-06 03:56:17 +02:00
AnHardt
5126cce7fd Move Allen Key probe move scripts to their own functions
There was an hidden extra move after the scripts. This is configurable now.
Added the extra moves to the relevant configs.
2016-07-06 03:46:40 +02:00
AnHardt
7d063c111c Add a optional feedrate parameter to do_blocking_move()
Add a optional feedrate parameter to `do_blocking_move()` and its companions.
2016-07-06 03:46:34 +02:00
Scott Lahteine
90d8bb53e8 Merge pull request #4214 from thinkyhead/fix_clear_command_queue
Allow the command queue to be cleared by commands, lcd menus
2016-07-05 16:35:55 -07:00
Scott Lahteine
b114b6a0b3 Save 152 bytes using uint8_t for command indices 2016-07-05 16:29:28 -07:00
Scott Lahteine
0d4ff0c48b Allow the queue to be cleared from within commands 2016-07-05 16:25:20 -07:00
Scott Lahteine
c450851401 Merge pull request #4209 from AnHardt/too-high-G28
Make raise for probe deploy relative in homeaxis()
2016-07-05 11:07:42 -07:00
Roxy-3D
a3f350e728 Merge pull request #4212 from AnHardt/MBL-typo
MBL typo
2016-07-05 11:49:29 -05:00
AnHardt
f799f18388 MBL typo 2016-07-05 18:19:53 +02:00
AnHardt
8b02e68cb6 Make raise for probe deploy relative in homeaxis()
Make raise for probe deploy relative in homeaxis()
by setting `current_position[axis]` to zero later.
2016-07-05 10:42:33 +02:00
Scott Lahteine
e48502866b Merge pull request #3611 from alephobjects/M108_cancel_heatup
Introduce M108 cancel wait for heatup/cooldown of the hotend and bed
2016-07-04 01:19:31 -07:00
Scott Lahteine
d70197f514 Merge pull request #4204 from thinkyhead/rc_fix_gcode_t_position
Additional patches for gcode_T position change
2016-07-04 01:16:22 -07:00
Scott Lahteine
869b517589 Merge pull request #4205 from thinkyhead/rc_fixup_unit_references
References to millimeters in code comments need an update
2016-07-04 01:15:34 -07:00
Scott Lahteine
e104b91ea6 References to millimeters in code comments need an update 2016-07-03 20:13:29 -07:00
Scott Lahteine
e604c0955e Merge pull request #4203 from AnHardt/rem_wants_to_cool_warning
Remove wants_to_cool uninitialized warning
2016-07-03 18:24:23 -07:00
AnHardt
ff91d28a3a Remove wants_to_cool warning
Remove wants_to_cool warning
2016-07-04 03:12:11 +02:00
Scott Lahteine
c9e536cf87 Additional patches for gcode_T position change 2016-07-03 18:11:02 -07:00
Scott Lahteine
60865fc45b Merge pull request #4202 from thinkyhead/rc_fix_gcode_t_position
Fix position adjustment with gcode_T and MBL
2016-07-03 17:55:43 -07:00
Scott Lahteine
f841038313 Merge pull request #4201 from thinkyhead/rc_info_fit
Shorter labels for Print Stats info
2016-07-03 17:47:00 -07:00
Scott Lahteine
f31af61ee2 Fix position adjustment with gcode_T and MBL 2016-07-03 17:44:04 -07:00
Scott Lahteine
a8f5c2bf96 Merge pull request #4192 from birkett/k8400
Add Velleman K8400 board support.
2016-07-03 17:41:13 -07:00
Scott Lahteine
ef8980bfa0 Shorter labels for Print Stats info 2016-07-03 16:00:24 -07:00
Scott Lahteine
4fff9872b9 Merge pull request #4200 from thinkyhead/rc_cleanup_m600
Fix compiler warnings for static screens
2016-07-03 15:44:20 -07:00
Scott Lahteine
2ed625dafa Fix compiler warnings for static screens 2016-07-03 15:26:17 -07:00
Anthony Birkett
e77844594d readme.md -> README.md 2016-07-03 22:15:24 +01:00
Anthony Birkett
a0b00d29e3 Add a ported example configuration for the Velleman K8400 (Vertex) printer.
Supports both dual and single head printers (with the correct config).
Includes community sourced feed rate fix.

Rename / move files.

Remove redundant definitions.
2016-07-03 22:09:08 +01:00
Scott Lahteine
5a81c132a2 Merge pull request #4199 from lrpirlet/G28_X_drills_a_hole_in_printed_part
apply correction when swtiching from MBL to physical in G28 X
2016-07-03 13:37:38 -07:00
lrpirlet
9b42c6b44b apply correction when swtiching from MBL to physical in G28 X 2016-07-03 21:43:42 +02:00
Andrea Cimbalo
46196e9ee5 Add working PlatformIO support 2016-07-03 15:33:24 +02:00
Scott Lahteine
1236a3b3ab Merge pull request #4189 from esenapaj/Follow-up-the-PR-#3662
Follow-up the PR #3662 (Rewritten FILAMENT_CHANGE_ENABLE feature)
2016-07-02 17:16:09 -07:00
esenapaj
95347fc650 Follow-up the PR #3662 (Rewritten FILAMENT_CHANGE_ENABLE feature)
・Update a forgotten Configuration_adv.h of Cartesio
2016-07-03 09:04:29 +09:00
Scott Lahteine
b37e727072 Merge pull request #3662 from thinkyhead/rc_fixup_auto_filament_change
Rewritten FILAMENT_CHANGE_ENABLE feature
2016-07-02 16:20:20 -07:00
Scott Lahteine
a06c5165a7 Shorter strings for smaller LCDs 2016-07-02 15:47:16 -07:00
Scott Lahteine
982f10e6a0 Use STATIC_ITEM for LCD message display 2016-07-02 15:47:15 -07:00
Petr Zahradnik
43ff0ce35f Rewritten FILAMENT_CHANGE_ENABLE feature 2016-07-02 15:34:33 -07:00
Scott Lahteine
4a8e191cec Merge pull request #4188 from thinkyhead/rc_birkett_info_menu_jul2
Printer information menu
2016-07-02 15:30:00 -07:00
Scott Lahteine
b77069de01 Add a Travis test for LCD_INFO_MENU 2016-07-02 15:22:34 -07:00
Scott Lahteine
51b7820686 Patch up About Printer sub-menus 2016-07-02 15:22:34 -07:00
Scott Lahteine
439e78147d Static menu items take an optional string, LJ by default 2016-07-02 15:22:34 -07:00
Scott Lahteine
fa9b2a925d Tweak spacing in printcounter.cpp 2016-07-02 15:22:33 -07:00
Scott Lahteine
dbfc87cdcf Squish sanity check for build info 2016-07-02 15:22:33 -07:00
Anthony Birkett
7a377c1d75 Add "About Printer" information menu.
Includes:
  *firmware version / branch / date.
  *extruder count
  *board information (name, serial details, power supply type)
  *thermistors (names, min/max temperatures)
  *printer statistics (PRINTCOUNTER details)

Thanks to @thinkyhead for contributions.
2016-07-02 15:22:26 -07:00
Scott Lahteine
77a923d8ce Merge pull request #4186 from thinkyhead/rc_array_macros
Simplified variable-size array macros
2016-07-01 20:48:12 -07:00
Scott Lahteine
e650a75b88 Simplified variable-size array macros 2016-07-01 20:36:05 -07:00
Scott Lahteine
ac4f235912 Merge pull request #4167 from thinkyhead/rc_eeprom_checksum
EEPROM Checksum
2016-07-01 19:22:49 -07:00
Scott Lahteine
ba00615aa4 Merge pull request #4184 from esenapaj/Tab-to-Space
Tab to Space
2016-07-01 16:34:12 -07:00
esenapaj
03b8f88092 Tab to Space 2016-07-02 08:07:33 +09:00
Scott Lahteine
b4fee31a84 Merge pull request #4183 from AnHardt/do_probe_raise-asymetry
Unconditional do_probe_raise() in probe_pt()
2016-07-01 12:50:47 -07:00
AnHardt
cb1b31f69b Unconditional do_probe_raise() in probe_pt()
If Z_RAISE_BETWEEN_PROBINGS is null or undefined the probe is currently not raised by home_offset[Z_AXIS] and zprobe_zoffset.
But when different from 0 is.

If an undefined Z_RAISE_BETWEEN_PROBINGS expands to 0 (and it does) this is the solution.


A similar asymmetry exists with the newly introduced 'short-cut' in G28 - but its the rise before anything is probed - so should not make a difference.
2016-07-01 15:28:41 +02:00
Scott Lahteine
7ef7843fd4 Merge pull request #4181 from thinkyhead/rc_rename_a_move_func
Do interpolated moves for Allen Key deploy/stow
2016-06-30 16:30:09 -07:00
Scott Lahteine
6b2a7b30af Extra comments to clarify EEPROM code 2016-06-30 16:28:01 -07:00
Scott Lahteine
787f394676 MAX_EXTRUDERS replaces mysterious "4" 2016-06-30 16:27:37 -07:00
Scott Lahteine
bc3748b7bc Add shared Config_Postprocess for Read and Reset 2016-06-30 16:25:29 -07:00
Scott Lahteine
adcd0f5de3 Some formatting in configuration_store.cpp 2016-06-30 16:25:29 -07:00
Scott Lahteine
5e370006fc EEPROM Checksum 2016-06-30 16:20:25 -07:00
Scott Lahteine
725fde8b26 Merge pull request #4169 from thinkyhead/rc_wait_but_break
Allow wait-for-cooling, break at threshold or if cooling stalls
2016-06-30 16:13:51 -07:00
Scott Lahteine
da6b0dab5f Use prepare_move_to_destination for Allen Key deploy/stow 2016-06-30 16:09:43 -07:00
Scott Lahteine
c42f8fb8dd Rename some movement sub-functions 2016-06-30 15:50:00 -07:00
Scott Lahteine
b6b3a4afbf Merge pull request #4168 from thinkyhead/rc_viki2_for_ramps
Support for VIKI2 in RAMPS and derivatives
2016-06-30 01:48:50 -07:00
Scott Lahteine
3d9472f305 Merge pull request #4173 from thinkyhead/rc_cleanup_runout
Cleanup extruder runout configs
2016-06-30 01:47:40 -07:00
Scott Lahteine
f84d85f761 Cleanup extruder runout configs 2016-06-30 01:40:41 -07:00
Scott Lahteine
5e14a528dd Always wait for cooling in M109/M190, break at low temp or if cooling stalls 2016-06-29 14:07:54 -07:00
Scott Lahteine
bf216bd78f Merge pull request #4165 from thinkyhead/rc_rumba_temp_pins
Always define temp sensor, heater pins for RUMBA
2016-06-28 18:20:37 -07:00
Scott Lahteine
0b0b7aac6e Support for VIKI2 in RAMPS and derivatives 2016-06-28 18:19:18 -07:00
Scott Lahteine
abda4ab427 Clean up CNControls pins 2016-06-28 16:56:48 -07:00
Scott Lahteine
683975cf90 Fix spelling in a config comment 2016-06-28 16:49:13 -07:00
Scott Lahteine
8268c0a9a0 Always define temp sensor, heater pins for RUMBA 2016-06-28 16:28:05 -07:00
Scott Lahteine
db19959735 Merge pull request #4161 from thinkyhead/rc_general_cleanup
Reduce storage requirements for strings, make some PGM
2016-06-27 20:46:26 -07:00
Scott Lahteine
2e96276bf4 More debug message cleanup 2016-06-27 20:36:19 -07:00
Scott Lahteine
dc2c0e5e24 Simpler debug output for deploy/stow 2016-06-27 20:36:18 -07:00
Scott Lahteine
bd491818d6 Reduce storage requirements for strings, make some PGM 2016-06-27 20:36:18 -07:00
Scott Lahteine
ee876dcd7a Merge pull request #4159 from thinkyhead/rc_rigidbot_diff
Rigidbot V2 support - has MCP4728 digipot
2016-06-27 20:35:22 -07:00
Scott Lahteine
fdb6533730 Merge pull request #4162 from thinkyhead/rc_anhardt_sled3
Simplify dock_sled() and some more probe tweaks
2016-06-27 20:25:36 -07:00
Scott Lahteine
0c24e0e445 Support for newer Wire library 2016-06-27 20:25:03 -07:00
Scott Lahteine
ddb386c139 Init DAC_DISABLE_PIN in dac_init 2016-06-27 20:25:03 -07:00
AnHardt
e480ee0054 Further cleanup of G28 for probes 2016-06-27 20:19:51 -07:00
AnHardt
39883d03fc universalize axis_unhomed_error() 2016-06-27 20:19:51 -07:00
AnHardt
e616093d4c Simplify dock_sled()
`dock_sled()` is never called with offset parameter - remove it.
We move x only - so only that needs to be homed. Consequence is - we can home to z-min now with a sled probe!
Feedrates are set and restored in `do_blocking_move()`.
We already checked if the probe is deployed/stowed in deploy/stow_probe.
```
if (z_loc < _Z_RAISE_PROBE_DEPLOY_STOW + 5) z_loc = _Z_RAISE_PROBE_DEPLOY_STOW;
```
makes no sense - remove.
Now the raise is the same for deploy/stow -> move before the if.
Replace the if with a ternary.
Instead writing LOW/HIGH use the boolean `stow` we already have.

There is no reason for not using the sled probe in G29/M48 with 'E'.
It takes a while but works. (tested!)
2016-06-27 20:19:51 -07:00
Scott Lahteine
6c60869409 Support DAC_OR_ADDRESS in Printrboard too 2016-06-27 12:36:21 -07:00
Scott Lahteine
593c8bf286 Support for Rigidbot V2 2016-06-27 12:35:20 -07:00
Scott Lahteine
1df63b7ef4 Merge pull request #4158 from thinkyhead/rc_has_lcd_contrast
CARTESIO_UI has lcd contrast
2016-06-27 12:24:02 -07:00
Scott Lahteine
511503ede9 CARTESIO_UI has lcd contrast 2016-06-27 12:04:49 -07:00
Scott Lahteine
71a693b3ec Merge pull request #4154 from thinkyhead/rc_probe_raise_options
Use Z_RAISE_BETWEEN_PROBINGS with MBL
2016-06-26 16:03:42 -07:00
Scott Lahteine
829c92f1ba Use Z_RAISE_BETWEEN_PROBINGS with MBL 2016-06-26 15:39:11 -07:00
Scott Lahteine
eb1755208f Merge pull request #4153 from thinkyhead/rc_probe_raise_options
Combine Z raise before/after options
2016-06-26 15:30:08 -07:00
Scott Lahteine
10da7ac86c Combine Z raise before/after options 2016-06-26 13:56:30 -07:00
Scott Lahteine
9caa8941e2 Merge pull request #4149 from thinkyhead/rc_minimum_raise_in_probe_pt
Ensure a minimum height before XY move in probe_pt
2016-06-25 19:35:58 -07:00
Scott Lahteine
3fa631130f Ensure a minimum height before XY move in probe_pt 2016-06-25 19:19:31 -07:00
Scott Lahteine
815000ff32 Merge pull request #4148 from thinkyhead/3drag_delay_anhardt
Fix up delays in ST7920_SWSPI_SND_8BIT
2016-06-25 19:16:37 -07:00
Scott Lahteine
a7684eef7a Squish code in ST7920 2016-06-25 18:35:15 -07:00
AnHardt
b4076883cc Set testet delays for K8200, RAMBO, MINIRAMBO and ST7920 2016-06-25 18:35:15 -07:00
AnHardt
4454d80276 Decrease the needed nops to 1
by shitfing the left shift into the high phase.

```
2	cbi 0x2,1 ;set CLK                      //
1	in r18,__SREG__                         //1
1-3	sbrc r24,7                              //2-4
2	rjmp .L19                               //4
1	cli                  .L19:              //5
2	lds r25,258          lds r25,258        //7
1	andi r25,lo8(-2)     ori r25,lo8(1)     //8
2	sts 258,r25          sts 258,r25        //10
1	out __SREG__,r18     out __SREG__,r18   //11
2	.L3:                 rjmp .L3           //13     //2
2	sbi 0x2,1 ;reset CLK //                 //13-15  //2-4
1	lsl r24	 ;  val      //1
1	nop                  //2
2	cbi 0x2,1 ;set CLK   //4
...
```
2016-06-25 18:35:15 -07:00
AnHardt
56c42b572c 3 ms speedup for ST7920 and delay for BOARD_3DRAG
and saving ~1k memory
by limiting the `#pragma GCC optimize (3)` optimisation to `ultralcd_st7920_u8glib_rrd.h`. These optimisation was and is not done for all the other displays, is the reason for the big additionally use of memory, because the complete 'ultralcd.cpp' and 'dogm_lcd_implementation.h' was optimised (sadly i did not observe a change in speed).

Unrolling the loop in `ST7920_SWSPI_SND_8BIT()`, what i expected the optimiser to do, by hand, saved some speed by eliminating the loop variable (i) compares and increases. Every CPU cycle in this loop costs at least 0.5ms per display update because it's executed more than 1k times/s.

The delays are now pre-filled with the calculated values for 4.5V driven ST7920.
A way to simply add __your__ timing into the configuration was made.

At 4.5V
1.) The CLK signal needs to be at least 200ns high and 200ns low.
2.) The DAT pin needs to be set at least 40ns before CLK goes high and must stay at this value until 40ns after CLK went high.

A nop takes one processor cycle.
For 16MHz one nop lasts 62.5ns.
For 20MHz one not lasts 50ns.

To fulfill condition 1.) we need 200/62.5 = 3.2 => 4 cycles (200/50 = 4 => 4). For the low phase, setting the pin takes much longer. For the high phase we (theoretically) have to throw in 2 nops, because changing the CLK takes only 2 cycles.

Condition 2.) is always fulfilled because the processor needs two cycles (100 - 125ns) for switching the CLK pin.


Needs tests and feedback.
Especially i cant test 20MHz, 3DRAG and displays supplied wit less than 5V.
Are the delays right? Please experiment with longer or shorter delays. And give feedback.

Already tested are 5 displays with 4.9V - 5.1V at 16MHz where no delays are needed.
2016-06-25 18:35:15 -07:00
Scott Lahteine
ca184d3d72 Merge pull request #4147 from thinkyhead/rc_fix_M48_raise
Fix debug output in probe_pt
2016-06-25 18:15:33 -07:00
Scott Lahteine
e72bd68eaf Merge pull request #4146 from epatel/epatel/max_z_endstop
MBL: Add support for max z endstop
2016-06-25 18:05:02 -07:00
Scott Lahteine
b4161cbd98 Fix debug output in probe_pt 2016-06-25 17:59:03 -07:00
Edward Patel
da88b00585 MBL: Add support for max z endstop
See https://github.com/MarlinFirmware/Marlin/issues/4088
2016-06-25 21:58:02 +02:00
Scott Lahteine
c8a9829387 Merge pull request #4140 from thinkyhead/rc_button_reliability
Always do a brief delay in `lcd_quick_feedback`
2016-06-24 20:05:56 -07:00
Scott Lahteine
74878d1f16 Always do a brief delay in lcd_quick_feedback 2016-06-24 14:46:10 -07:00
Scott Lahteine
7de7552069 Merge pull request #4133 from MagoKimbra/Single_home_axis_delta
Single home Axis Delta need simple sync_plan_position
2016-06-23 21:14:22 -07:00
Scott Lahteine
de0e6d5f13 Merge pull request #4134 from thinkyhead/rc_followup_4021
Additional cleanup to probing/leveling
2016-06-23 20:55:49 -07:00
Scott Lahteine
15a6b49f37 Simplified probe_pt (in G30) 2016-06-23 20:25:46 -07:00
Scott Lahteine
6a7045b9bf Remove clean_up_after_endstop_move 2016-06-23 20:23:19 -07:00
Scott Lahteine
2a4f866561 Simplified probe_pt (in G29) 2016-06-23 20:22:28 -07:00
Scott Lahteine
89a2aa026b Simplified probe_pt (in M48) 2016-06-23 19:22:45 -07:00
Scott Lahteine
f8530c5d1f Simplified probe_pt function (G28 grid) 2016-06-23 19:09:32 -07:00
Scott Lahteine
c376c08042 Simplified probe_pt function (part 1) 2016-06-23 19:00:29 -07:00
Scott Lahteine
9a71b7f8ad Fix debug message for 3-point leveling 2016-06-23 18:17:31 -07:00
Scott Lahteine
550c03a5a9 Drop raise_z_after_probing function 2016-06-23 18:11:54 -07:00
Scott Lahteine
bb38c816af Always raise in deploy_z_probe / stow_z_probe 2016-06-23 18:00:20 -07:00
Scott Lahteine
68f3350050 Cleanup M401 / M402 2016-06-23 17:04:41 -07:00
Scott Lahteine
3afda99adf Regular handlers for G31 / G32 2016-06-23 17:04:13 -07:00
Scott Lahteine
6803c8e37e Move Z up before, or down after XY, for "blocking move" 2016-06-23 15:50:13 -07:00
Scott Lahteine
03c70c1990 SERVO_DEACTIVATION_DELAY => SERVO_DELAY 2016-06-23 14:33:29 -07:00
MagoKimbra
570f3bbc07 Single home Axis Delta need simple sync_plan_position 2016-06-23 23:09:47 +02:00
Scott Lahteine
61f34eec03 Merge pull request #4125 from jbrazio/bugfix/planner-warning
Fixes some compiler warnings
2016-06-22 19:34:37 -07:00
Scott Lahteine
bdcd628896 Merge pull request #4126 from thinkyhead/rc_lin_timing_patch
Patch LIN_ADVANCE timing issue
2016-06-22 19:24:44 -07:00
João Brázio
664232140d Fixes somes compiler warnings 2016-06-23 03:12:55 +01:00
Scott Lahteine
6e5e388861 Merge pull request #4021 from thinkyhead/rc_raise_z_for_servos
Make probes independent of leveling
2016-06-22 19:10:37 -07:00
Sebastianv650
0c5192b288 Patch LIN_ADVANCE timing issue
Also the extruder stepper ISR has to keep an eye on step_loops count.
2016-06-22 19:05:14 -07:00
Scott Lahteine
d4134e6901 Define Z_SAFE_HOMING point when Z_PROBE_SLED is activated alone 2016-06-22 17:51:32 -07:00
Scott Lahteine
7b2fadd598 Apply some fixes from Andreas
Derived from
https://github.com/AnHardt/Marlin/commit/6e8ede8c694fa4d9e3c769840b09d56
7f8d8e0dd
2016-06-22 17:35:59 -07:00
Scott Lahteine
bd01592816 Goodbye MECHANICAL_PROBE 2016-06-22 17:13:33 -07:00
Scott Lahteine
2640d13a9f Simplify initial raise in M48 2016-06-22 16:53:04 -07:00
Scott Lahteine
3763d45656 Return Z position in run_z_probe 2016-06-22 16:52:32 -07:00
Scott Lahteine
1f48b5c30f Pass a raise to probe_pt, not a Z position 2016-06-22 16:40:21 -07:00
Scott Lahteine
6fdd5ba246 Save and restore feedrate in more places 2016-06-22 16:40:20 -07:00
Scott Lahteine
fe173c2bc6 Generalized probe raise, use for after probing 2016-06-22 14:44:30 -07:00
Scott Lahteine
7da3080761 Simpler cleanup in G28 / G29 2016-06-22 14:44:30 -07:00
Scott Lahteine
15229d988b Fix compile error for bed matrix in M48 2016-06-22 14:04:46 -07:00
Scott Lahteine
c01352cbd5 Add a dependency for z servo macros 2016-06-22 14:04:23 -07:00
Scott Lahteine
c3794bd695 Add HAS_PROBING_PROCEDURE conditional 2016-06-22 14:03:22 -07:00
Scott Lahteine
42ce60c5cc Make sure NUM_SERVOS is set for Z servo endstop 2016-06-22 14:01:19 -07:00
Scott Lahteine
b590a7dee0 Make Z_RAISE_BETWEEN_PROBINGS a more general option 2016-06-22 14:00:44 -07:00
Scott Lahteine
bb9c67b4b5 Tweak some feedrate vars 2016-06-22 03:27:31 -07:00
Scott Lahteine
5158bd6e93 Screen out G29 E for sled and allen key, allow single probe 2016-06-22 03:20:33 -07:00
Scott Lahteine
ccae92588d Cleanup debug in G28 and G29 2016-06-22 03:20:33 -07:00
Scott Lahteine
b4a9d2366c Use a macro for kinematic sync_plan_position 2016-06-22 03:20:33 -07:00
Scott Lahteine
bfccf26294 Use sync_plan_position_delta where needed 2016-06-22 03:20:33 -07:00
Scott Lahteine
a6b8c67df4 Move probe deploy after setup call in G29 2016-06-22 03:20:33 -07:00
Scott Lahteine
e69916d1bd Split up endstop_move functions 2016-06-22 03:20:33 -07:00
Scott Lahteine
0e18a4897b Simpler handling of sled/allen-key in probe_pt 2016-06-22 03:20:33 -07:00
Scott Lahteine
1a92e2ef18 Comment on run_z_probe 2016-06-22 03:20:33 -07:00
Scott Lahteine
68e0e5855e For all probes, at the end of G29 simply raise and stow 2016-06-22 03:20:33 -07:00
Scott Lahteine
c3023f8cc5 Make M401/M402 available with HAS_BED_PROBE 2016-06-22 03:20:33 -07:00
Scott Lahteine
9f0c255c69 Show uncorrected position in set_bed_level_equation_3pts 2016-06-22 03:20:33 -07:00
Scott Lahteine
07298ac992 Initialize current_position to home_offset on boot 2016-06-22 03:20:33 -07:00
Scott Lahteine
f30df89ee1 Merge pull request #4122 from thinkyhead/rc_xy_travel_feedrate
Make XY Probe (travel) Speed available in G28
2016-06-22 03:18:54 -07:00
Scott Lahteine
bd99a2bcff Add a Travis test of Z Safe Homing without ABL 2016-06-22 03:06:54 -07:00
Scott Lahteine
d50539583a Make XY_PROBE_SPEED a general probe option 2016-06-22 03:04:47 -07:00
Scott Lahteine
2798499b71 XY_TRAVEL_SPEED => XY_PROBE_SPEED 2016-06-22 02:45:25 -07:00
Scott Lahteine
88dc543584 Add a macro for XY_TRAVEL_FEEDRATE 2016-06-22 02:23:50 -07:00
Scott Lahteine
937123ab32 Merge pull request #4119 from thinkyhead/fix_stepper_compile_error
Fix stepper compile error with motor_current_setting
2016-06-21 20:25:27 -07:00
Scott Lahteine
528df1b02d Travis test for MINIRAMBO and PWM_MOTOR_CURRENT 2016-06-21 19:50:09 -07:00
Scott Lahteine
117db77c55 make motor_current_setting static and constexpr 2016-06-21 19:50:08 -07:00
Scott Lahteine
111260f407 Merge pull request #4118 from thinkyhead/bq_update_rebase
Update bq Hephestos 2 config
2016-06-21 18:18:48 -07:00
João Brázio
19fb04d761 Update bq Hephestos 2 config 2016-06-21 18:15:51 -07:00
Scott Lahteine
b0e47608e6 Merge pull request #4108 from esenapaj/Fix-for-PR-#4093
Fix for PR #4093 (Make Z Probe options independent of ABL), etc
2016-06-21 18:12:08 -07:00
Scott Lahteine
c84732e605 Merge pull request #4111 from esenapaj/Cosmetic-changes-and-small-fix-for-thermistortables.h
Cosmetic changes and small fix for thermistortables.h
2016-06-21 18:05:32 -07:00
Scott Lahteine
cdc661ea5e Merge pull request #4110 from esenapaj/Small-cosmetic-changes-for-language-files
Small cosmetic changes for language files
2016-06-21 18:04:12 -07:00
Scott Lahteine
c8186e9423 Merge pull request #4109 from esenapaj/Enclose-#error-string-by-double-quotes
Enclose #error string by double-quotes
2016-06-21 18:03:30 -07:00
Scott Lahteine
d8dcc4ac57 Merge pull request #4117 from thinkyhead/rc_i2c_comment_fix
Fix comments on EXPERIMENTAL_I2CBUS
2016-06-21 18:00:36 -07:00
Scott Lahteine
40cd20a236 Fix comments on EXPERIMENTAL_I2CBUS 2016-06-21 17:58:44 -07:00
Scott Lahteine
67750d73ef Merge pull request #4107 from thinkyhead/rc_fixup_M48_config
Clean up configs for Z_MIN_PROBE_REPEATABILITY_TEST
2016-06-21 14:56:35 -07:00
esenapaj
385945ca31 Cosmetic changes and small fix for thermistortables.h
・Adjust spacing
・Standardize comments position
・Remove ',' at the tail of array
2016-06-21 21:19:47 +09:00
esenapaj
fac58f0291 Cosmetic changes for language files 2016-06-21 21:13:25 +09:00
esenapaj
14b661b9e5 Enclose #error string by double-quotes 2016-06-21 21:06:14 +09:00
esenapaj
d583ea852d Standardize format description of Panel 2016-06-21 20:51:27 +09:00
esenapaj
aa6d35bd49 Move code block of probe to appropriate position 2016-06-21 20:36:46 +09:00
esenapaj
740fb2ce39 Adjust spacing 2016-06-21 19:37:45 +09:00
esenapaj
f77f3ffa70 Remove duplicated Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX 2016-06-21 19:33:45 +09:00
Scott Lahteine
19fe93a5a9 Clean up configs for Z_MIN_PROBE_REPEATABILITY_TEST 2016-06-21 03:10:46 -07:00
Scott Lahteine
71a7408012 Merge pull request #4106 from thinkyhead/rc_temp_compile_err
Fix compile error with watch_bed_next_ms
2016-06-21 02:48:46 -07:00
Scott Lahteine
5e469622c9 Merge pull request #4105 from thinkyhead/rc_combine_probe_blocks
Move raise_z_after_probing into earlier block
2016-06-21 02:14:38 -07:00
Scott Lahteine
dcb8ec32ee Fix compile error with watch_bed_next_ms 2016-06-21 02:13:41 -07:00
Scott Lahteine
3996242e9d Allow Z_MIN_PROBE_REPEATABILITY_TEST solo 2016-06-21 01:56:40 -07:00
Scott Lahteine
26a9cd0b08 Move run_z_probe to earlier block 2016-06-21 01:25:23 -07:00
Scott Lahteine
7f8a2025af Move raise_z_after_probing into earlier block 2016-06-21 01:03:40 -07:00
Scott Lahteine
71534dc11f Merge pull request #4100 from thinkyhead/rc_z_deploy
Use deploy/stow with FIX_MOUNTED_PROBE too
2016-06-21 00:40:48 -07:00
Scott Lahteine
6563b07879 Test for mechanical and fix mounted probes 2016-06-20 16:40:44 -07:00
Scott Lahteine
2530371516 Always disable probe at the end of G29 2016-06-20 16:40:44 -07:00
Scott Lahteine
6aba98e470 Comment on setup_for_endstop_move 2016-06-20 16:40:44 -07:00
Scott Lahteine
04e88d008e Clear up ordering in G30 2016-06-20 16:40:44 -07:00
Scott Lahteine
ed75b0ea11 Make clean_up function available for probes 2016-06-20 16:28:45 -07:00
Scott Lahteine
51d52cb52a Make run_z_probe available for any bed probe 2016-06-20 16:02:36 -07:00
Scott Lahteine
f6b09cf465 Always use deploy/stow for dock_sled 2016-06-20 15:51:01 -07:00
Scott Lahteine
3b457c2dd3 Use deploy/stow with FIX_MOUNTED_PROBE too 2016-06-20 15:25:01 -07:00
Scott Lahteine
524f6d9bd6 Merge pull request #4096 from thinkyhead/rc_always_raise_servo
Always raise Z (if needed) for servo deploy/stow
2016-06-19 20:40:06 -07:00
Scott Lahteine
7e9d4a68d4 Always raise Z (if needed) for servo deploy/stow 2016-06-19 20:17:13 -07:00
Scott Lahteine
9beb3f2f5e Merge pull request #4097 from thinkyhead/rc_fil_runout_cleanup
FIL_RUNOUT_INVERTING false by default
2016-06-19 19:46:14 -07:00
Scott Lahteine
f215b30932 Merge pull request #4093 from thinkyhead/rc_probe_without_abl
Make Z Probe options independent of ABL
2016-06-19 19:44:25 -07:00
Scott Lahteine
2fd2301928 FILRUNOUT => FIL_RUNOUT 2016-06-19 19:25:26 -07:00
Scott Lahteine
dfbf8b3c2c FIL_RUNOUT_INVERTING false by default 2016-06-19 19:25:26 -07:00
Scott Lahteine
7b5cd314a5 Merge pull request #4095 from thinkyhead/rc_fil_runout_cleanup
Improve FILAMENT_RUNOUT_SENSOR, FILRUNOUT_PIN
2016-06-19 18:48:18 -07:00
Scott Lahteine
42ccb5b0df Travis test a servo probe without ABL 2016-06-19 18:47:27 -07:00
Scott Lahteine
de12228758 Make Z Probe options independent of ABL 2016-06-19 18:47:27 -07:00
Scott Lahteine
add0032820 Improve FILAMENT_RUNOUT_SENSOR, FILRUNOUT_PIN 2016-06-19 18:13:33 -07:00
Scott Lahteine
15a5eeb740 Merge pull request #4094 from thinkyhead/rc_cartesio_config
Cartesio UI display option in all configs
2016-06-19 17:43:25 -07:00
Scott Lahteine
f8c278ce4d Cartesio UI display option in all configs 2016-06-19 17:39:46 -07:00
Scott Lahteine
43ec24158e Merge pull request #4092 from thinkyhead/rc_sd_error
Output a message for SD read errors
2016-06-19 17:30:29 -07:00
Scott Lahteine
400e13d136 Output a message for SD read errors 2016-06-19 17:14:56 -07:00
Roxy-3D
96b8bcca84 Merge pull request #4081 from thinkyhead/rc_tweaky_m48_tweaks
Cleanup of M48
2016-06-18 22:21:16 -05:00
Scott Lahteine
b7e3c1bbc4 Tweak M48 output conditions 2016-06-18 16:17:53 -07:00
Scott Lahteine
b714fb644c Merge pull request #4085 from thinkyhead/rc_fix_M851
Fix M851
2016-06-18 15:42:52 -07:00
Scott Lahteine
1dad912b03 Adjust M48 raise / move handling 2016-06-18 15:38:24 -07:00
Scott Lahteine
46d3ef2223 Simplify sample_set probe_pt call in M48 2016-06-18 15:38:23 -07:00
Scott Lahteine
a647b05f82 Shrink some debug code in G28 2016-06-18 15:38:23 -07:00
Scott Lahteine
4edf813bde Just-in-time declaration style in M48 2016-06-18 15:38:23 -07:00
Juan Ricardo Gomez Anaya
c475291e19 Fix M851
Minor change missing in the process of standardize the gcode M851
2016-06-18 15:19:07 -07:00
Scott Lahteine
e35583888c Merge pull request #4082 from esenapaj/Follow-up-the-PR-#4065
Follow-up the PR #4065 (Remove support for XY servo endstops)
2016-06-18 03:31:12 -07:00
Scott Lahteine
6dff52d920 Merge pull request #4078 from RicardoGA/Language_Spanish
Update Spanish Language
2016-06-18 03:28:46 -07:00
Scott Lahteine
da526f6ba9 Merge pull request #4080 from thinkyhead/rc_probe_feedrates
Save / restore feedrate in probing functions
2016-06-18 02:44:52 -07:00
esenapaj
d55b94d606 Follow-up the PR #4065 (Remove support for XY servo endstops)
・Update a forgotten Configuration.h of Cartesio
2016-06-18 18:01:58 +09:00
Scott Lahteine
4e860babbc Allow setting xy_travel_speed for delta leveling also 2016-06-18 01:40:49 -07:00
Scott Lahteine
d36d4edd80 Tweak partial homing code 2016-06-18 01:16:50 -07:00
Scott Lahteine
d3a05de96e Save and restore feedrate in probe functions 2016-06-18 01:16:26 -07:00
Juan Ricardo Gomez Anaya
5991eb428f Update Spanish Language
Spanish language update and also add missing messages
2016-06-18 00:27:04 -05:00
Scott Lahteine
f33bd0bb10 Merge pull request #4077 from thinkyhead/rc_delete_old_macros
Delete some obsolete Z servo macros
2016-06-17 18:59:16 -07:00
Scott Lahteine
599154f9e2 Merge pull request #4076 from thinkyhead/rc_stop_print
Add an SD Card stop function, use in ultralcd
2016-06-17 18:53:29 -07:00
Scott Lahteine
defcacc1a9 Delete some obsolete Z servo macros 2016-06-17 18:49:17 -07:00
Scott Lahteine
bbf5b486c3 Add an SD Card stop function, use in ultralcd 2016-06-17 18:27:14 -07:00
Scott Lahteine
3a150f07c2 Merge pull request #4073 from thinkyhead/rc_temp_mystery
Minor tweaks to M109 / M190
2016-06-17 17:49:50 -07:00
Scott Lahteine
c53d6441d1 Merge pull request #4074 from thinkyhead/rc_fix_gitignore
.gitignore comments in correct format
2016-06-17 17:48:23 -07:00
Scott Lahteine
17bd77031f .gitignore comments in correct format 2016-06-17 17:47:07 -07:00
Scott Lahteine
bd4ec727e7 Merge pull request #4066 from thinkyhead/rc_M851_with_probe
Make M851 standard with a bed probe
2016-06-17 17:32:55 -07:00
Scott Lahteine
692a6e7c91 Merge pull request #4065 from thinkyhead/rc_goodbye_xy_servos
Remove support for XY servo endstops
2016-06-17 17:32:08 -07:00
Scott Lahteine
de177ba6c9 Minor tweaks to M109 / M190 2016-06-17 17:26:21 -07:00
Scott Lahteine
eab44b30d4 Safety and serial sections 2016-06-17 15:19:43 -07:00
Scott Lahteine
fc56a547d1 Rename movement section to motion 2016-06-17 15:19:43 -07:00
Scott Lahteine
a8b8796cd7 Define probe offsets when a probe exists 2016-06-17 15:19:42 -07:00
Scott Lahteine
1000563d80 Make M851 standard with a bed probe 2016-06-17 15:19:42 -07:00
Scott Lahteine
f66a194159 Merge pull request #4062 from jbrazio/bugfix/compiler-warnings
Fixes misc gcc warnings
2016-06-17 14:23:28 -07:00
Scott Lahteine
e189f6a842 Patch Travis test for bed leveling 2016-06-17 14:20:18 -07:00
Scott Lahteine
1bed392c68 HAS_Z_ENDSTOP_SERVO => HAS_Z_SERVO_ENDSTOP 2016-06-17 14:20:17 -07:00
Scott Lahteine
47ce810f52 Remove support for XY servo endstops 2016-06-17 14:19:17 -07:00
Scott Lahteine
7641f414cf Merge pull request #4069 from esenapaj/Follow-up-the-PR-#4055
Follow-up the PR #4055 (Croatian language support)
2016-06-17 14:13:37 -07:00
Scott Lahteine
dbb6d1ef45 Merge pull request #4071 from token47/patch-1
Update README.md
2016-06-17 14:11:32 -07:00
Andre Ruiz
d087ae0b9f Update README.md 2016-06-17 17:02:18 -03:00
João Brázio
d1e5dc6319 Fixes misc gcc warnings 2016-06-17 20:24:24 +01:00
esenapaj
c5eecb11b2 Follow-up the PR #4055 (Croatian language support)
・Update a forgotten Configuration.h of Cartesio
2016-06-17 21:20:15 +09:00
Scott Lahteine
cabb71ff38 Merge pull request #4064 from jbrazio/feature/update-gitignore
Updates .gitignore
2016-06-16 18:24:23 -07:00
João Brázio
e7ab26dc9c Updates .gitignore 2016-06-17 01:50:51 +01:00
Scott Lahteine
d991a4c24a Merge pull request #4063 from thinkyhead/rc_remove_swp_files
Delete mysterious .swp files from #3609
2016-06-16 17:22:48 -07:00
Scott Lahteine
8d8cbef1de Merge pull request #4055 from thinkyhead/rc_croatian_language
Croatian language support
2016-06-16 17:22:25 -07:00
Scott Lahteine
ebbed2975e Delete mysterious .swp files from #3609 2016-06-16 16:42:03 -07:00
Scott Lahteine
c42b1364b2 Merge pull request #4045 from thinkyhead/rc_max_feedrate_is_mm_s
Fix feedrate in gcode_T (max_feedrate is mm/s)
2016-06-16 16:23:22 -07:00
Scott Lahteine
02e5dad29a Include Croatian in language listings 2016-06-16 16:18:26 -07:00
Scott Lahteine
2015aad867 Tweak Croatian language file heading 2016-06-16 16:09:57 -07:00
Robert Marko
884bc63fbe Add Croatian language 2016-06-16 16:09:57 -07:00
Scott Lahteine
ef3bef6b9e Fix feedrate in gcode_T (max_feedrate is mm/s) 2016-06-16 16:03:14 -07:00
Scott Lahteine
9030ceec1d Merge pull request #4056 from thinkyhead/rc_mfinit
Script to init the upstream remote for Marlin
2016-06-16 15:44:14 -07:00
Scott Lahteine
4640974e1b Merge pull request #4060 from esenapaj/Follow-up-the-PR-#4053
Follow-up and improvement the PR #4053 (CNControls Cartesio UI Support)
2016-06-16 15:44:00 -07:00
Scott Lahteine
340f97d635 Add ghtp script to set remotes to HTTP or SSL 2016-06-16 12:56:39 -07:00
Scott Lahteine
55edb37b52 Merge pull request #4058 from MagoKimbra/gcode_T
Fix gcode_T
2016-06-16 12:54:21 -07:00
esenapaj
106227540e Follow-up and improvement the PR #4053 (CNControls Cartesio UI Support)
・Add implimantation of PR #3609 to configuration files of Cartesio
・Standardize macro names
2016-06-16 19:22:31 +09:00
MagoKimbra
008d0637dd Fix gcode_T 2016-06-16 09:05:36 +02:00
Scott Lahteine
cd9ecfdcb1 Merge pull request #4057 from thinkyhead/rc_babysteps_mm
Babystepping show millimeters on LCD
2016-06-15 23:03:46 -07:00
edwilliams16
114d9db7d0 Show babysteps on the LCD in mm, not steps 2016-06-15 23:03:24 -07:00
Scott Lahteine
b410bf933b Merge pull request #4053 from thinkyhead/rc_cartesio_redo
CNControls Cartesio UI Support
2016-06-15 22:33:45 -07:00
Scott Lahteine
4fa05913c3 Script to init the upstream remote for Marlin 2016-06-15 22:24:10 -07:00
Scott Lahteine
f639044c24 Merge pull request #3609 from jbrazio/feature/config-version
Adds versioning for Configuration.h & Configuration_adv.h
2016-06-15 22:09:47 -07:00
Scott Lahteine
4d2cb70152 Cartesio UI Support 2016-06-15 21:46:54 -07:00
Scott Lahteine
da90bbe0eb Merge pull request #4010 from thinkyhead/rc_toolchange_adjust
Fixup position adjustment on toolchange
2016-06-15 21:10:33 -07:00
Scott Lahteine
948c467e16 Merge pull request #4043 from AnHardt/save_delay
Introduce save_delay()
2016-06-15 21:06:43 -07:00
Scott Lahteine
4b93989a77 MBL Z adjustment on toolchange 2016-06-15 20:49:36 -07:00
Scott Lahteine
9c800d1f8c Position adjustment for bed leveling 2016-06-15 20:49:36 -07:00
Scott Lahteine
8c7babb70f Merge pull request #4049 from esenapaj/Fix-for-the-PR-#4023
Fix for the PR #4023(Add macros to move servos)
2016-06-15 20:39:46 -07:00
Scott Lahteine
2d6de3e592 Merge pull request #4047 from Alex9779/Fix/ultralcd_move_e
RCBugFix with UltraLCD active does not compile
2016-06-15 20:38:41 -07:00
AnHardt
1219310622 Introduce save_delay()
Introduce save_delay() for long delays what otherwise would cause
watchdog resets

Explizit lcd_set_custom_characters(false) at the end of bootscreen().
Else the charset is not proper set in case of LCD_PROGRESS_BAR.
2016-06-15 18:11:55 +02:00
esenapaj
44f091a413 Fix for the PR #4023(Add macros to move servos)
・Add missing ')'
2016-06-15 22:34:55 +09:00
Alexander Leisentritt
c2b7ef1e7e "e" was renamed to "eindex" in a previous commit 2016-06-15 11:11:16 +02:00
Scott Lahteine
52ac2a62ee Merge pull request #4013 from thinkyhead/rc_toolchange_no_move
Use "Tn S1" to change tools without moving
2016-06-14 20:13:01 -07:00
Scott Lahteine
d2a00b74e3 Merge pull request #4004 from thinkyhead/rc_feedrate_in_gcode_T
Use linear feedrate in gcode_T, not volumetric
2016-06-14 20:10:08 -07:00
Scott Lahteine
0ad26d0de8 Merge pull request #4034 from AnHardt/custom-splash-screen
Custom Splash Screen
2016-06-14 18:51:39 -07:00
Jochen Groppe
574c938ab9 Merge pull request #4040 from esenapaj/Follow-up-the-PR-#3676
Follow-up the PR #3676(Advance extrusion algorithm – LIN_ADVANCE)
2016-06-14 19:22:49 +02:00
esenapaj
741cda0e47 Follow-up the PR #3676(Advance extrusion algorithm – LIN_ADVANCE)
・Update forgotten example configurations
2016-06-15 00:10:15 +09:00
AnHardt
02b3d6b8d3 Custom Splash Screen
Custom Splash Screen for full graphic displays.

Too complicated for the hitachis without knowing what exactly to display.

On top of #4032
Realisation of an idea from #3996
2016-06-14 09:39:28 +02:00
Scott Lahteine
78a48d7e3c Merge pull request #4038 from thinkyhead/rc_fix_heater_off
Fix broken DISABLE_HEATER macro
2016-06-13 20:58:34 -07:00
Scott Lahteine
ee5be92206 Fix broken DISABLE_HEATER macro 2016-06-13 20:57:58 -07:00
Scott Lahteine
fc4fb9eba1 Merge pull request #4036 from thinkyhead/rc_lin_advance_feature
Parse M905 args in Marlin_main.cpp
2016-06-13 19:26:29 -07:00
Scott Lahteine
8d8180e028 Parse M905 args in Marlin_main.cpp 2016-06-13 19:25:28 -07:00
Scott Lahteine
e7e57f0eb4 Merge pull request #4035 from thinkyhead/rc_lin_advance_feature
Patch LIN_ADVANCE to use code_value_float
2016-06-13 18:55:14 -07:00
Scott Lahteine
2b340f5acb patch LIN_ADVANCE to use code_value_float 2016-06-13 18:54:25 -07:00
Scott Lahteine
b708196770 Merge pull request #4032 from AnHardt/bootscreen-delay
Show bootscreen later
2016-06-13 18:27:05 -07:00
Scott Lahteine
587de1b6b6 Merge pull request #3676 from thinkyhead/rc_lin_advance_feature
Advance extrusion algorithm – LIN_ADVANCE
2016-06-13 18:04:58 -07:00
Scott Lahteine
738f414d2b Merge pull request #4029 from tnw513/FixLangIt
Update to language_it.h
2016-06-13 18:01:51 -07:00
AnHardt
b4fedec0d1 Show bootscreen later
Init display and show bootscreen later, but init display in `kill()`
to init outputs before the bootscreen delays but being able to display
kill errors.
2016-06-14 01:59:50 +02:00
Silvio Didonna
08e2c5a6ea Added and translated some strings from language_en 2016-06-13 13:04:09 +02:00
Silvio
29337db206 Merge pull request #3 from MarlinFirmware/RCBugFix
update to latest rcbugfix
2016-06-13 12:47:42 +02:00
Scott Lahteine
17c86349c0 Merge pull request #4020 from thinkyhead/rc_test_M600
Fix Travis test for FILAMENTCHANGEENABLE
2016-06-12 18:50:26 -07:00
Scott Lahteine
b4c37a676f Merge pull request #4025 from thinkyhead/rc_fix_ultralcd_move_e
Fix manual move for multiple extruders
2016-06-12 17:27:36 -07:00
Scott Lahteine
4d2119f83a _lcd_move => _lcd_move_xyz 2016-06-12 17:14:19 -07:00
Scott Lahteine
811967923a Fix manual_move to move the correct E stepper 2016-06-12 17:14:19 -07:00
Scott Lahteine
0d0b751498 Merge pull request #4023 from thinkyhead/rc_servo_macros
Add macros to move servos
2016-06-12 15:45:39 -07:00
Scott Lahteine
4fbe818163 Add macros to move servos 2016-06-12 15:38:30 -07:00
Scott Lahteine
9a1dfd0f5f Fix Travis test for FILAMENTCHANGEENABLE 2016-06-12 14:24:56 -07:00
Scott Lahteine
e51f8df097 Merge pull request #4014 from thinkyhead/rc_one_less_ultipanel_cond
No need to check ULTIPANEL with DOGLCD
2016-06-11 17:39:42 -07:00
Scott Lahteine
b322ac4417 No need to check ULTIPANEL with DOGLCD 2016-06-11 16:50:06 -07:00
João Brázio
8ccd97e7cc Updated all example configuration files 2016-06-12 00:36:15 +01:00
Scott Lahteine
c7eeb09e8f Merge pull request #4012 from Blue-Marlin/watchdoghealing
Heal the watchdog
2016-06-11 16:18:22 -07:00
Scott Lahteine
7fb69e24fb Use "Tn S1" to change tools without moving 2016-06-11 15:58:45 -07:00
Scott Lahteine
2f1bf8373b Merge pull request #4005 from thinkyhead/rc_prepare_move_destination
Clarify names of prepare_move functions
2016-06-11 15:51:58 -07:00
João Brázio
de8108648f Added a versioning system to the config files 2016-06-11 23:48:10 +01:00
Blue-Marlin
efe719f898 Heal the watchgog 2016-06-12 00:34:31 +02:00
Scott Lahteine
b75e648f2c Clarify names of prepare_move functions 2016-06-11 15:32:49 -07:00
Scott Lahteine
d50ba08246 Merge pull request #4011 from thinkyhead/rc_manual_move_cond
Wrap all items depending on ULTIPANEL
2016-06-11 15:26:52 -07:00
Scott Lahteine
ae9b09fe94 menu => screen 2016-06-11 14:53:39 -07:00
Scott Lahteine
45ea8749d3 Wrap all items depending on ULTIPANEL 2016-06-11 14:27:34 -07:00
Scott Lahteine
ddbb05fd8d Merge pull request #3998 from jbrazio/bugfix/better-regex
Improves travis buildroot regexp
2016-06-11 13:40:58 -07:00
João Brázio
9b3a0895fd Upgrades travis Arduino IDE version to 1.6.9 2016-06-11 02:55:09 +01:00
João Brázio
280af07b4c Improves travis buildroot regexp 2016-06-11 02:55:09 +01:00
Scott Lahteine
0e2bfd0769 Use linear feedrate in gcode_T, not volumetric 2016-06-10 18:27:01 -07:00
Scott Lahteine
bf8710d522 Merge pull request #4001 from Blue-Marlin/manage_manual_move-ULTIPANEL
manage_manual_move(); -> ULTIPANEL
2016-06-10 17:17:57 -07:00
Scott Lahteine
93ffa0288c Merge pull request #4003 from jbrazio/bugfix/3999
Closes #3999: Compilation error with BEEPER_PIN -1
2016-06-10 17:15:23 -07:00
João Brázio
2c34ec2bac Closes #3999: Compilation error with BEEPER_PIN -1 2016-06-11 00:12:49 +01:00
Blue-Marlin
378ff92e98 manage_manual_move(); -> ULTIPANEL
Makr the call of   `manage_manual_move() ` depandent of `ULTIPANEL`
2016-06-10 23:36:57 +02:00
Scott Lahteine
45b701d38c Travis test for LIN_ADVANCE 2016-06-09 21:03:27 -07:00
Scott Lahteine
aad9c0ed8d Apply updated ISR timing code 2016-06-09 21:03:27 -07:00
Scott Lahteine
506d78b2f8 Run the advance_isr faster instead of doing multiple e-steps per interrupt 2016-06-09 21:03:27 -07:00
Scott Lahteine
6d62a4ffc8 Patch LIN_ADVANCE for style and forward-compatibility 2016-06-09 21:03:27 -07:00
Sebastianv650
fb8e880734 Add LIN_ADVANCE 2016-06-09 21:03:27 -07:00
Scott Lahteine
e2d4919c01 Merge pull request #3991 from thinkyhead/rc_axis_units
Rename some vars to clarify their relationship to acceleration
2016-06-09 20:57:01 -07:00
Scott Lahteine
4a212f707b Merge pull request #3993 from jbrazio/feature/update-travis
Update travis to test for ULTRA and DOG LCD options
2016-06-09 20:56:07 -07:00
Scott Lahteine
74060f17b7 Merge pull request #3995 from thinkyhead/rc_nonblocking_buzzer
New feature: Non blocking tone queue
2016-06-09 20:55:29 -07:00
João Brázio
d13c86f6f6 Adds travis test for SPEAKER 2016-06-09 20:38:23 -07:00
Scott Lahteine
a82c755a35 Fix BQ_LCD_SMART_CONTROLLER pin compiler warnings 2016-06-09 20:38:23 -07:00
João Brázio
5b5aa1572b Non-blocking buzzer 2016-06-09 20:20:05 -07:00
Scott Lahteine
27d5794298 Merge pull request #3992 from thinkyhead/rc_pid_autotune_e_range
Throw an error in PID_autotune for E < -1
2016-06-09 20:07:27 -07:00
João Brázio
24e70c915d Update travis to test for ULTRA and DOG LCD options 2016-06-10 02:25:37 +01:00
Scott Lahteine
72c6f2923f axis_steps_per_unit => axis_steps_per_mm 2016-06-09 17:04:51 -07:00
Scott Lahteine
446515ab79 Adjust spacing in block_t 2016-06-09 17:04:51 -07:00
Scott Lahteine
80ab749563 Rename acceleration locals for clarity 2016-06-09 17:04:51 -07:00
Scott Lahteine
3b08eb1eeb acceleration_st => acceleration_steps_per_s2 2016-06-09 17:04:51 -07:00
Scott Lahteine
cb4704e07a Rename some planner acceleration vars
- `per_sq_second` => `per_s2`
- `per_sqr_second` => `per_s2`
- `axis_steps_per_sqr_second` => `max_acceleration_steps_per_s2`
2016-06-09 17:04:50 -07:00
Scott Lahteine
3c68be79dc Throw an error in PID_autotune for E < -1 2016-06-09 16:41:53 -07:00
Scott Lahteine
26f8f54c56 Merge pull request #3985 from thinkyhead/rc_inch_fahrenheit_kelvin
Support inches, fahrenheit, and kelvin
2016-06-08 20:10:33 -07:00
Scott Lahteine
f0a5b7f0bc Merge pull request #3986 from thinkyhead/rc_mbl_forward_iteration
Use memset in mbl.reset to save 58 bytes
2016-06-08 17:33:41 -07:00
Scott Lahteine
38279a02b2 Travis tests for Inch, Fahrenheit, Kelvin, M100 2016-06-08 17:12:54 -07:00
Scott Lahteine
0b3142b45b Remove redundant declarations from M100 code 2016-06-08 17:09:34 -07:00
Scott Lahteine
4980ecc1f7 Smaller binary using inline gcode argument getters 2016-06-08 17:03:28 -07:00
Reid Rankin
16212432c9 G20/21 and M149 support, and code_value() refactor
This is an update of MarlinDev PR #196.

G20/21: support for switching input units between millimeters and
inches.
M149: support for changing input temperature units.

In support of these changes, code_value() and code_value_short() are
replaced with an array of functions which handle converting to the
proper types and/or units.
2016-06-08 16:51:10 -07:00
Scott Lahteine
a569e89775 Merge pull request #3978 from thinkyhead/rc_planner_local_rename
Rename some auto/locals to avoid name conflict
2016-06-08 16:41:57 -07:00
Scott Lahteine
2d55862499 Use memset in mbl.reset to save 58 bytes 2016-06-08 16:05:18 -07:00
Scott Lahteine
9b42658faf Merge pull request #3983 from thinkyhead/rc_fix_ftostr
Cleanup and naming for number-to-string functions
2016-06-08 14:21:16 -07:00
Scott Lahteine
b23f710034 Cleanup and naming for num-to-string functions 2016-06-08 13:12:27 -07:00
Scott Lahteine
3d56b9d127 Merge pull request #3979 from thinkyhead/mbl_cell
MBL: cel => cell
2016-06-07 19:12:46 -07:00
Scott Lahteine
cca047424d MBL: cel => cell 2016-06-07 19:10:39 -07:00
Scott Lahteine
08a9bd017b Merge pull request #3976 from petrzjunior/rc_lang_cz_160607
[Language] Update Czech 2016/06/07
2016-06-07 18:05:44 -07:00
Scott Lahteine
49ecaf774d Rename some auto/locals to avoid name conflict 2016-06-07 15:38:45 -07:00
petrzjunior
9171a3d94f Update Czech language 2016/06/07 2016-06-07 19:25:15 +02:00
Scott Lahteine
5e6fdbb4cb Merge pull request #3963 from thinkyhead/rc_advance_steppers
Use e_steps[EXTRUDERS] instead of e_steps[4]
2016-06-05 02:46:06 -07:00
Scott Lahteine
4b3d5aec7a Merge pull request #3110 from thinkyhead/rc_manual_moves
Alternative impl. of LCD-based manual movement
2016-06-05 02:45:39 -07:00
Scott Lahteine
47b5c55c29 Implement the delayed-move technique 2016-06-05 02:29:49 -07:00
Scott Lahteine
a3e25a0fca Instead of trying to move now, set a flag to move asap 2016-06-05 02:29:48 -07:00
Scott Lahteine
e2a8961635 Use e_steps[EXTRUDERS] instead of e_steps[4] 2016-06-05 01:44:53 -07:00
Scott Lahteine
43947072d5 Merge pull request #3895 from thinkyhead/rc_singlenozzle_part_2
SINGLENOZZLE: EXTRUDERS versus HOTENDS
2016-06-04 15:23:17 -07:00
Scott Lahteine
05868de195 Merge pull request #3958 from thinkyhead/rc_fix_3955
Fix a typo in #3955
2016-06-04 02:10:26 -07:00
Scott Lahteine
d7e4e8e9be Fix a typo in #3955 2016-06-04 02:09:58 -07:00
Scott Lahteine
4bdcf3afe4 Merge pull request #3956 from thinkyhead/rc_mbl_single_axis_fix
MBL: Keep active when homing single axes (#3750)
2016-06-03 21:56:12 -07:00
Scott Lahteine
c2362c1b3c Apply Marlin coding standards to MBL class 2016-06-03 21:43:32 -07:00
Edward Patel
c06de0f097 MBL: Added keeping MBL active when homing single axises for #3750 2016-06-03 21:42:29 -07:00
Scott Lahteine
f2fb66c00d With SINGLENOZZLE only set temperature for the active tool 2016-06-03 17:38:03 -07:00
Scott Lahteine
cd441ce652 SINGLENOZZLE: EXTRUDERS versus HOTENDS 2016-06-03 17:38:03 -07:00
Scott Lahteine
32f8300cc6 Merge pull request #3944 from thinkyhead/rc_eboston_lcd_contrast
Improved LCD contrast handling
2016-06-03 17:08:41 -07:00
Scott Lahteine
9c87bf835c Merge pull request #3947 from thinkyhead/rc_statics_stepper
Apply static to remaining Stepper methods
2016-06-03 17:08:15 -07:00
Scott Lahteine
08871d4d6e Merge pull request #3950 from boelle/patch-3
last of missing defines added
2016-06-03 17:07:02 -07:00
Scott Lahteine
4e13cd3f35 Merge pull request #3955 from MagoKimbra/RCBugFix
Fix M428 width DELTA & SCARA
2016-06-03 15:50:37 -07:00
Scott Lahteine
2403a1cf9c Merge pull request #3952 from rafacouto/RCBugFix
Galician language update.
2016-06-03 15:46:03 -07:00
Scott Lahteine
8529122af1 Merge pull request #3946 from thinkyhead/rc_g28_servo_raise_before_stow
Raise the servo probe before stow outside ABL context
2016-06-03 15:45:36 -07:00
MagoKimbra
f499be084a Fix M428 width DELTA & SCARA 2016-06-03 23:23:23 +02:00
Rafa Couto
5f759a2200 Merge branch 'RCBugFix' of https://github.com/rafacouto/Marlin into RCBugFix 2016-06-03 18:27:02 +02:00
Rafa Couto
5f8db3f574 Galician language update. 2016-06-03 18:24:53 +02:00
Rafa Couto
e1591befee Galician language update. 2016-06-03 14:24:35 +02:00
Bo Herrmannsen
8532bf4087 last of missing defines added
need to check line 101-103
2016-06-03 11:20:46 +02:00
Scott Lahteine
81384dfd36 Apply static to remaining stepper methods 2016-06-02 18:00:31 -07:00
Scott Lahteine
0d793fb2be Merge pull request #3939 from thinkyhead/rc_resume_get_position
set_current_position_from_planner() after stepper.quick_stop()
2016-06-02 17:25:51 -07:00
Scott Lahteine
664b299a51 This fix is not DELTA compatible 2016-06-02 17:16:19 -07:00
Scott Lahteine
064efb20e0 Also call clear_command_queue for lcd_sdcard_stop 2016-06-02 17:16:19 -07:00
Scott Lahteine
6277395e1e set_current_position_from_planner() after stepper.quick_stop() 2016-06-02 17:16:19 -07:00
Scott Lahteine
381bc6f0b0 set_position => set_position_mm 2016-06-02 17:16:19 -07:00
Scott Lahteine
663d2463dc Merge pull request #3922 from thinkyhead/rc_statics_stepper
Apply static to Stepper class
2016-06-02 17:14:24 -07:00
Scott Lahteine
194185539d Merge pull request #3925 from thinkyhead/rc_statics_planner
Apply static to Planner class
2016-06-02 17:14:04 -07:00
Scott Lahteine
3fd9b331f0 Merge pull request #3924 from thinkyhead/rc_statics_temperature
Apply static to Temperature class
2016-06-02 17:13:17 -07:00
Scott Lahteine
5b5270ab50 Merge pull request #3943 from thinkyhead/rc_contrast_adjust
Combine ST7565 / U8GLIB_NHD_C12864 items in dogm
2016-06-02 17:05:04 -07:00
Scott Lahteine
db0fd021d0 Z raise options independent of ABL so G28 can use them 2016-06-02 16:56:49 -07:00
Scott Lahteine
9eecb4404b Make raise_z_after_probing null sometimes 2016-06-02 16:56:49 -07:00
Scott Lahteine
28fb1f8994 Tweak #endif comment for ABL GRID 2016-06-02 16:56:49 -07:00
Scott Lahteine
b3a37b493d Patch G28 servo stow to use Conditionals, raise_z_after_probing 2016-06-02 16:56:49 -07:00
Scott Lahteine
5390c846a5 Positive conditions for HAS_LCD_CONTRAST 2016-06-02 16:17:34 -07:00
Scott Lahteine
efa7209acf Improved LCD contrast handling
Based on MarlinFirmware/MarlinDev#200 from @eboston
2016-06-02 16:17:34 -07:00
Scott Lahteine
b703fa9538 Add sanity check for SAV_3DGLCD display types 2016-06-02 15:21:17 -07:00
lrpirlet
3aefa04386 Raise the servo probe before stow outside ABL context 2016-06-01 21:53:45 +02:00
Scott Lahteine
9729e9c450 Combine ST7565 / U8GLIB_NHD_C12864 items in dogm 2016-06-01 01:42:14 -07:00
Scott Lahteine
f331763eca Merge pull request #3829 from thinkyhead/rc_fix_T_command
Fix bad movement in gcode_T when switching extruders
2016-05-31 19:36:18 -07:00
Scott Lahteine
67f816ff79 Merge pull request #3926 from thinkyhead/rc_statics_endstops
Drop FORCE_INLINE from endstops.h
2016-05-31 19:35:41 -07:00
Scott Lahteine
2bd4f33369 Merge pull request #3928 from thinkyhead/rc_allen_key_cleanup
Remove excess allen key probe examples from configs
2016-05-31 19:18:21 -07:00
Scott Lahteine
d698c89971 Fix bad movement in gcode_T when switching 2016-05-31 19:14:33 -07:00
Scott Lahteine
1a01a44a94 Merge pull request #3936 from thinkyhead/rc_sav_mk1
Support for SAV_3DGLCD OLED LCD controller
2016-05-31 18:46:25 -07:00
Scott Lahteine
4770d7c346 Merge pull request #3933 from boelle/patch-2
added defines present in en but not in da
2016-05-31 18:42:38 -07:00
Scott Lahteine
c6c01eaaac Merge pull request #3888 from thinkyhead/rc_slower_max31855
Slower SPI speed for MAX31855
2016-05-31 18:40:38 -07:00
Scott Lahteine
a0b000d752 Support for SAV_3DGLCD OLED LCD controller 2016-05-31 14:41:16 -07:00
Scott Lahteine
bd97bbc52a Make HAS_LCD_CONTRAST a boolean flag 2016-05-31 11:47:02 -07:00
Scott Lahteine
bc77670673 Merge pull request #3929 from thinkyhead/rc_fix_printrboard_dac
Need to call dac_init() in setup() for DAC_STEPPER_CURRENT
2016-05-31 10:29:37 -07:00
Bo Herrmannsen
a1a8240606 added defines present in en but not in da 2016-05-31 14:57:52 +02:00
Roxy-3DPrintBoard
3d7d034fad Merge pull request #3932 from boelle/patch-1
initial changes to DA
2016-05-31 07:34:29 -05:00
Bo Herrmannsen
5eb7a79d93 initial changes to DA 2016-05-31 14:24:33 +02:00
Scott Lahteine
55ef04a566 Need to call dac_init() in setup() for DAC_STEPPER_CURRENT
As reported by https://github.com/MarlinFirmware/Marlin/pull/3182#issuecomment-222595488
2016-05-30 23:35:06 -07:00
Scott Lahteine
43a71ef226 Remove excess allen key probe examples from configs 2016-05-30 18:26:53 -07:00
Scott Lahteine
1582ed43bf Merge pull request #3918 from epatel/marlin/mbl_negative_xy_adv
MBL: Move border macros to Configuration_adv.h
2016-05-30 18:15:50 -07:00
Scott Lahteine
ff53819856 Drop FORCE_INLINE in planner.h
This change actually does increase the binary size by about 12 bytes,
but how does it affect performance?
2016-05-30 17:18:28 -07:00
Scott Lahteine
e60224a943 Drop FORCE_INLINE from endstops.h
`FORCE_INLINE` seems to have no effect with standard optimization.
2016-05-30 17:08:56 -07:00
Scott Lahteine
85512e9372 Drop FORCE_INLINE from temperature.h
`FORCE_INLINE` seems to have no effect on code generation with standard
optimization.
2016-05-30 17:06:50 -07:00
Scott Lahteine
78fb02a5ad Apply static to Temperature class 2016-05-30 16:50:51 -07:00
Scott Lahteine
c3df293fc6 Merge pull request #3923 from thinkyhead/rc_statics_endstops
Apply static to Endstops class
2016-05-30 16:48:23 -07:00
Scott Lahteine
02735fd500 Merge pull request #3921 from thinkyhead/rc_calc_timer_tweak
Tiny calc_timer speedup
2016-05-30 16:47:03 -07:00
Scott Lahteine
668d50f68e Keep Stepper encapsulation, use static data and methods 2016-05-30 16:24:04 -07:00
Scott Lahteine
26f866b908 Apply static to Endstops class 2016-05-30 16:23:43 -07:00
Scott Lahteine
470d5ac09f Apply static to Planner class 2016-05-30 16:22:41 -07:00
Scott Lahteine
ecfdcf7250 Tiny calc_timer speedup 2016-05-30 16:17:02 -07:00
Edward Patel
06593833ff MBL: Move border macros to Configuration_adv.h 2016-05-30 20:50:16 +02:00
Scott Lahteine
ffe55c230d Merge pull request #3914 from thinkyhead/rc_fix_lcd_contrast
Patch conditionals for DEFAULT_LCD_CONTRAST, MINIPANEL
2016-05-30 11:20:14 -07:00
Scott Lahteine
d3efc96289 Patch conditionals for DEFAULT_LCD_CONTRAST, MINIPANEL
- `DEFAULT_LCD_CONTRAST` was incorrectly overriding all `DOGLCD`
- `MINIPANEL` conditionals are identical to `MAKRPANEL`
2016-05-30 01:10:47 -07:00
Scott Lahteine
5a8918c9ec Merge pull request #3911 from epatel/marlin/mbl_3903_example_configs
MBL: Apply PR 3903 to example_configurations
2016-05-30 01:01:04 -07:00
Edward Patel
92a27c37b3 MBL: Apply https://github.com/MarlinFirmware/Marlin/pull/3903 to example_configurations 2016-05-30 09:50:11 +02:00
Scott Lahteine
7ba8f2dbc3 Merge pull request #3906 from thinkyhead/rc_fix_travis_helpers
Less greedy regex in travis helper scripts
2016-05-30 00:27:41 -07:00
Scott Lahteine
2805bf3d82 Less greedy regex in travis helper scripts 2016-05-30 00:26:52 -07:00
Scott Lahteine
3861f1e0da Merge pull request #3908 from jbrazio/bugfix/3826
Closes #3826: SD printing will now pause and stop the print counter
2016-05-30 00:08:57 -07:00
Scott Lahteine
8806c7bbcc Merge pull request #3903 from epatel/marlin/mbl_negative_xy
MBL: Fix for negative x/y positions
2016-05-29 22:07:35 -07:00
Scott Lahteine
189e60db55 Merge pull request #3909 from thinkyhead/fix_array_inits
Fix some array initializations
2016-05-29 21:02:20 -07:00
Scott Lahteine
dc22097b3a Fix some of array initializations
- In `stepper.h` init `count_direction` array
- In `ultralcd.cpp` init `autotune_temp` array
2016-05-29 20:55:13 -07:00
João Brázio
40e64b36de Closes #3826: SD printing will now pause and stop the print counter
The LCD menu items for SD printing pause/stop have been updated to control
also the print job timer. This commit also fixes a small output bug with
M78, the failed print counter was displaying the wrong value.
2016-05-30 00:56:39 +01:00
Edward Patel
eb2746a34f MBL: Fix for negative x/y positions 2016-05-28 21:05:43 +02:00
Scott Lahteine
fe3122774a Merge pull request #3806 from thinkyhead/rc_coreyz_support
Support for COREYZ. Fixes for COREXY, COREXZ
2016-05-26 18:50:43 -07:00
Scott Lahteine
fad7680605 Slower SPI speed for MAX31855 2016-05-25 18:15:36 -07:00
Scott Lahteine
30f6b84561 Merge pull request #3812 from thinkyhead/rc_mbl_index_finders
Two index finding functions for MBL
2016-05-23 15:54:37 -07:00
Scott Lahteine
89e630b2fb Merge pull request #3808 from thinkyhead/rc_singlenozzle
SINGLENOZZLE
2016-05-23 15:52:19 -07:00
Scott Lahteine
827738a790 set_z parameters marked const 2016-05-23 14:25:43 -07:00
Scott Lahteine
9049f4084b EEPROM report uses G29 S3 2016-05-23 14:25:43 -07:00
Scott Lahteine
4955163959 Propose simpler probe index methods 2016-05-23 14:25:43 -07:00
Scott Lahteine
a1a5cb5393 Propose simpler cel index methods 2016-05-23 14:25:42 -07:00
Scott Lahteine
360adc6a3b Small reduction in M421 code 2016-05-23 14:25:42 -07:00
Scott Lahteine
a4ed988c60 Two index finding functions for MBL 2016-05-23 14:25:42 -07:00
Scott Lahteine
0e55c06f7d Rename CORE_AXIS_3 to NORMAL_AXIS 2016-05-23 13:58:40 -07:00
Scott Lahteine
5172d4ba40 COREYZ stepper, planner, endstop, babysteps 2016-05-23 13:58:40 -07:00
Scott Lahteine
6c7f4909b1 COREYZ Conditionals, SanityCheck for only a single kinematic 2016-05-23 13:58:40 -07:00
Scott Lahteine
95fee8ca81 Add option for CoreYZ kinematics 2016-05-23 13:58:40 -07:00
Scott Lahteine
678cbad76a Merge pull request #3819 from jbrazio/bugfix/followup-3813
Followup for #3813
2016-05-23 13:56:11 -07:00
Scott Lahteine
6cdae35261 Merge pull request #3822 from jbrazio/cleanup/hires-logo
Cleanup the Marlin logo with a hires svg version
2016-05-23 13:55:42 -07:00
Scott Lahteine
714d526614 Merge pull request #3828 from AnHardt/hw-endstops-default
Correct hardware endstops default
2016-05-23 13:55:02 -07:00
João Brázio
05a041cb13 Cleanup the Marlin logo with a hires svg version 2016-05-23 14:50:54 +01:00
AnHardt
bb66ffb2ae Correct hardware endstops default
All credits to RicardoGA
2016-05-23 10:54:22 +02:00
João Brázio
75221fa673 Followup for #3813 2016-05-22 13:14:58 +01:00
Scott Lahteine
f9b4b90058 Merge pull request #3813 from jbrazio/bugfix/3809
Stopwatch and PrintCounter improvements
2016-05-21 18:33:57 -07:00
João Brázio
8c0edb2de4 Fixes #3809 and adds several improvements to the Stopwatch and
PrintCounter classes
2016-05-22 01:59:59 +01:00
Scott Lahteine
03e44e0f83 Merge pull request #3807 from thinkyhead/rc_reverse_options_doc
Additional instructions for controller reverse options
2016-05-20 20:36:31 -07:00
Scott Lahteine
c5130fd23b Additional instructions for controller reverse options 2016-05-20 18:14:50 -07:00
Scott Lahteine
cadf441059 Merge pull request #3798 from AnHardt/extend-M421
Extend M421 with I and J parameters
2016-05-20 16:17:23 -07:00
Scott Lahteine
0c7c45063b PID_ADD_EXTRUSION_RATE based on MarlinKimbra 2016-05-20 16:15:05 -07:00
Scott Lahteine
92ac133f2b Conditionals and Sanity Check for SINGLENOZZLE 2016-05-20 15:48:27 -07:00
Scott Lahteine
69abfef82e Add "SINGLENOZZLE" extruder option 2016-05-20 15:45:11 -07:00
AnHardt
f5a036510f Extend M421 with I and J parameters
Extend M421 with I and J parameters
2016-05-21 00:18:09 +02:00
Scott Lahteine
2f6e7b7b9b Merge pull request #3805 from MatixYo/patch-7
Update language_pl.h to the latest strings
2016-05-20 14:50:49 -07:00
Scott Lahteine
88291d1656 Merge pull request #3802 from thinkyhead/rc_epatel_g28_rest_pos
MBL: Add option to configure G28 resting position for all axes
2016-05-20 12:10:52 -07:00
Scott Lahteine
f69b5afe4c Travis CI test for MBL 2016-05-20 11:52:27 -07:00
Scott Lahteine
1a6c72cb57 Apply to the rest of the configs 2016-05-20 11:52:27 -07:00
Scott Lahteine
37c6d0f4ed Reword MESH_G28_REST_ORIGIN comment 2016-05-20 11:52:27 -07:00
Edward Patel
c7d90dc5ec Add option to configure G28 all axis resting position for MBL 2016-05-20 11:52:27 -07:00
Mateusz Juszczyk
bbe4c20ef6 Update language_pl.h 2016-05-20 13:24:34 +02:00
Scott Lahteine
319d184999 Merge pull request #3803 from jbrazio/feature/buildroot-cleanup
Buildroot cleanup
2016-05-19 21:34:11 -07:00
João Brázio
3d3a919059 Moves the Marlin logo into the buildroot 2016-05-20 03:43:30 +01:00
João Brázio
08b485a310 Travis will now generate and use the custom version header file 2016-05-20 03:22:04 +01:00
Scott Lahteine
a469341555 Merge pull request #3800 from jbrazio/feature/move-felix-cfg
Moves Felix's dual configuration to a folder
2016-05-19 18:53:39 -07:00
João Brázio
66fb23edb5 Makes buildroot bin scripts executable 2016-05-20 02:26:13 +01:00
João Brázio
14652bb141 Moves shared helper scripts to the buildroot 2016-05-20 02:25:13 +01:00
Scott Lahteine
61de6daf1d Merge pull request #3761 from thinkyhead/rc_plan_arc_idle
Apply config changes, tweak comments, next_ping_ms => next_idle_ms
2016-05-19 17:10:17 -07:00
João Brázio
80f05920c5 Moves Felix's dual configuration to a folder 2016-05-20 00:49:16 +01:00
Scott Lahteine
8218558953 Update comments, rename next_ping_ms, followup to #3797 2016-05-19 16:44:57 -07:00
Scott Lahteine
6d68b12e28 Merge pull request #3797 from AnHardt/fix-screen-updatedelay
Rework intermediate idle() and manage_heater() calls in G2/G3 and G5
2016-05-19 16:29:27 -07:00
Scott Lahteine
aaaf4febaf Merge pull request #3794 from esenapaj/RCBugFix
Update Galician language to 1.1.0-RCBugFix.
2016-05-19 16:22:10 -07:00
AnHardt
e761bdbb4b Remove SF_ARC_FIX from G5 (Cubic B-spline)
Remove SF_ARC_FIX from G5 (Cubic B-spline).
SF_ARC_FIX is a fix for G2/G3 (arcs) where Skeinforge always produced relative instead of absolute coordinates for the endpoint of an arc.
It's very unlikely this is also a problem with Cubic B-splines. More likely is copying from the G2/G3 code.
2016-05-19 21:00:12 +02:00
AnHardt
2207001333 No compromises for the manage_heater()
No compromises for the manage_heater(). manage_heater() will return immediately when there is nothing to do, but needs a constant detaT to work proper.
Calling idle() only every 200ms results in a display update every ~2 seconds - that should be enough.
For the other functionalities in idle() and manage_inactivity() 200ms is a lot but hopefully works.
2016-05-19 20:52:11 +02:00
AnHardt
0c4d885d5b Speedup sreen update delay
Speedup sreen update delay
and correct a comment.

A module division by 10 is slooooow. (powers of 2 are fast - but then you can AND a bitmask with the same result)
2016-05-19 15:41:09 +02:00
Rafa Couto
9d416289cc Update Galician language to 1.1.0-RCBugFix. 2016-05-19 19:33:40 +09:00
Scott Lahteine
b422e39016 Merge pull request #3779 from thinkyhead/rc_x2_automatic_pins
Automatically set X2 stepper pins
2016-05-18 19:27:34 -07:00
Scott Lahteine
07c9a11c3c Automatically set X2 stepper pins 2016-05-18 19:09:09 -07:00
Scott Lahteine
8aa591ca09 Merge pull request #3789 from jbrazio/feature/m999-s-arg
Implements S1 argument in M999
2016-05-18 16:58:09 -07:00
Scott Lahteine
138c5c8378 Merge pull request #3788 from thinkyhead/rc_dual_x_compile_fix
DUAL_X_CARRIAGE fixes, improvements, Travis test
2016-05-18 16:56:54 -07:00
Scott Lahteine
7527fdec0b Add Travis test for DUAL_X_CARRIAGE 2016-05-18 16:32:34 -07:00
João Brázio
e6effb8f35 Implements S1 argument in M999 2016-05-19 00:13:33 +01:00
Scott Lahteine
2a7b1a85f7 Improve DUAL_X_CARRIAGE sanity check errors 2016-05-18 15:59:28 -07:00
Scott Lahteine
516e79bbda Declare extruder_duplication_enabled in Marlin.h 2016-05-18 15:51:44 -07:00
Scott Lahteine
bffa928954 Merge pull request #3785 from esenapaj/update-japanese-translation
Update Japanese trasration
2016-05-18 15:21:35 -07:00
esenapaj
56d5ae596c Update Japanese trasration
・Add new translation
・Change translation
2016-05-18 20:42:50 +09:00
Scott Lahteine
3bdc03667e Merge pull request #3784 from thinkyhead/rc_funcs_not_extern
Function declarations in headers don't need "extern"
2016-05-17 18:43:25 -07:00
Scott Lahteine
4041508ffb Function decl. in headers don't need "extern" 2016-05-17 18:35:01 -07:00
Scott Lahteine
82c2d308dc Merge pull request #3783 from thinkyhead/rc_bezier_delta_fix
Bezier style and DELTA patch
2016-05-17 18:27:48 -07:00
Scott Lahteine
ecec5c5e58 Bezier style and DELTA patch 2016-05-17 18:06:10 -07:00
Scott Lahteine
d66e53c42b Merge pull request #3782 from thinkyhead/rc_home_z_before_g29
Require homing of Z before G29
2016-05-17 17:53:56 -07:00
Scott Lahteine
552516ddf5 Merge pull request #3781 from AnHardt/minor-delta-segmenting-speedup
Minor DELTA segmentation speedup
2016-05-17 17:17:38 -07:00
Scott Lahteine
a28970784c XYZ unhomed 2016-05-17 17:02:53 -07:00
Scott Lahteine
a9926b71a4 Require homing of Z before G29 2016-05-17 16:57:12 -07:00
AnHardt
41e9569dbc Minor DELTA segmentation speedup
Minor DELTA segmentation speedup by pulling calculations out of the loop.
2016-05-18 01:49:30 +02:00
Scott Lahteine
3016dfe484 Merge pull request #3744 from thinkyhead/rc_bezier_curves
Add BEZIER_CURVE_SUPPORT — G5 command
2016-05-17 13:57:38 -07:00
Scott Lahteine
d0ac4541d3 Merge pull request #3775 from jbrazio/bugfix/followup-3770
G29: Report final position back to host when using MBL
2016-05-17 13:55:26 -07:00
Scott Lahteine
ce1d6981c2 Merge pull request #3725 from esenapaj/patch-1
Separate Z_PROBE_ALLEN_KEY from MECHANICAL_PROBE
2016-05-16 20:23:03 -07:00
João Brázio
b6a3aef297 G29: Report final position back to host when using MBL 2016-05-17 01:27:59 +01:00
esenapaj
95f30529a6 Add stowing process for MECHANICAL_PROBE 2016-05-16 18:12:10 +09:00
esenapaj
e2b87f6c85 Separate Z_PROBE_ALLEN_KEY from MECHANICAL_PROBE 2016-05-16 18:12:10 +09:00
Scott Lahteine
58339aea5f Merge pull request #3769 from jbrazio/bugfix/iteration-invokes-undef-behavior
Bugfix: iteration invokes undefined behavior
2016-05-15 20:36:25 -07:00
Scott Lahteine
26b4cb5b42 Merge pull request #3771 from thinkyhead/rc_auto_fans_again
Fix checkExtruderAutoFans
2016-05-15 20:32:31 -07:00
Scott Lahteine
c9271e610b Merge pull request #3762 from jbrazio/bugfix/lcd-hide-bed-icon
Remove the hotbed icon from the status screen
2016-05-15 19:11:05 -07:00
Scott Lahteine
2f14934c65 Fix checkExtruderAutoFans
Make sure to only set the fan state once when extruders share a fan
2016-05-15 18:54:37 -07:00
João Brázio
ecd490ed49 Bugfix: iteration invokes undefined behavior 2016-05-15 22:45:08 +01:00
Scott Lahteine
abdfd914f8 Merge pull request #3763 from esenapaj/patch-4
Follow-up for #3720 and #3759
2016-05-15 12:37:51 -07:00
Scott Lahteine
388a58ec02 Merge pull request #3767 from thinkyhead/rc_fix_zigzag_calls
Fix MBL zigzag calls
2016-05-15 12:35:36 -07:00
Scott Lahteine
754b0152f5 Fix MBL zigzag calls 2016-05-15 12:35:01 -07:00
Scott Lahteine
86ac48a374 Merge pull request #3760 from thinkyhead/rc_fix_mbl_m503_output
Fix various issues with MBL command M421
2016-05-15 11:49:49 -07:00
Scott Lahteine
1fcc9ec721 Merge pull request #3715 from jbrazio/feature/buildroot
Cleanup the buildroot
2016-05-15 11:44:10 -07:00
esenapaj
6d722716f7 Follow-up the PR #3720 and #3759
Update forgotten Configuration_DUAL.h
2016-05-15 14:08:45 +09:00
João Brázio
451000387d Remove the hotbed icon when HAS_TEMP_BED is false 2016-05-15 03:00:05 +01:00
Scott Lahteine
a058226799 Prevent watchdog timeout in bezier moves 2016-05-14 17:41:16 -07:00
Scott Lahteine
13175ce7da Fix error checking in M421 2016-05-14 17:12:44 -07:00
Scott Lahteine
bc5a547d55 More robust MBL index / point conversion 2016-05-14 16:45:56 -07:00
Scott Lahteine
a3520b6f01 More precision in M503 output for MBL's M421 2016-05-14 16:19:37 -07:00
Scott Lahteine
1b90682617 Merge pull request #3702 from thinkyhead/rc_sensitive_fan_pins
Remove need to define unused pins as -1 in pins files
2016-05-14 15:49:22 -07:00
Scott Lahteine
c8a40f06a6 Merge pull request #3759 from thinkyhead/rc_more_printcounter
Printcounter bugfix and some new features
2016-05-14 15:36:31 -07:00
Scott Lahteine
585c8a918f Merge pull request #3758 from thinkyhead/rc_verbiage
Tweaks to some verbiage
2016-05-14 15:27:11 -07:00
João Brázio
f9a62f6a8e Added PRINTJOB_TIMER_AUTOSTART section to example config files 2016-05-14 15:22:45 -07:00
João Brázio
8a18c52002 Adds an option to disable print job timer auto start 2016-05-14 15:22:44 -07:00
João Brázio
a79267217b M78 now allows stats reset using the S78 argument 2016-05-14 15:22:44 -07:00
João Brázio
b660f1bdb8 Bugfix: Multiple M77 no longer increment the print counter 2016-05-14 15:22:43 -07:00
Scott Lahteine
c63f95f2fe Merge pull request #3748 from clexpert/patch-1
Lastest changes in Czech translate
2016-05-14 15:12:39 -07:00
Scott Lahteine
e01e52969e Merge pull request #3757 from thinkyhead/rc_fix_auto_fans
Don't try to enable unused auto fans
2016-05-14 15:09:24 -07:00
Scott Lahteine
ddf3e1e22d Tweaks to some verbiage 2016-05-14 15:06:09 -07:00
Scott Lahteine
a713043acd Merge pull request #3749 from esenapaj/patch-3
Enclose all #error strings by double-quotes
2016-05-14 15:01:56 -07:00
Scott Lahteine
3cfea3ff12 Merge pull request #3752 from AnHardt/fix-FIX_MOUNTED_PROBE
G29 missing FIX_MOUNTED_PROBE condition
2016-05-14 15:00:42 -07:00
Scott Lahteine
08dfe08f9a Merge pull request #3754 from jbrazio/feature/update-pt_PT
Updated pt_PT language pack
2016-05-14 15:00:12 -07:00
Scott Lahteine
596ebccd54 Merge pull request #3753 from jbrazio/feature/followup-3740
Warn user about useless of individual axis homing and DELTA kinematics
2016-05-14 14:59:49 -07:00
Scott Lahteine
6e3556cb75 Merge pull request #3746 from esenapaj/patch-2
Update Japanese translation
2016-05-14 14:57:43 -07:00
Scott Lahteine
ddac17a195 Add BEZIER_CURVE_SUPPORT (G5 XYZEFIJPQ) 2016-05-14 14:52:08 -07:00
Scott Lahteine
b4c891dfd2 Remove obsolete reference to prepare_arc_move 2016-05-14 14:51:09 -07:00
Scott Lahteine
9f6b8f7d5b Remove extra @section directive from configs 2016-05-14 14:51:09 -07:00
Scott Lahteine
4d6bb52b26 Don't try to enable unused auto fans
Addressing #3743
2016-05-14 14:46:14 -07:00
Scott Lahteine
f13c4a9ec4 Merge pull request #3720 from jbrazio/feature/host-keepalive
Removes the DISABLE from HOST_KEEPALIVE
2016-05-14 14:39:31 -07:00
Scott Lahteine
6903eb1c5b Merge pull request #3751 from AnHardt/fix-arcs
Idle during long arcs
2016-05-14 14:33:56 -07:00
João Brázio
596f15348d Updated pt_PT language pack 2016-05-14 01:45:15 +01:00
João Brázio
d7522152e1 Warn user about useless of individual axis homing and DELTA kinematics 2016-05-14 01:35:05 +01:00
AnHardt
8a4376d51f Idle during long arcs
Idle during long arcs
to prevent from watchdog resets during high segmented fast arcs.
2016-05-14 00:29:13 +02:00
esenapaj
888443ca1e Enclose all #error strings with apostrophes 2016-05-13 21:10:23 +09:00
Petr Zahradnik
50b1a6bb2b Lastest changes in Czech translate 2016-05-13 13:51:13 +02:00
AnHardt
b74af78736 Make arc support (G2/G3) configurable
Saves about 2669 bytes when deactivated. (About 1% for a AT2560, about __4%__ for a AT644!)
2016-05-13 13:27:45 +02:00
AnHardt
aef2559bd8 fix-FIX_MOUNTED_PROBE
Add a forgotten condition
2016-05-13 12:07:17 +02:00
esenapaj
e9d851137d Update Japanese translation
・Add new translation
2016-05-13 18:52:35 +09:00
Scott Lahteine
14cd0f4c92 Merge pull request #3740 from thinkyhead/rc_lcd_home_options
Individual Axis Homing LCD menu items
2016-05-12 11:59:46 -07:00
Scott Lahteine
ddf8f5eb10 Merge pull request #3741 from esenapaj/patch-2
Follow-up the PR #3719(Harmonize LCD comment section)
2016-05-12 11:59:24 -07:00
esenapaj
69511b5e5e Follow-up the PR #3719(Harmonize LCD comment section)
It update forgotten Configuration_DUAL.h.
2016-05-12 19:16:36 +09:00
Scott Lahteine
675e92ab1f Merge pull request #3738 from thinkyhead/rc_limit_i2c_request
Print an error on bad i2c request
2016-05-11 19:36:49 -07:00
Scott Lahteine
a42655b9ac Merge pull request #3739 from thinkyhead/rc_reverse_encoder
Add REVERSE_ENCODER_DIRECTION option
2016-05-11 19:32:23 -07:00
João Brázio
09150cae79 Individual Axis Homing LCD menu items 2016-05-11 19:28:19 -07:00
Scott Lahteine
4dc4e2063f Add REVERSE_ENCODER_DIRECTION option 2016-05-11 15:39:28 -07:00
Scott Lahteine
aaeadf0cbd If no "B" parameter given, get 1 byte 2016-05-11 15:30:08 -07:00
Scott Lahteine
a6d594665b Print an error on bad i2c request
Reference: https://github.com/MarlinFirmware/Marlin/pull/3713#issuecomment-218333678
2016-05-11 15:30:02 -07:00
João Brázio
85b2c80838 Updated example configurations 2016-05-11 01:45:49 +01:00
João Brázio
ac7f634956 Removed the DISABLE from HOST_KEEPALIVE_FEATURE option 2016-05-11 01:45:49 +01:00
Scott Lahteine
a454a88f9c Merge pull request #3722 from jbrazio/bugfix/printcounter
Minor #warning fix for PrintCounter
2016-05-10 17:17:04 -07:00
Scott Lahteine
03bda5c141 Merge pull request #3719 from jbrazio/feature/update-configs
Harmonize LCD comment section
2016-05-10 17:16:23 -07:00
Scott Lahteine
5085892204 Merge pull request #3728 from thinkyhead/rc_mention_allen_key
Mention Z_PROBE_ALLEN_KEY in probe sanity checks
2016-05-10 14:06:14 -07:00
Scott Lahteine
c827671299 Mention Z_PROBE_ALLEN_KEY in probe sanity checks 2016-05-10 13:50:20 -07:00
Scott Lahteine
be5d17de17 Merge pull request #3713 from thinkyhead/rc_file_offset_long
Use code_value_long for potentially large values
2016-05-10 09:15:53 -07:00
Scott Lahteine
56dd31ea3c Use code_value_long for potentially large values
Addressing #3711
2016-05-10 09:15:31 -07:00
João Brázio
eafa16a781 Minor #warning fix for PrintCounter 2016-05-10 14:14:54 +01:00
João Brázio
5373ac6373 Updated example configurations 2016-05-10 13:42:00 +01:00
João Brázio
aa5a4716cf Update default config 2016-05-10 13:37:21 +01:00
João Brázio
a878c09614 Cleanup of the buildroot 2016-05-10 03:37:17 +01:00
Scott Lahteine
c4e6e41b05 Merge pull request #3712 from esenapaj/patch-1
Update Japanese translation, etc
2016-05-09 12:30:47 -07:00
esenapaj
1a75509a3c Cleanup for Danish file
・Arrange the strings in unified order
・Remove "#ifdef DELTA_CALIBRATION_MENU" directive
・Adjust spacing
2016-05-10 02:43:25 +09:00
esenapaj
cf6c607425 Update Japanese translation
・Add new translation
・Add translation for 16 width ASCII LCD
・Change translation
・Revert translation from Japanese to English
・Fix typo
2016-05-10 02:43:24 +09:00
Scott Lahteine
6f36b7c1cd Merge pull request #3224 from yarda/fix-melzi2-arduino-1.6.x
Fixed Makefile to work with Melzi2 boards on arduino-1.6.x
2016-05-08 19:33:37 -07:00
Scott Lahteine
050e0bd2af Merge pull request #3705 from thinkyhead/rc_runaway_logic
Fallthru in thermal runaway test when TRState changes
2016-05-08 19:00:24 -07:00
Scott Lahteine
5f7ad16b19 Merge pull request #3707 from thinkyhead/rc_fix_delta_blocking_move
Fix dipping on DELTA robots during G29
2016-05-08 18:42:57 -07:00
Scott Lahteine
96b71e62c0 Fix dipping on DELTA robots during G29
- Addressing #3689, et. al.
2016-05-08 18:28:46 -07:00
Scott Lahteine
3b9c5404a4 Merge pull request #3706 from thinkyhead/rc_fix_sanity_closure
Enclose #error strings with apostrophes in quotes
2016-05-08 18:09:31 -07:00
Scott Lahteine
ea1dd31851 Enclose #error strings with apostrophes in quotes 2016-05-08 18:08:39 -07:00
Scott Lahteine
9b92bb8f31 Set the initial state based on target temperature 2016-05-08 17:25:44 -07:00
Scott Lahteine
6b13c430ae The TRReset state is not needed with fall-through 2016-05-08 17:01:46 -07:00
Scott Lahteine
c2522ce1f5 Fallthru in thermal runaway test when TRState changes 2016-05-08 16:51:33 -07:00
Scott Lahteine
d32d9a3c5c Merge pull request #3672 from thinkyhead/rc_consolidate_probe_flags
Cleanup and consolidate probe conditionals for clarity
2016-05-08 16:42:22 -07:00
Scott Lahteine
77e25043a9 Merge pull request #3701 from esenapaj/patch-2
Fix compilation error in debugging  code
2016-05-08 13:06:59 -07:00
Scott Lahteine
15fc93d742 Cleanup and consolidate probe conditionals for clarity 2016-05-08 12:59:43 -07:00
Scott Lahteine
5ca6334fd2 Cleanup pins files, fixup analogtodigitalpin, etc. 2016-05-08 12:38:00 -07:00
esenapaj
9186be7b83 Fix compilation error in debugging code
Fix compilation error in Thermal Runaway debugging code
2016-05-09 01:57:21 +09:00
Scott Lahteine
d7819298ca Merge pull request #3687 from thinkyhead/rc_localize_babystepping
Use AxisEnum with _lcd_babystep()
2016-05-05 21:15:52 -07:00
Scott Lahteine
51109d4af7 Use AxisEnum with _lcd_babystep() 2016-05-05 21:04:30 -07:00
Scott Lahteine
58ea246f98 Merge pull request #3685 from thinkyhead/rc_localize_babystepping
Localize babystepping in the Temperature class
2016-05-05 20:56:04 -07:00
Scott Lahteine
b65ea98d6b Localize babystepping in the Temperature class
So that `ultralcd.cpp` doesn’t need to worry about the details.
2016-05-05 15:00:31 -07:00
Scott Lahteine
0c7beb832c Merge pull request #3681 from esenapaj/patch-1
Follow-up the PR #3643(Temperature singleton)
2016-05-05 12:47:06 -07:00
Scott Lahteine
fc5fe2cc22 Merge pull request #3678 from jbrazio/rework/delta-diagonal-rod-timmers
Moved DELTA radius/rod default trimmer values to Conditionals.h
2016-05-05 11:38:14 -07:00
esenapaj
1a97442d19 Follow-up the PR #3643(Temperature singleton)
Follow-up the PR #3643(Temperature singleton)

・Change from fanSpeedSoftPwm[0] to thermalManager.fanSpeedSoftPwm[0] in planner.cpp
It fix compilation error when FAN_SOFT_PWM is enabled.

・Remove declaration of setExtruderAutoFanState() in temperature.h
Because that function was abolished.

・Change from babystepsTodo to thermalManager.babystepsTodo in ultralcd.cpp
It fix compilation errors when BABYSTEPPING is enabled.
2016-05-05 18:01:39 +09:00
Scott Lahteine
4f6120f70f Merge pull request #3643 from thinkyhead/rc_singletons_plus_temperature
Temperature singleton
2016-05-04 20:41:46 -07:00
Scott Lahteine
084f6b5b44 Temperature singleton class 2016-05-04 19:42:12 -07:00
Scott Lahteine
142bd3f3e7 Disable THERMAL_PROTECTION_BED with no sensor 2016-05-04 19:36:51 -07:00
Scott Lahteine
a5a6b86898 Merge pull request #3679 from thinkyhead/rc_fix_3677
Can't use the ENABLED macro as a boolean
2016-05-04 16:49:50 -07:00
Scott Lahteine
13f85a2b50 Can't use the ENABLED macro as a boolean 2016-05-04 16:33:57 -07:00
João Brázio
23567a1d8b Moved DELTA radius/rod default trimmer values to Conditionals.h 2016-05-05 00:18:32 +01:00
Scott Lahteine
b4b5c7a6b7 Merge pull request #3670 from thinkyhead/rc_scoovo_controller
Use directional buttons when defined
2016-05-03 17:42:18 -07:00
Scott Lahteine
5ff10991c0 Merge pull request #3671 from thinkyhead/rc_ultimate_stepper_planner_patch
Ultimate followup to Stepper/Planner patch
2016-05-03 17:09:23 -07:00
Scott Lahteine
6398d497b3 Ultimate followup to Stepper/Planner patch
- Search all symbols and apply prefixes where needed
- Encapsulate some private methods
- Inline some setters
- Make `microstep_mode` a public method
2016-05-03 17:07:37 -07:00
Scott Lahteine
ddafb859e2 Use directional buttons when defined 2016-05-03 12:50:49 -07:00
Scott Lahteine
b959020532 Merge pull request #3667 from esenapaj/patch-1
Additional follow-up the PR #3631(Encapsulate S...
2016-05-03 09:36:09 -07:00
Scott Lahteine
4e1a91caa1 Merge pull request #3669 from esenapaj/patch-2
Fix for PR #3526(Configuration.h LCD & SDCard s...
2016-05-03 09:33:27 -07:00
esenapaj
212b17d510 Fix for PR #3526(Configuration.h LCD & SDCard s...
Fix for PR #3526(Configuration.h LCD & SDCard section rewrite)

It removes duplicated BQ_LCD_SMART_CONTROLLER.
2016-05-03 21:35:02 +09:00
esenapaj
605808fe37 Additional follow-up the PR #3631(Encapsulate S...
Additional follow-up the PR #3631(Encapsulate Stepper, Planner, Endstops in singleton classes)

・Change from abort_on_endstop_hit to stepper.abort_on_endstop_hit in endstop.cpp, Marlin_main.cpp, and ultralcd.cpp
・Add include path to cardreader.h and temperature.h in endstop.cpp(for CardReader class and disable_all_heaters())
It fix compilation error when ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED and SDSUPPORT are enabled.

・Change from digipot_current() to stepper.digipot_current() in Marlin_main.cpp
・Change from digitalPotWrite() to stepper.digitalPotWrite() in Marlin_main.cpp
It fix compilation errors when HAS_DIGIPOTSS is enabled.

・Change from microstep_mode() to stepper.microstep_mode() in Marlin_main.cpp
・Change attribute of microstep_mode() from private to public in stepper.h
・Change from microstep_readings() to stepper.microstep_readings() in Marlin_main.cpp
・Change from microstep_ms() to stepper.microstep_ms() in Marlin_main.
It fix compilation errors when HAS_MICROSTEPS is enabled.
2016-05-03 18:28:37 +09:00
Scott Lahteine
6bb664c690 Merge pull request #3665 from thinkyhead/rc_stepper_babystep
Fix BABYSTEPPING, add it to Travis test
2016-05-02 20:44:04 -07:00
Scott Lahteine
7fd0243048 Cleanup, debug strings in Planner::adjusted_position 2016-05-02 20:11:27 -07:00
Scott Lahteine
85e732d5fd Fix BABYSTEPPING, add it to Travis test 2016-05-02 20:01:00 -07:00
Scott Lahteine
37c4970d87 Merge pull request #3660 from esenapaj/patch-2
Follow-up the PR #3631(Encapsulate Stepper, ...
2016-05-02 15:23:38 -07:00
Scott Lahteine
ad27d3c523 Merge pull request #3659 from esenapaj/patch-1
Some clean-up for example configuration files
2016-05-02 15:22:29 -07:00
Scott Lahteine
f1c1a8dc59 Merge pull request #3661 from Blue-Marlin/83filen2
8.3-filenames second try
2016-05-02 14:47:26 -07:00
Jochen Groppe
0bae00c1ed Merge pull request #3644 from tkurbad/german_translation
Revisited German translation
2016-05-02 16:46:19 +02:00
Blue-Marlin
5ad7d263e9 8.3-filenames second try
Fix for #6 3593, #3648
this time excludung 'DEL' instead of accidently '~'.
2016-05-02 15:58:04 +02:00
Torsten Kurbad
aae2f502e0 Revisited German translation 2016-05-02 15:18:12 +02:00
esenapaj
a82cfcff2d Follow-up the PR #3631(Encapsulate Stepper, ...
Follow-up the PR #3631(Encapsulate Stepper, Planner, Endstops in singleton classes)

plan_bed_level_matrix -> planner.bed_level_matrix in multi extruders section of Marlin_main.cpp
It probably fix the Issue #3658(plan_bed_level_matrix not declarate).

movesplanned() -> planner.movesplanned() in ADVANCED_OK section of Marlin_main.cpp
It fix compilation error when ADVANCED_OK is enabled
2016-05-02 22:04:26 +09:00
esenapaj
2fa4bc344c Some clean-up for example configuration files
Some clean-up for example configuration files

Follow-up and fix the PR #3253(Make the Autotune item(s) in the LCD menu optional):
・Update forgotten file(Felix/Configuration_DUAL.h)

Follow-up the PR #3526(Configuration.h LCD & SDCard section rewrite):
・Add section of RigidBot Panel to RepRapWorld/Megatronics/Configuration.h

Follow-up the PR #3576(Z Safe Homing for all):
・Adjust spacing

Follow-up and fix the PR #3625(Print job statistics):
・Update forgotten file(Felix/Configuration_DUAL.h)
・Remove ambiguous character "f" in top of RigidBot/Configuration.h
2016-05-02 21:16:00 +09:00
Scott Lahteine
f7185fba08 Merge pull request #3651 from jbrazio/feature/generate_version_header_for_marlin
Update version header generation script
2016-05-01 20:30:01 -07:00
Scott Lahteine
11b56a31ab Merge pull request #3657 from thinkyhead/rc_revert_3648_fix_sd_printing
Revert PR 3648 to fix SD printing
2016-05-01 20:02:23 -07:00
Scott Lahteine
da47b83b3d Revert PR 3648 to fix SD printing
The character 0x7E is common in 8.3 filenames. Maybe the last condition
should be removed completely instead.
2016-05-01 18:04:04 -07:00
Scott Lahteine
60c6efb75c Merge pull request #3653 from thinkyhead/rc_bed_temp_watch_merge
Introduce temp watch protection for the bed
2016-05-01 13:58:28 -07:00
Scott Lahteine
196af30467 Merge pull request #3654 from thinkyhead/rc_cleanup_pins
Pins cleanups
2016-05-01 13:56:04 -07:00
Scott Lahteine
5b7a6c217a Include more fans in sensitive pins list 2016-05-01 13:49:32 -07:00
Scott Lahteine
f508c54c6c Use #undef in AZTEEG_X3_PRO for RAMPS overrides 2016-05-01 13:49:32 -07:00
Scott Lahteine
c6f1337f5c NOOP macro for do-nothing macros 2016-05-01 13:49:32 -07:00
Scott Lahteine
c2145566c7 Merge pull request #3631 from thinkyhead/rc_singletons
Encapsulate Stepper, Planner, Endstops in singleton classes
2016-05-01 13:47:47 -07:00
Scott Lahteine
fbf69081b4 Updated comment for THERMAL_PROTECTION_BED 2016-05-01 13:12:51 -07:00
gralco
908229dbb3 Introduce temp watch protection for the bed
When setting the bed temp via M140/M190 if the thermistor does not read an increase of WATCH_BED_TEMP_INCREASE degrees by WATCH_BED_TEMP_PERIOD seconds then it will throw "Error:Heating failed, system stopped! Heater_ID: bed" and call the kill() function.

Conflicts:
	Marlin/Configuration_adv.h
2016-05-01 13:12:51 -07:00
João Brázio
ff7a303a0e Updated version header gen script 2016-05-01 03:31:19 +01:00
Scott Lahteine
77d6e5283b Merge pull request #3648 from Blue-Marlin/83filenames
Don't reject 8.3-filenames with chars > 0x7f
2016-04-30 17:48:03 -07:00
Scott Lahteine
24a15332b3 Encapsulate dual Z endstop handling 2016-04-30 17:26:50 -07:00
Scott Lahteine
462a8a951e A little extra gcode_T spacing 2016-04-30 17:26:50 -07:00
Scott Lahteine
96f51f400f Planner singleton class 2016-04-30 17:26:50 -07:00
Scott Lahteine
5076d12344 Localize M119 in Endstops class 2016-04-30 17:26:50 -07:00
Scott Lahteine
5e4e535ce8 Stepper and Endstops as singleton objects 2016-04-30 17:26:50 -07:00
Scott Lahteine
98f30283fa Merge pull request #3650 from thinkyhead/rc_temp_change_during_m109_m190
Prevent stuck M109/M190 when target is changed
2016-04-30 17:24:51 -07:00
Scott Lahteine
6d3e4e1f8f Prevent stuck M109/M190 when target is changed 2016-04-30 17:03:54 -07:00
Blue-Marlin
ac4caab8f1 Don't mangel 8.3-filenames with chars > 0x7f
Don't mangel 8.3-filenames with chars > 0x7f

Windows produces 8.3filenames wit chars > 0x7f. Those have been rejected
by Marlin until now.

With these 'malformed' filenames can now be worked with:
In the LCD menue
With RepetierHost (V1.6.1 tested) - full support. Characters are
displayed as '?'
With Octoprint (1.2.10 tested) the files do not appear in the files
area. At the console, listed with M20 they appear with a '�'.
With Pronterface the files appear in the sd-window but you can't start
them. They are mangled by pronterface. The names are altered and than
recected by Marlin. In the console they apper with differen but not the
correct characters.

All in all a little step forward.

Fix for #3593
2016-04-30 17:37:22 +02:00
Scott Lahteine
eeef571be2 Merge pull request #3613 from thinkyhead/rc_acceleration_fix1
Fix an acceleration anomaly by making locals signed
2016-04-29 16:39:31 -07:00
Scott Lahteine
c3ef9993b9 Merge pull request #3625 from jbrazio/feature/print-counter
Print job statistics
2016-04-29 15:31:14 -07:00
Scott Lahteine
96b2b3f4fe Merge pull request #3642 from thinkyhead/rc_quieter_wait_for_temps
Keepalive not needed while waiting for temperatures
2016-04-29 15:20:12 -07:00
João Brázio
e34f4653ef Fixed a typo on the configuration files 2016-04-29 23:13:59 +01:00
João Brázio
1491d682fb Miscellaneous tweaks on PrintCounter 2016-04-29 23:13:59 +01:00
João Brázio
27088e356f Updated example configuration files 2016-04-29 23:13:59 +01:00
João Brázio
8fb23e899f PrintCounter EEPROM read/write optimizations 2016-04-29 23:13:59 +01:00
João Brázio
9589e51810 Disable DEBUG_PRINTCOUNTER 2016-04-29 23:13:59 +01:00
João Brázio
484de24e22 Updated travis to test for PRINTCOUNTER 2016-04-29 23:13:58 +01:00
João Brázio
e2da7e5000 Updated the default configuration and fixed a printcounter.h typo 2016-04-29 23:13:58 +01:00
João Brázio
d6cfcc9c8b Added new G-Code: M78 2016-04-29 23:13:58 +01:00
João Brázio
4f541c5bb5 Added a new object: PrintCounter 2016-04-29 23:13:58 +01:00
João Brázio
26b166d7cf Made all stopwatch::debug() calls static 2016-04-29 23:13:58 +01:00
Scott Lahteine
5897b58a70 Merge pull request #3634 from esenapaj/patch-2
Update distribution date and readme again
2016-04-28 21:19:08 -07:00
Scott Lahteine
f4706bb90e Keepalive not needed while waiting for temperatures 2016-04-28 21:11:15 -07:00
Scott Lahteine
924285afa6 Merge pull request #3641 from thinkyhead/rc_reverse_menu_doc
Correct the REVERSE_MENU_DIRECTION comment
2016-04-28 20:28:46 -07:00
Scott Lahteine
f1b00eb12b Correct the REVERSE_MENU_DIRECTION comment 2016-04-28 20:27:17 -07:00
Scott Lahteine
8905908081 Merge pull request #3632 from thinkyhead/i3_millie_language_fun
Simplified LCD Language settings
2016-04-28 19:52:10 -07:00
esenapaj
c7e4b3044b Change "RC6" to "RCBugFix" on top part of the readme, etc
・Change "RC6" to "RCBugFix" on top part of the readme
・Unify distribution date of RCBugFix and RC6
・Move comments about IDE version from RCBugFix section to RC6 section
2016-04-28 20:30:39 +09:00
Scott Lahteine
6c48852b20 Update distribution date 2016-04-28 18:06:53 +09:00
Scott Lahteine
2142d5a62e Merge pull request #3627 from Blue-Marlin/German-again-and-again-and-agin
Correct an error in lang_de
2016-04-27 20:14:15 -07:00
Scott Lahteine
0c11566f42 Replace LANGUAGE_INCLUDE with LCD_LANGUAGE 2016-04-27 20:06:40 -07:00
Scott Lahteine
259794c0be Make DISPLAY_CHARSET_HD44780 a single setting 2016-04-27 20:06:40 -07:00
Scott Lahteine
a5d00f755b Merge pull request #3619 from esenapaj/patch-2
Update distribution date and readme
2016-04-27 19:52:30 -07:00
Blue-Marlin
e89f01d044 Correct an error in lang_de
There is no way to translate "A-travel" to "A Rückzug". Thats simply
wrong.
2016-04-27 12:59:48 +02:00
esenapaj
ee2f37f3cc Update distribution date and readme
It sync with the RC.
2016-04-27 11:21:51 +09:00
Paul Philippov
2d89b5527f fixed link to wiki 2016-04-27 11:19:46 +09:00
Scott Lahteine
ad0f70f2f3 Merge pull request #3620 from Blue-Marlin/feedrate_atfer_toolchange 2016-04-26 17:33:15 -07:00
Scott Lahteine
d58c5ac446 Merge pull request #3618 from esenapaj/patch-1 2016-04-26 17:20:04 -07:00
Scott Lahteine
2bb5cf5291 Merge pull request #3622 from floyd871/patch-1 2016-04-26 17:14:36 -07:00
Scott Lahteine
6d98f47d1c Merge pull request #3623 from jbrazio/cleanup/convert2unix 2016-04-26 17:13:22 -07:00
Blue-Marlin
e58e281473 Fix feedrate after toolchange
The fix is simple. Most changes are because of changed indendation,
bacause of leaving early for wrong tool number
2016-04-27 00:57:45 +02:00
João Brázio
32d798fcc7 Converted all files on src to Unix file format 2016-04-26 21:23:39 +01:00
Michael Neumann
59cfc84dad German "Umlaute"
We don't have to  avoid German "Umlaute" any more.
2016-04-26 21:52:05 +02:00
Matt Keveney
4dfc496965 added recalc_delta_settings() call in Config_RetrieveSettings. Appears to be necessary any time delta-related parameters (M665) are modified 2016-04-26 20:01:53 +09:00
Scott Lahteine
ec82e1e05d Merge pull request #3616 from thinkyhead/rc_fixup_some_movement
General cleanup around high level move functions
2016-04-25 20:23:38 -07:00
Scott Lahteine
abeab792cb General cleanup around high level move functions
- Use new `DEBUG_POS` macro for `DELTA` debug
- Neaten up `prepare_move` a smidgen
- Remove an old commented `prepare_move()` line
2016-04-25 20:02:24 -07:00
Scott Lahteine
66540f8b84 Merge pull request #3615 from thinkyhead/rc_whats_up_with_M112
Report current position to host after M206 / M428
2016-04-25 18:58:41 -07:00
Scott Lahteine
68d0347e67 Call report_current_position after M206 / M428 2016-04-25 18:43:28 -07:00
Scott Lahteine
dcb4cdaa9e Call report_current_position instead of gcode_M114 directly 2016-04-25 18:43:27 -07:00
Scott Lahteine
e38baaa23e Fix an acceleration anomaly by making locals signed 2016-04-25 14:17:20 -07:00
Scott Lahteine
dd26c67bab Merge pull request #3612 from jbrazio/feature/stopwatch-misc
Renamed stopwatch::status to stopwatch::state
2016-04-25 12:36:34 -07:00
João Brázio
739dcda0f1 Renamed stopwatch::status to stopwatch::state 2016-04-25 17:40:43 +01:00
gralco
840e13f664 Introduce M108 cancel heatup for the hotend and bed
This G-code is asynchronously handled in the get_serial_commands() parser.
2016-04-25 08:33:33 -06:00
Jaroslav Škarvada
d229c58df6 Fixed Makefile to work with Melzi2 boards on arduino-1.6.x
- also by default use ${HOME}/Arduino as install directory which may be more
sane, especially with arduino packages provided by distributions
- bump arduino version to 106 (this seems to be useless)
- program firmware through the USB serial which is more comfortable way how
to program the firmware
- use 57600 programing speed by default which seems to be more reliable
with arduino bootloaders (at least with those shipped with the Melzi2 boards)

Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
2016-03-06 20:12:01 +01:00
1268 changed files with 119891 additions and 555169 deletions

20
.gitattributes vendored Normal file
View File

@@ -0,0 +1,20 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Files with Unix line endings
*.c text eol=lf
*.cpp text eol=lf
*.h text eol=lf
*.ino text eol=lf
*.py text eol=lf
*.sh text eol=lf
*.scad text eol=lf
# Files with native line endings
# *.sln text
# Binary files
*.png binary
*.jpg binary
*.fon binary

136
.gitignore vendored Normal file → Executable file
View File

@@ -1,20 +1,138 @@
// Our automatic versioning scheme generates the following file
// NEVER put it in the repository
#
# Marlin 3D Printer Firmware
# Copyright (C) 2017 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
#
# Based on Sprinter and grbl.
# Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Our automatic versioning scheme generates the following file
# NEVER put it in the repository
_Version.h
// All of the following OS, IDE and compiler generated file
// references should be moved from this file
// They are needed, but they belong in your global .gitignore
// rather than in a per-project file such as this
*.o
#
# OS
#
applet/
*.DS_Store
#
# Misc
#
*~
*.orig
*.rej
*.bak
*.DS_Store
*.idea
*.s
*.i
*.ii
*.swp
tags
#
# C++
#
# Compiled Object files
*.slo
*.lo
*.o
*.obj
*.ino.cpp
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
#
# C
#
# Object files
*.o
*.ko
*.obj
*.elf
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
# PlatformIO files/dirs
.pio*
lib/readme.txt
#Visual Studio
*.sln
*.vcxproj
*.vcxproj.filters
Marlin/Release/
Marlin/Debug/
Marlin/__vm/
Marlin/.vs/
#cmake
CMakeLists.txt
Marlin/CMakeLists.txt
CMakeListsPrivate.txt
#CLion
cmake-build-*

View File

@@ -1,47 +1,71 @@
---
language: c
#
notifications:
email: false
#
before_install:
# Travis runs a detached head. We need to find the current branch
- git checkout `git branch --contains HEAD | grep -v '*'`
# Also tags for the root(s) of the minor version(s)
#
# Fetch the tag information for the current branch
- git fetch origin --tags
- mkdir ~/bin
#
# Publish the buildroot script folder
- chmod +x ${TRAVIS_BUILD_DIR}/buildroot/bin/*
- ln -s ${TRAVIS_BUILD_DIR}/buildroot/bin/ ~/bin
#
# Start fb X server
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16"
- sleep 3
- export DISPLAY=:1.0
#
install:
# Install arduino 1.6.4
- wget http://downloads-02.arduino.cc/arduino-1.6.4-linux64.tar.xz
- tar Jxf arduino-1.6.4-linux64.tar.xz
- sudo mv arduino-1.6.4 /usr/local/share/arduino
- ln -s /usr/local/share/arduino/arduino ~/bin/arduino
# Our custom build commands
- mv LinuxAddons/bin/* ~/bin/
- ls -la ~/bin
# install our platform
- cp -r ArduinoAddons/Arduino_1.6.x/hardware/* /usr/local/share/arduino/hardware
# copy libraries to arduino dir, as conditional includes do not work in .ino files
- cp -r /usr/local/share/arduino/hardware/marlin/avr/libraries/* /usr/local/share/arduino/libraries/
- cp -r ArduinoAddons/Arduino_1.6.x/libraries/* /usr/local/share/arduino/libraries/
# add LiquidCrystal_I2C & LiquidTWI2 libraries
#
# Install arduino 1.6.10
- wget http://downloads-02.arduino.cc/arduino-1.6.10-linux64.tar.xz
- tar xf arduino-1.6.10-linux64.tar.xz
- sudo mv arduino-1.6.10 /usr/local/share/arduino
- ln -s /usr/local/share/arduino/arduino ${TRAVIS_BUILD_DIR}/buildroot/bin/arduino
#
# Install: LiquidCrystal_I2C library
- git clone https://github.com/kiyoshigawa/LiquidCrystal_I2C.git
- mv LiquidCrystal_I2C/LiquidCrystal_I2C /usr/local/share/arduino/libraries/LiquidCrystal_I2C
#
# Install: LiquidTWI2 library
- git clone https://github.com/lincomatic/LiquidTWI2.git
- mv LiquidTWI2 /usr/local/share/arduino/libraries/LiquidTWI2
- sudo mv LiquidTWI2 /usr/local/share/arduino/libraries/LiquidTWI2
#
# Install: Monochrome Graphics Library for LCDs and OLEDs
- git clone https://github.com/olikraus/U8glib_Arduino.git
- sudo mv U8glib_Arduino /usr/local/share/arduino/libraries/U8glib
#
# Install: L6470 Stepper Motor Driver library
# - git clone https://github.com/ameyer/Arduino-L6470.git
# - sudo mv Arduino-L6470/L6470 /usr/local/share/arduino/libraries/L6470
#
# Install: TMC26X Stepper Motor Controller library
# - git clone https://github.com/trinamic/TMC26XStepper.git
# - sudo mv TMC26XStepper /usr/local/share/arduino/libraries/TMC26XStepper
#
# Install: TMC2130 Stepper Motor Controller library
- git clone https://github.com/teemuatlut/TMC2130Stepper.git
- sudo mv TMC2130Stepper /usr/local/share/arduino/libraries/TMC2130Stepper
#
before_script:
# arduino requires an X server even with command line
# https://github.com/arduino/Arduino/issues/1981
- Xvfb :1 -screen 0 1024x768x16 &> xvfb.log &
# change back to home directory for compiling
- cd $TRAVIS_BUILD_DIR
#
# Change current working directory to the build dir
- cd ${TRAVIS_BUILD_DIR}
#
# Generate custom version include
- generate_version_header_for_marlin ${TRAVIS_BUILD_DIR}/Marlin
- cat ${TRAVIS_BUILD_DIR}/Marlin/_Version.h
#
script:
#
# Backup Configuration.h, Configuration_adv.h, and pins_RAMPS_14.h
# Backup Configuration.h, Configuration_adv.h, and pins_RAMPS.h
#
- cp Marlin/Configuration.h Marlin/Configuration.h.backup
- cp Marlin/Configuration_adv.h Marlin/Configuration_adv.h.backup
- cp Marlin/pins_RAMPS_14.h Marlin/pins_RAMPS_14.h.backup
- cp Marlin/pins_RAMPS.h Marlin/pins_RAMPS.h.backup
#
# Build with the default configurations
#
@@ -59,38 +83,207 @@ script:
- opt_set TEMP_SENSOR_1 1
- build_marlin
#
# Test 3 extruders on RUMBA (can use any board with >=3 extruders defined)
# Test 5 extruders on AZTEEG_X3_PRO (can use any board with >=5 extruders defined)
# Include a test for LIN_ADVANCE here also
#
- opt_set MOTHERBOARD BOARD_RUMBA
- opt_set EXTRUDERS 3
- opt_set TEMP_SENSOR_2 1
- opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
- opt_set EXTRUDERS 5
- opt_set TEMP_SENSOR_1 1
- opt_set TEMP_SENSOR_2 5
- opt_set TEMP_SENSOR_3 20
- opt_set TEMP_SENSOR_4 999
- opt_set TEMP_SENSOR_BED 1
- opt_enable_adv LIN_ADVANCE
- build_marlin
#
# Test PIDTEMPBED
#
- restore_configs
- opt_set TEMP_SENSOR_BED 1
- opt_enable PIDTEMPBED
- build_marlin
#
# Test AUTO_BED_LEVELING & DEBUG_LEVELING_FEATURE
# Test MAX6675
#
- restore_configs
- opt_enable ENABLE_AUTO_BED_LEVELING DEBUG_LEVELING_FEATURE
- opt_set TEMP_SENSOR_0 -2
- build_marlin
#
# Test AUTO_BED_LEVELING & DEBUG_LEVELING_FEATURE with Servos
#
- opt_enable NUM_SERVOS Z_ENDSTOP_SERVO_NR SERVO_ENDSTOP_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
- build_marlin
#
# Test EEPROM_SETTINGS & EEPROM_CHITCHAT
# Test a "Fix Mounted" Probe along with Safe Homing
#
- restore_configs
- opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT
- opt_enable FIX_MOUNTED_PROBE Z_SAFE_HOMING
- build_marlin
#
### LCDS ###
# ...with AUTO_BED_LEVELING_LINEAR, Z_MIN_PROBE_REPEATABILITY_TEST, and DEBUG_LEVELING_FEATURE
#
- opt_enable AUTO_BED_LEVELING_LINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE
- opt_set ABL_GRID_POINTS_X 16
- opt_set ABL_GRID_POINTS_Y 16
- build_marlin
#
# Test a simple build of AUTO_BED_LEVELING_UBL
#
- restore_configs
- opt_enable AUTO_BED_LEVELING_UBL UBL_G26_MESH_EDITING ENABLE_LEVELING_FADE_HEIGHT FIX_MOUNTED_PROBE EEPROM_SETTINGS G3D_PANEL
- opt_enable_adv CUSTOM_USER_MENUS
- build_marlin
#
# Test a Sled Z Probe
# ...with AUTO_BED_LEVELING_LINEAR, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, and EEPROM_CHITCHAT
#
- restore_configs
- opt_enable Z_PROBE_SLED AUTO_BED_LEVELING_LINEAR DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT
- build_marlin
#
# Test a Servo Probe
# ...with AUTO_BED_LEVELING_3POINT, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, EEPROM_CHITCHAT, EXTENDED_CAPABILITIES_REPORT, and AUTO_REPORT_TEMPERATURES
#
- restore_configs
- opt_enable NUM_SERVOS Z_ENDSTOP_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
- opt_enable AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT
- opt_enable_adv EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES AUTOTEMP
- build_marlin
#
# Test MESH_BED_LEVELING feature, with LCD
#
- restore_configs
- opt_enable MESH_BED_LEVELING MESH_G28_REST_ORIGIN LCD_BED_LEVELING ULTIMAKERCONTROLLER
- build_marlin
#
# Test PROBE_MANUALLY feature, with LCD support
#
- restore_configs
- opt_enable PROBE_MANUALLY AUTO_BED_LEVELING_BILINEAR LCD_BED_LEVELING ULTIMAKERCONTROLLER
- build_marlin
#
# Test EEPROM_SETTINGS, EEPROM_CHITCHAT, M100_FREE_MEMORY_WATCHER,
# INCH_MODE_SUPPORT, TEMPERATURE_UNITS_SUPPORT
#
- restore_configs
- opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT M100_FREE_MEMORY_WATCHER M100_FREE_MEMORY_DUMPER M100_FREE_MEMORY_CORRUPTOR INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT
- build_marlin
#
# Mixing Extruder with 5 steppers
#
- restore_configs
- opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
- opt_enable MIXING_EXTRUDER
- opt_set MIXING_STEPPERS 5
- build_marlin
#
# Test DUAL_X_CARRIAGE
#
- restore_configs
- opt_set MOTHERBOARD BOARD_RUMBA
- opt_set EXTRUDERS 2
- opt_set TEMP_SENSOR_1 1
- opt_enable USE_XMAX_PLUG
- opt_enable_adv DUAL_X_CARRIAGE
- build_marlin
#
# Test SPEAKER with BOARD_BQ_ZUM_MEGA_3D and BQ_LCD_SMART_CONTROLLER
#
- restore_configs
- opt_set MOTHERBOARD BOARD_BQ_ZUM_MEGA_3D
- opt_set LCD_FEEDBACK_FREQUENCY_DURATION_MS 10
- opt_set LCD_FEEDBACK_FREQUENCY_HZ 100
- opt_enable BQ_LCD_SMART_CONTROLLER SPEAKER
#
# Test SWITCHING_EXTRUDER
#
- restore_configs
- opt_set MOTHERBOARD BOARD_RUMBA
- opt_set EXTRUDERS 2
- opt_enable NUM_SERVOS
- opt_set NUM_SERVOS 1
- opt_set TEMP_SENSOR_1 1
- opt_enable SWITCHING_EXTRUDER ULTIMAKERCONTROLLER
- build_marlin
#
# Test MINIRAMBO for PWM_MOTOR_CURRENT
#
- restore_configs
- opt_set MOTHERBOARD BOARD_MINIRAMBO
- build_marlin
#
# Test FILAMENT_CHANGE_FEATURE, PARK_HEAD_ON_PAUSE, and LCD_INFO_MENU
#
- restore_configs
- opt_enable ULTIMAKERCONTROLLER
- opt_enable_adv FILAMENT_CHANGE_FEATURE PARK_HEAD_ON_PAUSE LCD_INFO_MENU
- build_marlin
#
# Enable filament sensor
#
- restore_configs
- opt_enable FILAMENT_WIDTH_SENSOR
- build_marlin
#
# Enable filament sensor with LCD display
#
- opt_enable ULTIMAKERCONTROLLER FILAMENT_LCD_DISPLAY
- build_marlin
#
# Enable BEZIER_CURVE_SUPPORT, EXPERIMENTAL_I2CBUS, and I2C_SLAVE_ADDRESS
#
- restore_configs
- opt_enable_adv BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS
- opt_set_adv I2C_SLAVE_ADDRESS 63
- build_marlin
#
# Enable COREXY
#
- restore_configs
- opt_enable COREXY
- build_marlin
#
# Enable COREYX (swapped)
#
- restore_configs
- opt_enable COREYX
- build_marlin
#
# Enable Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS
#
- restore_configs
- opt_enable_adv Z_DUAL_STEPPER_DRIVERS Z_DUAL_ENDSTOPS
- pins_set RAMPS X_MAX_PIN -1
- opt_set_adv Z2_MAX_PIN 2
- build_marlin
#
# Test PRINTCOUNTER
#
- restore_configs
- opt_enable PRINTCOUNTER
- build_marlin
#
# Test NOZZLE_PARK_FEATURE
#
- restore_configs
- opt_enable NOZZLE_PARK_FEATURE
- build_marlin
#
# Test NOZZLE_CLEAN_FEATURE
#
- restore_configs
- opt_enable NOZZLE_CLEAN_FEATURE
- build_marlin
#
#
######## STANDARD LCD/PANELS ##############
#
# ULTRA_LCD
#
- restore_configs
- opt_enable ULTRA_LCD
- build_marlin
#
# DOGLCD
#
- restore_configs
- opt_enable DOGLCD
- build_marlin
#
# ULTIMAKERCONTROLLER
#
@@ -105,10 +298,10 @@ script:
#- opt_enable MAKRPANEL
#- build_marlin
#
# REPRAP_DISCOUNT_SMART_CONTROLLER
# REPRAP_DISCOUNT_SMART_CONTROLLER, SDSUPPORT, and BABYSTEPPING
#
- restore_configs
- opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT
- opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT BABYSTEPPING
- build_marlin
#
# G3D_PANEL
@@ -117,6 +310,15 @@ script:
- opt_enable G3D_PANEL SDSUPPORT
- build_marlin
#
# Add SDCARD_SORT_ALPHA, test G3D_PANEL again
#
- opt_enable_adv SDCARD_SORT_ALPHA
- opt_set_adv SDSORT_GCODE true
- opt_set_adv SDSORT_USES_RAM true
- opt_set_adv SDSORT_USES_STACK true
- opt_set_adv SDSORT_CACHE_NAMES true
- build_marlin
#
# REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#
- restore_configs
@@ -133,28 +335,32 @@ script:
# RA_CONTROL_PANEL
#
- restore_configs
- opt_enable RA_CONTROL_PANEL
- opt_enable RA_CONTROL_PANEL PINS_DEBUGGING
- build_marlin
#
### I2C PANELS ###
######## I2C LCD/PANELS ##############
#
# !!!ATTENTION!!!
# Most I2C configurations are failing at the moment because they require
# a different Liquid Crystal library "LiquidTWI2".
#
# LCD_I2C_SAINSMART_YWROBOT
# Failing at the moment needs different library
#
#- restore_configs
#- opt_enable LCD_I2C_SAINSMART_YWROBOT
#- build_marlin
#
# LCD_I2C_PANELOLU2
#
- restore_configs
- opt_enable LCD_I2C_PANELOLU2
- build_marlin
#- restore_configs
#- opt_enable LCD_I2C_PANELOLU2
#- build_marlin
#
# LCD_I2C_VIKI
#
- restore_configs
- opt_enable LCD_I2C_VIKI
- build_marlin
#- restore_configs
#- opt_enable LCD_I2C_VIKI
#- build_marlin
#
# LCM1602
#
@@ -162,61 +368,30 @@ script:
- opt_enable LCM1602
- build_marlin
#
# Enable FILAMENTCHANGEENABLE
#
- restore_configs
- opt_enable FILAMENTCHANGEENABLE ULTIMAKERCONTROLLER
- build_marlin
#
# Enable filament sensor
#
- restore_configs
- opt_enable FILAMENT_WIDTH_SENSOR
- build_marlin
#
# Enable filament sensor with LCD display
#
- opt_enable ULTIMAKERCONTROLLER FILAMENT_LCD_DISPLAY
- build_marlin
#
# Enable COREXY
#
- restore_configs
- opt_enable COREXY
- build_marlin
#
# Enable COREXZ
#
- restore_configs
- opt_enable COREXZ
- build_marlin
#
# Enable Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS
#
- restore_configs
- opt_enable_adv Z_DUAL_STEPPER_DRIVERS Z_DUAL_ENDSTOPS
- pins_set RAMPS_14 X_MAX_PIN -1
- opt_set_adv Z2_MAX_PIN 2
- build_marlin
#
#
######## Example Configurations ##############
#
# Delta Config (generic)
# BQ Hephestos 2
- restore_configs
- use_example_configs delta/generic
- use_example_configs Hephestos_2
- build_marlin
#
# Delta Config (generic) + ABL + ALLEN_KEY
# Delta Config (generic) + ABL bilinear + PROBE_MANUALLY
- restore_configs
- use_example_configs delta/generic
- opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER DELTA_CALIBRATION_MENU AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY
- build_marlin
#
# Delta Config (generic) + UBL + ALLEN_KEY + OLED_PANEL_TINYBOY2 + EEPROM_SETTINGS
#
- use_example_configs delta/generic
- opt_disable DISABLE_MIN_ENDSTOPS
- opt_enable AUTO_BED_LEVELING_FEATURE Z_PROBE_ALLEN_KEY
- opt_enable AUTO_BED_LEVELING_UBL Z_PROBE_ALLEN_KEY EEPROM_SETTINGS EEPROM_CHITCHAT OLED_PANEL_TINYBOY2
- build_marlin
#
# Delta Config (Mini Kossel)
# Delta Config (FLSUN AC because it's complex)
#
- use_example_configs delta/kossel_mini
- use_example_configs delta/FLSUN/auto_calibrate
- build_marlin
#
# Makibox Config need to check board type for Teensy++ 2.0
@@ -227,6 +402,15 @@ script:
# SCARA Config
#
- use_example_configs SCARA
- opt_enable AUTO_BED_LEVELING_BILINEAR FIX_MOUNTED_PROBE USE_ZMIN_PLUG EEPROM_SETTINGS EEPROM_CHITCHAT ULTIMAKERCONTROLLER
- build_marlin
#
# TMC2130 Config
#
- restore_configs
- opt_enable_adv HAVE_TMC2130 X_IS_TMC2130 Y_IS_TMC2130 Z_IS_TMC2130
- build_marlin
- opt_enable_adv AUTOMATIC_CURRENT_CONTROL STEALTHCHOP HYBRID_THRESHOLD SENSORLESS_HOMING
- build_marlin
#
# tvrrug Config need to check board type for sanguino atmega644p

View File

@@ -1,23 +0,0 @@
##############################################################
omc.name=OMC with Atmega644 at 20Mhz
omc.upload.maximum_size=63488
omc.upload.maximum_data_size=4096
omc.upload.protocol=stk500v2
omc.upload.speed=115200
omc.bootloader.path=OMC
omc.bootloader.file=bootloader-644-20MHz.hex
omc.bootloader.low_fuses=0xE7
omc.bootloader.high_fuses=0xD4
omc.bootloader.extended_fuses=0xFC
omc.bootloader.unlock_bits=0x3F
omc.bootloader.lock_bits=0x0F
omc.build.mcu=atmega644
omc.build.f_cpu=20000000L
omc.build.board=AVR_OMC
omc.build.core=arduino:arduino
omc.build.variant=sanguino

View File

@@ -1,75 +0,0 @@
:10F800008FEF90E19EBF8DBF11241FBE5A9A00C09A
:10F81000CDB7DEB7CD51D140DEBFCDBF1092C50010
:10F820008AE08093C40088E18093C100EE24FF2425
:10F8300020E0552400E010E039E0432E9BE0292E23
:10F84000312C2C0E3D1ECFC14150504060407040C5
:10F8500011F43FE206C08091C00087FFF5CF3091E0
:10F86000C600933021F1943028F4913099F0923011
:10F87000C8F407C0953049F1953000F19630D1F5C4
:10F8800035C03B3119F491E02BE134C03F3291F5A2
:10F890003983BBC1313011F0351559F52327532E6B
:10F8A00092E028C0B32FA0E0232793E023C0832F4A
:10F8B00090E0A82BB92B232794E01CC03E30C9F45C
:10F8C000232795E0EE24FF2415C0E1E0F0E0EC0FE3
:10F8D000FD1FEE0DFF1D30830894E11CF11C232752
:10F8E000EA16FB0639F4D70196E004C0321709F492
:10F8F0008CC190E041ED5AE363E570E0ACCF90E05D
:10F9000044C08D81803311F090E00AC08F8188233C
:10F9100011F49EE105C0813011F099E001C096E933
:10F920001A821B828D818C838E818D839E831F82A0
:10F9300047E050E0F4C01A8288E08B8381E48C8336
:10F9400086E58D8382E58E8389E48F8383E58887CE
:10F9500080E589878FE58A8782E38B874BE050E0DB
:10F96000DEC08A81813941F0823941F0803911F459
:10F970008FE005C080E003C082E001C08AE01A8207
:10F980008B8343E050E0CBC091E01A8242E050E02C
:10F99000C7C08D81882311F48EE124C0813011F01D
:10F9A00089E020C086E91EC01A82E1E0F0E04092C2
:10F9B0005700849118C08B81803579F48C81883010
:10F9C00031F4E2E0F0E04092570084910BC0E0E0B7
:10F9D000F0E040925700849105C0E3E0F0E04092EF
:10F9E000570084911A828B831C8244E050E097C0B8
:10F9F000BC80AA248D81082F10E00A291B29000F42
:10FA0000111F1A828AC09A8088248B81682F70E027
:10FA100068297929933109F033C0F7EF0F3F1F07A9
:10FA200010F0A8013FC023E0F80120935700E895AB
:10FA300007B600FCFDCFA801D1018C9111962C9145
:10FA400011971296D22ECC2490E08C299D2921E08A
:10FA5000FA010C0120935700E89511244E5F5F4F87
:10FA60006250704051F725E0F80120935700E89567
:10FA700007B600FCFDCF81E180935700E89512C0E6
:10FA8000A801FB01D10141BD52BD4F5F5F4F8D9178
:10FA900080BDFA9AF99AF999FECF3197A1F7A8019A
:10FAA000460F571F1A828A0138C07A8066248B81DC
:10FAB000A82FB0E0A629B7291A828981843191F450
:10FAC000BD019E012D5F3F4FF80185919491F90191
:10FAD000808391832E5F3F4F0E5F1F4F62507040B7
:10FAE00099F713C0A801BD019E012D5F3F4F41BD95
:10FAF00052BD4F5F5F4FF89A80B5F90181939F0126
:10FB000061507040A1F70A0F1B1FAD014D5F5F4FA1
:10FB1000F901108204C080EC8A8342E050E090E05A
:10FB2000FBE1F093C6008091C00086FFFCCF80917E
:10FB3000C00080648093C0005092C6008091C000D5
:10FB400086FFFCCF8091C00080648093C000652F49
:10FB50005093C6008091C00086FFFCCF8091C0000A
:10FB600080648093C000342F4093C6008091C00011
:10FB700086FFFCCF8091C00080648093C0008EE03F
:10FB80008093C6008091C00086FFFCCF8091C000AA
:10FB900080648093C00025E1252523272627FE01C8
:10FBA000319610C030813093C6008091C00086FF2E
:10FBB000FCCF31968091C00080648093C0002327E1
:10FBC000415050404115510569F72093C60080917E
:10FBD000C00086FFFCCF8091C00080648093C0008D
:10FBE000992349F4539441ED5AE363E570E090E0C2
:10FBF000A0E0B0E030CE5A9881E180935700E895BC
:10FC000011241F921F920895FFCF9981933109F417
:10FC1000FACE9431C8F4963009F4EACE973050F415
:10FC2000923009F46CCE933009F49BCE913009F0F8
:10FC300072CF81CE913109F4A7CE923108F0E1CE96
:10FC4000903109F068CF5BCE983109F4B4CE993188
:10FC500050F4953109F4D7CE953108F426CF96317A
:10FC600009F059CF22CF9B3109F493CE9C3120F477
:10FC70009A3109F050CF98CE9D3109F442CE9F328F
:06FC800009F049CFB8CFE6
:040000030000F80001
:00000001FF

View File

@@ -1,713 +0,0 @@
/**********************************************************/
/* Serial Bootloader for Atmel megaAVR Controllers */
/* */
/* tested with ATmega644 and ATmega644P */
/* should work with other mega's, see code for details */
/* */
/* ATmegaBOOT.c */
/* */
/* 20090131: Added 324P support from Alex Leone */
/* Marius Kintel */
/* 20080915: applied ADABoot mods for Sanguino 644P */
/* Brian Riley */
/* 20080711: hacked for Sanguino by Zach Smith */
/* and Justin Day */
/* 20070626: hacked for Arduino Diecimila (which auto- */
/* resets when a USB connection is made to it) */
/* by D. Mellis */
/* 20060802: hacked for Arduino by D. Cuartielles */
/* based on a previous hack by D. Mellis */
/* and D. Cuartielles */
/* */
/* Monitor and debug functions were added to the original */
/* code by Dr. Erik Lins, chip45.com. (See below) */
/* */
/* Thanks to Karl Pitrich for fixing a bootloader pin */
/* problem and more informative LED blinking! */
/* */
/* For the latest version see: */
/* http://www.chip45.com/ */
/* */
/* ------------------------------------------------------ */
/* */
/* based on stk500boot.c */
/* Copyright (c) 2003, Jason P. Kyle */
/* All rights reserved. */
/* see avr1.org for original file and information */
/* */
/* This program is free software; you can redistribute it */
/* and/or modify it under the terms of the GNU General */
/* Public License as published by the Free Software */
/* Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will */
/* be useful, but WITHOUT ANY WARRANTY; without even the */
/* implied warranty of MERCHANTABILITY or FITNESS FOR A */
/* PARTICULAR PURPOSE. See the GNU General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU General */
/* Public License along with this program; if not, write */
/* to the Free Software Foundation, Inc., */
/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* */
/* Licence can be viewed at */
/* http://www.fsf.org/licenses/gpl.txt */
/* */
/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */
/* m8515,m8535. ATmega161 has a very small boot block so */
/* isn't supported. */
/* */
/* Tested with m168 */
/**********************************************************/
/* $Id$ */
/* some includes */
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/boot.h>
#ifdef ADABOOT
#define NUM_LED_FLASHES 3
#define ADABOOT_VER 1
#endif
/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */
#define MAX_ERROR_COUNT 5
/* set the UART baud rate */
/* 20080711: hack by Zach Hoeken */
#define BAUD_RATE 38400
/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */
/* never allow AVR Studio to do an update !!!! */
#define HW_VER 0x02
#define SW_MAJOR 0x01
#define SW_MINOR 0x10
/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */
/* if monitor functions are included, LED goes on after monitor was entered */
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED PINB0
/* define various device id's */
/* manufacturer byte is always the same */
#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :(
#if defined(__AVR_ATmega644P__)
#define SIG2 0x96
#define SIG3 0x0A
#elif defined(__AVR_ATmega644__)
#define SIG2 0x96
#define SIG3 0x09
#elif defined(__AVR_ATmega324P__)
#define SIG2 0x95
#define SIG3 0x08
#endif
#define PAGE_SIZE 0x080U //128 words
#define PAGE_SIZE_BYTES 0x100U //256 bytes
/* function prototypes */
void putch(char);
char getch(void);
void getNch(uint8_t);
void byte_response(uint8_t);
void nothing_response(void);
char gethex(void);
void puthex(char);
void flash_led(uint8_t);
/* some variables */
union address_union
{
uint16_t word;
uint8_t byte[2];
} address;
union length_union
{
uint16_t word;
uint8_t byte[2];
} length;
struct flags_struct
{
unsigned eeprom : 1;
unsigned rampz : 1;
} flags;
uint8_t buff[256];
uint8_t error_count = 0;
uint8_t sreg;
void (*app_start)(void) = 0x0000;
/* main program starts here */
int main(void)
{
uint8_t ch,ch2;
uint16_t w;
uint16_t i;
asm volatile("nop\n\t");
#ifdef ADABOOT // BBR/LF 10/8/2007 & 9/13/2008
ch = MCUSR;
MCUSR = 0;
WDTCSR |= _BV(WDCE) | _BV(WDE);
WDTCSR = 0;
// Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot.
if (! (ch & _BV(EXTRF))) // if its a not an external reset...
app_start(); // skip bootloader
#endif
//initialize our serial port.
UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSR0B = (1<<RXEN0) | (1<<TXEN0);
UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
/* Enable internal pull-up resistor on pin D0 (RX), in order
to supress line noise that prevents the bootloader from
timing out (DAM: 20070509) */
DDRD &= ~_BV(PIND0);
PORTD |= _BV(PIND0);
/* set LED pin as output */
LED_DDR |= _BV(LED);
/* flash onboard LED to signal entering of bootloader */
/* ADABOOT will do two series of flashes. first 4 - signifying ADABOOT */
/* then a pause and another flash series signifying ADABOOT sub-version */
flash_led(NUM_LED_FLASHES);
#ifdef ADABOOT
flash_led(ADABOOT_VER); // BBR 9/13/2008
#endif
/* forever loop */
for (;;)
{
/* get character from UART */
ch = getch();
/* A bunch of if...else if... gives smaller code than switch...case ! */
/* Hello is anyone home ? */
if(ch=='0')
nothing_response();
/* Request programmer ID */
/* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */
/* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */
else if(ch=='1')
{
if (getch() == ' ')
{
putch(0x14);
putch('A');
putch('V');
putch('R');
putch(' ');
putch('I');
putch('S');
putch('P');
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */
else if(ch=='@')
{
ch2 = getch();
if (ch2 > 0x85)
getch();
nothing_response();
}
/* AVR ISP/STK500 board requests */
else if(ch=='A')
{
ch2 = getch();
if(ch2 == 0x80)
byte_response(HW_VER); // Hardware version
else if(ch2==0x81)
byte_response(SW_MAJOR); // Software major version
else if(ch2==0x82)
byte_response(SW_MINOR); // Software minor version
else if(ch2==0x98)
byte_response(0x03); // Unknown but seems to be required by avr studio 3.56
else
byte_response(0x00); // Covers various unnecessary responses we don't care about
}
/* Device Parameters DON'T CARE, DEVICE IS FIXED */
else if(ch=='B')
{
getNch(20);
nothing_response();
}
/* Parallel programming stuff DON'T CARE */
else if(ch=='E')
{
getNch(5);
nothing_response();
}
/* Enter programming mode */
else if(ch=='P')
{
nothing_response();
}
/* Leave programming mode */
else if(ch=='Q')
{
nothing_response();
#ifdef ADABOOT
// autoreset via watchdog (sneaky!) BBR/LF 9/13/2008
WDTCSR = _BV(WDE);
while (1); // 16 ms
#endif
}
/* Erase device, don't care as we will erase one page at a time anyway. */
else if(ch=='R')
{
nothing_response();
}
/* Set address, little endian. EEPROM in bytes, FLASH in words */
/* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */
/* This might explain why little endian was used here, big endian used everywhere else. */
else if(ch=='U')
{
address.byte[0] = getch();
address.byte[1] = getch();
nothing_response();
}
/* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */
else if(ch=='V')
{
getNch(4);
byte_response(0x00);
}
/* Write memory, length is big endian and is in bytes */
else if(ch=='d')
{
length.byte[1] = getch();
length.byte[0] = getch();
flags.eeprom = 0;
if (getch() == 'E')
flags.eeprom = 1;
for (i=0; i<PAGE_SIZE; i++)
buff[i] = 0;
for (w = 0; w < length.word; w++)
{
// Store data in buffer, can't keep up with serial data stream whilst programming pages
buff[w] = getch();
}
if (getch() == ' ')
{
if (flags.eeprom)
{
//Write to EEPROM one byte at a time
for(w=0;w<length.word;w++)
{
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EEDR = buff[w];
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
address.word++;
}
}
else
{
//address * 2 -> byte location
address.word = address.word << 1;
//Even up an odd number of bytes
if ((length.byte[0] & 0x01))
length.word++;
// HACKME: EEPE used to be EEWE
//Wait for previous EEPROM writes to complete
//while(bit_is_set(EECR,EEPE));
while(EECR & (1<<EEPE));
asm volatile(
"clr r17 \n\t" //page_word_count
"lds r30,address \n\t" //Address of FLASH location (in bytes)
"lds r31,address+1 \n\t"
"ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM
"ldi r29,hi8(buff) \n\t"
"lds r24,length \n\t" //Length of data to be written (in bytes)
"lds r25,length+1 \n\t"
"length_loop: \n\t" //Main loop, repeat for number of words in block
"cpi r17,0x00 \n\t" //If page_word_count=0 then erase page
"brne no_page_erase \n\t"
"wait_spm1: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm1 \n\t"
"ldi r16,0x03 \n\t" //Erase page pointed to by Z
"sts %0,r16 \n\t"
"spm \n\t"
"wait_spm2: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm2 \n\t"
"ldi r16,0x11 \n\t" //Re-enable RWW section
"sts %0,r16 \n\t"
"spm \n\t"
"no_page_erase: \n\t"
"ld r0,Y+ \n\t" //Write 2 bytes into page buffer
"ld r1,Y+ \n\t"
"wait_spm3: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm3 \n\t"
"ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer
"sts %0,r16 \n\t"
"spm \n\t"
"inc r17 \n\t" //page_word_count++
"cpi r17,%1 \n\t"
"brlo same_page \n\t" //Still same page in FLASH
"write_page: \n\t"
"clr r17 \n\t" //New page, write current one first
"wait_spm4: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm4 \n\t"
"ldi r16,0x05 \n\t" //Write page pointed to by Z
"sts %0,r16 \n\t"
"spm \n\t"
"wait_spm5: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm5 \n\t"
"ldi r16,0x11 \n\t" //Re-enable RWW section
"sts %0,r16 \n\t"
"spm \n\t"
"same_page: \n\t"
"adiw r30,2 \n\t" //Next word in FLASH
"sbiw r24,2 \n\t" //length-2
"breq final_write \n\t" //Finished
"rjmp length_loop \n\t"
"final_write: \n\t"
"cpi r17,0 \n\t"
"breq block_done \n\t"
"adiw r24,2 \n\t" //length+2, fool above check on length after short page write
"rjmp write_page \n\t"
"block_done: \n\t"
"clr __zero_reg__ \n\t" //restore zero register
: "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31"
);
}
putch(0x14);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* Read memory block mode, length is big endian. */
else if(ch=='t')
{
length.byte[1] = getch();
length.byte[0] = getch();
if (getch() == 'E')
flags.eeprom = 1;
else
{
flags.eeprom = 0;
address.word = address.word << 1; // address * 2 -> byte location
}
// Command terminator
if (getch() == ' ')
{
putch(0x14);
for (w=0; w<length.word; w++)
{
// Can handle odd and even lengths okay
if (flags.eeprom)
{
// Byte access EEPROM read
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EECR |= (1<<EERE);
putch(EEDR);
address.word++;
}
else
{
if (!flags.rampz)
putch(pgm_read_byte_near(address.word));
address.word++;
}
}
putch(0x10);
}
}
/* Get device signature bytes */
else if(ch=='u')
{
if (getch() == ' ')
{
putch(0x14);
putch(SIG1);
putch(SIG2);
putch(SIG3);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* Read oscillator calibration byte */
else if(ch=='v')
byte_response(0x00);
else if (++error_count == MAX_ERROR_COUNT)
app_start();
}
/* end of forever loop */
}
char gethex(void)
{
char ah,al;
ah = getch();
putch(ah);
al = getch();
putch(al);
if(ah >= 'a')
ah = ah - 'a' + 0x0a;
else if(ah >= '0')
ah -= '0';
if(al >= 'a')
al = al - 'a' + 0x0a;
else if(al >= '0')
al -= '0';
return (ah << 4) + al;
}
void puthex(char ch)
{
char ah,al;
ah = (ch & 0xf0) >> 4;
if(ah >= 0x0a)
ah = ah - 0x0a + 'a';
else
ah += '0';
al = (ch & 0x0f);
if(al >= 0x0a)
al = al - 0x0a + 'a';
else
al += '0';
putch(ah);
putch(al);
}
void putch(char ch)
{
while (!(UCSR0A & _BV(UDRE0)));
UDR0 = ch;
}
char getch(void)
{
uint32_t count = 0;
#ifdef ADABOOT
LED_PORT &= ~_BV(LED); // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
#endif
while(!(UCSR0A & _BV(RXC0)))
{
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
/* HACKME:: here is a good place to count times*/
count++;
if (count > MAX_TIME_COUNT)
app_start();
}
#ifdef ADABOOT
LED_PORT |= _BV(LED); // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
#endif
return UDR0;
}
void getNch(uint8_t count)
{
uint8_t i;
for(i=0;i<count;i++)
{
while(!(UCSR0A & _BV(RXC0)));
UDR0;
}
}
void byte_response(uint8_t val)
{
if (getch() == ' ')
{
putch(0x14);
putch(val);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
void nothing_response(void)
{
if (getch() == ' ')
{
putch(0x14);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
#ifdef ADABOOT
void flash_led(uint8_t count)
{
/* flash onboard LED count times to signal entering of bootloader */
/* l needs to be volatile or the delay loops below might get */
/* optimized away if compiling with optimizations (DAM). */
volatile uint32_t l;
if (count == 0) {
count = ADABOOT;
}
int8_t i;
for (i = 0; i < count; ++i) {
LED_PORT |= _BV(LED); // LED on
for(l = 0; l < (F_CPU / 1000); ++l); // delay NGvalue was 1000 for both loops - BBR
LED_PORT &= ~_BV(LED); // LED off
for(l = 0; l < (F_CPU / 250); ++l); // delay asymmteric for ADA BOOT BBR
}
for(l = 0; l < (F_CPU / 100); ++l); // pause ADA BOOT BBR
}
#else
void flash_led(uint8_t count)
{
/* flash onboard LED three times to signal entering of bootloader */
/* l needs to be volatile or the delay loops below might get
optimized away if compiling with optimizations (DAM). */
volatile uint32_t l;
if (count == 0) {
count = 3;
}
int8_t i;
for (i = 0; i < count; ++i) {
LED_PORT |= _BV(LED);
for(l = 0; l < (F_CPU / 1000); ++l);
LED_PORT &= ~_BV(LED);
for(l = 0; l < (F_CPU / 1000); ++l);
}
}
#endif
/* end of file ATmegaBOOT.c */

View File

@@ -1,121 +0,0 @@
:10F800000C943E7C0C945B7C0C945B7C0C945B7C39
:10F810000C945B7C0C945B7C0C945B7C0C945B7C0C
:10F820000C945B7C0C945B7C0C945B7C0C945B7CFC
:10F830000C945B7C0C945B7C0C945B7C0C945B7CEC
:10F840000C945B7C0C945B7C0C945B7C0C945B7CDC
:10F850000C945B7C0C945B7C0C945B7C0C945B7CCC
:10F860000C945B7C0C945B7C0C945B7C0C945B7CBC
:10F870000C945B7C0C945B7C0C945B7C11241FBE11
:10F88000CFEFD8E0DEBFCDBF11E0A0E0B1E0E6E60B
:10F89000FFEF02C005900D92A030B107D9F712E03A
:10F8A000A0E0B1E001C01D92A930B107E1F70E94CC
:10F8B000537D0C94B27F0C94007CCF93DF93CDB733
:10F8C000DEB724970FB6F894DEBF0FBECDBF8823F6
:10F8D00009F481E020E0482F55274115510509F42E
:10F8E0003DC0289A19821A821B821C820BC0898112
:10F8F0009A81AB81BC810196A11DB11D89839A8338
:10F90000AB83BC8389819A81AB81BC8180589E4343
:10F91000A040B04060F3289819821A821B821C8292
:10F920000BC089819A81AB81BC810196A11DB11D5B
:10F9300089839A83AB83BC8389819A81AB81BC81A3
:10F9400080509A4FA040B04060F32F5F822F9927DC
:10F9500087FD9095841795070CF4C3CF19821A82FE
:10F960001B821C8289819A81AB81BC818050914726
:10F97000A240B040A0F489819A81AB81BC810196FC
:10F98000A11DB11D89839A83AB83BC8389819A8130
:10F99000AB81BC8180509147A240B04060F3249677
:10F9A0000FB6F894DEBF0FBECDBFDF91CF910895A3
:10F9B000EF92FF920F931F93EE24FF248701289864
:10F9C0008091C00087FD17C00894E11CF11C011D47
:10F9D000111D81E0E81689E0F8068DE3080780E054
:10F9E000180770F3E0910001F091010109958091F1
:10F9F000C00087FFE9CF289A8091C600992787FD2C
:10FA000090951F910F91FF90EF900895982F8091FE
:10FA1000C00085FFFCCF9093C60008950E94D87C5B
:10FA2000803271F0809102018F5F809302018530F6
:10FA300009F00895E0910001F09101010995089500
:10FA400084E10E94067D80E10E94067D0895CF93A7
:10FA5000C82F0E94D87C803241F0809102018F5FD4
:10FA600080930201853081F40AC084E10E94067D02
:10FA70008C2F0E94067D80E10E94067D05C0E091EA
:10FA80000001F09101010995CF910895282F90E090
:10FA900007C08091C0008823E4F78091C6009F5F73
:10FAA0009217B8F30895CFEFD8E0DEBFCDBF0000C6
:10FAB00094B714BE809160008861809360001092BA
:10FAC000600091FF74C189E18093C4001092C50069
:10FAD00088E18093C10086E08093C2005098589AD4
:10FAE000209A83E00E945D7C81E00E945D7C0E9400
:10FAF000D87C8033B9F18133C1F1803409F456C028
:10FB0000813409F45CC0823409F46EC0853409F490
:10FB100071C0803539F1813509F4F3C0823511F1B6
:10FB2000853509F4D3C0863509F4CBC0843609F491
:10FB300065C0843709F4EBC0853709F4D2C0863735
:10FB400009F44AC0809102018F5F809302018530E1
:10FB500071F6E0910001F091010109950E94D87CB5
:10FB6000803349F60E940E7DC2CF0E94D87CC82FF8
:10FB7000803241F784E10E94067D81E40E94067D87
:10FB800086E50E94067D82E50E94067D8C2F0E94FC
:10FB9000067D89E40E94067D83E50E94067D80E55E
:10FBA0000E94067D80E10E94067DA1CF0E94D87C44
:10FBB0008638C0F20E94D87C0E940E7D98CF0E94A9
:10FBC000D87C803809F407C1813809F400C1823833
:10FBD00009F4F9C0883921F080E00E94277D87CFA1
:10FBE00083E00E94277D83CF84E10E94467D0E94AE
:10FBF0000E7D7DCF85E00E94467DF9CF0E94D87CA6
:10FC0000809306020E94D87C8093050280910802AE
:10FC10008E7F809308020E94D87C853409F44BC003
:10FC2000E5E0F1E0119281E0E438F807D9F3D0F390
:10FC3000C0E0D0E0809105029091060218161906E6
:10FC400078F405E011E00E94D87CF80181938F01DF
:10FC500021968091050290910602C817D90798F362
:10FC60000E94D87C803209F06DCF8091080280FF1D
:10FC7000B6C0C0E0D0E02091050230910602121615
:10FC80001306B8F4E0910301F0910401A5E0B1E09E
:10FC9000F999FECFF2BDE1BD8D9180BDFA9AF99A36
:10FCA00031962196C217D30798F3F0930401E0939D
:10FCB000030184E175CF809108028160809308027E
:10FCC000AFCF84E00E94467D80E087CF0E94D87C41
:10FCD000809303010E94D87C809304010E940E7DD2
:10FCE00006CF0E94D87C803209F02CCF84E10E949C
:10FCF000067D8EE10E94067D85E90E94067D88E0F2
:10FD00004FCF0E940E7D88E080936000FFCF0E945D
:10FD1000D87C809306020E94D87C809305020E94C2
:10FD2000D87C853409F449C0809108028E7F809385
:10FD300008028091030190910401880F991F90930C
:10FD40000401809303010E94D87C803209F0CFCE59
:10FD500084E10E94067DC0E0D0E020910502309150
:10FD600006021216130608F01DCFE0910301F09170
:10FD700004018091080280FF96C0F999FECFF2BD80
:10FD8000E1BDF89A80B50E94067DE0910301F091F3
:10FD900004013196F0930401E093030120910502E0
:10FDA000309106022196C217D30718F3FBCEE091DB
:10FDB0000001F0910101099586CE809108028160D1
:10FDC00080930802C0CF80E10E94277D90CE81E021
:10FDD0000E94277D8CCE82E00E94277D88CE809174
:10FDE000030190910401880F991F9093040180935F
:10FDF00003018091050280FF09C080910502909166
:10FE0000060201969093060280930502F999FECFAF
:10FE10001127E0910301F0910401C5E0D1E0809148
:10FE2000050290910602103091F400915700017084
:10FE30000130D9F303E000935700E8950091570093
:10FE400001700130D9F301E100935700E895099062
:10FE500019900091570001700130D9F301E000932F
:10FE60005700E8951395103898F011270091570026
:10FE700001700130D9F305E000935700E895009137
:10FE8000570001700130D9F301E100935700E89564
:10FE90003296029709F0C7CF103011F00296E5CFE5
:10FEA000112484E17DCE869580FF06C03196F093C3
:10FEB0000401E093030176CF84910E94067D209196
:10FEC000050230910602E0910301F0910401EECFAA
:10FED0001F93CF930E94D87CC82F0E94067D0E945A
:10FEE000D87C182F0E94067DC1362CF0C7551136DC
:10FEF0003CF0175508C0C033D4F3C0531136CCF7CB
:10FF000010330CF01053C295C07FC10F8C2F99276E
:10FF100087FD9095CF911F910895CF93282F992712
:10FF200087FD9095807F907095958795959587959D
:10FF300095958795959587958A303CF0895AC22F7B
:10FF4000CF70CA303CF0C95A06C0805DC22FCF7056
:10FF5000CA30CCF7C05D0E94067D8C2F0E94067DC2
:06FF6000CF910895FFCFD0
:040000030000F80001
:00000001FF

View File

@@ -1,120 +0,0 @@
:10F800000C94387C0C94557C0C94557C0C94557C51
:10F810000C94557C0C94557C0C94557C0C94557C24
:10F820000C94557C0C94557C0C94557C0C94557C14
:10F830000C94557C0C94557C0C94557C0C94557C04
:10F840000C94557C0C94557C0C94557C0C94557CF4
:10F850000C94557C0C94557C0C94557C0C94557CE4
:10F860000C94557C0C94557C0C94557C0C94557CD4
:10F8700011241FBECFEFD0E1DEBFCDBF11E0A0E06D
:10F88000B1E0EAE5FFEF02C005900D92A030B107AC
:10F89000D9F712E0A0E0B1E001C01D92A930B10794
:10F8A000E1F70E944D7D0C94AC7F0C94007CCF93CB
:10F8B000DF93CDB7DEB724970FB6F894DEBF0FBE47
:10F8C000CDBF882309F481E020E0482F552741155A
:10F8D000510509F43DC0289A19821A821B821C82A4
:10F8E0000BC089819A81AB81BC810196A11DB11D9C
:10F8F00089839A83AB83BC8389819A81AB81BC81E4
:10F9000080589E43A040B04060F3289819821A8224
:10F910001B821C820BC089819A81AB81BC810196BC
:10F92000A11DB11D89839A83AB83BC8389819A8190
:10F93000AB81BC8180509A4FA040B04060F32F5FF4
:10F94000822F992787FD9095841795070CF4C3CFD4
:10F9500019821A821B821C8289819A81AB81BC81A7
:10F9600080509147A240B040A0F489819A81AB8138
:10F97000BC810196A11DB11D89839A83AB83BC8391
:10F9800089819A81AB81BC8180509147A240B0406F
:10F9900060F324960FB6F894DEBF0FBECDBFDF91A3
:10F9A000CF910895EF92FF920F931F93EE24FF24BF
:10F9B000870128988091C00087FD17C00894E11C3A
:10F9C000F11C011D111D81E0E81689E0F8068DE3A8
:10F9D000080780E0180770F3E0910001F091010141
:10F9E00009958091C00087FFE9CF289A8091C600D1
:10F9F000992787FD90951F910F91FF90EF900895A3
:10FA0000982F8091C00085FFFCCF9093C600089589
:10FA10000E94D27C803271F0809102018F5F8093CE
:10FA20000201853009F00895E0910001F091010193
:10FA30000995089584E10E94007D80E10E94007D87
:10FA40000895CF93C82F0E94D27C803241F08091DC
:10FA500002018F5F80930201853081F40AC084E146
:10FA60000E94007D8C2F0E94007D80E10E94007D1D
:10FA700005C0E0910001F09101010995CF91089531
:10FA8000282F90E007C08091C0008823E4F7809180
:10FA9000C6009F5F9217B8F30895CFEFD0E1DEBFA5
:10FAA000CDBF000094B714BE809160008861809340
:10FAB00060001092600091FF74C189E18093C400DE
:10FAC0001092C50088E18093C10086E08093C20057
:10FAD0005098589A209A83E00E94577C81E00E94B7
:10FAE000577C0E94D27C8033B9F18133C1F18034DC
:10FAF00009F456C0813409F45CC0823409F46EC044
:10FB0000853409F471C0803539F1813509F4F3C0C9
:10FB1000823511F1853509F4D3C0863509F4CBC09F
:10FB2000843609F465C0843709F4EBC0853709F4DD
:10FB3000D2C0863709F44AC0809102018F5F80935A
:10FB40000201853071F6E0910001F0910101099503
:10FB50000E94D27C803349F60E94087DC2CF0E9469
:10FB6000D27CC82F803241F784E10E94007D81E47D
:10FB70000E94007D86E50E94007D82E50E94007D56
:10FB80008C2F0E94007D89E40E94007D83E50E9405
:10FB9000007D80E50E94007D80E10E94007DA1CF74
:10FBA0000E94D27C8638C0F20E94D27C0E94087DDE
:10FBB00098CF0E94D27C803809F407C1813809F4BB
:10FBC00000C1823809F4F9C0883921F080E00E9430
:10FBD000217D87CF83E00E94217D83CF84E10E9435
:10FBE000407D0E94087D7DCF85E00E94407DF9CF59
:10FBF0000E94D27C809306020E94D27C80930502F0
:10FC0000809108028E7F809308020E94D27C853406
:10FC100009F44BC0E5E0F1E0119281E0E438F80727
:10FC2000D9F3D0F3C0E0D0E08091050290910602B4
:10FC30001816190678F405E011E00E94D27CF8014C
:10FC400081938F0121968091050290910602C81739
:10FC5000D90798F30E94D27C803209F06DCF809151
:10FC6000080280FFB6C0C0E0D0E0209105023091CC
:10FC7000060212161306B8F4E0910301F091040194
:10FC8000A5E0B1E0F999FECFF2BDE1BD8D9180BD57
:10FC9000FA9AF99A31962196C217D30798F3F093FE
:10FCA0000401E093030184E175CF80910802816033
:10FCB00080930802AFCF84E00E94407D80E087CF30
:10FCC0000E94D27C809303010E94D27C8093040125
:10FCD0000E94087D06CF0E94D27C803209F02CCF92
:10FCE00084E10E94007D8EE10E94007D86E90E94F1
:10FCF000007D89E04FCF0E94087D88E080936000FE
:10FD0000FFCF0E94D27C809306020E94D27C809317
:10FD100005020E94D27C853409F449C08091080212
:10FD20008E7F809308028091030190910401880FD7
:10FD3000991F90930401809303010E94D27C80322A
:10FD400009F0CFCE84E10E94007DC0E0D0E0209198
:10FD50000502309106021216130608F01DCFE0913D
:10FD60000301F09104018091080280FF96C0F99987
:10FD7000FECFF2BDE1BDF89A80B50E94007DE09112
:10FD80000301F09104013196F0930401E093030123
:10FD900020910502309106022196C217D30718F36D
:10FDA000FBCEE0910001F0910101099586CE809192
:10FDB0000802816080930802C0CF80E10E94217D0B
:10FDC00090CE81E00E94217D8CCE82E00E94217D38
:10FDD00088CE8091030190910401880F991F909320
:10FDE0000401809303018091050280FF09C0809186
:10FDF00005029091060201969093060280930502F7
:10FE0000F999FECF1127E0910301F0910401C5E0BB
:10FE1000D1E08091050290910602103091F400919A
:10FE2000570001700130D9F303E000935700E895C3
:10FE30000091570001700130D9F301E100935700A0
:10FE4000E895099019900091570001700130D9F39D
:10FE500001E000935700E8951395103898F01127AA
:10FE60000091570001700130D9F305E0009357006D
:10FE7000E8950091570001700130D9F301E100933A
:10FE80005700E8953296029709F0C7CF103011F06D
:10FE90000296E5CF112484E17DCE869580FF06C0D1
:10FEA0003196F0930401E093030176CF84910E9490
:10FEB000007D2091050230910602E0910301F0914E
:10FEC0000401EECF1F93CF930E94D27CC82F0E94D3
:10FED000007D0E94D27C182F0E94007DC1362CF03C
:10FEE000C75511363CF0175508C0C033D4F3C05382
:10FEF0001136CCF710330CF01053C295C07FC10FF0
:10FF00008C2F992787FD9095CF911F910895CF93BE
:10FF1000282F992787FD9095807F907095958795DC
:10FF20009595879595958795959587958A303CF019
:10FF3000895AC22FCF70CA303CF0C95A06C0805DC2
:10FF4000C22FCF70CA30CCF7C05D0E94007D8C2FCD
:0AFF50000E94007DCF910895FFCFBD
:040000030000F80001
:00000001FF

View File

@@ -1,121 +0,0 @@
:10F800000C943E7C0C945B7C0C945B7C0C945B7C39
:10F810000C945B7C0C945B7C0C945B7C0C945B7C0C
:10F820000C945B7C0C945B7C0C945B7C0C945B7CFC
:10F830000C945B7C0C945B7C0C945B7C0C945B7CEC
:10F840000C945B7C0C945B7C0C945B7C0C945B7CDC
:10F850000C945B7C0C945B7C0C945B7C0C945B7CCC
:10F860000C945B7C0C945B7C0C945B7C0C945B7CBC
:10F870000C945B7C0C945B7C0C945B7C11241FBE11
:10F88000CFEFD0E1DEBFCDBF11E0A0E0B1E0E6E612
:10F89000FFEF02C005900D92A030B107D9F712E03A
:10F8A000A0E0B1E001C01D92A930B107E1F70E94CC
:10F8B000537D0C94B27F0C94007CCF93DF93CDB733
:10F8C000DEB724970FB6F894DEBF0FBECDBF8823F6
:10F8D00009F481E020E0482F55274115510509F42E
:10F8E0003DC0289A19821A821B821C820BC0898112
:10F8F0009A81AB81BC810196A11DB11D89839A8338
:10F90000AB83BC8389819A81AB81BC8180589E4343
:10F91000A040B04060F3289819821A821B821C8292
:10F920000BC089819A81AB81BC810196A11DB11D5B
:10F9300089839A83AB83BC8389819A81AB81BC81A3
:10F9400080509A4FA040B04060F32F5F822F9927DC
:10F9500087FD9095841795070CF4C3CF19821A82FE
:10F960001B821C8289819A81AB81BC818050914726
:10F97000A240B040A0F489819A81AB81BC810196FC
:10F98000A11DB11D89839A83AB83BC8389819A8130
:10F99000AB81BC8180509147A240B04060F3249677
:10F9A0000FB6F894DEBF0FBECDBFDF91CF910895A3
:10F9B000EF92FF920F931F93EE24FF248701289864
:10F9C0008091C00087FD17C00894E11CF11C011D47
:10F9D000111D81E0E81689E0F8068DE3080780E054
:10F9E000180770F3E0910001F091010109958091F1
:10F9F000C00087FFE9CF289A8091C600992787FD2C
:10FA000090951F910F91FF90EF900895982F8091FE
:10FA1000C00085FFFCCF9093C60008950E94D87C5B
:10FA2000803271F0809102018F5F809302018530F6
:10FA300009F00895E0910001F09101010995089500
:10FA400084E10E94067D80E10E94067D0895CF93A7
:10FA5000C82F0E94D87C803241F0809102018F5FD4
:10FA600080930201853081F40AC084E10E94067D02
:10FA70008C2F0E94067D80E10E94067D05C0E091EA
:10FA80000001F09101010995CF910895282F90E090
:10FA900007C08091C0008823E4F78091C6009F5F73
:10FAA0009217B8F30895CFEFD0E1DEBFCDBF0000CD
:10FAB00094B714BE809160008861809360001092BA
:10FAC000600091FF74C189E18093C4001092C50069
:10FAD00088E18093C10086E08093C2005098589AD4
:10FAE000209A83E00E945D7C81E00E945D7C0E9400
:10FAF000D87C8033B9F18133C1F1803409F456C028
:10FB0000813409F45CC0823409F46EC0853409F490
:10FB100071C0803539F1813509F4F3C0823511F1B6
:10FB2000853509F4D3C0863509F4CBC0843609F491
:10FB300065C0843709F4EBC0853709F4D2C0863735
:10FB400009F44AC0809102018F5F809302018530E1
:10FB500071F6E0910001F091010109950E94D87CB5
:10FB6000803349F60E940E7DC2CF0E94D87CC82FF8
:10FB7000803241F784E10E94067D81E40E94067D87
:10FB800086E50E94067D82E50E94067D8C2F0E94FC
:10FB9000067D89E40E94067D83E50E94067D80E55E
:10FBA0000E94067D80E10E94067DA1CF0E94D87C44
:10FBB0008638C0F20E94D87C0E940E7D98CF0E94A9
:10FBC000D87C803809F407C1813809F400C1823833
:10FBD00009F4F9C0883921F080E00E94277D87CFA1
:10FBE00083E00E94277D83CF84E10E94467D0E94AE
:10FBF0000E7D7DCF85E00E94467DF9CF0E94D87CA6
:10FC0000809306020E94D87C8093050280910802AE
:10FC10008E7F809308020E94D87C853409F44BC003
:10FC2000E5E0F1E0119281E0E438F807D9F3D0F390
:10FC3000C0E0D0E0809105029091060218161906E6
:10FC400078F405E011E00E94D87CF80181938F01DF
:10FC500021968091050290910602C817D90798F362
:10FC60000E94D87C803209F06DCF8091080280FF1D
:10FC7000B6C0C0E0D0E02091050230910602121615
:10FC80001306B8F4E0910301F0910401A5E0B1E09E
:10FC9000F999FECFF2BDE1BD8D9180BDFA9AF99A36
:10FCA00031962196C217D30798F3F0930401E0939D
:10FCB000030184E175CF809108028160809308027E
:10FCC000AFCF84E00E94467D80E087CF0E94D87C41
:10FCD000809303010E94D87C809304010E940E7DD2
:10FCE00006CF0E94D87C803209F02CCF84E10E949C
:10FCF000067D8EE10E94067D86E90E94067D8AE0EF
:10FD00004FCF0E940E7D88E080936000FFCF0E945D
:10FD1000D87C809306020E94D87C809305020E94C2
:10FD2000D87C853409F449C0809108028E7F809385
:10FD300008028091030190910401880F991F90930C
:10FD40000401809303010E94D87C803209F0CFCE59
:10FD500084E10E94067DC0E0D0E020910502309150
:10FD600006021216130608F01DCFE0910301F09170
:10FD700004018091080280FF96C0F999FECFF2BD80
:10FD8000E1BDF89A80B50E94067DE0910301F091F3
:10FD900004013196F0930401E093030120910502E0
:10FDA000309106022196C217D30718F3FBCEE091DB
:10FDB0000001F0910101099586CE809108028160D1
:10FDC00080930802C0CF80E10E94277D90CE81E021
:10FDD0000E94277D8CCE82E00E94277D88CE809174
:10FDE000030190910401880F991F9093040180935F
:10FDF00003018091050280FF09C080910502909166
:10FE0000060201969093060280930502F999FECFAF
:10FE10001127E0910301F0910401C5E0D1E0809148
:10FE2000050290910602103091F400915700017084
:10FE30000130D9F303E000935700E8950091570093
:10FE400001700130D9F301E100935700E895099062
:10FE500019900091570001700130D9F301E000932F
:10FE60005700E8951395103898F011270091570026
:10FE700001700130D9F305E000935700E895009137
:10FE8000570001700130D9F301E100935700E89564
:10FE90003296029709F0C7CF103011F00296E5CFE5
:10FEA000112484E17DCE869580FF06C03196F093C3
:10FEB0000401E093030176CF84910E94067D209196
:10FEC000050230910602E0910301F0910401EECFAA
:10FED0001F93CF930E94D87CC82F0E94067D0E945A
:10FEE000D87C182F0E94067DC1362CF0C7551136DC
:10FEF0003CF0175508C0C033D4F3C0531136CCF7CB
:10FF000010330CF01053C295C07FC10F8C2F99276E
:10FF100087FD9095CF911F910895CF93282F992712
:10FF200087FD9095807F907095958795959587959D
:10FF300095958795959587958A303CF0895AC22F7B
:10FF4000CF70CA303CF0C95A06C0805DC22FCF7056
:10FF5000CA30CCF7C05D0E94067D8C2F0E94067DC2
:06FF6000CF910895FFCFD0
:040000030000F80001
:00000001FF

View File

@@ -1,56 +0,0 @@
# Makefile for ATmegaBOOT
# E.Lins, 18.7.2005
# $Id$
# program name should not be changed...
PROGRAM = ATmegaBOOT_644P
# enter the target CPU frequency
AVR_FREQ = 16000000L
MCU_TARGET = atmega644p
LDSECTION = --section-start=.text=0xF800
OBJ = $(PROGRAM).o
OPTIMIZE = -O2
DEFS =
LIBS =
CC = avr-gcc
# Override is only needed by avr-lib build system.
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS)
override LDFLAGS = -Wl,$(LDSECTION)
#override LDFLAGS = -Wl,-Map,$(PROGRAM).map,$(LDSECTION)
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
all: CFLAGS += '-DMAX_TIME_COUNT=8000000L>>1' -DADABOOT
all: $(PROGRAM).hex
$(PROGRAM).hex: $(PROGRAM).elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
$(PROGRAM).elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
$(OBJ): ATmegaBOOT.c
avr-gcc $(CFLAGS) $(LDFLAGS) -c -g -O2 -Wall -mmcu=$(MCU_TARGET) ATmegaBOOT.c -o $(PROGRAM).o
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@
clean:
rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex

View File

@@ -1,3 +0,0 @@
Note: This bootloader support ATmega644, ATmega644P and ATmega324P.
To build, set PROGRAM and MCU_TARGET in the Makefile according to your target device.

View File

@@ -1,269 +0,0 @@
/*
pins_arduino.h - Pin definition functions for Arduino
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2007 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
Changelog
-----------
11/25/11 - ryan@ryanmsutton.com - Add pins for Sanguino 644P and 1284P
07/15/12 - ryan@ryanmsutton.com - Updated for arduino0101
Improvements by Kristian Lauszus, kristianl@tkjelectronics.dk
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <avr/pgmspace.h>
const static uint8_t SS = 4;
const static uint8_t MOSI = 5;
const static uint8_t MISO = 6;
const static uint8_t SCK = 7;
static const uint8_t SDA = 17;
static const uint8_t SCL = 16;
#define LED_BUILTIN 0
static const uint8_t A0 = 31;
static const uint8_t A1 = 30;
static const uint8_t A2 = 29;
static const uint8_t A3 = 28;
static const uint8_t A4 = 27;
static const uint8_t A5 = 26;
static const uint8_t A6 = 25;
static const uint8_t A7 = 24;
// ATMEL ATMEGA644/ATMEGA1284 / SANGUINO
//
// +---\/---+
// (D 0) PB0 1| |40 PA0 (AI 0 / D31)
// (D 1) PB1 2| |39 PA1 (AI 1 / D30)
// INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D29)
// PWM (D 3) PB3 4| |37 PA3 (AI 3 / D28)
// SS PWM (D 4) PB4 5| |36 PA4 (AI 4 / D27)
// MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D26)
// MISO (D 6) PB6 7| |34 PA6 (AI 6 / D25)
// SCK (D 7) PB7 8| |33 PA7 (AI 7 / D24)
// RST 9| |32 AREF
// VCC 10| |31 GND
// GND 11| |30 AVCC
// XTAL2 12| |29 PC7 (D 23)
// XTAL1 13| |28 PC6 (D 22)
// RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI
// TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO
// INT0 RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS
// INT1 TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK
// PWM (D 12) PD4 18| |23 PC1 (D 17) SDA
// PWM (D 13) PD5 19| |22 PC0 (D 16) SCL
// PWM (D 14) PD6 20| |21 PD7 (D 15) PWM
// +--------+
//
#define NUM_DIGITAL_PINS 24
#define NUM_ANALOG_INPUTS 8
#define analogInputToDigitalPin(p) ((p < 8) ? 31 - (p): -1)
#define analogPinToChannel(p) ((p < 8) ? (p) : 31 - (p))
#define digitalPinHasPWM(p) ((p) == 3 || (p) == 4 || (p) == 12 || (p) == 13 || (p) == 14 || (p) == 15 )
#define digitalPinToPCICR(p) ( (((p) >= 0) && ((p) <= 31)) ? (&PCICR) : ((uint8_t *)0) )
#define digitalPinToPCICRbit(p) ( (((p) >= 24) && ((p) <= 31)) ? 0 : \
( (((p) >= 0) && ((p) <= 7)) ? 1 : \
( (((p) >= 16) && ((p) <= 23)) ? 2 : \
( (((p) >= 8) && ((p) <= 15)) ? 3 : \
0 ) ) ) )
#define digitalPinToPCMSK(p) ( (((p) >= 24) && ((p) <= 31)) ? (&PCMSK0) : \
( (((p) >= 0) && ((p) <= 7)) ? (&PCMSK1) : \
( (((p) >= 16) && ((p) <= 23)) ? (&PCMSK2) : \
( (((p) >= 8) && ((p) <= 15)) ? (&PCMSK3) : \
((uint8_t *)0) ) ) ) )
#define digitalPinToPCMSKbit(p) ( (((p) >= 24) && ((p) <= 31)) ? (31 - (p)) : \
( (((p) >= 0) && ((p) <= 7)) ? (p) : \
( (((p) >= 16) && ((p) <= 23)) ? ((p) - 16) : \
( (((p) >= 8) && ((p) <= 15)) ? ((p) - 8) : \
0 ) ) ) )
#define digitalPinToInterrupt(p) ((p) == 10 ? 0 : ((p) == 11 ? 1 : ((p) == 2 ? 2 : NOT_AN_INTERRUPT)))
#ifdef ARDUINO_MAIN
// these arrays map port names (e.g. port B) to the
// appropriate addresses for various functions (e.g. reading
// and writing)
const uint16_t PROGMEM port_to_mode_PGM[] =
{
NOT_A_PORT,
(uint16_t) &DDRA,
(uint16_t) &DDRB,
(uint16_t) &DDRC,
(uint16_t) &DDRD,
};
const uint16_t PROGMEM port_to_output_PGM[] =
{
NOT_A_PORT,
(uint16_t) &PORTA,
(uint16_t) &PORTB,
(uint16_t) &PORTC,
(uint16_t) &PORTD,
};
const uint16_t PROGMEM port_to_input_PGM[] =
{
NOT_A_PORT,
(uint16_t) &PINA,
(uint16_t) &PINB,
(uint16_t) &PINC,
(uint16_t) &PIND,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] =
{
PB, /* 0 */
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PD, /* 8 */
PD,
PD,
PD,
PD,
PD,
PD,
PD,
PC, /* 16 */
PC,
PC,
PC,
PC,
PC,
PC,
PC,
PA, /* 24 */
PA,
PA,
PA,
PA,
PA,
PA,
PA /* 31 */
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] =
{
_BV(0), /* 0, port B */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(0), /* 8, port D */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(0), /* 16, port C */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(7), /* 24, port A */
_BV(6),
_BV(5),
_BV(4),
_BV(3),
_BV(2),
_BV(1),
_BV(0)
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] =
{
NOT_ON_TIMER, /* 0 - PB0 */
NOT_ON_TIMER, /* 1 - PB1 */
NOT_ON_TIMER, /* 2 - PB2 */
TIMER0A, /* 3 - PB3 */
TIMER0B, /* 4 - PB4 */
NOT_ON_TIMER, /* 5 - PB5 */
NOT_ON_TIMER, /* 6 - PB6 */
NOT_ON_TIMER, /* 7 - PB7 */
NOT_ON_TIMER, /* 8 - PD0 */
NOT_ON_TIMER, /* 9 - PD1 */
NOT_ON_TIMER, /* 10 - PD2 */
NOT_ON_TIMER, /* 11 - PD3 */
TIMER1B, /* 12 - PD4 */
TIMER1A, /* 13 - PD5 */
TIMER2B, /* 14 - PD6 */
TIMER2A, /* 15 - PD7 */
NOT_ON_TIMER, /* 16 - PC0 */
NOT_ON_TIMER, /* 17 - PC1 */
NOT_ON_TIMER, /* 18 - PC2 */
NOT_ON_TIMER, /* 19 - PC3 */
NOT_ON_TIMER, /* 20 - PC4 */
NOT_ON_TIMER, /* 21 - PC5 */
NOT_ON_TIMER, /* 22 - PC6 */
NOT_ON_TIMER, /* 23 - PC7 */
NOT_ON_TIMER, /* 24 - PA0 */
NOT_ON_TIMER, /* 25 - PA1 */
NOT_ON_TIMER, /* 26 - PA2 */
NOT_ON_TIMER, /* 27 - PA3 */
NOT_ON_TIMER, /* 28 - PA4 */
NOT_ON_TIMER, /* 29 - PA5 */
NOT_ON_TIMER, /* 30 - PA6 */
NOT_ON_TIMER /* 31 - PA7 */
};
#endif
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
//
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
//
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
//
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
//
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
//
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
// pins are NOT connected to anything by default.
#define SERIAL_PORT_MONITOR Serial
#define SERIAL_PORT_HARDWARE Serial
#define SERIAL_PORT_HARDWARE1 Serial1
#define SERIAL_PORT_HARDWARE_OPEN Serial1
#endif

View File

@@ -1,83 +0,0 @@
############################################################
atmega644.name=Sanguino W/ ATmega644P
atmega644.upload.protocol=stk500
atmega644.upload.maximum_size=63488
atmega644.upload.speed=57600
atmega644.bootloader.low_fuses=0xFF
atmega644.bootloader.high_fuses=0x9A
atmega644.bootloader.extended_fuses=0xFF
atmega644.bootloader.path=atmega
atmega644.bootloader.file=ATmegaBOOT_168_atmega644p.hex
#atmega644.bootloader.file=ATmegaBOOT_644P.hex
atmega644.bootloader.unlock_bits=0x3F
atmega644.bootloader.lock_bits=0x0F
atmega644.build.mcu=atmega644p
atmega644.build.f_cpu=16000000L
atmega644.build.core=arduino
atmega644.build.variant=standard
##############################################################
atmega12848m.name=Sanguino W/ ATmega1284p 8mhz
atmega12848m.upload.protocol=stk500
atmega12848m.upload.maximum_size=131072
atmega12848m.upload.speed=19200
atmega1284.bootloader.low_fuses=0xD6
atmega1284.bootloader.high_fuses=0xDA
atmega1284.bootloader.extended_fuses=0xFD
atmega12848m.bootloader.path=atmega
atmega12848m.bootloader.file=ATmegaBOOT_168_atmega1284p_8m.hex
atmega12848m.bootloader.unlock_bits=0x3F
atmega12848m.bootloader.lock_bits=0x0F
atmega12848m.build.mcu=atmega1284p
atmega12848m.build.f_cpu=8000000L
atmega12848m.build.core=arduino
atmega12848m.build.variant=standard
##############################################################
atmega1284.name=Sanguino W/ ATmega1284p 16mhz
atmega1284.upload.protocol=stk500
atmega1284.upload.maximum_size=131072
atmega1284.upload.speed=57600
atmega1284.bootloader.low_fuses=0xD6
atmega1284.bootloader.high_fuses=0xDA
atmega1284.bootloader.extended_fuses=0xFD
atmega1284.bootloader.path=atmega
atmega1284.bootloader.file=ATmegaBOOT_168_atmega1284p.hex
atmega1284.bootloader.unlock_bits=0x3F
atmega1284.bootloader.lock_bits=0x0F
atmega1284.build.mcu=atmega1284p
atmega1284.build.f_cpu=16000000L
atmega1284.build.core=arduino
atmega1284.build.variant=standard
##############################################################
atmega1284m.name=Sanguino W/ ATmega1284p 20mhz
atmega1284m.upload.protocol=stk500
atmega1284m.upload.maximum_size=131072
atmega1284m.upload.speed=57600
atmega1284m.bootloader.low_fuses=0xD6
atmega1284m.bootloader.high_fuses=0xDA
atmega1284m.bootloader.extended_fuses=0xFD
atmega1284m.bootloader.path=atmega
atmega1284m.bootloader.file=ATmegaBOOT_168_atmega1284p.hex
atmega1284m.bootloader.unlock_bits=0x3F
atmega1284m.bootloader.lock_bits=0x0F
atmega1284m.build.mcu=atmega1284p
atmega1284m.build.f_cpu=20000000L
atmega1284m.build.core=arduino
atmega1284m.build.variant=standard
#

View File

@@ -1,130 +0,0 @@
:020000021000EC
:10F000000C9446F80C9465F80C9465F80C9465F82B
:10F010000C9465F80C9465F80C9465F80C9465F8FC
:10F020000C9465F80C9465F80C9465F80C9465F8EC
:10F030000C9465F80C9465F80C9465F80C9465F8DC
:10F040000C9465F80C9465F80C9465F80C9465F8CC
:10F050000C9465F80C9465F80C9465F80C9465F8BC
:10F060000C9465F80C9465F80C9465F80C9465F8AC
:10F070000C9465F80C9465F80C9465F80C9465F89C
:10F080000C9465F80C9465F80C9465F811241FBE77
:10F09000CFEFD0E4DEBFCDBF11E0A0E0B1E0E8EDFE
:10F0A000F7EF01E00BBF02C007900D92A230B1074D
:10F0B000D9F712E0A2E0B1E001C01D92AD30B10776
:10F0C000E1F70E947EF90C94EAFB0C9400F8909111
:10F0D0000201913019F0923041F008959091C000F2
:10F0E00095FFFCCF8093C60008959091C80095FFCE
:10F0F000FCCF8093CE0008951F93982F95959595FA
:10F1000095959595905D182F1F701A304CF4105DF1
:10F11000892F0E9467F8812F0E9467F81F91089538
:10F12000195A892F0E9467F8812F0E9467F81F9152
:10F130000895EF92FF920F931F9380910201813007
:10F1400069F1823031F080E01F910F91FF90EF90D4
:10F150000895EE24FF2487018091C80087FD17C021
:10F160000894E11CF11C011D111D81E4E81682E4E4
:10F17000F8068FE0080780E0180770F3E0910401BB
:10F18000F091050109958091C80087FFE9CF809132
:10F19000CE001F910F91FF90EF900895EE24FF2471
:10F1A00087018091C00087FD17C00894E11CF11C05
:10F1B000011D111D81E4E81682E4F8068FE00807BE
:10F1C00080E0180770F3E0910401F09105010995C2
:10F1D0008091C00087FFE9CF8091C6001F910F91F9
:10F1E000FF90EF9008951F930E9499F8182F0E94A6
:10F1F00067F8113634F410330CF01053812F1F913F
:10F2000008951755812F1F9108951F930E94F3F8B9
:10F21000182F0E94F3F81295107F810F1F91089507
:10F2200020910201882339F0213031F0223061F041
:10F2300081508823C9F708959091C00097FFFCCFB3
:10F240009091C6008150F5CF9091C80097FFFCCFF8
:10F250009091CE008150EDCF1F93182F0E9499F806
:10F26000803281F0809103018F5F809303018530AC
:10F2700011F01F910895E0910401F09105010995A5
:10F280001F91089584E10E9467F8812F0E9467F81A
:10F2900080E10E9467F8EDCF0E9499F8803271F00A
:10F2A000809103018F5F80930301853009F00895F9
:10F2B000E0910401F09105010995089584E10E940F
:10F2C00067F880E10E9467F8089515C0289A2FEF2B
:10F2D00031EE44E0215030404040E1F700C00000F2
:10F2E00028982FEF31EE44E0215030404040E1F7C4
:10F2F00000C000008150882349F70895EF92FF92E3
:10F300000F931F93CF93DF93000081E0809302015E
:10F3100080E18093C4001092C5001092C00086E086
:10F320008093C20088E18093C100209A81E00E940E
:10F3300065F90E9499F88033B1F18133B9F18034D5
:10F3400009F454C0813409F45AC0823409F469C004
:10F35000853409F46CC0803531F1823521F1813575
:10F3600011F1853509F469C0863509F471C0843618
:10F3700009F47AC0843709F4E1C0853709F43FC144
:10F38000863709F44AC0809103018F5F809303019F
:10F39000853079F6E0910401F091050109950E940C
:10F3A00099F8803351F60E944CF9C3CF0E9499F826
:10F3B000803249F784E10E9467F881E40E9467F88F
:10F3C00086E50E9467F882E50E9467F880E20E9465
:10F3D00067F889E40E9467F883E50E9467F880E592
:10F3E0000E9467F880E10E9467F8A3CF0E9499F815
:10F3F0008638C8F20E9499F80E944CF99ACF0E9470
:10F4000099F8803809F414C1813809F415C182389B
:10F4100009F416C1883909F407C180E00E942CF96B
:10F4200088CF84E10E9410F90E944CF982CF85E0D8
:10F430000E9410F90E944CF97CCF0E9499F88093A9
:10F4400006010E9499F8809307010E944CF971CF40
:10F450000E9499F8803309F405C183E00E9410F9F5
:10F4600080E00E942CF965CF0E9499F880930902F0
:10F470000E9499F88093080280910C028E7F8093FD
:10F480000C020E9499F8853409F4FDC080910802AD
:10F49000909109020097A1F068E0E62E61E0F62E57
:10F4A00000E010E00E9499F8F70181937F010F5F5F
:10F4B0001F4F80910802909109020817190790F3D5
:10F4C0000E9499F8803209F05ECF80910C0280FF93
:10F4D000ECC08091060190910701880F991F9093CD
:10F4E000070180930601209108023091090221153D
:10F4F0003105E9F048E0E42E41E0F42E00E010E0B0
:10F50000F70161917F010E94DCFB809106019091DF
:10F510000701019690930701809306010F5F1F4F2B
:10F5200020910802309109020217130748F384E181
:10F530000E9467F880E10E9467F8FBCE0E9499F86C
:10F54000809309020E9499F8809308028091060135
:10F550009091070197FDA3C020910C022D7F20936D
:10F560000C02880F991F90930701809306010E9457
:10F5700099F8853409F48DC080910C028E7F8093B8
:10F580000C020E9499F8803209F0D3CE84E10E94E7
:10F5900067F88091080290910902009709F440C031
:10F5A00000E010E0809106019091070116C0FC0177
:10F5B00084910E9467F8809106019091070101965D
:10F5C00090930701809306010F5F1F4F209108025F
:10F5D000309109020217130718F520910C0220FD43
:10F5E00033C021FFE4CFA0E0B0E080509040AF4FA7
:10F5F000BF4FABBFFC0187910E9467F8DCCF0E9430
:10F6000099F8803209F0BFCE84E10E9467F88EE15C
:10F610000E9467F887E90E9467F885E00E9467F812
:10F6200080E10E9467F885CE83E00E942CF981CEAC
:10F6300082E00E942CF97DCE81E00E942CF979CEE7
:10F6400080E10E942CF975CE0E94D4FB0E9467F8DD
:10F650008091060190910701019690930701809394
:10F660000601B2CF0E9499F80E9499F8082F0E94D3
:10F6700099F8002309F48BC0013009F48CC085E0AF
:10F680000E942CF956CE80910C02816080930C026E
:10F69000FDCE80910C02816080930C0272CF20918C
:10F6A0000C02226020930C025CCF8091070187FD41
:10F6B00076C010920B0280E08BBF80910601909182
:10F6C0000701880F991F909307018093060180918D
:10F6D000080280FF09C080910802909109020196FA
:10F6E0009093090280930802F894F999FECF1127AC
:10F6F000E0910601F0910701C8E0D1E08091080295
:10F7000090910902103091F400915700017001307E
:10F71000D9F303E000935700E8950091570001707A
:10F720000130D9F301E100935700E8950990199051
:10F730000091570001700130D9F301E000935700A8
:10F74000E8951395103898F0112700915700017033
:10F750000130D9F305E000935700E8950091570078
:10F7600001700130D9F301E100935700E89532961A
:10F77000029709F0C7CF103011F00296E5CF11249F
:10F7800084E10E9467F880E10E9467F8D2CD8EE1A3
:10F790000E942CF9CECD87E90E942CF9CACDF1E068
:10F7A000F0930B0281E088CFF999FECF92BD81BD25
:10F7B000F89A992780B50895262FF999FECF1FBA98
:10F7C00092BD81BD20BD0FB6F894FA9AF99A0FBE8A
:08F7D00001960895F894FFCFA3
:02F7D8008000AF
:040000031000F000F9
:00000001FF

View File

@@ -1,130 +0,0 @@
:020000021000EC
:10F000000C9446F80C9465F80C9465F80C9465F82B
:10F010000C9465F80C9465F80C9465F80C9465F8FC
:10F020000C9465F80C9465F80C9465F80C9465F8EC
:10F030000C9465F80C9465F80C9465F80C9465F8DC
:10F040000C9465F80C9465F80C9465F80C9465F8CC
:10F050000C9465F80C9465F80C9465F80C9465F8BC
:10F060000C9465F80C9465F80C9465F80C9465F8AC
:10F070000C9465F80C9465F80C9465F80C9465F89C
:10F080000C9465F80C9465F80C9465F811241FBE77
:10F09000CFEFD0E4DEBFCDBF11E0A0E0B1E0E8EDFE
:10F0A000F7EF01E00BBF02C007900D92A230B1074D
:10F0B000D9F712E0A2E0B1E001C01D92AD30B10776
:10F0C000E1F70E947EF90C94EAFB0C9400F8909111
:10F0D0000201913019F0923041F008959091C000F2
:10F0E00095FFFCCF8093C60008959091C80095FFCE
:10F0F000FCCF8093CE0008951F93982F95959595FA
:10F1000095959595905D182F1F701A304CF4105DF1
:10F11000892F0E9467F8812F0E9467F81F91089538
:10F12000195A892F0E9467F8812F0E9467F81F9152
:10F130000895EF92FF920F931F9380910201813007
:10F1400069F1823031F080E01F910F91FF90EF90D4
:10F150000895EE24FF2487018091C80087FD17C021
:10F160000894E11CF11C011D111D81E2E81681EAE1
:10F17000F80687E0080780E0180770F3E0910401C3
:10F18000F091050109958091C80087FFE9CF809132
:10F19000CE001F910F91FF90EF900895EE24FF2471
:10F1A00087018091C00087FD17C00894E11CF11C05
:10F1B000011D111D81E2E81681EAF80687E00807C3
:10F1C00080E0180770F3E0910401F09105010995C2
:10F1D0008091C00087FFE9CF8091C6001F910F91F9
:10F1E000FF90EF9008951F930E9499F8182F0E94A6
:10F1F00067F8113634F410330CF01053812F1F913F
:10F2000008951755812F1F9108951F930E94F3F8B9
:10F21000182F0E94F3F81295107F810F1F91089507
:10F2200020910201882339F0213031F0223061F041
:10F2300081508823C9F708959091C00097FFFCCFB3
:10F240009091C6008150F5CF9091C80097FFFCCFF8
:10F250009091CE008150EDCF1F93182F0E9499F806
:10F26000803281F0809103018F5F809303018530AC
:10F2700011F01F910895E0910401F09105010995A5
:10F280001F91089584E10E9467F8812F0E9467F81A
:10F2900080E10E9467F8EDCF0E9499F8803271F00A
:10F2A000809103018F5F80930301853009F00895F9
:10F2B000E0910401F09105010995089584E10E940F
:10F2C00067F880E10E9467F8089515C0289A2FEF2B
:10F2D00030E742E0215030404040E1F700C00000FC
:10F2E00028982FEF30E742E0215030404040E1F7CE
:10F2F00000C000008150882349F70895EF92FF92E3
:10F300000F931F93CF93DF93000081E0809302015E
:10F3100089E18093C4001092C5001092C00086E07D
:10F320008093C20088E18093C100209A81E00E940E
:10F3300065F90E9499F88033B1F18133B9F18034D5
:10F3400009F454C0813409F45AC0823409F469C004
:10F35000853409F46CC0803531F1823521F1813575
:10F3600011F1853509F469C0863509F471C0843618
:10F3700009F47AC0843709F4E1C0853709F43FC144
:10F38000863709F44AC0809103018F5F809303019F
:10F39000853079F6E0910401F091050109950E940C
:10F3A00099F8803351F60E944CF9C3CF0E9499F826
:10F3B000803249F784E10E9467F881E40E9467F88F
:10F3C00086E50E9467F882E50E9467F880E20E9465
:10F3D00067F889E40E9467F883E50E9467F880E592
:10F3E0000E9467F880E10E9467F8A3CF0E9499F815
:10F3F0008638C8F20E9499F80E944CF99ACF0E9470
:10F4000099F8803809F414C1813809F415C182389B
:10F4100009F416C1883909F407C180E00E942CF96B
:10F4200088CF84E10E9410F90E944CF982CF85E0D8
:10F430000E9410F90E944CF97CCF0E9499F88093A9
:10F4400006010E9499F8809307010E944CF971CF40
:10F450000E9499F8803309F405C183E00E9410F9F5
:10F4600080E00E942CF965CF0E9499F880930902F0
:10F470000E9499F88093080280910C028E7F8093FD
:10F480000C020E9499F8853409F4FDC080910802AD
:10F49000909109020097A1F068E0E62E61E0F62E57
:10F4A00000E010E00E9499F8F70181937F010F5F5F
:10F4B0001F4F80910802909109020817190790F3D5
:10F4C0000E9499F8803209F05ECF80910C0280FF93
:10F4D000ECC08091060190910701880F991F9093CD
:10F4E000070180930601209108023091090221153D
:10F4F0003105E9F048E0E42E41E0F42E00E010E0B0
:10F50000F70161917F010E94DCFB809106019091DF
:10F510000701019690930701809306010F5F1F4F2B
:10F5200020910802309109020217130748F384E181
:10F530000E9467F880E10E9467F8FBCE0E9499F86C
:10F54000809309020E9499F8809308028091060135
:10F550009091070197FDA3C020910C022D7F20936D
:10F560000C02880F991F90930701809306010E9457
:10F5700099F8853409F48DC080910C028E7F8093B8
:10F580000C020E9499F8803209F0D3CE84E10E94E7
:10F5900067F88091080290910902009709F440C031
:10F5A00000E010E0809106019091070116C0FC0177
:10F5B00084910E9467F8809106019091070101965D
:10F5C00090930701809306010F5F1F4F209108025F
:10F5D000309109020217130718F520910C0220FD43
:10F5E00033C021FFE4CFA0E0B0E080509040AF4FA7
:10F5F000BF4FABBFFC0187910E9467F8DCCF0E9430
:10F6000099F8803209F0BFCE84E10E9467F88EE15C
:10F610000E9467F887E90E9467F885E00E9467F812
:10F6200080E10E9467F885CE83E00E942CF981CEAC
:10F6300082E00E942CF97DCE81E00E942CF979CEE7
:10F6400080E10E942CF975CE0E94D4FB0E9467F8DD
:10F650008091060190910701019690930701809394
:10F660000601B2CF0E9499F80E9499F8082F0E94D3
:10F6700099F8002309F48BC0013009F48CC085E0AF
:10F680000E942CF956CE80910C02816080930C026E
:10F69000FDCE80910C02816080930C0272CF20918C
:10F6A0000C02226020930C025CCF8091070187FD41
:10F6B00076C010920B0280E08BBF80910601909182
:10F6C0000701880F991F909307018093060180918D
:10F6D000080280FF09C080910802909109020196FA
:10F6E0009093090280930802F894F999FECF1127AC
:10F6F000E0910601F0910701C8E0D1E08091080295
:10F7000090910902103091F400915700017001307E
:10F71000D9F303E000935700E8950091570001707A
:10F720000130D9F301E100935700E8950990199051
:10F730000091570001700130D9F301E000935700A8
:10F74000E8951395103898F0112700915700017033
:10F750000130D9F305E000935700E8950091570078
:10F7600001700130D9F301E100935700E89532961A
:10F77000029709F0C7CF103011F00296E5CF11249F
:10F7800084E10E9467F880E10E9467F8D2CD8EE1A3
:10F790000E942CF9CECD87E90E942CF9CACDF1E068
:10F7A000F0930B0281E088CFF999FECF92BD81BD25
:10F7B000F89A992780B50895262FF999FECF1FBA98
:10F7C00092BD81BD20BD0FB6F894FA9AF99A0FBE8A
:08F7D00001960895F894FFCFA3
:02F7D8008000AF
:040000031000F000F9
:00000001FF

View File

@@ -1,126 +0,0 @@
:10F800000C943E7C0C945B7C0C945B7C0C945B7C39
:10F810000C945B7C0C945B7C0C945B7C0C945B7C0C
:10F820000C945B7C0C945B7C0C945B7C0C945B7CFC
:10F830000C945B7C0C945B7C0C945B7C0C945B7CEC
:10F840000C945B7C0C945B7C0C945B7C0C945B7CDC
:10F850000C945B7C0C945B7C0C945B7C0C945B7CCC
:10F860000C945B7C0C945B7C0C945B7C0C945B7CBC
:10F870000C945B7C0C945B7C0C945B7C11241FBE11
:10F88000CFEFD0E1DEBFCDBF11E0A0E0B1E0EAEA0A
:10F89000FFEF02C005900D92A230B107D9F712E038
:10F8A000A2E0B1E001C01D92AD30B107E1F70E94C6
:10F8B000747D0C94D37F0C94007C90910201913064
:10F8C00019F0923041F008959091C00095FFFCCF5F
:10F8D0008093C60008959091C80095FFFCCF809357
:10F8E000CE0008951F93982F95959595959595958C
:10F8F000905D182F1F701A304CF4105D892F0E94F4
:10F900005D7C812F0E945D7C1F910895195A892F7B
:10F910000E945D7C812F0E945D7C1F910895EF9273
:10F92000FF920F931F9380910201813069F1823021
:10F9300031F080E01F910F91FF90EF900895EE2439
:10F94000FF2487018091C80087FD17C00894E11C3F
:10F95000F11C011D111D81E4E81682E4F8068FE018
:10F96000080780E0180770F3E0910401F0910501A9
:10F9700009958091C80087FFE9CF8091CE001F9143
:10F980000F91FF90EF900895EE24FF24870180915E
:10F99000C00087FD17C00894E11CF11C011D111D5A
:10F9A00081E4E81682E4F8068FE0080780E0180793
:10F9B00070F3E0910401F091050109958091C00078
:10F9C00087FFE9CF8091C6001F910F91FF90EF90C4
:10F9D00008951F930E948F7C182F0E945D7C113622
:10F9E00034F410330CF01053812F1F9108951755E4
:10F9F000812F1F9108951F930E94E97C182F0E9468
:10FA0000E97C1295107F810F1F91089520910201CA
:10FA1000882339F0213031F0223061F08150882381
:10FA2000C9F708959091C00097FFFCCF9091C60050
:10FA30008150F5CF9091C80097FFFCCF9091CE00F8
:10FA40008150EDCF1F93182F0E948F7C803281F060
:10FA5000809103018F5F80930301853011F01F9126
:10FA60000895E0910401F091050109951F91089511
:10FA700084E10E945D7C812F0E945D7C80E10E9478
:10FA80005D7CEDCF0E948F7C803271F0809103010C
:10FA90008F5F80930301853009F00895E0910401A0
:10FAA000F09105010995089584E10E945D7C80E153
:10FAB0000E945D7C089515C0289A2FEF31EE44E036
:10FAC000215030404040E1F700C0000028982FEF5F
:10FAD00031EE44E0215030404040E1F700C00000EA
:10FAE0008150882349F70895EF92FF920F931F9357
:10FAF000CF93DF93000081E08093020180E1809347
:10FB0000C4001092C5001092C00086E08093C2002D
:10FB100088E18093C100209A81E00E945B7D0E9471
:10FB20008F7C8033B1F18133B9F1803409F454C052
:10FB3000813409F45AC0823409F469C0853409F467
:10FB40006CC0803531F1823521F1813511F1853577
:10FB500009F469C0863509F471C0843609F47AC0A5
:10FB6000843709F4E1C0853709F439C1863709F4CF
:10FB70004AC0809103018F5F80930301853079F63D
:10FB8000E0910401F091050109950E948F7C80337A
:10FB900051F60E94427DC3CF0E948F7C803249F78C
:10FBA00084E10E945D7C81E40E945D7C86E50E9488
:10FBB0005D7C82E50E945D7C80E20E945D7C89E440
:10FBC0000E945D7C83E50E945D7C80E50E945D7CF7
:10FBD00080E10E945D7CA3CF0E948F7C8638C8F2B2
:10FBE0000E948F7C0E94427D9ACF0E948F7C803839
:10FBF00009F40EC1813809F40FC1823809F410C12B
:10FC0000883909F401C180E00E94227D88CF84E117
:10FC10000E94067D0E94427D82CF85E00E94067D83
:10FC20000E94427D7CCF0E948F7C809306010E94BF
:10FC30008F7C809307010E94427D71CF0E948F7C50
:10FC4000803309F4F1C083E00E94067D80E00E94C9
:10FC5000227D65CF0E948F7C809309020E948F7C59
:10FC60008093080280910C028E7F80930C020E9488
:10FC70008F7C853409F4E9C08091080290910902D3
:10FC80000097A1F068E0E62E61E0F62E00E010E0BB
:10FC90000E948F7CF70181937F010F5F1F4F80913E
:10FCA0000802909109020817190790F30E948F7CAF
:10FCB000803209F05ECF80910C0280FFE5C0809118
:10FCC000060190910701880F991F90930701809377
:10FCD0000601209108023091090221153105E9F051
:10FCE00048E0E42E41E0F42E00E010E0F7016191DD
:10FCF0007F010E94C57F80910601909107010196C6
:10FD000090930701809306010F5F1F4F2091080217
:10FD1000309109020217130748F384E10E945D7CC9
:10FD200080E10E945D7CFBCE0E948F7C8093090263
:10FD30000E948F7C809308028091060190910701B8
:10FD400097FD9CC020910C022D7F20930C02880F00
:10FD5000991F90930701809306010E948F7C853440
:10FD600009F486C080910C028E7F80930C020E9461
:10FD70008F7C803209F0D3CE84E10E945D7C20919B
:10FD800008023091090221153105D1F100E010E09F
:10FD900080910601909107010CC041FF5CC0019663
:10FDA00090930701809306010F5F1F4F02171307FF
:10FDB00038F540910C0240FFF0CF0E94BD7F0E94B9
:10FDC0005D7C809106019091070101969093070157
:10FDD000809306012091080230910902E5CF0E942C
:10FDE0008F7C803209F0C5CE84E10E945D7C8EE17B
:10FDF0000E945D7C86E90E945D7C8AE00E945D7CB9
:10FE000080E10E945D7C8BCE83E00E94227D87CEC4
:10FE100082E00E94227D83CE81E00E94227D7FCEFF
:10FE200080E10E94227D7BCE0E948F7C0E948F7C8D
:10FE3000082F0E948F7C002309F497C0013009F439
:10FE400098C08AE00E94227D6ACE80910C02816077
:10FE500080930C0211CFFC0184910E945D7C209163
:10FE6000080230910902809106019091070197CF15
:10FE700080910C02816080930C0279CF20910C025A
:10FE8000226020930C0263CF80910701880F880BBA
:10FE9000817080930B028091060190910701880F79
:10FEA000991F90930701809306018091080280FFBB
:10FEB00009C080910802909109020196909309026D
:10FEC00080930802F894F999FECF1127E09106017A
:10FED000F0910701C8E0D1E08091080290910902F9
:10FEE000103091F40091570001700130D9F303E014
:10FEF00000935700E8950091570001700130D9F345
:10FF000001E100935700E89509901990009157007E
:10FF100001700130D9F301E000935700E895139583
:10FF2000103898F011270091570001700130D9F373
:10FF300005E000935700E8950091570001700130EB
:10FF4000D9F301E100935700E8953296029709F042
:10FF5000C7CF103011F00296E5CF112484E10E9442
:10FF60005D7C80E10E945D7CDACD8EE10E94227D85
:10FF7000D6CD86E90E94227DD2CDF999FECF92BDE1
:10FF800081BDF89A992780B50895262FF999FECF5B
:10FF90001FBA92BD81BD20BD0FB6F894FA9AF99AA6
:0AFFA0000FBE01960895F894FFCFFC
:02FFAA008000D5
:040000030000F80001
:00000001FF

View File

@@ -1,254 +0,0 @@
# Makefile for ATmegaBOOT
# E.Lins, 18.7.2005
# $Id$
#
# Instructions
#
# To make bootloader .hex file:
# make diecimila
# make lilypad
# make ng
# etc...
#
# To burn bootloader .hex file:
# make diecimila_isp
# make lilypad_isp
# make ng_isp
# etc...
# program name should not be changed...
PROGRAM = ATmegaBOOT_168
# enter the parameters for the avrdude isp tool
ISPTOOL = stk500v2
ISPPORT = usb
ISPSPEED = -b 115200
MCU_TARGET = atmega168
LDSECTION = --section-start=.text=0x3800
# the efuse should really be 0xf8; since, however, only the lower
# three bits of that byte are used on the atmega168, avrdude gets
# confused if you specify 1's for the higher bits, see:
# http://tinker.it/now/2007/02/24/the-tale-of-avrdude-atmega168-and-extended-bits-fuses/
#
# similarly, the lock bits should be 0xff instead of 0x3f (to
# unlock the bootloader section) and 0xcf instead of 0x0f (to
# lock it), but since the high two bits of the lock byte are
# unused, avrdude would get confused.
ISPFUSES = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \
-e -u -U lock:w:0x3f:m -U efuse:w:0x$(EFUSE):m -U hfuse:w:0x$(HFUSE):m -U lfuse:w:0x$(LFUSE):m
ISPFLASH = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \
-U flash:w:$(PROGRAM)_$(TARGET).hex -U lock:w:0x0f:m
STK500 = "C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe"
STK500-1 = $(STK500) -e -d$(MCU_TARGET) -pf -vf -if$(PROGRAM)_$(TARGET).hex \
-lFF -LFF -f$(HFUSE)$(LFUSE) -EF8 -ms -q -cUSB -I200kHz -s -wt
STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt
OBJ = $(PROGRAM).o
OPTIMIZE = -O2
DEFS =
LIBS =
CC = avr-gcc
# Override is only needed by avr-lib build system.
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS)
override LDFLAGS = -Wl,$(LDSECTION)
#override LDFLAGS = -Wl,-Map,$(PROGRAM).map,$(LDSECTION)
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
all:
lilypad: TARGET = lilypad
lilypad: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3'
lilypad: AVR_FREQ = 8000000L
lilypad: $(PROGRAM)_lilypad.hex
lilypad_isp: lilypad
lilypad_isp: TARGET = lilypad
lilypad_isp: HFUSE = DD
lilypad_isp: LFUSE = E2
lilypad_isp: EFUSE = 00
lilypad_isp: isp
lilypad_resonator: TARGET = lilypad_resonator
lilypad_resonator: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=3'
lilypad_resonator: AVR_FREQ = 8000000L
lilypad_resonator: $(PROGRAM)_lilypad_resonator.hex
lilypad_resonator_isp: lilypad_resonator
lilypad_resonator_isp: TARGET = lilypad_resonator
lilypad_resonator_isp: HFUSE = DD
lilypad_resonator_isp: LFUSE = C6
lilypad_resonator_isp: EFUSE = 00
lilypad_resonator_isp: isp
pro8: TARGET = pro_8MHz
pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS'
pro8: AVR_FREQ = 8000000L
pro8: $(PROGRAM)_pro_8MHz.hex
pro8_isp: pro8
pro8_isp: TARGET = pro_8MHz
pro8_isp: HFUSE = DD
pro8_isp: LFUSE = C6
pro8_isp: EFUSE = 00
pro8_isp: isp
pro16: TARGET = pro_16MHz
pro16: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS'
pro16: AVR_FREQ = 16000000L
pro16: $(PROGRAM)_pro_16MHz.hex
pro16_isp: pro16
pro16_isp: TARGET = pro_16MHz
pro16_isp: HFUSE = DD
pro16_isp: LFUSE = C6
pro16_isp: EFUSE = 00
pro16_isp: isp
pro20: TARGET = pro_20mhz
pro20: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS'
pro20: AVR_FREQ = 20000000L
pro20: $(PROGRAM)_pro_20mhz.hex
pro20_isp: pro20
pro20_isp: TARGET = pro_20mhz
pro20_isp: HFUSE = DD
pro20_isp: LFUSE = C6
pro20_isp: EFUSE = 00
pro20_isp: isp
diecimila: TARGET = diecimila
diecimila: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1'
diecimila: AVR_FREQ = 16000000L
diecimila: $(PROGRAM)_diecimila.hex
diecimila_isp: diecimila
diecimila_isp: TARGET = diecimila
diecimila_isp: HFUSE = DD
diecimila_isp: LFUSE = FF
diecimila_isp: EFUSE = 00
diecimila_isp: isp
ng: TARGET = ng
ng: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3'
ng: AVR_FREQ = 16000000L
ng: $(PROGRAM)_ng.hex
ng_isp: ng
ng_isp: TARGET = ng
ng_isp: HFUSE = DD
ng_isp: LFUSE = FF
ng_isp: EFUSE = 00
ng_isp: isp
atmega328: TARGET = atmega328
atmega328: MCU_TARGET = atmega328p
atmega328: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600
atmega328: AVR_FREQ = 16000000L
atmega328: LDSECTION = --section-start=.text=0x7800
atmega328: $(PROGRAM)_atmega328.hex
atmega328_isp: atmega328
atmega328_isp: TARGET = atmega328
atmega328_isp: MCU_TARGET = atmega328p
atmega328_isp: HFUSE = DA
atmega328_isp: LFUSE = FF
atmega328_isp: EFUSE = 05
atmega328_isp: isp
atmega328_pro8: TARGET = atmega328_pro_8MHz
atmega328_pro8: MCU_TARGET = atmega328p
atmega328_pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 -DDOUBLE_SPEED
atmega328_pro8: AVR_FREQ = 8000000L
atmega328_pro8: LDSECTION = --section-start=.text=0x7800
atmega328_pro8: $(PROGRAM)_atmega328_pro_8MHz.hex
atmega328_pro8_isp: atmega328_pro8
atmega328_pro8_isp: TARGET = atmega328_pro_8MHz
atmega328_pro8_isp: MCU_TARGET = atmega328p
atmega328_pro8_isp: HFUSE = DA
atmega328_pro8_isp: LFUSE = FF
atmega328_pro8_isp: EFUSE = 05
atmega328_pro8_isp: isp
mega: TARGET = atmega1280
mega: MCU_TARGET = atmega1280
mega: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' -DBAUD_RATE=57600
mega: AVR_FREQ = 16000000L
mega: LDSECTION = --section-start=.text=0x1F000
mega: $(PROGRAM)_atmega1280.hex
mega_isp: mega
mega_isp: TARGET = atmega1280
mega_isp: MCU_TARGET = atmega1280
mega_isp: HFUSE = DA
mega_isp: LFUSE = FF
mega_isp: EFUSE = F5
mega_isp: isp
atmega1284p: TARGET = atmega1284p
atmega1284p: MCU_TARGET = atmega1284p
atmega1284p: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' '-DBAUD_RATE=57600'
atmega1284p: AVR_FREQ = 16000000L
atmega1284p: LDSECTION = --section-start=.text=0x1F000
atmega1284p: $(PROGRAM)_atmega1284p.hex
atmega1284p_8m: TARGET = atmega1284p
atmega1284p_8m: MCU_TARGET = atmega1284p
atmega1284p_8m: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' '-DBAUD_RATE=19200'
atmega1284p_8m: AVR_FREQ = 8000000L
atmega1284p_8m: LDSECTION = --section-start=.text=0x1F000
atmega1284p_8m: $(PROGRAM)_atmega1284p_8m.hex
atmega644p: TARGET = atmega644p
atmega644p: MCU_TARGET = atmega644p
atmega644p: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' '-DBAUD_RATE=57600'
atmega644p: AVR_FREQ = 16000000L
atmega644p: LDSECTION = --section-start=.text=0xF800
atmega644p: $(PROGRAM)_atmega644p.hex
atmega1284p_isp: atmega1284p
atmega1284p_isp: TARGET = atmega1284p
atmega1284p_isp: MCU_TARGET = atmega1284p
atmega1284p_isp: HFUSE = DC
atmega1284p_isp: LFUSE = FF
atmega1284p_isp: EFUSE = FD
atmega1284p_isp: isp
isp: $(TARGET)
$(ISPFUSES)
$(ISPFLASH)
isp-stk500: $(PROGRAM)_$(TARGET).hex
$(STK500-1)
$(STK500-2)
%.elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@

View File

@@ -1,717 +0,0 @@
/**********************************************************/
/* Serial Bootloader for Atmel megaAVR Controllers */
/* */
/* tested with ATmega644 and ATmega644P */
/* should work with other mega's, see code for details */
/* */
/* ATmegaBOOT.c */
/* */
/* 20090131: Added 324P support from Alex Leone */
/* Marius Kintel */
/* 20080915: applied ADABoot mods for Sanguino 644P */
/* Brian Riley */
/* 20080711: hacked for Sanguino by Zach Smith */
/* and Justin Day */
/* 20070626: hacked for Arduino Diecimila (which auto- */
/* resets when a USB connection is made to it) */
/* by D. Mellis */
/* 20060802: hacked for Arduino by D. Cuartielles */
/* based on a previous hack by D. Mellis */
/* and D. Cuartielles */
/* */
/* Monitor and debug functions were added to the original */
/* code by Dr. Erik Lins, chip45.com. (See below) */
/* */
/* Thanks to Karl Pitrich for fixing a bootloader pin */
/* problem and more informative LED blinking! */
/* */
/* For the latest version see: */
/* http://www.chip45.com/ */
/* */
/* ------------------------------------------------------ */
/* */
/* based on stk500boot.c */
/* Copyright (c) 2003, Jason P. Kyle */
/* All rights reserved. */
/* see avr1.org for original file and information */
/* */
/* This program is free software; you can redistribute it */
/* and/or modify it under the terms of the GNU General */
/* Public License as published by the Free Software */
/* Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will */
/* be useful, but WITHOUT ANY WARRANTY; without even the */
/* implied warranty of MERCHANTABILITY or FITNESS FOR A */
/* PARTICULAR PURPOSE. See the GNU General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU General */
/* Public License along with this program; if not, write */
/* to the Free Software Foundation, Inc., */
/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* */
/* Licence can be viewed at */
/* http://www.fsf.org/licenses/gpl.txt */
/* */
/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */
/* m8515,m8535. ATmega161 has a very small boot block so */
/* isn't supported. */
/* */
/* Tested with m168 */
/**********************************************************/
/* $Id$ */
/* some includes */
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/boot.h>
#ifdef ADABOOT
#define NUM_LED_FLASHES 3
#define ADABOOT_VER 1
#endif
/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */
#define MAX_ERROR_COUNT 5
/* set the UART baud rate */
/* 20080711: hack by Zach Hoeken */
#define BAUD_RATE 38400
/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */
/* never allow AVR Studio to do an update !!!! */
#define HW_VER 0x02
#define SW_MAJOR 0x01
#define SW_MINOR 0x10
/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */
/* if monitor functions are included, LED goes on after monitor was entered */
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED PINB0
/* define various device id's */
/* manufacturer byte is always the same */
#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :(
#if defined(__AVR_ATmega1284P__)
#define SIG2 0x97
#define SIG3 0x05
#elif defined(__AVR_ATmega644P__)
#define SIG2 0x96
#define SIG3 0x0A
#elif defined(__AVR_ATmega644__)
#define SIG2 0x96
#define SIG3 0x09
#elif defined(__AVR_ATmega324P__)
#define SIG2 0x95
#define SIG3 0x08
#endif
#define PAGE_SIZE 0x080U //128 words
#define PAGE_SIZE_BYTES 0x100U //256 bytes
/* function prototypes */
void putch(char);
char getch(void);
void getNch(uint8_t);
void byte_response(uint8_t);
void nothing_response(void);
char gethex(void);
void puthex(char);
void flash_led(uint8_t);
/* some variables */
union address_union
{
uint16_t word;
uint8_t byte[2];
} address;
union length_union
{
uint16_t word;
uint8_t byte[2];
} length;
struct flags_struct
{
unsigned eeprom : 1;
unsigned rampz : 1;
} flags;
uint8_t buff[256];
uint8_t error_count = 0;
uint8_t sreg;
void (*app_start)(void) = 0x0000;
/* main program starts here */
int main(void)
{
uint8_t ch,ch2;
uint16_t w;
uint16_t i;
asm volatile("nop\n\t");
#ifdef ADABOOT // BBR/LF 10/8/2007 & 9/13/2008
ch = MCUSR;
MCUSR = 0;
WDTCSR |= _BV(WDCE) | _BV(WDE);
WDTCSR = 0;
// Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot.
if (! (ch & _BV(EXTRF))) // if it's a not an external reset...
app_start(); // skip bootloader
#endif
//initialize our serial port.
UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSR0B = (1<<RXEN0) | (1<<TXEN0);
UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
/* Enable internal pull-up resistor on pin D0 (RX), in order
to supress line noise that prevents the bootloader from
timing out (DAM: 20070509) */
DDRD &= ~_BV(PIND0);
PORTD |= _BV(PIND0);
/* set LED pin as output */
LED_DDR |= _BV(LED);
/* flash onboard LED to signal entering of bootloader */
/* ADABOOT will do two series of flashes. first 4 - signifying ADABOOT */
/* then a pause and another flash series signifying ADABOOT sub-version */
flash_led(NUM_LED_FLASHES);
#ifdef ADABOOT
flash_led(ADABOOT_VER); // BBR 9/13/2008
#endif
/* forever loop */
for (;;)
{
/* get character from UART */
ch = getch();
/* A bunch of if...else if... gives smaller code than switch...case ! */
/* Hello is anyone home ? */
if(ch=='0')
nothing_response();
/* Request programmer ID */
/* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */
/* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */
else if(ch=='1')
{
if (getch() == ' ')
{
putch(0x14);
putch('A');
putch('V');
putch('R');
putch(' ');
putch('I');
putch('S');
putch('P');
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */
else if(ch=='@')
{
ch2 = getch();
if (ch2 > 0x85)
getch();
nothing_response();
}
/* AVR ISP/STK500 board requests */
else if(ch=='A')
{
ch2 = getch();
if(ch2 == 0x80)
byte_response(HW_VER); // Hardware version
else if(ch2==0x81)
byte_response(SW_MAJOR); // Software major version
else if(ch2==0x82)
byte_response(SW_MINOR); // Software minor version
else if(ch2==0x98)
byte_response(0x03); // Unknown but seems to be required by avr studio 3.56
else
byte_response(0x00); // Covers various unnecessary responses we don't care about
}
/* Device Parameters DON'T CARE, DEVICE IS FIXED */
else if(ch=='B')
{
getNch(20);
nothing_response();
}
/* Parallel programming stuff DON'T CARE */
else if(ch=='E')
{
getNch(5);
nothing_response();
}
/* Enter programming mode */
else if(ch=='P')
{
nothing_response();
}
/* Leave programming mode */
else if(ch=='Q')
{
nothing_response();
#ifdef ADABOOT
// autoreset via watchdog (sneaky!) BBR/LF 9/13/2008
WDTCSR = _BV(WDE);
while (1); // 16 ms
#endif
}
/* Erase device, don't care as we will erase one page at a time anyway. */
else if(ch=='R')
{
nothing_response();
}
/* Set address, little endian. EEPROM in bytes, FLASH in words */
/* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */
/* This might explain why little endian was used here, big endian used everywhere else. */
else if(ch=='U')
{
address.byte[0] = getch();
address.byte[1] = getch();
nothing_response();
}
/* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */
else if(ch=='V')
{
getNch(4);
byte_response(0x00);
}
/* Write memory, length is big endian and is in bytes */
else if(ch=='d')
{
length.byte[1] = getch();
length.byte[0] = getch();
flags.eeprom = 0;
if (getch() == 'E')
flags.eeprom = 1;
for (i=0; i<PAGE_SIZE; i++)
buff[i] = 0;
for (w = 0; w < length.word; w++)
{
// Store data in buffer, can't keep up with serial data stream whilst programming pages
buff[w] = getch();
}
if (getch() == ' ')
{
if (flags.eeprom)
{
//Write to EEPROM one byte at a time
for(w=0;w<length.word;w++)
{
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EEDR = buff[w];
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
address.word++;
}
}
else
{
//address * 2 -> byte location
address.word = address.word << 1;
//Even up an odd number of bytes
if ((length.byte[0] & 0x01))
length.word++;
// HACKME: EEPE used to be EEWE
//Wait for previous EEPROM writes to complete
//while(bit_is_set(EECR,EEPE));
while(EECR & (1<<EEPE));
asm volatile(
"clr r17 \n\t" //page_word_count
"lds r30,address \n\t" //Address of FLASH location (in bytes)
"lds r31,address+1 \n\t"
"ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM
"ldi r29,hi8(buff) \n\t"
"lds r24,length \n\t" //Length of data to be written (in bytes)
"lds r25,length+1 \n\t"
"length_loop: \n\t" //Main loop, repeat for number of words in block
"cpi r17,0x00 \n\t" //If page_word_count=0 then erase page
"brne no_page_erase \n\t"
"wait_spm1: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm1 \n\t"
"ldi r16,0x03 \n\t" //Erase page pointed to by Z
"sts %0,r16 \n\t"
"spm \n\t"
"wait_spm2: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm2 \n\t"
"ldi r16,0x11 \n\t" //Re-enable RWW section
"sts %0,r16 \n\t"
"spm \n\t"
"no_page_erase: \n\t"
"ld r0,Y+ \n\t" //Write 2 bytes into page buffer
"ld r1,Y+ \n\t"
"wait_spm3: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm3 \n\t"
"ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer
"sts %0,r16 \n\t"
"spm \n\t"
"inc r17 \n\t" //page_word_count++
"cpi r17,%1 \n\t"
"brlo same_page \n\t" //Still same page in FLASH
"write_page: \n\t"
"clr r17 \n\t" //New page, write current one first
"wait_spm4: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm4 \n\t"
"ldi r16,0x05 \n\t" //Write page pointed to by Z
"sts %0,r16 \n\t"
"spm \n\t"
"wait_spm5: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm5 \n\t"
"ldi r16,0x11 \n\t" //Re-enable RWW section
"sts %0,r16 \n\t"
"spm \n\t"
"same_page: \n\t"
"adiw r30,2 \n\t" //Next word in FLASH
"sbiw r24,2 \n\t" //length-2
"breq final_write \n\t" //Finished
"rjmp length_loop \n\t"
"final_write: \n\t"
"cpi r17,0 \n\t"
"breq block_done \n\t"
"adiw r24,2 \n\t" //length+2, fool above check on length after short page write
"rjmp write_page \n\t"
"block_done: \n\t"
"clr __zero_reg__ \n\t" //restore zero register
: "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31"
);
}
putch(0x14);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* Read memory block mode, length is big endian. */
else if(ch=='t')
{
length.byte[1] = getch();
length.byte[0] = getch();
if (getch() == 'E')
flags.eeprom = 1;
else
{
flags.eeprom = 0;
address.word = address.word << 1; // address * 2 -> byte location
}
// Command terminator
if (getch() == ' ')
{
putch(0x14);
for (w=0; w<length.word; w++)
{
// Can handle odd and even lengths okay
if (flags.eeprom)
{
// Byte access EEPROM read
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EECR |= (1<<EERE);
putch(EEDR);
address.word++;
}
else
{
if (!flags.rampz)
putch(pgm_read_byte_near(address.word));
address.word++;
}
}
putch(0x10);
}
}
/* Get device signature bytes */
else if(ch=='u')
{
if (getch() == ' ')
{
putch(0x14);
putch(SIG1);
putch(SIG2);
putch(SIG3);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* Read oscillator calibration byte */
else if(ch=='v')
byte_response(0x00);
else if (++error_count == MAX_ERROR_COUNT)
app_start();
}
/* end of forever loop */
}
char gethex(void)
{
char ah,al;
ah = getch();
putch(ah);
al = getch();
putch(al);
if(ah >= 'a')
ah = ah - 'a' + 0x0a;
else if(ah >= '0')
ah -= '0';
if(al >= 'a')
al = al - 'a' + 0x0a;
else if(al >= '0')
al -= '0';
return (ah << 4) + al;
}
void puthex(char ch)
{
char ah,al;
ah = (ch & 0xf0) >> 4;
if(ah >= 0x0a)
ah = ah - 0x0a + 'a';
else
ah += '0';
al = (ch & 0x0f);
if(al >= 0x0a)
al = al - 0x0a + 'a';
else
al += '0';
putch(ah);
putch(al);
}
void putch(char ch)
{
while (!(UCSR0A & _BV(UDRE0)));
UDR0 = ch;
}
char getch(void)
{
uint32_t count = 0;
#ifdef ADABOOT
LED_PORT &= ~_BV(LED); // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
#endif
while(!(UCSR0A & _BV(RXC0)))
{
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
/* HACKME:: here is a good place to count times*/
count++;
if (count > MAX_TIME_COUNT)
app_start();
}
#ifdef ADABOOT
LED_PORT |= _BV(LED); // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
#endif
return UDR0;
}
void getNch(uint8_t count)
{
uint8_t i;
for(i=0;i<count;i++)
{
while(!(UCSR0A & _BV(RXC0)));
UDR0;
}
}
void byte_response(uint8_t val)
{
if (getch() == ' ')
{
putch(0x14);
putch(val);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
void nothing_response(void)
{
if (getch() == ' ')
{
putch(0x14);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
#ifdef ADABOOT
void flash_led(uint8_t count)
{
/* flash onboard LED count times to signal entering of bootloader */
/* l needs to be volatile or the delay loops below might get */
/* optimized away if compiling with optimizations (DAM). */
volatile uint32_t l;
if (count == 0) {
count = ADABOOT;
}
int8_t i;
for (i = 0; i < count; ++i) {
LED_PORT |= _BV(LED); // LED on
for(l = 0; l < (F_CPU / 1000); ++l); // delay NGvalue was 1000 for both loops - BBR
LED_PORT &= ~_BV(LED); // LED off
for(l = 0; l < (F_CPU / 250); ++l); // delay asymmteric for ADA BOOT BBR
}
for(l = 0; l < (F_CPU / 100); ++l); // pause ADA BOOT BBR
}
#else
void flash_led(uint8_t count)
{
/* flash onboard LED three times to signal entering of bootloader */
/* l needs to be volatile or the delay loops below might get
optimized away if compiling with optimizations (DAM). */
volatile uint32_t l;
if (count == 0) {
count = 3;
}
int8_t i;
for (i = 0; i < count; ++i) {
LED_PORT |= _BV(LED);
for(l = 0; l < (F_CPU / 1000); ++l);
LED_PORT &= ~_BV(LED);
for(l = 0; l < (F_CPU / 1000); ++l);
}
}
#endif
/* end of file ATmegaBOOT.c */

View File

@@ -1,388 +0,0 @@
/**********************************************************/
/* Serial Bootloader for Atmel megaAVR Controllers */
/* */
/* tested with ATmega644 and ATmega644P */
/* should work with other mega's, see code for details */
/* */
/* ATmegaBOOT.c */
/* */
/* 20090131: Added 324P support from Alex Leone */
/* Marius Kintel */
/* 20080915: applied ADABoot mods for Sanguino 644P */
/* Brian Riley */
/* 20080711: hacked for Sanguino by Zach Smith */
/* and Justin Day */
/* 20070626: hacked for Arduino Diecimila (which auto- */
/* resets when a USB connection is made to it) */
/* by D. Mellis */
/* 20060802: hacked for Arduino by D. Cuartielles */
/* based on a previous hack by D. Mellis */
/* and D. Cuartielles */
/* */
/* Monitor and debug functions were added to the original */
/* code by Dr. Erik Lins, chip45.com. (See below) */
/* */
/* Thanks to Karl Pitrich for fixing a bootloader pin */
/* problem and more informative LED blinking! */
/* */
/* For the latest version see: */
/* http://www.chip45.com/ */
/* */
/* ------------------------------------------------------ */
/* */
/* based on stk500boot.c */
/* Copyright (c) 2003, Jason P. Kyle */
/* All rights reserved. */
/* see avr1.org for original file and information */
/* */
/* This program is free software; you can redistribute it */
/* and/or modify it under the terms of the GNU General */
/* Public License as published by the Free Software */
/* Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will */
/* be useful, but WITHOUT ANY WARRANTY; without even the */
/* implied warranty of MERCHANTABILITY or FITNESS FOR A */
/* PARTICULAR PURPOSE. See the GNU General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU General */
/* Public License along with this program; if not, write */
/* to the Free Software Foundation, Inc., */
/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* */
/* Licence can be viewed at */
/* http://www.fsf.org/licenses/gpl.txt */
/* */
/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */
/* m8515,m8535. ATmega161 has a very small boot block so */
/* isn't supported. */
/* */
/* Tested with m168 */
/**********************************************************/
/* $Id$ */
/* some includes */
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/boot.h>
#include <util/delay.h>
#ifdef ADABOOT
#define NUM_LED_FLASHES 3
#define ADABOOT_VER 1
#endif
/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */
#define MAX_ERROR_COUNT 5
/* set the UART baud rate */
/* 20080711: hack by Zach Hoeken */
#define BAUD_RATE 38400
/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */
/* never allow AVR Studio to do an update !!!! */
#define HW_VER 0x02
#define SW_MAJOR 0x01
#define SW_MINOR 0x10
/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */
/* if monitor functions are included, LED goes on after monitor was entered */
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED PINB0
/* define various device id's */
/* manufacturer byte is always the same */
#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :(
#if defined(__AVR_ATmega1284P__)
#define SIG2 0x97
#define SIG3 0x05
#elif defined(__AVR_ATmega644P__)
#define SIG2 0x96
#define SIG3 0x0A
#elif defined(__AVR_ATmega644__)
#define SIG2 0x96
#define SIG3 0x09
#elif defined(__AVR_ATmega324P__)
#define SIG2 0x95
#define SIG3 0x08
#endif
#define PAGE_SIZE 0x080U //128 words
#define PAGE_SIZE_BYTES 0x100U //256 bytes
/* function prototypes */
void putch(char);
char getch(void);
void getNch(uint8_t);
void byte_response(uint8_t);
void nothing_response(void);
char gethex(void);
void puthex(char);
void flash_led(uint8_t);
/* some variables */
union address_union
{
uint16_t word;
uint8_t byte[2];
} address;
union length_union
{
uint16_t word;
uint8_t byte[2];
} length;
struct flags_struct
{
unsigned eeprom : 1;
unsigned rampz : 1;
} flags;
uint8_t buff[256];
uint8_t error_count = 0;
uint8_t sreg;
void (*app_start)(void) = 0x0000;
/* main program starts here */
int main(void)
{
uint8_t ch,ch2;
uint16_t w;
uint16_t i;
asm volatile("nop\n\t");
#ifdef ADABOOT // BBR/LF 10/8/2007 & 9/13/2008
ch = MCUSR;
MCUSR = 0;
WDTCSR |= _BV(WDCE) | _BV(WDE);
WDTCSR = 0;
// Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot.
if (! (ch & _BV(EXTRF))) // if it's a not an external reset...
app_start(); // skip bootloader
#endif
//initialize our serial port.
UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSR0B = (1<<RXEN0) | (1<<TXEN0);
UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
/* Enable internal pull-up resistor on pin D0 (RX), in order
to supress line noise that prevents the bootloader from
timing out (DAM: 20070509) */
DDRD &= ~_BV(PIND0);
PORTD |= _BV(PIND0);
/* set LED pin as output */
LED_DDR |= _BV(LED);
/* flash onboard LED to signal entering of bootloader */
/* ADABOOT will do two series of flashes. first 4 - signifying ADABOOT */
/* then a pause and another flash series signifying ADABOOT sub-version */
flash_led(NUM_LED_FLASHES);
#ifdef ADABOOT
flash_led(ADABOOT_VER); // BBR 9/13/2008
#endif
/* forever loop */
for (;;)
{
putch('\r');
_delay_ms(500);
}
/* end of forever loop */
}
char gethex(void)
{
char ah,al;
ah = getch();
putch(ah);
al = getch();
putch(al);
if(ah >= 'a')
ah = ah - 'a' + 0x0a;
else if(ah >= '0')
ah -= '0';
if(al >= 'a')
al = al - 'a' + 0x0a;
else if(al >= '0')
al -= '0';
return (ah << 4) + al;
}
void puthex(char ch)
{
char ah,al;
ah = (ch & 0xf0) >> 4;
if(ah >= 0x0a)
ah = ah - 0x0a + 'a';
else
ah += '0';
al = (ch & 0x0f);
if(al >= 0x0a)
al = al - 0x0a + 'a';
else
al += '0';
putch(ah);
putch(al);
}
void putch(char ch)
{
while (!(UCSR0A & _BV(UDRE0)));
UDR0 = ch;
}
char getch(void)
{
uint32_t count = 0;
#ifdef ADABOOT
LED_PORT &= ~_BV(LED); // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
#endif
while(!(UCSR0A & _BV(RXC0)))
{
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
/* HACKME:: here is a good place to count times*/
count++;
if (count > MAX_TIME_COUNT)
app_start();
}
#ifdef ADABOOT
LED_PORT |= _BV(LED); // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
#endif
return UDR0;
}
void getNch(uint8_t count)
{
uint8_t i;
for(i=0;i<count;i++)
{
while(!(UCSR0A & _BV(RXC0)));
UDR0;
}
}
void byte_response(uint8_t val)
{
if (getch() == ' ')
{
putch(0x14);
putch(val);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
void nothing_response(void)
{
if (getch() == ' ')
{
putch(0x14);
putch(0x10);
}
else
{
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
#ifdef ADABOOT
void flash_led(uint8_t count)
{
/* flash onboard LED count times to signal entering of bootloader */
/* l needs to be volatile or the delay loops below might get */
/* optimized away if compiling with optimizations (DAM). */
volatile uint32_t l;
if (count == 0) {
count = ADABOOT;
}
int8_t i;
for (i = 0; i < count; ++i) {
LED_PORT |= _BV(LED); // LED on
for(l = 0; l < (F_CPU / 1000); ++l); // delay NGvalue was 1000 for both loops - BBR
LED_PORT &= ~_BV(LED); // LED off
for(l = 0; l < (F_CPU / 250); ++l); // delay asymmteric for ADA BOOT BBR
}
for(l = 0; l < (F_CPU / 100); ++l); // pause ADA BOOT BBR
}
#else
void flash_led(uint8_t count)
{
/* flash onboard LED three times to signal entering of bootloader */
/* l needs to be volatile or the delay loops below might get
optimized away if compiling with optimizations (DAM). */
volatile uint32_t l;
if (count == 0) {
count = 3;
}
int8_t i;
for (i = 0; i < count; ++i) {
LED_PORT |= _BV(LED);
for(l = 0; l < (F_CPU / 1000); ++l);
LED_PORT &= ~_BV(LED);
for(l = 0; l < (F_CPU / 1000); ++l);
}
}
#endif
/* end of file ATmegaBOOT.c */

View File

@@ -1,110 +0,0 @@
:020000021000EC
:10F000000C943EF80C9450F80C9450F80C9450F872
:10F010000C9450F80C9450F80C9450F80C9450F850
:10F020000C9450F80C9450F80C9450F80C9450F840
:10F030000C9450F80C9450F80C9450F80C9450F830
:10F040000C9450F80C9450F80C9450F80C9450F820
:10F050000C9450F80C9450F80C9450F80C9450F810
:10F060000C9450F80C9450F80C9450F80C9450F800
:10F070000C9450F80C9450F80C9450F811241FBEC6
:10F08000CFEFD0E1DEBFCDBF12E0A0E0B1E001C024
:10F090001D92A930B107E1F70E9471F90C944FFB62
:10F0A0000C9400F89091C00095FFFCCF8093C600AF
:10F0B00008951F93282F332727FD3095207F307028
:10F0C00094E0359527959A95E1F72A3014F0295A5E
:10F0D00001C0205D182F1F701A3014F0195A01C09A
:10F0E000105D822F0E9452F8812F0E9452F81F91CA
:10F0F0000895EF92FF920F931F932898EE24FF2418
:10F10000870113C00894E11CF11C011D111D81E051
:10F11000E81689E0F8068DE3080780E0180728F074
:10F12000E0910101F091020109958091C00087FFF3
:10F13000E9CF289A8091C6001F910F91FF90EF9020
:10F1400008950F931F930E9479F8082F0E9452F898
:10F150000E9479F8182F0E9452F8013614F00755D2
:10F1600003C000330CF00053113614F0175503C0E0
:10F1700010330CF01053802F8295807F810F1F91E8
:10F180000F91089590E007C02091C00027FFFCCFA9
:10F190002091C6009F5F9817B8F308951F93182F0A
:10F1A0000E9479F8803251F484E10E9452F8812F54
:10F1B0000E9452F880E10E9452F80CC08091000138
:10F1C0008F5F80930001853029F4E0910101F09177
:10F1D000020109951F9108950E9479F8803239F44F
:10F1E00084E10E9452F880E10E9452F808958091D3
:10F1F00000018F5F80930001853029F4E0910101C7
:10F20000F091020109950895DF93CF9300D000D0CB
:10F21000CDB7DEB7882309F481E090E03DC0289A9D
:10F2200019821A821B821C820CC029813A814B816F
:10F230005C812F5F3F4F4F4F5F4F29833A834B8352
:10F240005C8329813A814B815C8120386EE33607EB
:10F2500060E0460760E0560740F3289819821A825A
:10F260001B821C820CC029813A814B815C812F5FFB
:10F270003F4F4F4F5F4F29833A834B835C832981F4
:10F280003A814B815C8120306AEF360760E04607A7
:10F2900060E0560740F39F5F981709F619821A82BB
:10F2A0001B821C820BC089819A81AB81BC81019633
:10F2B000A11DB11D89839A83AB83BC8389819A8107
:10F2C000AB81BC81803021E7920722E0A20720E0D9
:10F2D000B20748F30F900F900F900F90CF91DF91EE
:10F2E0000895CF92DF92EF92FF920F931F93CF93E7
:10F2F000DF93000094B714BE809160008861809312
:10F3000060001092600091FD05C0E0910101F09154
:10F310000201099589E18093C4001092C50088E13B
:10F320008093C10086E08093C2005098589A209A3A
:10F3300083E00E9404F981E00E9404F90E9479F8B8
:10F34000803309F441C08133E1F40E9479F88032BE
:10F3500009F097C184E10E9452F881E40E9452F8BA
:10F3600086E50E9452F882E50E9452F880E20E94EF
:10F3700052F889E40E9452F883E50E9452F880E531
:10F380000BC1803439F40E9479F88638E8F00E9485
:10F3900079F81AC0813499F40E9479F8803811F410
:10F3A00082E06CC1813811F481E068C1823811F4C7
:10F3B00080E164C1883909F060C183E05FC18234B3
:10F3C00031F484E10E94C2F80E94ECF8B7CF853492
:10F3D00011F485E0F7CF8035B9F3813531F40E941F
:10F3E000ECF888E080936000FFCF823569F38535C3
:10F3F00049F40E9479F8809303010E9479F8809380
:10F400000401E2CF863521F484E00E94C2F835C1C0
:10F41000843609F0C7C00E9479F8809306020E94E2
:10F4200079F880930502809108028E7F809308020C
:10F430000E9479F8853429F48091080281608093D4
:10F44000080205E011E0F801119281E0E538F807C3
:10F45000D9F745E0C42E41E0D42EEE24FF2408C0A5
:10F460000E9479F8F60181936F010894E11CF11C68
:10F470008091050290910602E816F90688F30E9431
:10F4800079F8803209F0FDC08091080280FD17C034
:10F4900020C0F999FECF209103013091040132BDC3
:10F4A00021BDF80141918F0140BDFA9AF99A2F5F71
:10F4B0003F4F3093040120930301019602C080E086
:10F4C00090E020910502309106028217930708F31D
:10F4D00062C08091030190910401880F991F90935D
:10F4E0000401809303018091050280FF09C080918F
:10F4F0000502909106020196909306028093050200
:10F50000F999FECF1127E0910301F0910401C5E0C4
:10F51000D1E08091050290910602103091F40091A3
:10F52000570001700130D9F303E000935700E895CC
:10F530000091570001700130D9F301E100935700A9
:10F54000E895099019900091570001700130D9F3A6
:10F5500001E000935700E8951395103898F01127B3
:10F560000091570001700130D9F305E00093570076
:10F57000E8950091570001700130D9F301E1009343
:10F580005700E8953296029709F0C7CF103011F076
:10F590000296E5CF112484E10E9452F880E10E9496
:10F5A00052F8CCCE843709F055C00E9479F8809388
:10F5B00006020E9479F8809305020E9479F89091E2
:10F5C0000802853421F49160909308020DC09E7F5B
:10F5D000909308028091030190910401880F991F74
:10F5E00090930401809303010E9479F8803209F01E
:10F5F000A5CE84E10E9452F800E010E023C0809183
:10F60000080280FF0BC0F999FECF80910301909111
:10F61000040192BD81BDF89A80B507C081FD07C085
:10F62000E0910301F091040184910E9452F88091CD
:10F6300003019091040101969093040180930301CA
:10F640000F5F1F4F8091050290910602081719075E
:10F65000B0F2A4CF853779F40E9479F8803289F42A
:10F6600084E10E9452F88EE10E9452F886E90E94DD
:10F6700052F88AE091CF863721F480E00E94CEF8DC
:10F680005DCE809100018F5F80930001853009F08D
:10F6900055CEE0910101F091020109954FCEF89409
:02F6A000FFCF9A
:040000031000F000F9
:00000001FF

View File

@@ -1,56 +0,0 @@
#Makefile for ATmegaBOOT
# E.Lins, 18.7.2005
# $Id$
# program name should not be changed...
PROGRAM = ATmegaBOOT_644P
# enter the target CPU frequency
AVR_FREQ = 16000000L
MCU_TARGET = atmega644p
LDSECTION = --section-start=.text=0x1F000
OBJ = $(PROGRAM).o
OPTIMIZE = -Os
DEFS =
LIBS =
CC = avr-gcc
# Override is only needed by avr-lib build system.
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS)
override LDFLAGS = -Wl,$(LDSECTION)
#override LDFLAGS = -Wl,-Map,$(PROGRAM).map,$(LDSECTION)
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
all: CFLAGS += '-DMAX_TIME_COUNT=8000000L>>1' -DADABOOT
all: $(PROGRAM).hex
$(PROGRAM).hex: $(PROGRAM).elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
$(PROGRAM).elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
$(OBJ): ATmegaBOOT.c
avr-gcc $(CFLAGS) $(LDFLAGS) -c -g -Os -Wall -mmcu=$(MCU_TARGET) ATmegaBOOT.c -o $(PROGRAM).o
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@
clean:
rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex

View File

@@ -1,3 +0,0 @@
Note: This bootloader support ATmega644, ATmega644P and ATmega324P.
To build, set PROGRAM and MCU_TARGET in the Makefile according to your target device.

View File

@@ -1,215 +0,0 @@
#ifndef Arduino_h
#define Arduino_h
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "binary.h"
#ifdef __cplusplus
extern "C"{
#endif
#define HIGH 0x1
#define LOW 0x0
#define INPUT 0x0
#define OUTPUT 0x1
#define INPUT_PULLUP 0x2
#define true 0x1
#define false 0x0
#define PI 3.1415926535897932384626433832795
#define HALF_PI 1.5707963267948966192313216916398
#define TWO_PI 6.283185307179586476925286766559
#define DEG_TO_RAD 0.017453292519943295769236907684886
#define RAD_TO_DEG 57.295779513082320876798154814105
#define SERIAL 0x0
#define DISPLAY 0x1
#define LSBFIRST 0
#define MSBFIRST 1
#define CHANGE 1
#define FALLING 2
#define RISING 3
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
#define DEFAULT 0
#define EXTERNAL 1
#define INTERNAL 2
#else
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
#define INTERNAL1V1 2
#define INTERNAL2V56 3
#else
#define INTERNAL 3
#endif
#define DEFAULT 1
#define EXTERNAL 0
#endif
// undefine stdlib's abs if encountered
#ifdef abs
#undef abs
#endif
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(x) ((x)>0?(x):-(x))
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
#define radians(deg) ((deg)*DEG_TO_RAD)
#define degrees(rad) ((rad)*RAD_TO_DEG)
#define sq(x) ((x)*(x))
#define interrupts() sei()
#define noInterrupts() cli()
#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )
#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() )
#define lowByte(w) ((uint8_t) ((w) & 0xff))
#define highByte(w) ((uint8_t) ((w) >> 8))
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
typedef unsigned int word;
#define bit(b) (1UL << (b))
typedef uint8_t boolean;
typedef uint8_t byte;
void init(void);
void pinMode(uint8_t, uint8_t);
void digitalWrite(uint8_t, uint8_t);
int digitalRead(uint8_t);
int analogRead(uint8_t);
void analogReference(uint8_t mode);
void analogWrite(uint8_t, int);
unsigned long millis(void);
unsigned long micros(void);
void delay(unsigned long);
void delayMicroseconds(unsigned int us);
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
void attachInterrupt(uint8_t, void (*)(void), int mode);
void detachInterrupt(uint8_t);
void setup(void);
void loop(void);
// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.
#define analogInPinToBit(P) (P)
// On the ATmega1280, the addresses of some of the port registers are
// greater than 255, so we can't store them in uint8_t's.
extern const uint16_t PROGMEM port_to_mode_PGM[];
extern const uint16_t PROGMEM port_to_input_PGM[];
extern const uint16_t PROGMEM port_to_output_PGM[];
extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.
//
// These perform slightly better as macros compared to inline functions
//
#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
#define analogInPinToBit(P) (P)
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )
#define NOT_A_PIN 0
#define NOT_A_PORT 0
#ifdef ARDUINO_MAIN
#define PA 1
#define PB 2
#define PC 3
#define PD 4
#define PE 5
#define PF 6
#define PG 7
#define PH 8
#define PJ 10
#define PK 11
#define PL 12
#endif
#define NOT_ON_TIMER 0
#define TIMER0A 1
#define TIMER0B 2
#define TIMER1A 3
#define TIMER1B 4
#define TIMER2 5
#define TIMER2A 6
#define TIMER2B 7
#define TIMER3A 8
#define TIMER3B 9
#define TIMER3C 10
#define TIMER4A 11
#define TIMER4B 12
#define TIMER4C 13
#define TIMER4D 14
#define TIMER5A 15
#define TIMER5B 16
#define TIMER5C 17
#ifdef __cplusplus
} // extern "C"
#endif
#ifdef __cplusplus
#include "WCharacter.h"
#include "WString.h"
#include "HardwareSerial.h"
uint16_t makeWord(uint16_t w);
uint16_t makeWord(byte h, byte l);
#define word(...) makeWord(__VA_ARGS__)
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
void noTone(uint8_t _pin);
// WMath prototypes
long random(long);
long random(long, long);
void randomSeed(unsigned int);
long map(long, long, long, long, long);
#endif
#include "pins_arduino.h"
#endif

View File

@@ -1,239 +0,0 @@
/* Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#include "Platform.h"
#include "USBAPI.h"
#include <avr/wdt.h>
#if defined(USBCON)
#ifdef CDC_ENABLED
#if (RAMEND < 1000)
#define SERIAL_BUFFER_SIZE 16
#else
#define SERIAL_BUFFER_SIZE 64
#endif
struct ring_buffer
{
unsigned char buffer[SERIAL_BUFFER_SIZE];
volatile int head;
volatile int tail;
};
ring_buffer cdc_rx_buffer = { { 0 }, 0, 0};
typedef struct
{
u32 dwDTERate;
u8 bCharFormat;
u8 bParityType;
u8 bDataBits;
u8 lineState;
} LineInfo;
static volatile LineInfo _usbLineInfo = { 57600, 0x00, 0x00, 0x00, 0x00 };
#define WEAK __attribute__ ((weak))
extern const CDCDescriptor _cdcInterface PROGMEM;
const CDCDescriptor _cdcInterface =
{
D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1),
// CDC communication interface
D_INTERFACE(CDC_ACM_INTERFACE,1,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0),
D_CDCCS(CDC_HEADER,0x10,0x01), // Header (1.10 bcd)
D_CDCCS(CDC_CALL_MANAGEMENT,1,1), // Device handles call management (not)
D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT,6), // SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported
D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE), // Communication interface is master, data interface is slave 0
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),USB_ENDPOINT_TYPE_INTERRUPT,0x10,0x40),
// CDC data interface
D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0),
D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,0x40,0),
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,0x40,0)
};
int WEAK CDC_GetInterface(u8* interfaceNum)
{
interfaceNum[0] += 2; // uses 2
return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface));
}
bool WEAK CDC_Setup(Setup& setup)
{
u8 r = setup.bRequest;
u8 requestType = setup.bmRequestType;
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
{
if (CDC_GET_LINE_CODING == r)
{
USB_SendControl(0,(void*)&_usbLineInfo,7);
return true;
}
}
if (REQUEST_HOSTTODEVICE_CLASS_INTERFACE == requestType)
{
if (CDC_SET_LINE_CODING == r)
{
USB_RecvControl((void*)&_usbLineInfo,7);
return true;
}
if (CDC_SET_CONTROL_LINE_STATE == r)
{
_usbLineInfo.lineState = setup.wValueL;
// auto-reset into the bootloader is triggered when the port, already
// open at 1200 bps, is closed. this is the signal to start the watchdog
// with a relatively long period so it can finish housekeeping tasks
// like servicing endpoints before the sketch ends
if (1200 == _usbLineInfo.dwDTERate) {
// We check DTR state to determine if host port is open (bit 0 of lineState).
if ((_usbLineInfo.lineState & 0x01) == 0) {
*(uint16_t *)0x0800 = 0x7777;
wdt_enable(WDTO_120MS);
} else {
// Most OSs do some intermediate steps when configuring ports and DTR can
// twiggle more than once before stabilizing.
// To avoid spurious resets we set the watchdog to 250ms and eventually
// cancel if DTR goes back high.
wdt_disable();
wdt_reset();
*(uint16_t *)0x0800 = 0x0;
}
}
return true;
}
}
return false;
}
int _serialPeek = -1;
void Serial_::begin(uint16_t baud_count)
{
}
void Serial_::end(void)
{
}
void Serial_::accept(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
int i = (unsigned int)(buffer->head+1) % SERIAL_BUFFER_SIZE;
// if we should be storing the received character into the location
// just before the tail (meaning that the head would advance to the
// current location of the tail), we're about to overflow the buffer
// and so we don't write the character or advance the head.
// while we have room to store a byte
while (i != buffer->tail) {
int c = USB_Recv(CDC_RX);
if (c == -1)
break; // no more data
buffer->buffer[buffer->head] = c;
buffer->head = i;
i = (unsigned int)(buffer->head+1) % SERIAL_BUFFER_SIZE;
}
}
int Serial_::available(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
return (unsigned int)(SERIAL_BUFFER_SIZE + buffer->head - buffer->tail) % SERIAL_BUFFER_SIZE;
}
int Serial_::peek(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
if (buffer->head == buffer->tail) {
return -1;
} else {
return buffer->buffer[buffer->tail];
}
}
int Serial_::read(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
// if the head isn't ahead of the tail, we don't have any characters
if (buffer->head == buffer->tail) {
return -1;
} else {
unsigned char c = buffer->buffer[buffer->tail];
buffer->tail = (unsigned int)(buffer->tail + 1) % SERIAL_BUFFER_SIZE;
return c;
}
}
void Serial_::flush(void)
{
USB_Flush(CDC_TX);
}
size_t Serial_::write(uint8_t c)
{
/* only try to send bytes if the high-level CDC connection itself
is open (not just the pipe) - the OS should set lineState when the port
is opened and clear lineState when the port is closed.
bytes sent before the user opens the connection or after
the connection is closed are lost - just like with a UART. */
// TODO - ZE - check behavior on different OSes and test what happens if an
// open connection isn't broken cleanly (cable is yanked out, host dies
// or locks up, or host virtual serial port hangs)
if (_usbLineInfo.lineState > 0) {
int r = USB_Send(CDC_TX,&c,1);
if (r > 0) {
return r;
} else {
setWriteError();
return 0;
}
}
setWriteError();
return 0;
}
// This operator is a convenient way for a sketch to check whether the
// port has actually been configured and opened by the host (as opposed
// to just being connected to the host). It can be used, for example, in
// setup() before printing to ensure that an application on the host is
// actually ready to receive and display the data.
// We add a short delay before returning to fix a bug observed by Federico
// where the port is configured (lineState != 0) but not quite opened.
Serial_::operator bool() {
bool result = false;
if (_usbLineInfo.lineState > 0)
result = true;
delay(10);
return result;
}
Serial_ Serial;
#endif
#endif /* if defined(USBCON) */

View File

@@ -1,26 +0,0 @@
#ifndef client_h
#define client_h
#include "Print.h"
#include "Stream.h"
#include "IPAddress.h"
class Client : public Stream {
public:
virtual int connect(IPAddress ip, uint16_t port) =0;
virtual int connect(const char *host, uint16_t port) =0;
virtual size_t write(uint8_t) =0;
virtual size_t write(const uint8_t *buf, size_t size) =0;
virtual int available() = 0;
virtual int read() = 0;
virtual int read(uint8_t *buf, size_t size) = 0;
virtual int peek() = 0;
virtual void flush() = 0;
virtual void stop() = 0;
virtual uint8_t connected() = 0;
virtual operator bool() = 0;
protected:
uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); };
};
#endif

View File

@@ -1,520 +0,0 @@
/* Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#include "Platform.h"
#include "USBAPI.h"
#include "USBDesc.h"
#if defined(USBCON)
#ifdef HID_ENABLED
//#define RAWHID_ENABLED
// Singletons for mouse and keyboard
Mouse_ Mouse;
Keyboard_ Keyboard;
//================================================================================
//================================================================================
// HID report descriptor
#define LSB(_x) ((_x) & 0xFF)
#define MSB(_x) ((_x) >> 8)
#define RAWHID_USAGE_PAGE 0xFFC0
#define RAWHID_USAGE 0x0C00
#define RAWHID_TX_SIZE 64
#define RAWHID_RX_SIZE 64
extern const u8 _hidReportDescriptor[] PROGMEM;
const u8 _hidReportDescriptor[] = {
// Mouse
0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 54
0x09, 0x02, // USAGE (Mouse)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
0x85, 0x01, // REPORT_ID (1)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x03, // USAGE_MAXIMUM (Button 3)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x03, // REPORT_COUNT (3)
0x75, 0x01, // REPORT_SIZE (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x38, // USAGE (Wheel)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x06, // INPUT (Data,Var,Rel)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
// Keyboard
0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 47
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x02, // REPORT_ID (2)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x65, // LOGICAL_MAXIMUM (101)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0, // END_COLLECTION
#if RAWHID_ENABLED
// RAW HID
0x06, LSB(RAWHID_USAGE_PAGE), MSB(RAWHID_USAGE_PAGE), // 30
0x0A, LSB(RAWHID_USAGE), MSB(RAWHID_USAGE),
0xA1, 0x01, // Collection 0x01
0x85, 0x03, // REPORT_ID (3)
0x75, 0x08, // report size = 8 bits
0x15, 0x00, // logical minimum = 0
0x26, 0xFF, 0x00, // logical maximum = 255
0x95, 64, // report count TX
0x09, 0x01, // usage
0x81, 0x02, // Input (array)
0x95, 64, // report count RX
0x09, 0x02, // usage
0x91, 0x02, // Output (array)
0xC0 // end collection
#endif
};
extern const HIDDescriptor _hidInterface PROGMEM;
const HIDDescriptor _hidInterface =
{
D_INTERFACE(HID_INTERFACE,1,3,0,0),
D_HIDREPORT(sizeof(_hidReportDescriptor)),
D_ENDPOINT(USB_ENDPOINT_IN (HID_ENDPOINT_INT),USB_ENDPOINT_TYPE_INTERRUPT,0x40,0x01)
};
//================================================================================
//================================================================================
// Driver
u8 _hid_protocol = 1;
u8 _hid_idle = 1;
#define WEAK __attribute__ ((weak))
int WEAK HID_GetInterface(u8* interfaceNum)
{
interfaceNum[0] += 1; // uses 1
return USB_SendControl(TRANSFER_PGM,&_hidInterface,sizeof(_hidInterface));
}
int WEAK HID_GetDescriptor(int i)
{
return USB_SendControl(TRANSFER_PGM,_hidReportDescriptor,sizeof(_hidReportDescriptor));
}
void WEAK HID_SendReport(u8 id, const void* data, int len)
{
USB_Send(HID_TX, &id, 1);
USB_Send(HID_TX | TRANSFER_RELEASE,data,len);
}
bool WEAK HID_Setup(Setup& setup)
{
u8 r = setup.bRequest;
u8 requestType = setup.bmRequestType;
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
{
if (HID_GET_REPORT == r)
{
//HID_GetReport();
return true;
}
if (HID_GET_PROTOCOL == r)
{
//Send8(_hid_protocol); // TODO
return true;
}
}
if (REQUEST_HOSTTODEVICE_CLASS_INTERFACE == requestType)
{
if (HID_SET_PROTOCOL == r)
{
_hid_protocol = setup.wValueL;
return true;
}
if (HID_SET_IDLE == r)
{
_hid_idle = setup.wValueL;
return true;
}
}
return false;
}
//================================================================================
//================================================================================
// Mouse
Mouse_::Mouse_(void) : _buttons(0)
{
}
void Mouse_::begin(void)
{
}
void Mouse_::end(void)
{
}
void Mouse_::click(uint8_t b)
{
_buttons = b;
move(0,0,0);
_buttons = 0;
move(0,0,0);
}
void Mouse_::move(signed char x, signed char y, signed char wheel)
{
u8 m[4];
m[0] = _buttons;
m[1] = x;
m[2] = y;
m[3] = wheel;
HID_SendReport(1,m,4);
}
void Mouse_::buttons(uint8_t b)
{
if (b != _buttons)
{
_buttons = b;
move(0,0,0);
}
}
void Mouse_::press(uint8_t b)
{
buttons(_buttons | b);
}
void Mouse_::release(uint8_t b)
{
buttons(_buttons & ~b);
}
bool Mouse_::isPressed(uint8_t b)
{
if ((b & _buttons) > 0)
return true;
return false;
}
//================================================================================
//================================================================================
// Keyboard
Keyboard_::Keyboard_(void)
{
}
void Keyboard_::begin(void)
{
}
void Keyboard_::end(void)
{
}
void Keyboard_::sendReport(KeyReport* keys)
{
HID_SendReport(2,keys,sizeof(KeyReport));
}
extern
const uint8_t _asciimap[128] PROGMEM;
#define SHIFT 0x80
const uint8_t _asciimap[128] =
{
0x00, // NUL
0x00, // SOH
0x00, // STX
0x00, // ETX
0x00, // EOT
0x00, // ENQ
0x00, // ACK
0x00, // BEL
0x2a, // BS Backspace
0x2b, // TAB Tab
0x28, // LF Enter
0x00, // VT
0x00, // FF
0x00, // CR
0x00, // SO
0x00, // SI
0x00, // DEL
0x00, // DC1
0x00, // DC2
0x00, // DC3
0x00, // DC4
0x00, // NAK
0x00, // SYN
0x00, // ETB
0x00, // CAN
0x00, // EM
0x00, // SUB
0x00, // ESC
0x00, // FS
0x00, // GS
0x00, // RS
0x00, // US
0x2c, // ' '
0x1e|SHIFT, // !
0x34|SHIFT, // "
0x20|SHIFT, // #
0x21|SHIFT, // $
0x22|SHIFT, // %
0x24|SHIFT, // &
0x34, // '
0x26|SHIFT, // (
0x27|SHIFT, // )
0x25|SHIFT, // *
0x2e|SHIFT, // +
0x36, // ,
0x2d, // -
0x37, // .
0x38, // /
0x27, // 0
0x1e, // 1
0x1f, // 2
0x20, // 3
0x21, // 4
0x22, // 5
0x23, // 6
0x24, // 7
0x25, // 8
0x26, // 9
0x33|SHIFT, // :
0x33, // ;
0x36|SHIFT, // <
0x2e, // =
0x37|SHIFT, // >
0x38|SHIFT, // ?
0x1f|SHIFT, // @
0x04|SHIFT, // A
0x05|SHIFT, // B
0x06|SHIFT, // C
0x07|SHIFT, // D
0x08|SHIFT, // E
0x09|SHIFT, // F
0x0a|SHIFT, // G
0x0b|SHIFT, // H
0x0c|SHIFT, // I
0x0d|SHIFT, // J
0x0e|SHIFT, // K
0x0f|SHIFT, // L
0x10|SHIFT, // M
0x11|SHIFT, // N
0x12|SHIFT, // O
0x13|SHIFT, // P
0x14|SHIFT, // Q
0x15|SHIFT, // R
0x16|SHIFT, // S
0x17|SHIFT, // T
0x18|SHIFT, // U
0x19|SHIFT, // V
0x1a|SHIFT, // W
0x1b|SHIFT, // X
0x1c|SHIFT, // Y
0x1d|SHIFT, // Z
0x2f, // [
0x31, // bslash
0x30, // ]
0x23|SHIFT, // ^
0x2d|SHIFT, // _
0x35, // `
0x04, // a
0x05, // b
0x06, // c
0x07, // d
0x08, // e
0x09, // f
0x0a, // g
0x0b, // h
0x0c, // i
0x0d, // j
0x0e, // k
0x0f, // l
0x10, // m
0x11, // n
0x12, // o
0x13, // p
0x14, // q
0x15, // r
0x16, // s
0x17, // t
0x18, // u
0x19, // v
0x1a, // w
0x1b, // x
0x1c, // y
0x1d, // z
0x2f|SHIFT, //
0x31|SHIFT, // |
0x30|SHIFT, // }
0x35|SHIFT, // ~
0 // DEL
};
uint8_t USBPutChar(uint8_t c);
// press() adds the specified key (printing, non-printing, or modifier)
// to the persistent key report and sends the report. Because of the way
// USB HID works, the host acts like the key remains pressed until we
// call release(), releaseAll(), or otherwise clear the report and resend.
size_t Keyboard_::press(uint8_t k)
{
uint8_t i;
if (k >= 136) { // it's a non-printing key (not a modifier)
k = k - 136;
} else if (k >= 128) { // it's a modifier key
_keyReport.modifiers |= (1<<(k-128));
k = 0;
} else { // it's a printing key
k = pgm_read_byte(_asciimap + k);
if (!k) {
setWriteError();
return 0;
}
if (k & 0x80) { // it's a capital letter or other character reached with shift
_keyReport.modifiers |= 0x02; // the left shift modifier
k &= 0x7F;
}
}
// Add k to the key report only if it's not already present
// and if there is an empty slot.
if (_keyReport.keys[0] != k && _keyReport.keys[1] != k &&
_keyReport.keys[2] != k && _keyReport.keys[3] != k &&
_keyReport.keys[4] != k && _keyReport.keys[5] != k) {
for (i=0; i<6; i++) {
if (_keyReport.keys[i] == 0x00) {
_keyReport.keys[i] = k;
break;
}
}
if (i == 6) {
setWriteError();
return 0;
}
}
sendReport(&_keyReport);
return 1;
}
// release() takes the specified key out of the persistent key report and
// sends the report. This tells the OS the key is no longer pressed and that
// it shouldn't be repeated any more.
size_t Keyboard_::release(uint8_t k)
{
uint8_t i;
if (k >= 136) { // it's a non-printing key (not a modifier)
k = k - 136;
} else if (k >= 128) { // it's a modifier key
_keyReport.modifiers &= ~(1<<(k-128));
k = 0;
} else { // it's a printing key
k = pgm_read_byte(_asciimap + k);
if (!k) {
return 0;
}
if (k & 0x80) { // it's a capital letter or other character reached with shift
_keyReport.modifiers &= ~(0x02); // the left shift modifier
k &= 0x7F;
}
}
// Test the key report to see if k is present. Clear it if it exists.
// Check all positions in case the key is present more than once (which it shouldn't be)
for (i=0; i<6; i++) {
if (0 != k && _keyReport.keys[i] == k) {
_keyReport.keys[i] = 0x00;
}
}
sendReport(&_keyReport);
return 1;
}
void Keyboard_::releaseAll(void)
{
_keyReport.keys[0] = 0;
_keyReport.keys[1] = 0;
_keyReport.keys[2] = 0;
_keyReport.keys[3] = 0;
_keyReport.keys[4] = 0;
_keyReport.keys[5] = 0;
_keyReport.modifiers = 0;
sendReport(&_keyReport);
}
size_t Keyboard_::write(uint8_t c)
{
uint8_t p = press(c); // Keydown
uint8_t r = release(c); // Keyup
return (p); // just return the result of press() since release() almost always returns 1
}
#endif
#endif /* if defined(USBCON) */

View File

@@ -1,519 +0,0 @@
/*
HardwareSerial.cpp - Hardware serial library for Wiring
Copyright (c) 2006 Nicholas Zambetti. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Modified 23 November 2006 by David A. Mellis
Modified 28 September 2010 by Mark Sproul
Modified 14 August 2012 by Alarus
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "Arduino.h"
#include "wiring_private.h"
// this next line disables the entire HardwareSerial.cpp,
// this is so I can support Attiny series and any other chip without a uart
#if defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H)
#include "HardwareSerial.h"
/*
* on ATmega8, the uart and its bits are not numbered, so there is no "TXC0"
* definition.
*/
#if !defined(TXC0)
#if defined(TXC)
#define TXC0 TXC
#elif defined(TXC1)
// Some devices have uart1 but no uart0
#define TXC0 TXC1
#else
#error TXC0 not definable in HardwareSerial.h
#endif
#endif
// Define constants and variables for buffering incoming serial data. We're
// using a ring buffer (I think), in which head is the index of the location
// to which to write the next incoming character and tail is the index of the
// location from which to read.
#if (RAMEND < 1000)
#define SERIAL_BUFFER_SIZE 16
#else
#define SERIAL_BUFFER_SIZE 64
#endif
struct ring_buffer
{
unsigned char buffer[SERIAL_BUFFER_SIZE];
volatile unsigned int head;
volatile unsigned int tail;
};
#if defined(USBCON)
ring_buffer rx_buffer = { { 0 }, 0, 0};
ring_buffer tx_buffer = { { 0 }, 0, 0};
#endif
#if defined(UBRRH) || defined(UBRR0H)
ring_buffer rx_buffer = { { 0 }, 0, 0 };
ring_buffer tx_buffer = { { 0 }, 0, 0 };
#endif
#if defined(UBRR1H)
ring_buffer rx_buffer1 = { { 0 }, 0, 0 };
ring_buffer tx_buffer1 = { { 0 }, 0, 0 };
#endif
#if defined(UBRR2H)
ring_buffer rx_buffer2 = { { 0 }, 0, 0 };
ring_buffer tx_buffer2 = { { 0 }, 0, 0 };
#endif
#if defined(UBRR3H)
ring_buffer rx_buffer3 = { { 0 }, 0, 0 };
ring_buffer tx_buffer3 = { { 0 }, 0, 0 };
#endif
inline void store_char(unsigned char c, ring_buffer *buffer)
{
int i = (unsigned int)(buffer->head + 1) % SERIAL_BUFFER_SIZE;
// if we should be storing the received character into the location
// just before the tail (meaning that the head would advance to the
// current location of the tail), we're about to overflow the buffer
// and so we don't write the character or advance the head.
if (i != buffer->tail) {
buffer->buffer[buffer->head] = c;
buffer->head = i;
}
}
#if !defined(USART0_RX_vect) && defined(USART1_RX_vect)
// do nothing - on the 32u4 the first USART is USART1
#else
#if !defined(USART_RX_vect) && !defined(SIG_USART0_RECV) && \
!defined(SIG_UART0_RECV) && !defined(USART0_RX_vect) && \
!defined(SIG_UART_RECV)
#error "Don't know what the Data Received vector is called for the first UART"
#else
void serialEvent() __attribute__((weak));
void serialEvent() {}
#define serialEvent_implemented
#if defined(USART_RX_vect)
SIGNAL(USART_RX_vect)
#elif defined(SIG_USART0_RECV)
SIGNAL(SIG_USART0_RECV)
#elif defined(SIG_UART0_RECV)
SIGNAL(SIG_UART0_RECV)
#elif defined(USART0_RX_vect)
SIGNAL(USART0_RX_vect)
#elif defined(SIG_UART_RECV)
SIGNAL(SIG_UART_RECV)
#endif
{
#if defined(UDR0)
if (bit_is_clear(UCSR0A, UPE0)) {
unsigned char c = UDR0;
store_char(c, &rx_buffer);
} else {
unsigned char c = UDR0;
};
#elif defined(UDR)
if (bit_is_clear(UCSRA, PE)) {
unsigned char c = UDR;
store_char(c, &rx_buffer);
} else {
unsigned char c = UDR;
};
#else
#error UDR not defined
#endif
}
#endif
#endif
#if defined(USART1_RX_vect)
void serialEvent1() __attribute__((weak));
void serialEvent1() {}
#define serialEvent1_implemented
SIGNAL(USART1_RX_vect)
{
if (bit_is_clear(UCSR1A, UPE1)) {
unsigned char c = UDR1;
store_char(c, &rx_buffer1);
} else {
unsigned char c = UDR1;
};
}
#elif defined(SIG_USART1_RECV)
#error SIG_USART1_RECV
#endif
#if defined(USART2_RX_vect) && defined(UDR2)
void serialEvent2() __attribute__((weak));
void serialEvent2() {}
#define serialEvent2_implemented
SIGNAL(USART2_RX_vect)
{
if (bit_is_clear(UCSR2A, UPE2)) {
unsigned char c = UDR2;
store_char(c, &rx_buffer2);
} else {
unsigned char c = UDR2;
};
}
#elif defined(SIG_USART2_RECV)
#error SIG_USART2_RECV
#endif
#if defined(USART3_RX_vect) && defined(UDR3)
void serialEvent3() __attribute__((weak));
void serialEvent3() {}
#define serialEvent3_implemented
SIGNAL(USART3_RX_vect)
{
if (bit_is_clear(UCSR3A, UPE3)) {
unsigned char c = UDR3;
store_char(c, &rx_buffer3);
} else {
unsigned char c = UDR3;
};
}
#elif defined(SIG_USART3_RECV)
#error SIG_USART3_RECV
#endif
void serialEventRun(void)
{
#ifdef serialEvent_implemented
if (Serial.available()) serialEvent();
#endif
#ifdef serialEvent1_implemented
if (Serial1.available()) serialEvent1();
#endif
#ifdef serialEvent2_implemented
if (Serial2.available()) serialEvent2();
#endif
#ifdef serialEvent3_implemented
if (Serial3.available()) serialEvent3();
#endif
}
#if !defined(USART0_UDRE_vect) && defined(USART1_UDRE_vect)
// do nothing - on the 32u4 the first USART is USART1
#else
#if !defined(UART0_UDRE_vect) && !defined(UART_UDRE_vect) && !defined(USART0_UDRE_vect) && !defined(USART_UDRE_vect)
#error "Don't know what the Data Register Empty vector is called for the first UART"
#else
#if defined(UART0_UDRE_vect)
ISR(UART0_UDRE_vect)
#elif defined(UART_UDRE_vect)
ISR(UART_UDRE_vect)
#elif defined(USART0_UDRE_vect)
ISR(USART0_UDRE_vect)
#elif defined(USART_UDRE_vect)
ISR(USART_UDRE_vect)
#endif
{
if (tx_buffer.head == tx_buffer.tail) {
// Buffer empty, so disable interrupts
#if defined(UCSR0B)
cbi(UCSR0B, UDRIE0);
#else
cbi(UCSRB, UDRIE);
#endif
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer.buffer[tx_buffer.tail];
tx_buffer.tail = (tx_buffer.tail + 1) % SERIAL_BUFFER_SIZE;
#if defined(UDR0)
UDR0 = c;
#elif defined(UDR)
UDR = c;
#else
#error UDR not defined
#endif
}
}
#endif
#endif
#ifdef USART1_UDRE_vect
ISR(USART1_UDRE_vect)
{
if (tx_buffer1.head == tx_buffer1.tail) {
// Buffer empty, so disable interrupts
cbi(UCSR1B, UDRIE1);
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer1.buffer[tx_buffer1.tail];
tx_buffer1.tail = (tx_buffer1.tail + 1) % SERIAL_BUFFER_SIZE;
UDR1 = c;
}
}
#endif
#ifdef USART2_UDRE_vect
ISR(USART2_UDRE_vect)
{
if (tx_buffer2.head == tx_buffer2.tail) {
// Buffer empty, so disable interrupts
cbi(UCSR2B, UDRIE2);
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer2.buffer[tx_buffer2.tail];
tx_buffer2.tail = (tx_buffer2.tail + 1) % SERIAL_BUFFER_SIZE;
UDR2 = c;
}
}
#endif
#ifdef USART3_UDRE_vect
ISR(USART3_UDRE_vect)
{
if (tx_buffer3.head == tx_buffer3.tail) {
// Buffer empty, so disable interrupts
cbi(UCSR3B, UDRIE3);
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer3.buffer[tx_buffer3.tail];
tx_buffer3.tail = (tx_buffer3.tail + 1) % SERIAL_BUFFER_SIZE;
UDR3 = c;
}
}
#endif
// Constructors ////////////////////////////////////////////////////////////////
HardwareSerial::HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
volatile uint8_t *ucsra, volatile uint8_t *ucsrb,
volatile uint8_t *ucsrc, volatile uint8_t *udr,
uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x)
{
_rx_buffer = rx_buffer;
_tx_buffer = tx_buffer;
_ubrrh = ubrrh;
_ubrrl = ubrrl;
_ucsra = ucsra;
_ucsrb = ucsrb;
_ucsrc = ucsrc;
_udr = udr;
_rxen = rxen;
_txen = txen;
_rxcie = rxcie;
_udrie = udrie;
_u2x = u2x;
}
// Public Methods //////////////////////////////////////////////////////////////
void HardwareSerial::begin(unsigned long baud)
{
uint16_t baud_setting;
bool use_u2x = true;
#if F_CPU == 16000000UL
// hardcoded exception for compatibility with the bootloader shipped
// with the Duemilanove and previous boards and the firmware on the 8U2
// on the Uno and Mega 2560.
if (baud == 57600) {
use_u2x = false;
}
#endif
try_again:
if (use_u2x) {
*_ucsra = 1 << _u2x;
baud_setting = (F_CPU / 4 / baud - 1) / 2;
} else {
*_ucsra = 0;
baud_setting = (F_CPU / 8 / baud - 1) / 2;
}
if ((baud_setting > 4095) && use_u2x)
{
use_u2x = false;
goto try_again;
}
// assign the baud_setting, a.k.a. ubbr (USART Baud Rate Register)
*_ubrrh = baud_setting >> 8;
*_ubrrl = baud_setting;
transmitting = false;
sbi(*_ucsrb, _rxen);
sbi(*_ucsrb, _txen);
sbi(*_ucsrb, _rxcie);
cbi(*_ucsrb, _udrie);
}
void HardwareSerial::begin(unsigned long baud, byte config)
{
uint16_t baud_setting;
uint8_t current_config;
bool use_u2x = true;
#if F_CPU == 16000000UL
// hardcoded exception for compatibility with the bootloader shipped
// with the Duemilanove and previous boards and the firmware on the 8U2
// on the Uno and Mega 2560.
if (baud == 57600) {
use_u2x = false;
}
#endif
try_again:
if (use_u2x) {
*_ucsra = 1 << _u2x;
baud_setting = (F_CPU / 4 / baud - 1) / 2;
} else {
*_ucsra = 0;
baud_setting = (F_CPU / 8 / baud - 1) / 2;
}
if ((baud_setting > 4095) && use_u2x)
{
use_u2x = false;
goto try_again;
}
// assign the baud_setting, a.k.a. ubbr (USART Baud Rate Register)
*_ubrrh = baud_setting >> 8;
*_ubrrl = baud_setting;
//set the data bits, parity, and stop bits
#if defined(__AVR_ATmega8__)
config |= 0x80; // select UCSRC register (shared with UBRRH)
#endif
*_ucsrc = config;
sbi(*_ucsrb, _rxen);
sbi(*_ucsrb, _txen);
sbi(*_ucsrb, _rxcie);
cbi(*_ucsrb, _udrie);
}
void HardwareSerial::end()
{
// wait for transmission of outgoing data
while (_tx_buffer->head != _tx_buffer->tail)
;
cbi(*_ucsrb, _rxen);
cbi(*_ucsrb, _txen);
cbi(*_ucsrb, _rxcie);
cbi(*_ucsrb, _udrie);
// clear any received data
_rx_buffer->head = _rx_buffer->tail;
}
int HardwareSerial::available(void)
{
return (unsigned int)(SERIAL_BUFFER_SIZE + _rx_buffer->head - _rx_buffer->tail) % SERIAL_BUFFER_SIZE;
}
int HardwareSerial::peek(void)
{
if (_rx_buffer->head == _rx_buffer->tail) {
return -1;
} else {
return _rx_buffer->buffer[_rx_buffer->tail];
}
}
int HardwareSerial::read(void)
{
// if the head isn't ahead of the tail, we don't have any characters
if (_rx_buffer->head == _rx_buffer->tail) {
return -1;
} else {
unsigned char c = _rx_buffer->buffer[_rx_buffer->tail];
_rx_buffer->tail = (unsigned int)(_rx_buffer->tail + 1) % SERIAL_BUFFER_SIZE;
return c;
}
}
void HardwareSerial::flush()
{
// UDR is kept full while the buffer is not empty, so TXC triggers when EMPTY && SENT
while (transmitting && ! (*_ucsra & _BV(TXC0)));
transmitting = false;
}
size_t HardwareSerial::write(uint8_t c)
{
int i = (_tx_buffer->head + 1) % SERIAL_BUFFER_SIZE;
// If the output buffer is full, there's nothing for it other than to
// wait for the interrupt handler to empty it a bit
// ???: return 0 here instead?
while (i == _tx_buffer->tail)
;
_tx_buffer->buffer[_tx_buffer->head] = c;
_tx_buffer->head = i;
sbi(*_ucsrb, _udrie);
// clear the TXC bit -- "can be cleared by writing a one to its bit location"
transmitting = true;
sbi(*_ucsra, TXC0);
return 1;
}
HardwareSerial::operator bool() {
return true;
}
// Preinstantiate Objects //////////////////////////////////////////////////////
#if defined(UBRRH) && defined(UBRRL)
HardwareSerial Serial(&rx_buffer, &tx_buffer, &UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR, RXEN, TXEN, RXCIE, UDRIE, U2X);
#elif defined(UBRR0H) && defined(UBRR0L)
HardwareSerial Serial(&rx_buffer, &tx_buffer, &UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0, RXEN0, TXEN0, RXCIE0, UDRIE0, U2X0);
#elif defined(USBCON)
// do nothing - Serial object and buffers are initialized in CDC code
#else
#error no serial port defined (port 0)
#endif
#if defined(UBRR1H)
HardwareSerial Serial1(&rx_buffer1, &tx_buffer1, &UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UCSR1C, &UDR1, RXEN1, TXEN1, RXCIE1, UDRIE1, U2X1);
#endif
#if defined(UBRR2H)
HardwareSerial Serial2(&rx_buffer2, &tx_buffer2, &UBRR2H, &UBRR2L, &UCSR2A, &UCSR2B, &UCSR2C, &UDR2, RXEN2, TXEN2, RXCIE2, UDRIE2, U2X2);
#endif
#if defined(UBRR3H)
HardwareSerial Serial3(&rx_buffer3, &tx_buffer3, &UBRR3H, &UBRR3L, &UCSR3A, &UCSR3B, &UCSR3C, &UDR3, RXEN3, TXEN3, RXCIE3, UDRIE3, U2X3);
#endif
#endif // whole file

View File

@@ -1,115 +0,0 @@
/*
HardwareSerial.h - Hardware serial library for Wiring
Copyright (c) 2006 Nicholas Zambetti. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Modified 28 September 2010 by Mark Sproul
Modified 14 August 2012 by Alarus
*/
#ifndef HardwareSerial_h
#define HardwareSerial_h
#include <inttypes.h>
#include "Stream.h"
struct ring_buffer;
class HardwareSerial : public Stream
{
private:
ring_buffer *_rx_buffer;
ring_buffer *_tx_buffer;
volatile uint8_t *_ubrrh;
volatile uint8_t *_ubrrl;
volatile uint8_t *_ucsra;
volatile uint8_t *_ucsrb;
volatile uint8_t *_ucsrc;
volatile uint8_t *_udr;
uint8_t _rxen;
uint8_t _txen;
uint8_t _rxcie;
uint8_t _udrie;
uint8_t _u2x;
bool transmitting;
public:
HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
volatile uint8_t *ucsra, volatile uint8_t *ucsrb,
volatile uint8_t *ucsrc, volatile uint8_t *udr,
uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x);
void begin(unsigned long);
void begin(unsigned long, uint8_t);
void end();
virtual int available(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
inline size_t write(unsigned long n) { return write((uint8_t)n); }
inline size_t write(long n) { return write((uint8_t)n); }
inline size_t write(unsigned int n) { return write((uint8_t)n); }
inline size_t write(int n) { return write((uint8_t)n); }
using Print::write; // pull in write(str) and write(buf, size) from Print
operator bool();
};
// Define config for Serial.begin(baud, config);
#define SERIAL_5N1 0x00
#define SERIAL_6N1 0x02
#define SERIAL_7N1 0x04
#define SERIAL_8N1 0x06
#define SERIAL_5N2 0x08
#define SERIAL_6N2 0x0A
#define SERIAL_7N2 0x0C
#define SERIAL_8N2 0x0E
#define SERIAL_5E1 0x20
#define SERIAL_6E1 0x22
#define SERIAL_7E1 0x24
#define SERIAL_8E1 0x26
#define SERIAL_5E2 0x28
#define SERIAL_6E2 0x2A
#define SERIAL_7E2 0x2C
#define SERIAL_8E2 0x2E
#define SERIAL_5O1 0x30
#define SERIAL_6O1 0x32
#define SERIAL_7O1 0x34
#define SERIAL_8O1 0x36
#define SERIAL_5O2 0x38
#define SERIAL_6O2 0x3A
#define SERIAL_7O2 0x3C
#define SERIAL_8O2 0x3E
#if defined(UBRRH) || defined(UBRR0H)
extern HardwareSerial Serial;
#elif defined(USBCON)
#include "USBAPI.h"
// extern HardwareSerial Serial_;
#endif
#if defined(UBRR1H)
extern HardwareSerial Serial1;
#endif
#if defined(UBRR2H)
extern HardwareSerial Serial2;
#endif
#if defined(UBRR3H)
extern HardwareSerial Serial3;
#endif
extern void serialEventRun(void) __attribute__((weak));
#endif

View File

@@ -1,56 +0,0 @@
#include <Arduino.h>
#include <IPAddress.h>
IPAddress::IPAddress()
{
memset(_address, 0, sizeof(_address));
}
IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet)
{
_address[0] = first_octet;
_address[1] = second_octet;
_address[2] = third_octet;
_address[3] = fourth_octet;
}
IPAddress::IPAddress(uint32_t address)
{
memcpy(_address, &address, sizeof(_address));
}
IPAddress::IPAddress(const uint8_t *address)
{
memcpy(_address, address, sizeof(_address));
}
IPAddress& IPAddress::operator=(const uint8_t *address)
{
memcpy(_address, address, sizeof(_address));
return *this;
}
IPAddress& IPAddress::operator=(uint32_t address)
{
memcpy(_address, (const uint8_t *)&address, sizeof(_address));
return *this;
}
bool IPAddress::operator==(const uint8_t* addr)
{
return memcmp(addr, _address, sizeof(_address)) == 0;
}
size_t IPAddress::printTo(Print& p) const
{
size_t n = 0;
for (int i =0; i < 3; i++)
{
n += p.print(_address[i], DEC);
n += p.print('.');
}
n += p.print(_address[3], DEC);
return n;
}

View File

@@ -1,76 +0,0 @@
/*
*
* MIT License:
* Copyright (c) 2011 Adrian McEwen
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* adrianm@mcqn.com 1/1/2011
*/
#ifndef IPAddress_h
#define IPAddress_h
#include <Printable.h>
// A class to make it easier to handle and pass around IP addresses
class IPAddress : public Printable {
private:
uint8_t _address[4]; // IPv4 address
// Access the raw byte array containing the address. Because this returns a pointer
// to the internal structure rather than a copy of the address this function should only
// be used when you know that the usage of the returned uint8_t* will be transient and not
// stored.
uint8_t* raw_address() { return _address; };
public:
// Constructors
IPAddress();
IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet);
IPAddress(uint32_t address);
IPAddress(const uint8_t *address);
// Overloaded cast operator to allow IPAddress objects to be used where a pointer
// to a four-byte uint8_t array is expected
operator uint32_t() { return *((uint32_t*)_address); };
bool operator==(const IPAddress& addr) { return (*((uint32_t*)_address)) == (*((uint32_t*)addr._address)); };
bool operator==(const uint8_t* addr);
// Overloaded index operator to allow getting and setting individual octets of the address
uint8_t operator[](int index) const { return _address[index]; };
uint8_t& operator[](int index) { return _address[index]; };
// Overloaded copy operators to allow initialisation of IPAddress objects from other types
IPAddress& operator=(const uint8_t *address);
IPAddress& operator=(uint32_t address);
virtual size_t printTo(Print& p) const;
friend class EthernetClass;
friend class UDP;
friend class Client;
friend class Server;
friend class DhcpClass;
friend class DNSClient;
};
const IPAddress INADDR_NONE(0,0,0,0);
#endif

View File

@@ -1,23 +0,0 @@
#ifndef __PLATFORM_H__
#define __PLATFORM_H__
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <util/delay.h>
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
#include "Arduino.h"
#if defined(USBCON)
#include "USBDesc.h"
#include "USBCore.h"
#include "USBAPI.h"
#endif /* if defined(USBCON) */
#endif

View File

@@ -1,268 +0,0 @@
/*
Print.cpp - Base class that provides print() and println()
Copyright (c) 2008 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Modified 23 November 2006 by David A. Mellis
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "Arduino.h"
#include "Print.h"
// Public Methods //////////////////////////////////////////////////////////////
/* default implementation: may be overridden */
size_t Print::write(const uint8_t *buffer, size_t size)
{
size_t n = 0;
while (size--) {
n += write(*buffer++);
}
return n;
}
size_t Print::print(const __FlashStringHelper *ifsh)
{
const char PROGMEM *p = (const char PROGMEM *)ifsh;
size_t n = 0;
while (1) {
unsigned char c = pgm_read_byte(p++);
if (c == 0) break;
n += write(c);
}
return n;
}
size_t Print::print(const String &s)
{
size_t n = 0;
for (uint16_t i = 0; i < s.length(); i++) {
n += write(s[i]);
}
return n;
}
size_t Print::print(const char str[])
{
return write(str);
}
size_t Print::print(char c)
{
return write(c);
}
size_t Print::print(unsigned char b, int base)
{
return print((unsigned long) b, base);
}
size_t Print::print(int n, int base)
{
return print((long) n, base);
}
size_t Print::print(unsigned int n, int base)
{
return print((unsigned long) n, base);
}
size_t Print::print(long n, int base)
{
if (base == 0) {
return write(n);
} else if (base == 10) {
if (n < 0) {
int t = print('-');
n = -n;
return printNumber(n, 10) + t;
}
return printNumber(n, 10);
} else {
return printNumber(n, base);
}
}
size_t Print::print(unsigned long n, int base)
{
if (base == 0) return write(n);
else return printNumber(n, base);
}
size_t Print::print(double n, int digits)
{
return printFloat(n, digits);
}
size_t Print::println(const __FlashStringHelper *ifsh)
{
size_t n = print(ifsh);
n += println();
return n;
}
size_t Print::print(const Printable& x)
{
return x.printTo(*this);
}
size_t Print::println(void)
{
size_t n = print('\r');
n += print('\n');
return n;
}
size_t Print::println(const String &s)
{
size_t n = print(s);
n += println();
return n;
}
size_t Print::println(const char c[])
{
size_t n = print(c);
n += println();
return n;
}
size_t Print::println(char c)
{
size_t n = print(c);
n += println();
return n;
}
size_t Print::println(unsigned char b, int base)
{
size_t n = print(b, base);
n += println();
return n;
}
size_t Print::println(int num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(unsigned int num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(long num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(unsigned long num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(double num, int digits)
{
size_t n = print(num, digits);
n += println();
return n;
}
size_t Print::println(const Printable& x)
{
size_t n = print(x);
n += println();
return n;
}
// Private Methods /////////////////////////////////////////////////////////////
size_t Print::printNumber(unsigned long n, uint8_t base) {
char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
char *str = &buf[sizeof(buf) - 1];
*str = '\0';
// prevent crash if called with base == 1
if (base < 2) base = 10;
do {
unsigned long m = n;
n /= base;
char c = m - base * n;
*--str = c < 10 ? c + '0' : c + 'A' - 10;
} while(n);
return write(str);
}
size_t Print::printFloat(double number, uint8_t digits)
{
size_t n = 0;
if (isnan(number)) return print("nan");
if (isinf(number)) return print("inf");
if (number > 4294967040.0) return print ("ovf"); // constant determined empirically
if (number <-4294967040.0) return print ("ovf"); // constant determined empirically
// Handle negative numbers
if (number < 0.0)
{
n += print('-');
number = -number;
}
// Round correctly so that print(1.999, 2) prints as "2.00"
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;
number += rounding;
// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
n += print(int_part);
// Print the decimal point, but only if there are digits beyond
if (digits > 0) {
n += print(".");
}
// Extract digits from the remainder one at a time
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
n += print(toPrint);
remainder -= toPrint;
}
return n;
}

View File

@@ -1,81 +0,0 @@
/*
Print.h - Base class that provides print() and println()
Copyright (c) 2008 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef Print_h
#define Print_h
#include <inttypes.h>
#include <stdio.h> // for size_t
#include "WString.h"
#include "Printable.h"
#define DEC 10
#define HEX 16
#define OCT 8
#define BIN 2
class Print
{
private:
int write_error;
size_t printNumber(unsigned long, uint8_t);
size_t printFloat(double, uint8_t);
protected:
void setWriteError(int err = 1) { write_error = err; }
public:
Print() : write_error(0) {}
int getWriteError() { return write_error; }
void clearWriteError() { setWriteError(0); }
virtual size_t write(uint8_t) = 0;
size_t write(const char *str) {
if (str == NULL) return 0;
return write((const uint8_t *)str, strlen(str));
}
virtual size_t write(const uint8_t *buffer, size_t size);
size_t print(const __FlashStringHelper *);
size_t print(const String &);
size_t print(const char[]);
size_t print(char);
size_t print(unsigned char, int = DEC);
size_t print(int, int = DEC);
size_t print(unsigned int, int = DEC);
size_t print(long, int = DEC);
size_t print(unsigned long, int = DEC);
size_t print(double, int = 2);
size_t print(const Printable&);
size_t println(const __FlashStringHelper *);
size_t println(const String &s);
size_t println(const char[]);
size_t println(char);
size_t println(unsigned char, int = DEC);
size_t println(int, int = DEC);
size_t println(unsigned int, int = DEC);
size_t println(long, int = DEC);
size_t println(unsigned long, int = DEC);
size_t println(double, int = 2);
size_t println(const Printable&);
size_t println(void);
};
#endif

View File

@@ -1,40 +0,0 @@
/*
Printable.h - Interface class that allows printing of complex types
Copyright (c) 2011 Adrian McEwen. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef Printable_h
#define Printable_h
#include <new.h>
class Print;
/** The Printable class provides a way for new classes to allow themselves to be printed.
By deriving from Printable and implementing the printTo method, it will then be possible
for users to print out instances of this class by passing them into the usual
Print::print and Print::println methods.
*/
class Printable
{
public:
virtual size_t printTo(Print& p) const = 0;
};
#endif

View File

@@ -1,9 +0,0 @@
#ifndef server_h
#define server_h
class Server : public Print {
public:
virtual void begin() =0;
};
#endif

View File

@@ -1,270 +0,0 @@
/*
Stream.cpp - adds parsing methods to Stream class
Copyright (c) 2008 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Created July 2011
parsing functions based on TextFinder library by Michael Margolis
*/
#include "Arduino.h"
#include "Stream.h"
#define PARSE_TIMEOUT 1000 // default number of milli-seconds to wait
#define NO_SKIP_CHAR 1 // a magic char not found in a valid ASCII numeric field
// private method to read stream with timeout
int Stream::timedRead()
{
int c;
_startMillis = millis();
do {
c = read();
if (c >= 0) return c;
} while(millis() - _startMillis < _timeout);
return -1; // -1 indicates timeout
}
// private method to peek stream with timeout
int Stream::timedPeek()
{
int c;
_startMillis = millis();
do {
c = peek();
if (c >= 0) return c;
} while(millis() - _startMillis < _timeout);
return -1; // -1 indicates timeout
}
// returns peek of the next digit in the stream or -1 if timeout
// discards non-numeric characters
int Stream::peekNextDigit()
{
int c;
while (1) {
c = timedPeek();
if (c < 0) return c; // timeout
if (c == '-') return c;
if (c >= '0' && c <= '9') return c;
read(); // discard non-numeric
}
}
// Public Methods
//////////////////////////////////////////////////////////////
void Stream::setTimeout(unsigned long timeout) // sets the maximum number of milliseconds to wait
{
_timeout = timeout;
}
// find returns true if the target string is found
bool Stream::find(char *target)
{
return findUntil(target, NULL);
}
// reads data from the stream until the target string of given length is found
// returns true if target string is found, false if timed out
bool Stream::find(char *target, size_t length)
{
return findUntil(target, length, NULL, 0);
}
// as find but search ends if the terminator string is found
bool Stream::findUntil(char *target, char *terminator)
{
return findUntil(target, strlen(target), terminator, strlen(terminator));
}
// reads data from the stream until the target string of the given length is found
// search terminated if the terminator string is found
// returns true if target string is found, false if terminated or timed out
bool Stream::findUntil(char *target, size_t targetLen, char *terminator, size_t termLen)
{
size_t index = 0; // maximum target string length is 64k bytes!
size_t termIndex = 0;
int c;
if( *target == 0)
return true; // return true if target is a null string
while( (c = timedRead()) > 0){
if(c != target[index])
index = 0; // reset index if any char does not match
if( c == target[index]){
//////Serial.print("found "); Serial.write(c); Serial.print("index now"); Serial.println(index+1);
if(++index >= targetLen){ // return true if all chars in the target match
return true;
}
}
if(termLen > 0 && c == terminator[termIndex]){
if(++termIndex >= termLen)
return false; // return false if terminate string found before target string
}
else
termIndex = 0;
}
return false;
}
// returns the first valid (long) integer value from the current position.
// initial characters that are not digits (or the minus sign) are skipped
// function is terminated by the first character that is not a digit.
long Stream::parseInt()
{
return parseInt(NO_SKIP_CHAR); // terminate on first non-digit character (or timeout)
}
// as above but a given skipChar is ignored
// this allows format characters (typically commas) in values to be ignored
long Stream::parseInt(char skipChar)
{
boolean isNegative = false;
long value = 0;
int c;
c = peekNextDigit();
// ignore non numeric leading characters
if(c < 0)
return 0; // zero returned if timeout
do{
if(c == skipChar)
; // ignore this charactor
else if(c == '-')
isNegative = true;
else if(c >= '0' && c <= '9') // is c a digit?
value = value * 10 + c - '0';
read(); // consume the character we got with peek
c = timedPeek();
}
while( (c >= '0' && c <= '9') || c == skipChar );
if(isNegative)
value = -value;
return value;
}
// as parseInt but returns a floating point value
float Stream::parseFloat()
{
return parseFloat(NO_SKIP_CHAR);
}
// as above but the given skipChar is ignored
// this allows format characters (typically commas) in values to be ignored
float Stream::parseFloat(char skipChar){
boolean isNegative = false;
boolean isFraction = false;
long value = 0;
char c;
float fraction = 1.0;
c = peekNextDigit();
// ignore non numeric leading characters
if(c < 0)
return 0; // zero returned if timeout
do{
if(c == skipChar)
; // ignore
else if(c == '-')
isNegative = true;
else if (c == '.')
isFraction = true;
else if(c >= '0' && c <= '9') { // is c a digit?
value = value * 10 + c - '0';
if(isFraction)
fraction *= 0.1;
}
read(); // consume the character we got with peek
c = timedPeek();
}
while( (c >= '0' && c <= '9') || c == '.' || c == skipChar );
if(isNegative)
value = -value;
if(isFraction)
return value * fraction;
else
return value;
}
// read characters from stream into buffer
// terminates if length characters have been read, or timeout (see setTimeout)
// returns the number of characters placed in the buffer
// the buffer is NOT null terminated.
//
size_t Stream::readBytes(char *buffer, size_t length)
{
size_t count = 0;
while (count < length) {
int c = timedRead();
if (c < 0) break;
*buffer++ = (char)c;
count++;
}
return count;
}
// as readBytes with terminator character
// terminates if length characters have been read, timeout, or if the terminator character detected
// returns the number of characters placed in the buffer (0 means no valid data found)
size_t Stream::readBytesUntil(char terminator, char *buffer, size_t length)
{
if (length < 1) return 0;
size_t index = 0;
while (index < length) {
int c = timedRead();
if (c < 0 || c == terminator) break;
*buffer++ = (char)c;
index++;
}
return index; // return number of characters, not including null terminator
}
String Stream::readString()
{
String ret;
int c = timedRead();
while (c >= 0)
{
ret += (char)c;
c = timedRead();
}
return ret;
}
String Stream::readStringUntil(char terminator)
{
String ret;
int c = timedRead();
while (c >= 0 && c != terminator)
{
ret += (char)c;
c = timedRead();
}
return ret;
}

View File

@@ -1,96 +0,0 @@
/*
Stream.h - base class for character-based streams.
Copyright (c) 2010 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
parsing functions based on TextFinder library by Michael Margolis
*/
#ifndef Stream_h
#define Stream_h
#include <inttypes.h>
#include "Print.h"
// compatability macros for testing
/*
#define getInt() parseInt()
#define getInt(skipChar) parseInt(skipchar)
#define getFloat() parseFloat()
#define getFloat(skipChar) parseFloat(skipChar)
#define getString( pre_string, post_string, buffer, length)
readBytesBetween( pre_string, terminator, buffer, length)
*/
class Stream : public Print
{
private:
unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read
unsigned long _startMillis; // used for timeout measurement
int timedRead(); // private method to read stream with timeout
int timedPeek(); // private method to peek stream with timeout
int peekNextDigit(); // returns the next numeric digit in the stream or -1 if timeout
public:
virtual int available() = 0;
virtual int read() = 0;
virtual int peek() = 0;
virtual void flush() = 0;
Stream() {_timeout=1000;}
// parsing methods
void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second
bool find(char *target); // reads data from the stream until the target string is found
// returns true if target string is found, false if timed out (see setTimeout)
bool find(char *target, size_t length); // reads data from the stream until the target string of given length is found
// returns true if target string is found, false if timed out
bool findUntil(char *target, char *terminator); // as find but search ends if the terminator string is found
bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen); // as above but search ends if the terminate string is found
long parseInt(); // returns the first valid (long) integer value from the current position.
// initial characters that are not digits (or the minus sign) are skipped
// integer is terminated by the first character that is not a digit.
float parseFloat(); // float version of parseInt
size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer
// terminates if length characters have been read or timeout (see setTimeout)
// returns the number of characters placed in the buffer (0 means no valid data found)
size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character
// terminates if length characters have been read, timeout, or if the terminator character detected
// returns the number of characters placed in the buffer (0 means no valid data found)
// Arduino String functions to be added here
String readString();
String readStringUntil(char terminator);
protected:
long parseInt(char skipChar); // as above but the given skipChar is ignored
// as above but the given skipChar is ignored
// this allows format characters (typically commas) in values to be ignored
float parseFloat(char skipChar); // as above but the given skipChar is ignored
};
#endif

View File

@@ -1,616 +0,0 @@
/* Tone.cpp
A Tone Generator Library
Written by Brett Hagman
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Version Modified By Date Comments
------- ----------- -------- --------
0001 B Hagman 09/08/02 Initial coding
0002 B Hagman 09/08/18 Multiple pins
0003 B Hagman 09/08/18 Moved initialization from constructor to begin()
0004 B Hagman 09/09/26 Fixed problems with ATmega8
0005 B Hagman 09/11/23 Scanned prescalars for best fit on 8 bit timers
09/11/25 Changed pin toggle method to XOR
09/11/25 Fixed timer0 from being excluded
0006 D Mellis 09/12/29 Replaced objects with functions
0007 M Sproul 10/08/29 Changed #ifdefs from cpu to register
0008 S Kanemoto 12/06/22 Fixed for Leonardo by @maris_HY
*************************************************/
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "Arduino.h"
#include "pins_arduino.h"
#if defined(__AVR_ATmega8__) || defined(__AVR_ATmega128__)
#define TCCR2A TCCR2
#define TCCR2B TCCR2
#define COM2A1 COM21
#define COM2A0 COM20
#define OCR2A OCR2
#define TIMSK2 TIMSK
#define OCIE2A OCIE2
#define TIMER2_COMPA_vect TIMER2_COMP_vect
#define TIMSK1 TIMSK
#endif
// timerx_toggle_count:
// > 0 - duration specified
// = 0 - stopped
// < 0 - infinitely (until stop() method called, or new play() called)
#if !defined(__AVR_ATmega8__)
volatile long timer0_toggle_count;
volatile uint8_t *timer0_pin_port;
volatile uint8_t timer0_pin_mask;
#endif
volatile long timer1_toggle_count;
volatile uint8_t *timer1_pin_port;
volatile uint8_t timer1_pin_mask;
volatile long timer2_toggle_count;
volatile uint8_t *timer2_pin_port;
volatile uint8_t timer2_pin_mask;
#if defined(TIMSK3)
volatile long timer3_toggle_count;
volatile uint8_t *timer3_pin_port;
volatile uint8_t timer3_pin_mask;
#endif
#if defined(TIMSK4)
volatile long timer4_toggle_count;
volatile uint8_t *timer4_pin_port;
volatile uint8_t timer4_pin_mask;
#endif
#if defined(TIMSK5)
volatile long timer5_toggle_count;
volatile uint8_t *timer5_pin_port;
volatile uint8_t timer5_pin_mask;
#endif
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 3, 4, 5, 1, 0 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255, 255, 255, 255 */ };
#elif defined(__AVR_ATmega8__)
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ };
#elif defined(__AVR_ATmega32U4__)
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER3
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 3 /*, 1 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ };
#else
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
// Leave timer 0 to last.
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1, 0 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255 */ };
#endif
static int8_t toneBegin(uint8_t _pin)
{
int8_t _timer = -1;
// if we're already using the pin, the timer should be configured.
for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
if (tone_pins[i] == _pin) {
return pgm_read_byte(tone_pin_to_timer_PGM + i);
}
}
// search for an unused timer.
for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
if (tone_pins[i] == 255) {
tone_pins[i] = _pin;
_timer = pgm_read_byte(tone_pin_to_timer_PGM + i);
break;
}
}
if (_timer != -1)
{
// Set timer specific stuff
// All timers in CTC mode
// 8 bit timers will require changing prescalar values,
// whereas 16 bit timers are set to either ck/1 or ck/64 prescalar
switch (_timer)
{
#if defined(TCCR0A) && defined(TCCR0B)
case 0:
// 8 bit timer
TCCR0A = 0;
TCCR0B = 0;
bitWrite(TCCR0A, WGM01, 1);
bitWrite(TCCR0B, CS00, 1);
timer0_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer0_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR1A) && defined(TCCR1B) && defined(WGM12)
case 1:
// 16 bit timer
TCCR1A = 0;
TCCR1B = 0;
bitWrite(TCCR1B, WGM12, 1);
bitWrite(TCCR1B, CS10, 1);
timer1_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer1_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR2A) && defined(TCCR2B)
case 2:
// 8 bit timer
TCCR2A = 0;
TCCR2B = 0;
bitWrite(TCCR2A, WGM21, 1);
bitWrite(TCCR2B, CS20, 1);
timer2_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer2_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR3A) && defined(TCCR3B) && defined(TIMSK3)
case 3:
// 16 bit timer
TCCR3A = 0;
TCCR3B = 0;
bitWrite(TCCR3B, WGM32, 1);
bitWrite(TCCR3B, CS30, 1);
timer3_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer3_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR4A) && defined(TCCR4B) && defined(TIMSK4)
case 4:
// 16 bit timer
TCCR4A = 0;
TCCR4B = 0;
#if defined(WGM42)
bitWrite(TCCR4B, WGM42, 1);
#elif defined(CS43)
#warning this may not be correct
// atmega32u4
bitWrite(TCCR4B, CS43, 1);
#endif
bitWrite(TCCR4B, CS40, 1);
timer4_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer4_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR5A) && defined(TCCR5B) && defined(TIMSK5)
case 5:
// 16 bit timer
TCCR5A = 0;
TCCR5B = 0;
bitWrite(TCCR5B, WGM52, 1);
bitWrite(TCCR5B, CS50, 1);
timer5_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer5_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
}
}
return _timer;
}
// frequency (in hertz) and duration (in milliseconds).
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration)
{
uint8_t prescalarbits = 0b001;
long toggle_count = 0;
uint32_t ocr = 0;
int8_t _timer;
_timer = toneBegin(_pin);
if (_timer >= 0)
{
// Set the pinMode as OUTPUT
pinMode(_pin, OUTPUT);
// if we are using an 8 bit timer, scan through prescalars to find the best fit
if (_timer == 0 || _timer == 2)
{
ocr = F_CPU / frequency / 2 - 1;
prescalarbits = 0b001; // ck/1: same for both timers
if (ocr > 255)
{
ocr = F_CPU / frequency / 2 / 8 - 1;
prescalarbits = 0b010; // ck/8: same for both timers
if (_timer == 2 && ocr > 255)
{
ocr = F_CPU / frequency / 2 / 32 - 1;
prescalarbits = 0b011;
}
if (ocr > 255)
{
ocr = F_CPU / frequency / 2 / 64 - 1;
prescalarbits = _timer == 0 ? 0b011 : 0b100;
if (_timer == 2 && ocr > 255)
{
ocr = F_CPU / frequency / 2 / 128 - 1;
prescalarbits = 0b101;
}
if (ocr > 255)
{
ocr = F_CPU / frequency / 2 / 256 - 1;
prescalarbits = _timer == 0 ? 0b100 : 0b110;
if (ocr > 255)
{
// can't do any better than /1024
ocr = F_CPU / frequency / 2 / 1024 - 1;
prescalarbits = _timer == 0 ? 0b101 : 0b111;
}
}
}
}
#if defined(TCCR0B)
if (_timer == 0)
{
TCCR0B = prescalarbits;
}
else
#endif
#if defined(TCCR2B)
{
TCCR2B = prescalarbits;
}
#else
{
// dummy place holder to make the above ifdefs work
}
#endif
}
else
{
// two choices for the 16 bit timers: ck/1 or ck/64
ocr = F_CPU / frequency / 2 - 1;
prescalarbits = 0b001;
if (ocr > 0xffff)
{
ocr = F_CPU / frequency / 2 / 64 - 1;
prescalarbits = 0b011;
}
if (_timer == 1)
{
#if defined(TCCR1B)
TCCR1B = (TCCR1B & 0b11111000) | prescalarbits;
#endif
}
#if defined(TCCR3B)
else if (_timer == 3)
TCCR3B = (TCCR3B & 0b11111000) | prescalarbits;
#endif
#if defined(TCCR4B)
else if (_timer == 4)
TCCR4B = (TCCR4B & 0b11111000) | prescalarbits;
#endif
#if defined(TCCR5B)
else if (_timer == 5)
TCCR5B = (TCCR5B & 0b11111000) | prescalarbits;
#endif
}
// Calculate the toggle count
if (duration > 0)
{
toggle_count = 2 * frequency * duration / 1000;
}
else
{
toggle_count = -1;
}
// Set the OCR for the given timer,
// set the toggle count,
// then turn on the interrupts
switch (_timer)
{
#if defined(OCR0A) && defined(TIMSK0) && defined(OCIE0A)
case 0:
OCR0A = ocr;
timer0_toggle_count = toggle_count;
bitWrite(TIMSK0, OCIE0A, 1);
break;
#endif
case 1:
#if defined(OCR1A) && defined(TIMSK1) && defined(OCIE1A)
OCR1A = ocr;
timer1_toggle_count = toggle_count;
bitWrite(TIMSK1, OCIE1A, 1);
#elif defined(OCR1A) && defined(TIMSK) && defined(OCIE1A)
// this combination is for at least the ATmega32
OCR1A = ocr;
timer1_toggle_count = toggle_count;
bitWrite(TIMSK, OCIE1A, 1);
#endif
break;
#if defined(OCR2A) && defined(TIMSK2) && defined(OCIE2A)
case 2:
OCR2A = ocr;
timer2_toggle_count = toggle_count;
bitWrite(TIMSK2, OCIE2A, 1);
break;
#endif
#if defined(TIMSK3)
case 3:
OCR3A = ocr;
timer3_toggle_count = toggle_count;
bitWrite(TIMSK3, OCIE3A, 1);
break;
#endif
#if defined(TIMSK4)
case 4:
OCR4A = ocr;
timer4_toggle_count = toggle_count;
bitWrite(TIMSK4, OCIE4A, 1);
break;
#endif
#if defined(OCR5A) && defined(TIMSK5) && defined(OCIE5A)
case 5:
OCR5A = ocr;
timer5_toggle_count = toggle_count;
bitWrite(TIMSK5, OCIE5A, 1);
break;
#endif
}
}
}
// XXX: this function only works properly for timer 2 (the only one we use
// currently). for the others, it should end the tone, but won't restore
// proper PWM functionality for the timer.
void disableTimer(uint8_t _timer)
{
switch (_timer)
{
case 0:
#if defined(TIMSK0)
TIMSK0 = 0;
#elif defined(TIMSK)
TIMSK = 0; // atmega32
#endif
break;
#if defined(TIMSK1) && defined(OCIE1A)
case 1:
bitWrite(TIMSK1, OCIE1A, 0);
break;
#endif
case 2:
#if defined(TIMSK2) && defined(OCIE2A)
bitWrite(TIMSK2, OCIE2A, 0); // disable interrupt
#endif
#if defined(TCCR2A) && defined(WGM20)
TCCR2A = (1 << WGM20);
#endif
#if defined(TCCR2B) && defined(CS22)
TCCR2B = (TCCR2B & 0b11111000) | (1 << CS22);
#endif
#if defined(OCR2A)
OCR2A = 0;
#endif
break;
#if defined(TIMSK3)
case 3:
TIMSK3 = 0;
break;
#endif
#if defined(TIMSK4)
case 4:
TIMSK4 = 0;
break;
#endif
#if defined(TIMSK5)
case 5:
TIMSK5 = 0;
break;
#endif
}
}
void noTone(uint8_t _pin)
{
int8_t _timer = -1;
for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
if (tone_pins[i] == _pin) {
_timer = pgm_read_byte(tone_pin_to_timer_PGM + i);
tone_pins[i] = 255;
}
}
disableTimer(_timer);
digitalWrite(_pin, 0);
}
#ifdef USE_TIMER0
ISR(TIMER0_COMPA_vect)
{
if (timer0_toggle_count != 0)
{
// toggle the pin
*timer0_pin_port ^= timer0_pin_mask;
if (timer0_toggle_count > 0)
timer0_toggle_count--;
}
else
{
disableTimer(0);
*timer0_pin_port &= ~(timer0_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER1
ISR(TIMER1_COMPA_vect)
{
if (timer1_toggle_count != 0)
{
// toggle the pin
*timer1_pin_port ^= timer1_pin_mask;
if (timer1_toggle_count > 0)
timer1_toggle_count--;
}
else
{
disableTimer(1);
*timer1_pin_port &= ~(timer1_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER2
ISR(TIMER2_COMPA_vect)
{
if (timer2_toggle_count != 0)
{
// toggle the pin
*timer2_pin_port ^= timer2_pin_mask;
if (timer2_toggle_count > 0)
timer2_toggle_count--;
}
else
{
// need to call noTone() so that the tone_pins[] entry is reset, so the
// timer gets initialized next time we call tone().
// XXX: this assumes timer 2 is always the first one used.
noTone(tone_pins[0]);
// disableTimer(2);
// *timer2_pin_port &= ~(timer2_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER3
ISR(TIMER3_COMPA_vect)
{
if (timer3_toggle_count != 0)
{
// toggle the pin
*timer3_pin_port ^= timer3_pin_mask;
if (timer3_toggle_count > 0)
timer3_toggle_count--;
}
else
{
disableTimer(3);
*timer3_pin_port &= ~(timer3_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER4
ISR(TIMER4_COMPA_vect)
{
if (timer4_toggle_count != 0)
{
// toggle the pin
*timer4_pin_port ^= timer4_pin_mask;
if (timer4_toggle_count > 0)
timer4_toggle_count--;
}
else
{
disableTimer(4);
*timer4_pin_port &= ~(timer4_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER5
ISR(TIMER5_COMPA_vect)
{
if (timer5_toggle_count != 0)
{
// toggle the pin
*timer5_pin_port ^= timer5_pin_mask;
if (timer5_toggle_count > 0)
timer5_toggle_count--;
}
else
{
disableTimer(5);
*timer5_pin_port &= ~(timer5_pin_mask); // keep pin low after stop
}
}
#endif

View File

@@ -1,196 +0,0 @@
#ifndef __USBAPI__
#define __USBAPI__
#if defined(USBCON)
//================================================================================
//================================================================================
// USB
class USBDevice_
{
public:
USBDevice_();
bool configured();
void attach();
void detach(); // Serial port goes down too...
void poll();
};
extern USBDevice_ USBDevice;
//================================================================================
//================================================================================
// Serial over CDC (Serial1 is the physical port)
class Serial_ : public Stream
{
private:
ring_buffer *_cdc_rx_buffer;
public:
void begin(uint16_t baud_count);
void end(void);
virtual int available(void);
virtual void accept(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
using Print::write; // pull in write(str) and write(buf, size) from Print
operator bool();
};
extern Serial_ Serial;
//================================================================================
//================================================================================
// Mouse
#define MOUSE_LEFT 1
#define MOUSE_RIGHT 2
#define MOUSE_MIDDLE 4
#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)
class Mouse_
{
private:
uint8_t _buttons;
void buttons(uint8_t b);
public:
Mouse_(void);
void begin(void);
void end(void);
void click(uint8_t b = MOUSE_LEFT);
void move(signed char x, signed char y, signed char wheel = 0);
void press(uint8_t b = MOUSE_LEFT); // press LEFT by default
void release(uint8_t b = MOUSE_LEFT); // release LEFT by default
bool isPressed(uint8_t b = MOUSE_LEFT); // check LEFT by default
};
extern Mouse_ Mouse;
//================================================================================
//================================================================================
// Keyboard
#define KEY_LEFT_CTRL 0x80
#define KEY_LEFT_SHIFT 0x81
#define KEY_LEFT_ALT 0x82
#define KEY_LEFT_GUI 0x83
#define KEY_RIGHT_CTRL 0x84
#define KEY_RIGHT_SHIFT 0x85
#define KEY_RIGHT_ALT 0x86
#define KEY_RIGHT_GUI 0x87
#define KEY_UP_ARROW 0xDA
#define KEY_DOWN_ARROW 0xD9
#define KEY_LEFT_ARROW 0xD8
#define KEY_RIGHT_ARROW 0xD7
#define KEY_BACKSPACE 0xB2
#define KEY_TAB 0xB3
#define KEY_RETURN 0xB0
#define KEY_ESC 0xB1
#define KEY_INSERT 0xD1
#define KEY_DELETE 0xD4
#define KEY_PAGE_UP 0xD3
#define KEY_PAGE_DOWN 0xD6
#define KEY_HOME 0xD2
#define KEY_END 0xD5
#define KEY_CAPS_LOCK 0xC1
#define KEY_F1 0xC2
#define KEY_F2 0xC3
#define KEY_F3 0xC4
#define KEY_F4 0xC5
#define KEY_F5 0xC6
#define KEY_F6 0xC7
#define KEY_F7 0xC8
#define KEY_F8 0xC9
#define KEY_F9 0xCA
#define KEY_F10 0xCB
#define KEY_F11 0xCC
#define KEY_F12 0xCD
// Low level key report: up to 6 keys and shift, ctrl etc at once
typedef struct
{
uint8_t modifiers;
uint8_t reserved;
uint8_t keys[6];
} KeyReport;
class Keyboard_ : public Print
{
private:
KeyReport _keyReport;
void sendReport(KeyReport* keys);
public:
Keyboard_(void);
void begin(void);
void end(void);
virtual size_t write(uint8_t k);
virtual size_t press(uint8_t k);
virtual size_t release(uint8_t k);
virtual void releaseAll(void);
};
extern Keyboard_ Keyboard;
//================================================================================
//================================================================================
// Low level API
typedef struct
{
uint8_t bmRequestType;
uint8_t bRequest;
uint8_t wValueL;
uint8_t wValueH;
uint16_t wIndex;
uint16_t wLength;
} Setup;
//================================================================================
//================================================================================
// HID 'Driver'
int HID_GetInterface(uint8_t* interfaceNum);
int HID_GetDescriptor(int i);
bool HID_Setup(Setup& setup);
void HID_SendReport(uint8_t id, const void* data, int len);
//================================================================================
//================================================================================
// MSC 'Driver'
int MSC_GetInterface(uint8_t* interfaceNum);
int MSC_GetDescriptor(int i);
bool MSC_Setup(Setup& setup);
bool MSC_Data(uint8_t rx,uint8_t tx);
//================================================================================
//================================================================================
// CSC 'Driver'
int CDC_GetInterface(uint8_t* interfaceNum);
int CDC_GetDescriptor(int i);
bool CDC_Setup(Setup& setup);
//================================================================================
//================================================================================
#define TRANSFER_PGM 0x80
#define TRANSFER_RELEASE 0x40
#define TRANSFER_ZERO 0x20
int USB_SendControl(uint8_t flags, const void* d, int len);
int USB_RecvControl(void* d, int len);
uint8_t USB_Available(uint8_t ep);
int USB_Send(uint8_t ep, const void* data, int len); // blocking
int USB_Recv(uint8_t ep, void* data, int len); // non-blocking
int USB_Recv(uint8_t ep); // non-blocking
void USB_Flush(uint8_t ep);
#endif
#endif /* if defined(USBCON) */

View File

@@ -1,684 +0,0 @@
/* Copyright (c) 2010, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#include "Platform.h"
#include "USBAPI.h"
#include "USBDesc.h"
#if defined(USBCON)
#define EP_TYPE_CONTROL 0x00
#define EP_TYPE_BULK_IN 0x81
#define EP_TYPE_BULK_OUT 0x80
#define EP_TYPE_INTERRUPT_IN 0xC1
#define EP_TYPE_INTERRUPT_OUT 0xC0
#define EP_TYPE_ISOCHRONOUS_IN 0x41
#define EP_TYPE_ISOCHRONOUS_OUT 0x40
/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */
#define TX_RX_LED_PULSE_MS 100
volatile u8 TxLEDPulse; /**< Milliseconds remaining for data Tx LED pulse */
volatile u8 RxLEDPulse; /**< Milliseconds remaining for data Rx LED pulse */
//==================================================================
//==================================================================
extern const u16 STRING_LANGUAGE[] PROGMEM;
extern const u16 STRING_IPRODUCT[] PROGMEM;
extern const u16 STRING_IMANUFACTURER[] PROGMEM;
extern const DeviceDescriptor USB_DeviceDescriptor PROGMEM;
extern const DeviceDescriptor USB_DeviceDescriptorA PROGMEM;
const u16 STRING_LANGUAGE[2] = {
(3<<8) | (2+2),
0x0409 // English
};
const u16 STRING_IPRODUCT[17] = {
(3<<8) | (2+2*16),
#if USB_PID == 0x8036
'A','r','d','u','i','n','o',' ','L','e','o','n','a','r','d','o'
#elif USB_PID == 0x8037
'A','r','d','u','i','n','o',' ','M','i','c','r','o',' ',' ',' '
#elif USB_PID == 0x803C
'A','r','d','u','i','n','o',' ','E','s','p','l','o','r','a',' '
#elif USB_PID == 0x9208
'L','i','l','y','P','a','d','U','S','B',' ',' ',' ',' ',' ',' '
#else
'U','S','B',' ','I','O',' ','B','o','a','r','d',' ',' ',' ',' '
#endif
};
const u16 STRING_IMANUFACTURER[12] = {
(3<<8) | (2+2*11),
#if USB_VID == 0x2341
'A','r','d','u','i','n','o',' ','L','L','C'
#elif USB_VID == 0x1b4f
'S','p','a','r','k','F','u','n',' ',' ',' '
#else
'U','n','k','n','o','w','n',' ',' ',' ',' '
#endif
};
#ifdef CDC_ENABLED
#define DEVICE_CLASS 0x02
#else
#define DEVICE_CLASS 0x00
#endif
// DEVICE DESCRIPTOR
const DeviceDescriptor USB_DeviceDescriptor =
D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
const DeviceDescriptor USB_DeviceDescriptorA =
D_DEVICE(DEVICE_CLASS,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
//==================================================================
//==================================================================
volatile u8 _usbConfiguration = 0;
static inline void WaitIN(void)
{
while (!(UEINTX & (1<<TXINI)));
}
static inline void ClearIN(void)
{
UEINTX = ~(1<<TXINI);
}
static inline void WaitOUT(void)
{
while (!(UEINTX & (1<<RXOUTI)))
;
}
static inline u8 WaitForINOrOUT()
{
while (!(UEINTX & ((1<<TXINI)|(1<<RXOUTI))))
;
return (UEINTX & (1<<RXOUTI)) == 0;
}
static inline void ClearOUT(void)
{
UEINTX = ~(1<<RXOUTI);
}
void Recv(volatile u8* data, u8 count)
{
while (count--)
*data++ = UEDATX;
RXLED1; // light the RX LED
RxLEDPulse = TX_RX_LED_PULSE_MS;
}
static inline u8 Recv8()
{
RXLED1; // light the RX LED
RxLEDPulse = TX_RX_LED_PULSE_MS;
return UEDATX;
}
static inline void Send8(u8 d)
{
UEDATX = d;
}
static inline void SetEP(u8 ep)
{
UENUM = ep;
}
static inline u8 FifoByteCount()
{
return UEBCLX;
}
static inline u8 ReceivedSetupInt()
{
return UEINTX & (1<<RXSTPI);
}
static inline void ClearSetupInt()
{
UEINTX = ~((1<<RXSTPI) | (1<<RXOUTI) | (1<<TXINI));
}
static inline void Stall()
{
UECONX = (1<<STALLRQ) | (1<<EPEN);
}
static inline u8 ReadWriteAllowed()
{
return UEINTX & (1<<RWAL);
}
static inline u8 Stalled()
{
return UEINTX & (1<<STALLEDI);
}
static inline u8 FifoFree()
{
return UEINTX & (1<<FIFOCON);
}
static inline void ReleaseRX()
{
UEINTX = 0x6B; // FIFOCON=0 NAKINI=1 RWAL=1 NAKOUTI=0 RXSTPI=1 RXOUTI=0 STALLEDI=1 TXINI=1
}
static inline void ReleaseTX()
{
UEINTX = 0x3A; // FIFOCON=0 NAKINI=0 RWAL=1 NAKOUTI=1 RXSTPI=1 RXOUTI=0 STALLEDI=1 TXINI=0
}
static inline u8 FrameNumber()
{
return UDFNUML;
}
//==================================================================
//==================================================================
u8 USBGetConfiguration(void)
{
return _usbConfiguration;
}
#define USB_RECV_TIMEOUT
class LockEP
{
u8 _sreg;
public:
LockEP(u8 ep) : _sreg(SREG)
{
cli();
SetEP(ep & 7);
}
~LockEP()
{
SREG = _sreg;
}
};
// Number of bytes, assumes a rx endpoint
u8 USB_Available(u8 ep)
{
LockEP lock(ep);
return FifoByteCount();
}
// Non Blocking receive
// Return number of bytes read
int USB_Recv(u8 ep, void* d, int len)
{
if (!_usbConfiguration || len < 0)
return -1;
LockEP lock(ep);
u8 n = FifoByteCount();
len = min(n,len);
n = len;
u8* dst = (u8*)d;
while (n--)
*dst++ = Recv8();
if (len && !FifoByteCount()) // release empty buffer
ReleaseRX();
return len;
}
// Recv 1 byte if ready
int USB_Recv(u8 ep)
{
u8 c;
if (USB_Recv(ep,&c,1) != 1)
return -1;
return c;
}
// Space in send EP
u8 USB_SendSpace(u8 ep)
{
LockEP lock(ep);
if (!ReadWriteAllowed())
return 0;
return 64 - FifoByteCount();
}
// Blocking Send of data to an endpoint
int USB_Send(u8 ep, const void* d, int len)
{
if (!_usbConfiguration)
return -1;
int r = len;
const u8* data = (const u8*)d;
u8 zero = ep & TRANSFER_ZERO;
u8 timeout = 250; // 250ms timeout on send? TODO
while (len)
{
u8 n = USB_SendSpace(ep);
if (n == 0)
{
if (!(--timeout))
return -1;
delay(1);
continue;
}
if (n > len)
n = len;
len -= n;
{
LockEP lock(ep);
if (ep & TRANSFER_ZERO)
{
while (n--)
Send8(0);
}
else if (ep & TRANSFER_PGM)
{
while (n--)
Send8(pgm_read_byte(data++));
}
else
{
while (n--)
Send8(*data++);
}
if (!ReadWriteAllowed() || ((len == 0) && (ep & TRANSFER_RELEASE))) // Release full buffer
ReleaseTX();
}
}
TXLED1; // light the TX LED
TxLEDPulse = TX_RX_LED_PULSE_MS;
return r;
}
extern const u8 _initEndpoints[] PROGMEM;
const u8 _initEndpoints[] =
{
0,
#ifdef CDC_ENABLED
EP_TYPE_INTERRUPT_IN, // CDC_ENDPOINT_ACM
EP_TYPE_BULK_OUT, // CDC_ENDPOINT_OUT
EP_TYPE_BULK_IN, // CDC_ENDPOINT_IN
#endif
#ifdef HID_ENABLED
EP_TYPE_INTERRUPT_IN // HID_ENDPOINT_INT
#endif
};
#define EP_SINGLE_64 0x32 // EP0
#define EP_DOUBLE_64 0x36 // Other endpoints
static
void InitEP(u8 index, u8 type, u8 size)
{
UENUM = index;
UECONX = 1;
UECFG0X = type;
UECFG1X = size;
}
static
void InitEndpoints()
{
for (u8 i = 1; i < sizeof(_initEndpoints); i++)
{
UENUM = i;
UECONX = 1;
UECFG0X = pgm_read_byte(_initEndpoints+i);
UECFG1X = EP_DOUBLE_64;
}
UERST = 0x7E; // And reset them
UERST = 0;
}
// Handle CLASS_INTERFACE requests
static
bool ClassInterfaceRequest(Setup& setup)
{
u8 i = setup.wIndex;
#ifdef CDC_ENABLED
if (CDC_ACM_INTERFACE == i)
return CDC_Setup(setup);
#endif
#ifdef HID_ENABLED
if (HID_INTERFACE == i)
return HID_Setup(setup);
#endif
return false;
}
int _cmark;
int _cend;
void InitControl(int end)
{
SetEP(0);
_cmark = 0;
_cend = end;
}
static
bool SendControl(u8 d)
{
if (_cmark < _cend)
{
if (!WaitForINOrOUT())
return false;
Send8(d);
if (!((_cmark + 1) & 0x3F))
ClearIN(); // Fifo is full, release this packet
}
_cmark++;
return true;
};
// Clipped by _cmark/_cend
int USB_SendControl(u8 flags, const void* d, int len)
{
int sent = len;
const u8* data = (const u8*)d;
bool pgm = flags & TRANSFER_PGM;
while (len--)
{
u8 c = pgm ? pgm_read_byte(data++) : *data++;
if (!SendControl(c))
return -1;
}
return sent;
}
// Does not timeout or cross fifo boundaries
// Will only work for transfers <= 64 bytes
// TODO
int USB_RecvControl(void* d, int len)
{
WaitOUT();
Recv((u8*)d,len);
ClearOUT();
return len;
}
int SendInterfaces()
{
int total = 0;
u8 interfaces = 0;
#ifdef CDC_ENABLED
total = CDC_GetInterface(&interfaces);
#endif
#ifdef HID_ENABLED
total += HID_GetInterface(&interfaces);
#endif
return interfaces;
}
// Construct a dynamic configuration descriptor
// This really needs dynamic endpoint allocation etc
// TODO
static
bool SendConfiguration(int maxlen)
{
// Count and measure interfaces
InitControl(0);
int interfaces = SendInterfaces();
ConfigDescriptor config = D_CONFIG(_cmark + sizeof(ConfigDescriptor),interfaces);
// Now send them
InitControl(maxlen);
USB_SendControl(0,&config,sizeof(ConfigDescriptor));
SendInterfaces();
return true;
}
u8 _cdcComposite = 0;
static
bool SendDescriptor(Setup& setup)
{
u8 t = setup.wValueH;
if (USB_CONFIGURATION_DESCRIPTOR_TYPE == t)
return SendConfiguration(setup.wLength);
InitControl(setup.wLength);
#ifdef HID_ENABLED
if (HID_REPORT_DESCRIPTOR_TYPE == t)
return HID_GetDescriptor(t);
#endif
u8 desc_length = 0;
const u8* desc_addr = 0;
if (USB_DEVICE_DESCRIPTOR_TYPE == t)
{
if (setup.wLength == 8)
_cdcComposite = 1;
desc_addr = _cdcComposite ? (const u8*)&USB_DeviceDescriptorA : (const u8*)&USB_DeviceDescriptor;
}
else if (USB_STRING_DESCRIPTOR_TYPE == t)
{
if (setup.wValueL == 0)
desc_addr = (const u8*)&STRING_LANGUAGE;
else if (setup.wValueL == IPRODUCT)
desc_addr = (const u8*)&STRING_IPRODUCT;
else if (setup.wValueL == IMANUFACTURER)
desc_addr = (const u8*)&STRING_IMANUFACTURER;
else
return false;
}
if (desc_addr == 0)
return false;
if (desc_length == 0)
desc_length = pgm_read_byte(desc_addr);
USB_SendControl(TRANSFER_PGM,desc_addr,desc_length);
return true;
}
// Endpoint 0 interrupt
ISR(USB_COM_vect)
{
SetEP(0);
if (!ReceivedSetupInt())
return;
Setup setup;
Recv((u8*)&setup,8);
ClearSetupInt();
u8 requestType = setup.bmRequestType;
if (requestType & REQUEST_DEVICETOHOST)
WaitIN();
else
ClearIN();
bool ok = true;
if (REQUEST_STANDARD == (requestType & REQUEST_TYPE))
{
// Standard Requests
u8 r = setup.bRequest;
if (GET_STATUS == r)
{
Send8(0); // TODO
Send8(0);
}
else if (CLEAR_FEATURE == r)
{
}
else if (SET_FEATURE == r)
{
}
else if (SET_ADDRESS == r)
{
WaitIN();
UDADDR = setup.wValueL | (1<<ADDEN);
}
else if (GET_DESCRIPTOR == r)
{
ok = SendDescriptor(setup);
}
else if (SET_DESCRIPTOR == r)
{
ok = false;
}
else if (GET_CONFIGURATION == r)
{
Send8(1);
}
else if (SET_CONFIGURATION == r)
{
if (REQUEST_DEVICE == (requestType & REQUEST_RECIPIENT))
{
InitEndpoints();
_usbConfiguration = setup.wValueL;
} else
ok = false;
}
else if (GET_INTERFACE == r)
{
}
else if (SET_INTERFACE == r)
{
}
}
else
{
InitControl(setup.wLength); // Max length of transfer
ok = ClassInterfaceRequest(setup);
}
if (ok)
ClearIN();
else
{
Stall();
}
}
void USB_Flush(u8 ep)
{
SetEP(ep);
if (FifoByteCount())
ReleaseTX();
}
// General interrupt
ISR(USB_GEN_vect)
{
u8 udint = UDINT;
UDINT = 0;
// End of Reset
if (udint & (1<<EORSTI))
{
InitEP(0,EP_TYPE_CONTROL,EP_SINGLE_64); // init ep0
_usbConfiguration = 0; // not configured yet
UEIENX = 1 << RXSTPE; // Enable interrupts for ep0
}
// Start of Frame - happens every millisecond so we use it for TX and RX LED one-shot timing, too
if (udint & (1<<SOFI))
{
#ifdef CDC_ENABLED
USB_Flush(CDC_TX); // Send a tx frame if found
if (USB_Available(CDC_RX)) // Handle received bytes (if any)
Serial.accept();
#endif
// check whether the one-shot period has elapsed. if so, turn off the LED
if (TxLEDPulse && !(--TxLEDPulse))
TXLED0;
if (RxLEDPulse && !(--RxLEDPulse))
RXLED0;
}
}
// VBUS or counting frames
// Any frame counting?
u8 USBConnected()
{
u8 f = UDFNUML;
delay(3);
return f != UDFNUML;
}
//=======================================================================
//=======================================================================
USBDevice_ USBDevice;
USBDevice_::USBDevice_()
{
}
void USBDevice_::attach()
{
_usbConfiguration = 0;
UHWCON = 0x01; // power internal reg
USBCON = (1<<USBE)|(1<<FRZCLK); // clock frozen, usb enabled
#if F_CPU == 16000000UL
PLLCSR = 0x12; // Need 16 MHz xtal
#elif F_CPU == 8000000UL
PLLCSR = 0x02; // Need 8 MHz xtal
#endif
while (!(PLLCSR & (1<<PLOCK))) // wait for lock pll
;
// Some tests on specific versions of macosx (10.7.3), reported some
// strange behaviuors when the board is reset using the serial
// port touch at 1200 bps. This delay fixes this behaviour.
delay(1);
USBCON = ((1<<USBE)|(1<<OTGPADE)); // start USB clock
UDIEN = (1<<EORSTE)|(1<<SOFE); // Enable interrupts for EOR (End of Reset) and SOF (start of frame)
UDCON = 0; // enable attach resistor
TX_RX_LED_INIT;
}
void USBDevice_::detach()
{
}
// Check for interrupts
// TODO: VBUS detection
bool USBDevice_::configured()
{
return _usbConfiguration;
}
void USBDevice_::poll()
{
}
#endif /* if defined(USBCON) */

View File

@@ -1,303 +0,0 @@
// Copyright (c) 2010, Peter Barrett
/*
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#ifndef __USBCORE_H__
#define __USBCORE_H__
// Standard requests
#define GET_STATUS 0
#define CLEAR_FEATURE 1
#define SET_FEATURE 3
#define SET_ADDRESS 5
#define GET_DESCRIPTOR 6
#define SET_DESCRIPTOR 7
#define GET_CONFIGURATION 8
#define SET_CONFIGURATION 9
#define GET_INTERFACE 10
#define SET_INTERFACE 11
// bmRequestType
#define REQUEST_HOSTTODEVICE 0x00
#define REQUEST_DEVICETOHOST 0x80
#define REQUEST_DIRECTION 0x80
#define REQUEST_STANDARD 0x00
#define REQUEST_CLASS 0x20
#define REQUEST_VENDOR 0x40
#define REQUEST_TYPE 0x60
#define REQUEST_DEVICE 0x00
#define REQUEST_INTERFACE 0x01
#define REQUEST_ENDPOINT 0x02
#define REQUEST_OTHER 0x03
#define REQUEST_RECIPIENT 0x03
#define REQUEST_DEVICETOHOST_CLASS_INTERFACE (REQUEST_DEVICETOHOST + REQUEST_CLASS + REQUEST_INTERFACE)
#define REQUEST_HOSTTODEVICE_CLASS_INTERFACE (REQUEST_HOSTTODEVICE + REQUEST_CLASS + REQUEST_INTERFACE)
// Class requests
#define CDC_SET_LINE_CODING 0x20
#define CDC_GET_LINE_CODING 0x21
#define CDC_SET_CONTROL_LINE_STATE 0x22
#define MSC_RESET 0xFF
#define MSC_GET_MAX_LUN 0xFE
#define HID_GET_REPORT 0x01
#define HID_GET_IDLE 0x02
#define HID_GET_PROTOCOL 0x03
#define HID_SET_REPORT 0x09
#define HID_SET_IDLE 0x0A
#define HID_SET_PROTOCOL 0x0B
// Descriptors
#define USB_DEVICE_DESC_SIZE 18
#define USB_CONFIGUARTION_DESC_SIZE 9
#define USB_INTERFACE_DESC_SIZE 9
#define USB_ENDPOINT_DESC_SIZE 7
#define USB_DEVICE_DESCRIPTOR_TYPE 1
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
#define USB_STRING_DESCRIPTOR_TYPE 3
#define USB_INTERFACE_DESCRIPTOR_TYPE 4
#define USB_ENDPOINT_DESCRIPTOR_TYPE 5
#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
#define USB_DEVICE_CLASS_STORAGE 0x08
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
#define USB_CONFIG_POWERED_MASK 0x40
#define USB_CONFIG_BUS_POWERED 0x80
#define USB_CONFIG_SELF_POWERED 0xC0
#define USB_CONFIG_REMOTE_WAKEUP 0x20
// bMaxPower in Configuration Descriptor
#define USB_CONFIG_POWER_MA(mA) ((mA)/2)
// bEndpointAddress in Endpoint Descriptor
#define USB_ENDPOINT_DIRECTION_MASK 0x80
#define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
#define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
#define USB_ENDPOINT_TYPE_MASK 0x03
#define USB_ENDPOINT_TYPE_CONTROL 0x00
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
#define USB_ENDPOINT_TYPE_BULK 0x02
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
#define TOBYTES(x) ((x) & 0xFF),(((x) >> 8) & 0xFF)
#define CDC_V1_10 0x0110
#define CDC_COMMUNICATION_INTERFACE_CLASS 0x02
#define CDC_CALL_MANAGEMENT 0x01
#define CDC_ABSTRACT_CONTROL_MODEL 0x02
#define CDC_HEADER 0x00
#define CDC_ABSTRACT_CONTROL_MANAGEMENT 0x02
#define CDC_UNION 0x06
#define CDC_CS_INTERFACE 0x24
#define CDC_CS_ENDPOINT 0x25
#define CDC_DATA_INTERFACE_CLASS 0x0A
#define MSC_SUBCLASS_SCSI 0x06
#define MSC_PROTOCOL_BULK_ONLY 0x50
#define HID_HID_DESCRIPTOR_TYPE 0x21
#define HID_REPORT_DESCRIPTOR_TYPE 0x22
#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23
// Device
typedef struct {
u8 len; // 18
u8 dtype; // 1 USB_DEVICE_DESCRIPTOR_TYPE
u16 usbVersion; // 0x200
u8 deviceClass;
u8 deviceSubClass;
u8 deviceProtocol;
u8 packetSize0; // Packet 0
u16 idVendor;
u16 idProduct;
u16 deviceVersion; // 0x100
u8 iManufacturer;
u8 iProduct;
u8 iSerialNumber;
u8 bNumConfigurations;
} DeviceDescriptor;
// Config
typedef struct {
u8 len; // 9
u8 dtype; // 2
u16 clen; // total length
u8 numInterfaces;
u8 config;
u8 iconfig;
u8 attributes;
u8 maxPower;
} ConfigDescriptor;
// String
// Interface
typedef struct
{
u8 len; // 9
u8 dtype; // 4
u8 number;
u8 alternate;
u8 numEndpoints;
u8 interfaceClass;
u8 interfaceSubClass;
u8 protocol;
u8 iInterface;
} InterfaceDescriptor;
// Endpoint
typedef struct
{
u8 len; // 7
u8 dtype; // 5
u8 addr;
u8 attr;
u16 packetSize;
u8 interval;
} EndpointDescriptor;
// Interface Association Descriptor
// Used to bind 2 interfaces together in CDC compostite device
typedef struct
{
u8 len; // 8
u8 dtype; // 11
u8 firstInterface;
u8 interfaceCount;
u8 functionClass;
u8 funtionSubClass;
u8 functionProtocol;
u8 iInterface;
} IADDescriptor;
// CDC CS interface descriptor
typedef struct
{
u8 len; // 5
u8 dtype; // 0x24
u8 subtype;
u8 d0;
u8 d1;
} CDCCSInterfaceDescriptor;
typedef struct
{
u8 len; // 4
u8 dtype; // 0x24
u8 subtype;
u8 d0;
} CDCCSInterfaceDescriptor4;
typedef struct
{
u8 len;
u8 dtype; // 0x24
u8 subtype; // 1
u8 bmCapabilities;
u8 bDataInterface;
} CMFunctionalDescriptor;
typedef struct
{
u8 len;
u8 dtype; // 0x24
u8 subtype; // 1
u8 bmCapabilities;
} ACMFunctionalDescriptor;
typedef struct
{
// IAD
IADDescriptor iad; // Only needed on compound device
// Control
InterfaceDescriptor cif; //
CDCCSInterfaceDescriptor header;
CMFunctionalDescriptor callManagement; // Call Management
ACMFunctionalDescriptor controlManagement; // ACM
CDCCSInterfaceDescriptor functionalDescriptor; // CDC_UNION
EndpointDescriptor cifin;
// Data
InterfaceDescriptor dif;
EndpointDescriptor in;
EndpointDescriptor out;
} CDCDescriptor;
typedef struct
{
InterfaceDescriptor msc;
EndpointDescriptor in;
EndpointDescriptor out;
} MSCDescriptor;
typedef struct
{
u8 len; // 9
u8 dtype; // 0x21
u8 addr;
u8 versionL; // 0x101
u8 versionH; // 0x101
u8 country;
u8 desctype; // 0x22 report
u8 descLenL;
u8 descLenH;
} HIDDescDescriptor;
typedef struct
{
InterfaceDescriptor hid;
HIDDescDescriptor desc;
EndpointDescriptor in;
} HIDDescriptor;
#define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs) \
{ 18, 1, 0x200, _class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs }
#define D_CONFIG(_totalLength,_interfaces) \
{ 9, 2, _totalLength,_interfaces, 1, 0, USB_CONFIG_BUS_POWERED, USB_CONFIG_POWER_MA(500) }
#define D_INTERFACE(_n,_numEndpoints,_class,_subClass,_protocol) \
{ 9, 4, _n, 0, _numEndpoints, _class,_subClass, _protocol, 0 }
#define D_ENDPOINT(_addr,_attr,_packetSize, _interval) \
{ 7, 5, _addr,_attr,_packetSize, _interval }
#define D_IAD(_firstInterface, _count, _class, _subClass, _protocol) \
{ 8, 11, _firstInterface, _count, _class, _subClass, _protocol, 0 }
#define D_HIDREPORT(_descriptorLength) \
{ 9, 0x21, 0x1, 0x1, 0, 1, 0x22, _descriptorLength, 0 }
#define D_CDCCS(_subtype,_d0,_d1) { 5, 0x24, _subtype, _d0, _d1 }
#define D_CDCCS4(_subtype,_d0) { 4, 0x24, _subtype, _d0 }
#endif

View File

@@ -1,63 +0,0 @@
/* Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#define CDC_ENABLED
#define HID_ENABLED
#ifdef CDC_ENABLED
#define CDC_INTERFACE_COUNT 2
#define CDC_ENPOINT_COUNT 3
#else
#define CDC_INTERFACE_COUNT 0
#define CDC_ENPOINT_COUNT 0
#endif
#ifdef HID_ENABLED
#define HID_INTERFACE_COUNT 1
#define HID_ENPOINT_COUNT 1
#else
#define HID_INTERFACE_COUNT 0
#define HID_ENPOINT_COUNT 0
#endif
#define CDC_ACM_INTERFACE 0 // CDC ACM
#define CDC_DATA_INTERFACE 1 // CDC Data
#define CDC_FIRST_ENDPOINT 1
#define CDC_ENDPOINT_ACM (CDC_FIRST_ENDPOINT) // CDC First
#define CDC_ENDPOINT_OUT (CDC_FIRST_ENDPOINT+1)
#define CDC_ENDPOINT_IN (CDC_FIRST_ENDPOINT+2)
#define HID_INTERFACE (CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT) // HID Interface
#define HID_FIRST_ENDPOINT (CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT)
#define HID_ENDPOINT_INT (HID_FIRST_ENDPOINT)
#define INTERFACE_COUNT (MSC_INTERFACE + MSC_INTERFACE_COUNT)
#ifdef CDC_ENABLED
#define CDC_RX CDC_ENDPOINT_OUT
#define CDC_TX CDC_ENDPOINT_IN
#endif
#ifdef HID_ENABLED
#define HID_TX HID_ENDPOINT_INT
#endif
#define IMANUFACTURER 1
#define IPRODUCT 2

View File

@@ -1,88 +0,0 @@
/*
* Udp.cpp: Library to send/receive UDP packets.
*
* NOTE: UDP is fast, but has some important limitations (thanks to Warren Gray for mentioning these)
* 1) UDP does not guarantee the order in which assembled UDP packets are received. This
* might not happen often in practice, but in larger network topologies, a UDP
* packet can be received out of sequence.
* 2) UDP does not guard against lost packets - so packets *can* disappear without the sender being
* aware of it. Again, this may not be a concern in practice on small local networks.
* For more information, see http://www.cafeaulait.org/course/week12/35.html
*
* MIT License:
* Copyright (c) 2008 Bjoern Hartmann
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* bjoern@cs.stanford.edu 12/30/2008
*/
#ifndef udp_h
#define udp_h
#include <Stream.h>
#include <IPAddress.h>
class UDP : public Stream {
public:
virtual uint8_t begin(uint16_t) =0; // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use
virtual void stop() =0; // Finish with the UDP socket
// Sending UDP packets
// Start building up a packet to send to the remote host specific in ip and port
// Returns 1 if successful, 0 if there was a problem with the supplied IP address or port
virtual int beginPacket(IPAddress ip, uint16_t port) =0;
// Start building up a packet to send to the remote host specific in host and port
// Returns 1 if successful, 0 if there was a problem resolving the hostname or port
virtual int beginPacket(const char *host, uint16_t port) =0;
// Finish off this packet and send it
// Returns 1 if the packet was sent successfully, 0 if there was an error
virtual int endPacket() =0;
// Write a single byte into the packet
virtual size_t write(uint8_t) =0;
// Write size bytes from buffer into the packet
virtual size_t write(const uint8_t *buffer, size_t size) =0;
// Start processing the next available incoming packet
// Returns the size of the packet in bytes, or 0 if no packets are available
virtual int parsePacket() =0;
// Number of bytes remaining in the current packet
virtual int available() =0;
// Read a single byte from the current packet
virtual int read() =0;
// Read up to len bytes from the current packet and place them into buffer
// Returns the number of bytes read, or 0 if none are available
virtual int read(unsigned char* buffer, size_t len) =0;
// Read up to len characters from the current packet and place them into buffer
// Returns the number of characters read, or 0 if none are available
virtual int read(char* buffer, size_t len) =0;
// Return the next byte from the current packet without moving on to the next byte
virtual int peek() =0;
virtual void flush() =0; // Finish reading the current packet
// Return the IP address of the host who sent the current incoming packet
virtual IPAddress remoteIP() =0;
// Return the port of the host who sent the current incoming packet
virtual uint16_t remotePort() =0;
protected:
uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); };
};
#endif

View File

@@ -1,168 +0,0 @@
/*
WCharacter.h - Character utility functions for Wiring & Arduino
Copyright (c) 2010 Hernando Barragan. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef Character_h
#define Character_h
#include <ctype.h>
// WCharacter.h prototypes
inline boolean isAlphaNumeric(int c) __attribute__((always_inline));
inline boolean isAlpha(int c) __attribute__((always_inline));
inline boolean isAscii(int c) __attribute__((always_inline));
inline boolean isWhitespace(int c) __attribute__((always_inline));
inline boolean isControl(int c) __attribute__((always_inline));
inline boolean isDigit(int c) __attribute__((always_inline));
inline boolean isGraph(int c) __attribute__((always_inline));
inline boolean isLowerCase(int c) __attribute__((always_inline));
inline boolean isPrintable(int c) __attribute__((always_inline));
inline boolean isPunct(int c) __attribute__((always_inline));
inline boolean isSpace(int c) __attribute__((always_inline));
inline boolean isUpperCase(int c) __attribute__((always_inline));
inline boolean isHexadecimalDigit(int c) __attribute__((always_inline));
inline int toAscii(int c) __attribute__((always_inline));
inline int toLowerCase(int c) __attribute__((always_inline));
inline int toUpperCase(int c)__attribute__((always_inline));
// Checks for an alphanumeric character.
// It is equivalent to (isalpha(c) || isdigit(c)).
inline boolean isAlphaNumeric(int c)
{
return ( isalnum(c) == 0 ? false : true);
}
// Checks for an alphabetic character.
// It is equivalent to (isupper(c) || islower(c)).
inline boolean isAlpha(int c)
{
return ( isalpha(c) == 0 ? false : true);
}
// Checks whether c is a 7-bit unsigned char value
// that fits into the ASCII character set.
inline boolean isAscii(int c)
{
return ( isascii (c) == 0 ? false : true);
}
// Checks for a blank character, that is, a space or a tab.
inline boolean isWhitespace(int c)
{
return ( isblank (c) == 0 ? false : true);
}
// Checks for a control character.
inline boolean isControl(int c)
{
return ( iscntrl (c) == 0 ? false : true);
}
// Checks for a digit (0 through 9).
inline boolean isDigit(int c)
{
return ( isdigit (c) == 0 ? false : true);
}
// Checks for any printable character except space.
inline boolean isGraph(int c)
{
return ( isgraph (c) == 0 ? false : true);
}
// Checks for a lower-case character.
inline boolean isLowerCase(int c)
{
return (islower (c) == 0 ? false : true);
}
// Checks for any printable character including space.
inline boolean isPrintable(int c)
{
return ( isprint (c) == 0 ? false : true);
}
// Checks for any printable character which is not a space
// or an alphanumeric character.
inline boolean isPunct(int c)
{
return ( ispunct (c) == 0 ? false : true);
}
// Checks for white-space characters. For the avr-libc library,
// these are: space, formfeed ('\f'), newline ('\n'), carriage
// return ('\r'), horizontal tab ('\t'), and vertical tab ('\v').
inline boolean isSpace(int c)
{
return ( isspace (c) == 0 ? false : true);
}
// Checks for an uppercase letter.
inline boolean isUpperCase(int c)
{
return ( isupper (c) == 0 ? false : true);
}
// Checks for a hexadecimal digits, i.e. one of 0 1 2 3 4 5 6 7
// 8 9 a b c d e f A B C D E F.
inline boolean isHexadecimalDigit(int c)
{
return ( isxdigit (c) == 0 ? false : true);
}
// Converts c to a 7-bit unsigned char value that fits into the
// ASCII character set, by clearing the high-order bits.
inline int toAscii(int c)
{
return toascii (c);
}
// Warning:
// Many people will be unhappy if you use this function.
// This function will convert accented letters into random
// characters.
// Converts the letter c to lower case, if possible.
inline int toLowerCase(int c)
{
return tolower (c);
}
// Converts the letter c to upper case, if possible.
inline int toUpperCase(int c)
{
return toupper (c);
}
#endif

View File

@@ -1,322 +0,0 @@
/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
Part of the Wiring project - http://wiring.uniandes.edu.co
Copyright (c) 2004-05 Hernando Barragan
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
Modified 24 November 2006 by David A. Mellis
Modified 1 August 2010 by Mark Sproul
*/
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include "wiring_private.h"
static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS];
// volatile static voidFuncPtr twiIntFunc;
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {
if(interruptNum < EXTERNAL_NUM_INTERRUPTS) {
intFunc[interruptNum] = userFunc;
// Configure the interrupt mode (trigger on low input, any change, rising
// edge, or falling edge). The mode constants were chosen to correspond
// to the configuration bits in the hardware register, so we simply shift
// the mode into place.
// Enable the interrupt.
switch (interruptNum) {
#if defined(__AVR_ATmega32U4__)
// I hate doing this, but the register assignment differs between the 1280/2560
// and the 32U4. Since avrlib defines registers PCMSK1 and PCMSK2 that aren't
// even present on the 32U4 this is the only way to distinguish between them.
case 0:
EICRA = (EICRA & ~((1<<ISC00) | (1<<ISC01))) | (mode << ISC00);
EIMSK |= (1<<INT0);
break;
case 1:
EICRA = (EICRA & ~((1<<ISC10) | (1<<ISC11))) | (mode << ISC10);
EIMSK |= (1<<INT1);
break;
case 2:
EICRA = (EICRA & ~((1<<ISC20) | (1<<ISC21))) | (mode << ISC20);
EIMSK |= (1<<INT2);
break;
case 3:
EICRA = (EICRA & ~((1<<ISC30) | (1<<ISC31))) | (mode << ISC30);
EIMSK |= (1<<INT3);
break;
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
case 2:
EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
EIMSK |= (1 << INT0);
break;
case 3:
EICRA = (EICRA & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
EIMSK |= (1 << INT1);
break;
case 4:
EICRA = (EICRA & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
EIMSK |= (1 << INT2);
break;
case 5:
EICRA = (EICRA & ~((1 << ISC30) | (1 << ISC31))) | (mode << ISC30);
EIMSK |= (1 << INT3);
break;
case 0:
EICRB = (EICRB & ~((1 << ISC40) | (1 << ISC41))) | (mode << ISC40);
EIMSK |= (1 << INT4);
break;
case 1:
EICRB = (EICRB & ~((1 << ISC50) | (1 << ISC51))) | (mode << ISC50);
EIMSK |= (1 << INT5);
break;
case 6:
EICRB = (EICRB & ~((1 << ISC60) | (1 << ISC61))) | (mode << ISC60);
EIMSK |= (1 << INT6);
break;
case 7:
EICRB = (EICRB & ~((1 << ISC70) | (1 << ISC71))) | (mode << ISC70);
EIMSK |= (1 << INT7);
break;
#else
case 0:
#if defined(EICRA) && defined(ISC00) && defined(EIMSK)
EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
EIMSK |= (1 << INT0);
#elif defined(MCUCR) && defined(ISC00) && defined(GICR)
MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
GICR |= (1 << INT0);
#elif defined(MCUCR) && defined(ISC00) && defined(GIMSK)
MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
GIMSK |= (1 << INT0);
#else
#error attachInterrupt not finished for this CPU (case 0)
#endif
break;
case 1:
#if defined(EICRA) && defined(ISC10) && defined(ISC11) && defined(EIMSK)
EICRA = (EICRA & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
EIMSK |= (1 << INT1);
#elif defined(MCUCR) && defined(ISC10) && defined(ISC11) && defined(GICR)
MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
GICR |= (1 << INT1);
#elif defined(MCUCR) && defined(ISC10) && defined(GIMSK) && defined(GIMSK)
MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
GIMSK |= (1 << INT1);
#else
#warning attachInterrupt may need some more work for this cpu (case 1)
#endif
break;
case 2:
#if defined(EICRA) && defined(ISC20) && defined(ISC21) && defined(EIMSK)
EICRA = (EICRA & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
EIMSK |= (1 << INT2);
#elif defined(MCUCR) && defined(ISC20) && defined(ISC21) && defined(GICR)
MCUCR = (MCUCR & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
GICR |= (1 << INT2);
#elif defined(MCUCR) && defined(ISC20) && defined(GIMSK) && defined(GIMSK)
MCUCR = (MCUCR & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
GIMSK |= (1 << INT2);
#endif
break;
#endif
}
}
}
void detachInterrupt(uint8_t interruptNum) {
if(interruptNum < EXTERNAL_NUM_INTERRUPTS) {
// Disable the interrupt. (We can't assume that interruptNum is equal
// to the number of the EIMSK bit to clear, as this isn't true on the
// ATmega8. There, INT0 is 6 and INT1 is 7.)
switch (interruptNum) {
#if defined(__AVR_ATmega32U4__)
case 0:
EIMSK &= ~(1<<INT0);
break;
case 1:
EIMSK &= ~(1<<INT1);
break;
case 2:
EIMSK &= ~(1<<INT2);
break;
case 3:
EIMSK &= ~(1<<INT3);
break;
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
case 2:
EIMSK &= ~(1 << INT0);
break;
case 3:
EIMSK &= ~(1 << INT1);
break;
case 4:
EIMSK &= ~(1 << INT2);
break;
case 5:
EIMSK &= ~(1 << INT3);
break;
case 0:
EIMSK &= ~(1 << INT4);
break;
case 1:
EIMSK &= ~(1 << INT5);
break;
case 6:
EIMSK &= ~(1 << INT6);
break;
case 7:
EIMSK &= ~(1 << INT7);
break;
#else
case 0:
#if defined(EIMSK) && defined(INT0)
EIMSK &= ~(1 << INT0);
#elif defined(GICR) && defined(ISC00)
GICR &= ~(1 << INT0); // atmega32
#elif defined(GIMSK) && defined(INT0)
GIMSK &= ~(1 << INT0);
#else
#error detachInterrupt not finished for this cpu
#endif
break;
case 1:
#if defined(EIMSK) && defined(INT1)
EIMSK &= ~(1 << INT1);
#elif defined(GICR) && defined(INT1)
GICR &= ~(1 << INT1); // atmega32
#elif defined(GIMSK) && defined(INT1)
GIMSK &= ~(1 << INT1);
#else
#warning detachInterrupt may need some more work for this cpu (case 1)
#endif
break;
#endif
}
intFunc[interruptNum] = 0;
}
}
/*
void attachInterruptTwi(void (*userFunc)(void) ) {
twiIntFunc = userFunc;
}
*/
#if defined(__AVR_ATmega32U4__)
SIGNAL(INT0_vect) {
if(intFunc[EXTERNAL_INT_0])
intFunc[EXTERNAL_INT_0]();
}
SIGNAL(INT1_vect) {
if(intFunc[EXTERNAL_INT_1])
intFunc[EXTERNAL_INT_1]();
}
SIGNAL(INT2_vect) {
if(intFunc[EXTERNAL_INT_2])
intFunc[EXTERNAL_INT_2]();
}
SIGNAL(INT3_vect) {
if(intFunc[EXTERNAL_INT_3])
intFunc[EXTERNAL_INT_3]();
}
#elif defined(EICRA) && defined(EICRB)
SIGNAL(INT0_vect) {
if(intFunc[EXTERNAL_INT_2])
intFunc[EXTERNAL_INT_2]();
}
SIGNAL(INT1_vect) {
if(intFunc[EXTERNAL_INT_3])
intFunc[EXTERNAL_INT_3]();
}
SIGNAL(INT2_vect) {
if(intFunc[EXTERNAL_INT_4])
intFunc[EXTERNAL_INT_4]();
}
SIGNAL(INT3_vect) {
if(intFunc[EXTERNAL_INT_5])
intFunc[EXTERNAL_INT_5]();
}
SIGNAL(INT4_vect) {
if(intFunc[EXTERNAL_INT_0])
intFunc[EXTERNAL_INT_0]();
}
SIGNAL(INT5_vect) {
if(intFunc[EXTERNAL_INT_1])
intFunc[EXTERNAL_INT_1]();
}
SIGNAL(INT6_vect) {
if(intFunc[EXTERNAL_INT_6])
intFunc[EXTERNAL_INT_6]();
}
SIGNAL(INT7_vect) {
if(intFunc[EXTERNAL_INT_7])
intFunc[EXTERNAL_INT_7]();
}
#else
SIGNAL(INT0_vect) {
if(intFunc[EXTERNAL_INT_0])
intFunc[EXTERNAL_INT_0]();
}
SIGNAL(INT1_vect) {
if(intFunc[EXTERNAL_INT_1])
intFunc[EXTERNAL_INT_1]();
}
#if defined(EICRA) && defined(ISC20)
SIGNAL(INT2_vect) {
if(intFunc[EXTERNAL_INT_2])
intFunc[EXTERNAL_INT_2]();
}
#endif
#endif
/*
SIGNAL(SIG_2WIRE_SERIAL) {
if(twiIntFunc)
twiIntFunc();
}
*/

View File

@@ -1,60 +0,0 @@
/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
Part of the Wiring project - http://wiring.org.co
Copyright (c) 2004-06 Hernando Barragan
Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id$
*/
extern "C" {
#include "stdlib.h"
}
void randomSeed(unsigned int seed)
{
if (seed != 0) {
srandom(seed);
}
}
long random(long howbig)
{
if (howbig == 0) {
return 0;
}
return random() % howbig;
}
long random(long howsmall, long howbig)
{
if (howsmall >= howbig) {
return howsmall;
}
long diff = howbig - howsmall;
return random(diff) + howsmall;
}
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
unsigned int makeWord(unsigned int w) { return w; }
unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; }

View File

@@ -1,645 +0,0 @@
/*
WString.cpp - String library for Wiring & Arduino
...mostly rewritten by Paul Stoffregen...
Copyright (c) 2009-10 Hernando Barragan. All rights reserved.
Copyright 2011, Paul Stoffregen, paul@pjrc.com
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "WString.h"
/*********************************************/
/* Constructors */
/*********************************************/
String::String(const char *cstr)
{
init();
if (cstr) copy(cstr, strlen(cstr));
}
String::String(const String &value)
{
init();
*this = value;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String::String(String &&rval)
{
init();
move(rval);
}
String::String(StringSumHelper &&rval)
{
init();
move(rval);
}
#endif
String::String(char c)
{
init();
char buf[2];
buf[0] = c;
buf[1] = 0;
*this = buf;
}
String::String(unsigned char value, unsigned char base)
{
init();
char buf[9];
utoa(value, buf, base);
*this = buf;
}
String::String(int value, unsigned char base)
{
init();
char buf[18];
itoa(value, buf, base);
*this = buf;
}
String::String(unsigned int value, unsigned char base)
{
init();
char buf[17];
utoa(value, buf, base);
*this = buf;
}
String::String(long value, unsigned char base)
{
init();
char buf[34];
ltoa(value, buf, base);
*this = buf;
}
String::String(unsigned long value, unsigned char base)
{
init();
char buf[33];
ultoa(value, buf, base);
*this = buf;
}
String::~String()
{
free(buffer);
}
/*********************************************/
/* Memory Management */
/*********************************************/
inline void String::init(void)
{
buffer = NULL;
capacity = 0;
len = 0;
flags = 0;
}
void String::invalidate(void)
{
if (buffer) free(buffer);
buffer = NULL;
capacity = len = 0;
}
unsigned char String::reserve(unsigned int size)
{
if (buffer && capacity >= size) return 1;
if (changeBuffer(size)) {
if (len == 0) buffer[0] = 0;
return 1;
}
return 0;
}
unsigned char String::changeBuffer(unsigned int maxStrLen)
{
char *newbuffer = (char *)realloc(buffer, maxStrLen + 1);
if (newbuffer) {
buffer = newbuffer;
capacity = maxStrLen;
return 1;
}
return 0;
}
/*********************************************/
/* Copy and Move */
/*********************************************/
String & String::copy(const char *cstr, unsigned int length)
{
if (!reserve(length)) {
invalidate();
return *this;
}
len = length;
strcpy(buffer, cstr);
return *this;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void String::move(String &rhs)
{
if (buffer) {
if (capacity >= rhs.len) {
strcpy(buffer, rhs.buffer);
len = rhs.len;
rhs.len = 0;
return;
} else {
free(buffer);
}
}
buffer = rhs.buffer;
capacity = rhs.capacity;
len = rhs.len;
rhs.buffer = NULL;
rhs.capacity = 0;
rhs.len = 0;
}
#endif
String & String::operator = (const String &rhs)
{
if (this == &rhs) return *this;
if (rhs.buffer) copy(rhs.buffer, rhs.len);
else invalidate();
return *this;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String & String::operator = (String &&rval)
{
if (this != &rval) move(rval);
return *this;
}
String & String::operator = (StringSumHelper &&rval)
{
if (this != &rval) move(rval);
return *this;
}
#endif
String & String::operator = (const char *cstr)
{
if (cstr) copy(cstr, strlen(cstr));
else invalidate();
return *this;
}
/*********************************************/
/* concat */
/*********************************************/
unsigned char String::concat(const String &s)
{
return concat(s.buffer, s.len);
}
unsigned char String::concat(const char *cstr, unsigned int length)
{
unsigned int newlen = len + length;
if (!cstr) return 0;
if (length == 0) return 1;
if (!reserve(newlen)) return 0;
strcpy(buffer + len, cstr);
len = newlen;
return 1;
}
unsigned char String::concat(const char *cstr)
{
if (!cstr) return 0;
return concat(cstr, strlen(cstr));
}
unsigned char String::concat(char c)
{
char buf[2];
buf[0] = c;
buf[1] = 0;
return concat(buf, 1);
}
unsigned char String::concat(unsigned char num)
{
char buf[4];
itoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(int num)
{
char buf[7];
itoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(unsigned int num)
{
char buf[6];
utoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(long num)
{
char buf[12];
ltoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(unsigned long num)
{
char buf[11];
ultoa(num, buf, 10);
return concat(buf, strlen(buf));
}
/*********************************************/
/* Concatenate */
/*********************************************/
StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(rhs.buffer, rhs.len)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!cstr || !a.concat(cstr, strlen(cstr))) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, char c)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(c)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, int num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, long num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
/*********************************************/
/* Comparison */
/*********************************************/
int String::compareTo(const String &s) const
{
if (!buffer || !s.buffer) {
if (s.buffer && s.len > 0) return 0 - *(unsigned char *)s.buffer;
if (buffer && len > 0) return *(unsigned char *)buffer;
return 0;
}
return strcmp(buffer, s.buffer);
}
unsigned char String::equals(const String &s2) const
{
return (len == s2.len && compareTo(s2) == 0);
}
unsigned char String::equals(const char *cstr) const
{
if (len == 0) return (cstr == NULL || *cstr == 0);
if (cstr == NULL) return buffer[0] == 0;
return strcmp(buffer, cstr) == 0;
}
unsigned char String::operator<(const String &rhs) const
{
return compareTo(rhs) < 0;
}
unsigned char String::operator>(const String &rhs) const
{
return compareTo(rhs) > 0;
}
unsigned char String::operator<=(const String &rhs) const
{
return compareTo(rhs) <= 0;
}
unsigned char String::operator>=(const String &rhs) const
{
return compareTo(rhs) >= 0;
}
unsigned char String::equalsIgnoreCase( const String &s2 ) const
{
if (this == &s2) return 1;
if (len != s2.len) return 0;
if (len == 0) return 1;
const char *p1 = buffer;
const char *p2 = s2.buffer;
while (*p1) {
if (tolower(*p1++) != tolower(*p2++)) return 0;
}
return 1;
}
unsigned char String::startsWith( const String &s2 ) const
{
if (len < s2.len) return 0;
return startsWith(s2, 0);
}
unsigned char String::startsWith( const String &s2, unsigned int offset ) const
{
if (offset > len - s2.len || !buffer || !s2.buffer) return 0;
return strncmp( &buffer[offset], s2.buffer, s2.len ) == 0;
}
unsigned char String::endsWith( const String &s2 ) const
{
if ( len < s2.len || !buffer || !s2.buffer) return 0;
return strcmp(&buffer[len - s2.len], s2.buffer) == 0;
}
/*********************************************/
/* Character Access */
/*********************************************/
char String::charAt(unsigned int loc) const
{
return operator[](loc);
}
void String::setCharAt(unsigned int loc, char c)
{
if (loc < len) buffer[loc] = c;
}
char & String::operator[](unsigned int index)
{
static char dummy_writable_char;
if (index >= len || !buffer) {
dummy_writable_char = 0;
return dummy_writable_char;
}
return buffer[index];
}
char String::operator[]( unsigned int index ) const
{
if (index >= len || !buffer) return 0;
return buffer[index];
}
void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const
{
if (!bufsize || !buf) return;
if (index >= len) {
buf[0] = 0;
return;
}
unsigned int n = bufsize - 1;
if (n > len - index) n = len - index;
strncpy((char *)buf, buffer + index, n);
buf[n] = 0;
}
/*********************************************/
/* Search */
/*********************************************/
int String::indexOf(char c) const
{
return indexOf(c, 0);
}
int String::indexOf( char ch, unsigned int fromIndex ) const
{
if (fromIndex >= len) return -1;
const char* temp = strchr(buffer + fromIndex, ch);
if (temp == NULL) return -1;
return temp - buffer;
}
int String::indexOf(const String &s2) const
{
return indexOf(s2, 0);
}
int String::indexOf(const String &s2, unsigned int fromIndex) const
{
if (fromIndex >= len) return -1;
const char *found = strstr(buffer + fromIndex, s2.buffer);
if (found == NULL) return -1;
return found - buffer;
}
int String::lastIndexOf( char theChar ) const
{
return lastIndexOf(theChar, len - 1);
}
int String::lastIndexOf(char ch, unsigned int fromIndex) const
{
if (fromIndex >= len) return -1;
char tempchar = buffer[fromIndex + 1];
buffer[fromIndex + 1] = '\0';
char* temp = strrchr( buffer, ch );
buffer[fromIndex + 1] = tempchar;
if (temp == NULL) return -1;
return temp - buffer;
}
int String::lastIndexOf(const String &s2) const
{
return lastIndexOf(s2, len - s2.len);
}
int String::lastIndexOf(const String &s2, unsigned int fromIndex) const
{
if (s2.len == 0 || len == 0 || s2.len > len) return -1;
if (fromIndex >= len) fromIndex = len - 1;
int found = -1;
for (char *p = buffer; p <= buffer + fromIndex; p++) {
p = strstr(p, s2.buffer);
if (!p) break;
if ((unsigned int)(p - buffer) <= fromIndex) found = p - buffer;
}
return found;
}
String String::substring( unsigned int left ) const
{
return substring(left, len);
}
String String::substring(unsigned int left, unsigned int right) const
{
if (left > right) {
unsigned int temp = right;
right = left;
left = temp;
}
String out;
if (left > len) return out;
if (right > len) right = len;
char temp = buffer[right]; // save the replaced character
buffer[right] = '\0';
out = buffer + left; // pointer arithmetic
buffer[right] = temp; //restore character
return out;
}
/*********************************************/
/* Modification */
/*********************************************/
void String::replace(char find, char replace)
{
if (!buffer) return;
for (char *p = buffer; *p; p++) {
if (*p == find) *p = replace;
}
}
void String::replace(const String& find, const String& replace)
{
if (len == 0 || find.len == 0) return;
int diff = replace.len - find.len;
char *readFrom = buffer;
char *foundAt;
if (diff == 0) {
while ((foundAt = strstr(readFrom, find.buffer)) != NULL) {
memcpy(foundAt, replace.buffer, replace.len);
readFrom = foundAt + replace.len;
}
} else if (diff < 0) {
char *writeTo = buffer;
while ((foundAt = strstr(readFrom, find.buffer)) != NULL) {
unsigned int n = foundAt - readFrom;
memcpy(writeTo, readFrom, n);
writeTo += n;
memcpy(writeTo, replace.buffer, replace.len);
writeTo += replace.len;
readFrom = foundAt + find.len;
len += diff;
}
strcpy(writeTo, readFrom);
} else {
unsigned int size = len; // compute size needed for result
while ((foundAt = strstr(readFrom, find.buffer)) != NULL) {
readFrom = foundAt + find.len;
size += diff;
}
if (size == len) return;
if (size > capacity && !changeBuffer(size)) return; // XXX: tell user!
int index = len - 1;
while (index >= 0 && (index = lastIndexOf(find, index)) >= 0) {
readFrom = buffer + index + find.len;
memmove(readFrom + diff, readFrom, len - (readFrom - buffer));
len += diff;
buffer[len] = 0;
memcpy(buffer + index, replace.buffer, replace.len);
index--;
}
}
}
void String::toLowerCase(void)
{
if (!buffer) return;
for (char *p = buffer; *p; p++) {
*p = tolower(*p);
}
}
void String::toUpperCase(void)
{
if (!buffer) return;
for (char *p = buffer; *p; p++) {
*p = toupper(*p);
}
}
void String::trim(void)
{
if (!buffer || len == 0) return;
char *begin = buffer;
while (isspace(*begin)) begin++;
char *end = buffer + len - 1;
while (isspace(*end) && end >= begin) end--;
len = end + 1 - begin;
if (begin > buffer) memcpy(buffer, begin, len);
buffer[len] = 0;
}
/*********************************************/
/* Parsing / Conversion */
/*********************************************/
long String::toInt(void) const
{
if (buffer) return atol(buffer);
return 0;
}

View File

@@ -1,205 +0,0 @@
/*
WString.h - String library for Wiring & Arduino
...mostly rewritten by Paul Stoffregen...
Copyright (c) 2009-10 Hernando Barragan. All right reserved.
Copyright 2011, Paul Stoffregen, paul@pjrc.com
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef String_class_h
#define String_class_h
#ifdef __cplusplus
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <avr/pgmspace.h>
// When compiling programs with this class, the following gcc parameters
// dramatically increase performance and memory (RAM) efficiency, typically
// with little or no increase in code size.
// -felide-constructors
// -std=c++0x
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
// An inherited class for holding the result of a concatenation. These
// result objects are assumed to be writable by subsequent concatenations.
class StringSumHelper;
// The string class
class String
{
// use a function pointer to allow for "if (s)" without the
// complications of an operator bool(). for more information, see:
// http://www.artima.com/cppsource/safebool.html
typedef void (String::*StringIfHelperType)() const;
void StringIfHelper() const {}
public:
// constructors
// creates a copy of the initial value.
// if the initial value is null or invalid, or if memory allocation
// fails, the string will be marked as invalid (i.e. "if (s)" will
// be false).
String(const char *cstr = "");
String(const String &str);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String(String &&rval);
String(StringSumHelper &&rval);
#endif
explicit String(char c);
explicit String(unsigned char, unsigned char base=10);
explicit String(int, unsigned char base=10);
explicit String(unsigned int, unsigned char base=10);
explicit String(long, unsigned char base=10);
explicit String(unsigned long, unsigned char base=10);
~String(void);
// memory management
// return true on success, false on failure (in which case, the string
// is left unchanged). reserve(0), if successful, will validate an
// invalid string (i.e., "if (s)" will be true afterwards)
unsigned char reserve(unsigned int size);
inline unsigned int length(void) const {return len;}
// creates a copy of the assigned value. if the value is null or
// invalid, or if the memory allocation fails, the string will be
// marked as invalid ("if (s)" will be false).
String & operator = (const String &rhs);
String & operator = (const char *cstr);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String & operator = (String &&rval);
String & operator = (StringSumHelper &&rval);
#endif
// concatenate (works w/ built-in types)
// returns true on success, false on failure (in which case, the string
// is left unchanged). if the argument is null or invalid, the
// concatenation is considered unsucessful.
unsigned char concat(const String &str);
unsigned char concat(const char *cstr);
unsigned char concat(char c);
unsigned char concat(unsigned char c);
unsigned char concat(int num);
unsigned char concat(unsigned int num);
unsigned char concat(long num);
unsigned char concat(unsigned long num);
// if there's not enough memory for the concatenated value, the string
// will be left unchanged (but this isn't signalled in any way)
String & operator += (const String &rhs) {concat(rhs); return (*this);}
String & operator += (const char *cstr) {concat(cstr); return (*this);}
String & operator += (char c) {concat(c); return (*this);}
String & operator += (unsigned char num) {concat(num); return (*this);}
String & operator += (int num) {concat(num); return (*this);}
String & operator += (unsigned int num) {concat(num); return (*this);}
String & operator += (long num) {concat(num); return (*this);}
String & operator += (unsigned long num) {concat(num); return (*this);}
friend StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs);
friend StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr);
friend StringSumHelper & operator + (const StringSumHelper &lhs, char c);
friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, int num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, long num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num);
// comparison (only works w/ Strings and "strings")
operator StringIfHelperType() const { return buffer ? &String::StringIfHelper : 0; }
int compareTo(const String &s) const;
unsigned char equals(const String &s) const;
unsigned char equals(const char *cstr) const;
unsigned char operator == (const String &rhs) const {return equals(rhs);}
unsigned char operator == (const char *cstr) const {return equals(cstr);}
unsigned char operator != (const String &rhs) const {return !equals(rhs);}
unsigned char operator != (const char *cstr) const {return !equals(cstr);}
unsigned char operator < (const String &rhs) const;
unsigned char operator > (const String &rhs) const;
unsigned char operator <= (const String &rhs) const;
unsigned char operator >= (const String &rhs) const;
unsigned char equalsIgnoreCase(const String &s) const;
unsigned char startsWith( const String &prefix) const;
unsigned char startsWith(const String &prefix, unsigned int offset) const;
unsigned char endsWith(const String &suffix) const;
// character acccess
char charAt(unsigned int index) const;
void setCharAt(unsigned int index, char c);
char operator [] (unsigned int index) const;
char& operator [] (unsigned int index);
void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const;
void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const
{getBytes((unsigned char *)buf, bufsize, index);}
// search
int indexOf( char ch ) const;
int indexOf( char ch, unsigned int fromIndex ) const;
int indexOf( const String &str ) const;
int indexOf( const String &str, unsigned int fromIndex ) const;
int lastIndexOf( char ch ) const;
int lastIndexOf( char ch, unsigned int fromIndex ) const;
int lastIndexOf( const String &str ) const;
int lastIndexOf( const String &str, unsigned int fromIndex ) const;
String substring( unsigned int beginIndex ) const;
String substring( unsigned int beginIndex, unsigned int endIndex ) const;
// modification
void replace(char find, char replace);
void replace(const String& find, const String& replace);
void toLowerCase(void);
void toUpperCase(void);
void trim(void);
// parsing/conversion
long toInt(void) const;
protected:
char *buffer; // the actual char array
unsigned int capacity; // the array length minus one (for the '\0')
unsigned int len; // the String length (not counting the '\0')
unsigned char flags; // unused, for future features
protected:
void init(void);
void invalidate(void);
unsigned char changeBuffer(unsigned int maxStrLen);
unsigned char concat(const char *cstr, unsigned int length);
// copy and move
String & copy(const char *cstr, unsigned int length);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void move(String &rhs);
#endif
};
class StringSumHelper : public String
{
public:
StringSumHelper(const String &s) : String(s) {}
StringSumHelper(const char *p) : String(p) {}
StringSumHelper(char c) : String(c) {}
StringSumHelper(unsigned char num) : String(num) {}
StringSumHelper(int num) : String(num) {}
StringSumHelper(unsigned int num) : String(num) {}
StringSumHelper(long num) : String(num) {}
StringSumHelper(unsigned long num) : String(num) {}
};
#endif // __cplusplus
#endif // String_class_h

View File

@@ -1,515 +0,0 @@
#ifndef Binary_h
#define Binary_h
#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
#define B11 3
#define B011 3
#define B0011 3
#define B00011 3
#define B000011 3
#define B0000011 3
#define B00000011 3
#define B100 4
#define B0100 4
#define B00100 4
#define B000100 4
#define B0000100 4
#define B00000100 4
#define B101 5
#define B0101 5
#define B00101 5
#define B000101 5
#define B0000101 5
#define B00000101 5
#define B110 6
#define B0110 6
#define B00110 6
#define B000110 6
#define B0000110 6
#define B00000110 6
#define B111 7
#define B0111 7
#define B00111 7
#define B000111 7
#define B0000111 7
#define B00000111 7
#define B1000 8
#define B01000 8
#define B001000 8
#define B0001000 8
#define B00001000 8
#define B1001 9
#define B01001 9
#define B001001 9
#define B0001001 9
#define B00001001 9
#define B1010 10
#define B01010 10
#define B001010 10
#define B0001010 10
#define B00001010 10
#define B1011 11
#define B01011 11
#define B001011 11
#define B0001011 11
#define B00001011 11
#define B1100 12
#define B01100 12
#define B001100 12
#define B0001100 12
#define B00001100 12
#define B1101 13
#define B01101 13
#define B001101 13
#define B0001101 13
#define B00001101 13
#define B1110 14
#define B01110 14
#define B001110 14
#define B0001110 14
#define B00001110 14
#define B1111 15
#define B01111 15
#define B001111 15
#define B0001111 15
#define B00001111 15
#define B10000 16
#define B010000 16
#define B0010000 16
#define B00010000 16
#define B10001 17
#define B010001 17
#define B0010001 17
#define B00010001 17
#define B10010 18
#define B010010 18
#define B0010010 18
#define B00010010 18
#define B10011 19
#define B010011 19
#define B0010011 19
#define B00010011 19
#define B10100 20
#define B010100 20
#define B0010100 20
#define B00010100 20
#define B10101 21
#define B010101 21
#define B0010101 21
#define B00010101 21
#define B10110 22
#define B010110 22
#define B0010110 22
#define B00010110 22
#define B10111 23
#define B010111 23
#define B0010111 23
#define B00010111 23
#define B11000 24
#define B011000 24
#define B0011000 24
#define B00011000 24
#define B11001 25
#define B011001 25
#define B0011001 25
#define B00011001 25
#define B11010 26
#define B011010 26
#define B0011010 26
#define B00011010 26
#define B11011 27
#define B011011 27
#define B0011011 27
#define B00011011 27
#define B11100 28
#define B011100 28
#define B0011100 28
#define B00011100 28
#define B11101 29
#define B011101 29
#define B0011101 29
#define B00011101 29
#define B11110 30
#define B011110 30
#define B0011110 30
#define B00011110 30
#define B11111 31
#define B011111 31
#define B0011111 31
#define B00011111 31
#define B100000 32
#define B0100000 32
#define B00100000 32
#define B100001 33
#define B0100001 33
#define B00100001 33
#define B100010 34
#define B0100010 34
#define B00100010 34
#define B100011 35
#define B0100011 35
#define B00100011 35
#define B100100 36
#define B0100100 36
#define B00100100 36
#define B100101 37
#define B0100101 37
#define B00100101 37
#define B100110 38
#define B0100110 38
#define B00100110 38
#define B100111 39
#define B0100111 39
#define B00100111 39
#define B101000 40
#define B0101000 40
#define B00101000 40
#define B101001 41
#define B0101001 41
#define B00101001 41
#define B101010 42
#define B0101010 42
#define B00101010 42
#define B101011 43
#define B0101011 43
#define B00101011 43
#define B101100 44
#define B0101100 44
#define B00101100 44
#define B101101 45
#define B0101101 45
#define B00101101 45
#define B101110 46
#define B0101110 46
#define B00101110 46
#define B101111 47
#define B0101111 47
#define B00101111 47
#define B110000 48
#define B0110000 48
#define B00110000 48
#define B110001 49
#define B0110001 49
#define B00110001 49
#define B110010 50
#define B0110010 50
#define B00110010 50
#define B110011 51
#define B0110011 51
#define B00110011 51
#define B110100 52
#define B0110100 52
#define B00110100 52
#define B110101 53
#define B0110101 53
#define B00110101 53
#define B110110 54
#define B0110110 54
#define B00110110 54
#define B110111 55
#define B0110111 55
#define B00110111 55
#define B111000 56
#define B0111000 56
#define B00111000 56
#define B111001 57
#define B0111001 57
#define B00111001 57
#define B111010 58
#define B0111010 58
#define B00111010 58
#define B111011 59
#define B0111011 59
#define B00111011 59
#define B111100 60
#define B0111100 60
#define B00111100 60
#define B111101 61
#define B0111101 61
#define B00111101 61
#define B111110 62
#define B0111110 62
#define B00111110 62
#define B111111 63
#define B0111111 63
#define B00111111 63
#define B1000000 64
#define B01000000 64
#define B1000001 65
#define B01000001 65
#define B1000010 66
#define B01000010 66
#define B1000011 67
#define B01000011 67
#define B1000100 68
#define B01000100 68
#define B1000101 69
#define B01000101 69
#define B1000110 70
#define B01000110 70
#define B1000111 71
#define B01000111 71
#define B1001000 72
#define B01001000 72
#define B1001001 73
#define B01001001 73
#define B1001010 74
#define B01001010 74
#define B1001011 75
#define B01001011 75
#define B1001100 76
#define B01001100 76
#define B1001101 77
#define B01001101 77
#define B1001110 78
#define B01001110 78
#define B1001111 79
#define B01001111 79
#define B1010000 80
#define B01010000 80
#define B1010001 81
#define B01010001 81
#define B1010010 82
#define B01010010 82
#define B1010011 83
#define B01010011 83
#define B1010100 84
#define B01010100 84
#define B1010101 85
#define B01010101 85
#define B1010110 86
#define B01010110 86
#define B1010111 87
#define B01010111 87
#define B1011000 88
#define B01011000 88
#define B1011001 89
#define B01011001 89
#define B1011010 90
#define B01011010 90
#define B1011011 91
#define B01011011 91
#define B1011100 92
#define B01011100 92
#define B1011101 93
#define B01011101 93
#define B1011110 94
#define B01011110 94
#define B1011111 95
#define B01011111 95
#define B1100000 96
#define B01100000 96
#define B1100001 97
#define B01100001 97
#define B1100010 98
#define B01100010 98
#define B1100011 99
#define B01100011 99
#define B1100100 100
#define B01100100 100
#define B1100101 101
#define B01100101 101
#define B1100110 102
#define B01100110 102
#define B1100111 103
#define B01100111 103
#define B1101000 104
#define B01101000 104
#define B1101001 105
#define B01101001 105
#define B1101010 106
#define B01101010 106
#define B1101011 107
#define B01101011 107
#define B1101100 108
#define B01101100 108
#define B1101101 109
#define B01101101 109
#define B1101110 110
#define B01101110 110
#define B1101111 111
#define B01101111 111
#define B1110000 112
#define B01110000 112
#define B1110001 113
#define B01110001 113
#define B1110010 114
#define B01110010 114
#define B1110011 115
#define B01110011 115
#define B1110100 116
#define B01110100 116
#define B1110101 117
#define B01110101 117
#define B1110110 118
#define B01110110 118
#define B1110111 119
#define B01110111 119
#define B1111000 120
#define B01111000 120
#define B1111001 121
#define B01111001 121
#define B1111010 122
#define B01111010 122
#define B1111011 123
#define B01111011 123
#define B1111100 124
#define B01111100 124
#define B1111101 125
#define B01111101 125
#define B1111110 126
#define B01111110 126
#define B1111111 127
#define B01111111 127
#define B10000000 128
#define B10000001 129
#define B10000010 130
#define B10000011 131
#define B10000100 132
#define B10000101 133
#define B10000110 134
#define B10000111 135
#define B10001000 136
#define B10001001 137
#define B10001010 138
#define B10001011 139
#define B10001100 140
#define B10001101 141
#define B10001110 142
#define B10001111 143
#define B10010000 144
#define B10010001 145
#define B10010010 146
#define B10010011 147
#define B10010100 148
#define B10010101 149
#define B10010110 150
#define B10010111 151
#define B10011000 152
#define B10011001 153
#define B10011010 154
#define B10011011 155
#define B10011100 156
#define B10011101 157
#define B10011110 158
#define B10011111 159
#define B10100000 160
#define B10100001 161
#define B10100010 162
#define B10100011 163
#define B10100100 164
#define B10100101 165
#define B10100110 166
#define B10100111 167
#define B10101000 168
#define B10101001 169
#define B10101010 170
#define B10101011 171
#define B10101100 172
#define B10101101 173
#define B10101110 174
#define B10101111 175
#define B10110000 176
#define B10110001 177
#define B10110010 178
#define B10110011 179
#define B10110100 180
#define B10110101 181
#define B10110110 182
#define B10110111 183
#define B10111000 184
#define B10111001 185
#define B10111010 186
#define B10111011 187
#define B10111100 188
#define B10111101 189
#define B10111110 190
#define B10111111 191
#define B11000000 192
#define B11000001 193
#define B11000010 194
#define B11000011 195
#define B11000100 196
#define B11000101 197
#define B11000110 198
#define B11000111 199
#define B11001000 200
#define B11001001 201
#define B11001010 202
#define B11001011 203
#define B11001100 204
#define B11001101 205
#define B11001110 206
#define B11001111 207
#define B11010000 208
#define B11010001 209
#define B11010010 210
#define B11010011 211
#define B11010100 212
#define B11010101 213
#define B11010110 214
#define B11010111 215
#define B11011000 216
#define B11011001 217
#define B11011010 218
#define B11011011 219
#define B11011100 220
#define B11011101 221
#define B11011110 222
#define B11011111 223
#define B11100000 224
#define B11100001 225
#define B11100010 226
#define B11100011 227
#define B11100100 228
#define B11100101 229
#define B11100110 230
#define B11100111 231
#define B11101000 232
#define B11101001 233
#define B11101010 234
#define B11101011 235
#define B11101100 236
#define B11101101 237
#define B11101110 238
#define B11101111 239
#define B11110000 240
#define B11110001 241
#define B11110010 242
#define B11110011 243
#define B11110100 244
#define B11110101 245
#define B11110110 246
#define B11110111 247
#define B11111000 248
#define B11111001 249
#define B11111010 250
#define B11111011 251
#define B11111100 252
#define B11111101 253
#define B11111110 254
#define B11111111 255
#endif

View File

@@ -1,20 +0,0 @@
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}

View File

@@ -1,18 +0,0 @@
#include <new.h>
void * operator new(size_t size)
{
return malloc(size);
}
void operator delete(void * ptr)
{
free(ptr);
}
int __cxa_guard_acquire(__guard *g) {return !*(char *)(g);};
void __cxa_guard_release (__guard *g) {*(char *)g = 1;};
void __cxa_guard_abort (__guard *) {};
void __cxa_pure_virtual(void) {};

View File

@@ -1,22 +0,0 @@
/* Header to define new/delete operators as they aren't provided by avr-gcc by default
Taken from http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453
*/
#ifndef NEW_H
#define NEW_H
#include <stdlib.h>
void * operator new(size_t size);
void operator delete(void * ptr);
__extension__ typedef int __guard __attribute__((mode (__DI__)));
extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *);
extern "C" void __cxa_pure_virtual(void);
#endif

View File

@@ -1,324 +0,0 @@
/*
wiring.c - Partial implementation of the Wiring API for the ATmega8.
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id$
*/
#include "wiring_private.h"
// the prescaler is set so that timer0 ticks every 64 clock cycles, and the
// the overflow handler is called every 256 ticks.
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256))
// the whole number of milliseconds per timer0 overflow
#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)
// the fractional number of milliseconds per timer0 overflow. we shift right
// by three to fit these numbers into a byte. (for the clock speeds we care
// about - 8 and 16 MHz - this doesn't lose precision.)
#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
#define FRACT_MAX (1000 >> 3)
volatile unsigned long timer0_overflow_count = 0;
volatile unsigned long timer0_millis = 0;
static unsigned char timer0_fract = 0;
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
SIGNAL(TIM0_OVF_vect)
#else
SIGNAL(TIMER0_OVF_vect)
#endif
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
}
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}
unsigned long micros() {
unsigned long m;
uint8_t oldSREG = SREG, t;
cli();
m = timer0_overflow_count;
#if defined(TCNT0)
t = TCNT0;
#elif defined(TCNT0L)
t = TCNT0L;
#else
#error TIMER 0 not defined
#endif
#ifdef TIFR0
if ((TIFR0 & _BV(TOV0)) && (t < 255))
m++;
#else
if ((TIFR & _BV(TOV0)) && (t < 255))
m++;
#endif
SREG = oldSREG;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}
void delay(unsigned long ms)
{
uint16_t start = (uint16_t)micros();
while (ms > 0) {
if (((uint16_t)micros() - start) >= 1000) {
ms--;
start += 1000;
}
}
}
/* Delay for the given number of microseconds. Assumes a 8 or 16 MHz clock. */
void delayMicroseconds(unsigned int us)
{
// calling avrlib's delay_us() function with low values (e.g. 1 or
// 2 microseconds) gives delays longer than desired.
//delay_us(us);
#if F_CPU >= 20000000L
// for the 20 MHz clock on rare Arduino boards
// for a one-microsecond delay, simply wait 2 cycle and return. The overhead
// of the function call yields a delay of exactly a one microsecond.
__asm__ __volatile__ (
"nop" "\n\t"
"nop"); //just waiting 2 cycle
if (--us == 0)
return;
// the following loop takes a 1/5 of a microsecond (4 cycles)
// per iteration, so execute it five times for each microsecond of
// delay requested.
us = (us<<2) + us; // x5 us
// account for the time taken in the preceeding commands.
us -= 2;
#elif F_CPU >= 16000000L
// for the 16 MHz clock on most Arduino boards
// for a one-microsecond delay, simply return. the overhead
// of the function call yields a delay of approximately 1 1/8 us.
if (--us == 0)
return;
// the following loop takes a quarter of a microsecond (4 cycles)
// per iteration, so execute it four times for each microsecond of
// delay requested.
us <<= 2;
// account for the time taken in the preceeding commands.
us -= 2;
#else
// for the 8 MHz internal clock on the ATmega168
// for a one- or two-microsecond delay, simply return. the overhead of
// the function calls takes more than two microseconds. can't just
// subtract two, since us is unsigned; we'd overflow.
if (--us == 0)
return;
if (--us == 0)
return;
// the following loop takes half of a microsecond (4 cycles)
// per iteration, so execute it twice for each microsecond of
// delay requested.
us <<= 1;
// partially compensate for the time taken by the preceeding commands.
// we can't subtract any more than this or we'd overflow w/ small delays.
us--;
#endif
// busy wait
__asm__ __volatile__ (
"1: sbiw %0,1" "\n\t" // 2 cycles
"brne 1b" : "=w" (us) : "0" (us) // 2 cycles
);
}
void init()
{
// this needs to be called before setup() or some functions won't
// work there
sei();
// on the ATmega168, timer 0 is also used for fast hardware pwm
// (using phase-correct PWM would mean that timer 0 overflowed half as often
// resulting in different millis() behavior on the ATmega8 and ATmega168)
#if defined(TCCR0A) && defined(WGM01)
sbi(TCCR0A, WGM01);
sbi(TCCR0A, WGM00);
#endif
// set timer 0 prescale factor to 64
#if defined(__AVR_ATmega128__)
// CPU specific: different values for the ATmega128
sbi(TCCR0, CS02);
#elif defined(TCCR0) && defined(CS01) && defined(CS00)
// this combination is for the standard atmega8
sbi(TCCR0, CS01);
sbi(TCCR0, CS00);
#elif defined(TCCR0B) && defined(CS01) && defined(CS00)
// this combination is for the standard 168/328/1280/2560
sbi(TCCR0B, CS01);
sbi(TCCR0B, CS00);
#elif defined(TCCR0A) && defined(CS01) && defined(CS00)
// this combination is for the __AVR_ATmega645__ series
sbi(TCCR0A, CS01);
sbi(TCCR0A, CS00);
#else
#error Timer 0 prescale factor 64 not set correctly
#endif
// enable timer 0 overflow interrupt
#if defined(TIMSK) && defined(TOIE0)
sbi(TIMSK, TOIE0);
#elif defined(TIMSK0) && defined(TOIE0)
sbi(TIMSK0, TOIE0);
#else
#error Timer 0 overflow interrupt not set correctly
#endif
// timers 1 and 2 are used for phase-correct hardware pwm
// this is better for motors as it ensures an even waveform
// note, however, that fast pwm mode can achieve a frequency of up
// 8 MHz (with a 16 MHz clock) at 50% duty cycle
#if defined(TCCR1B) && defined(CS11) && defined(CS10)
TCCR1B = 0;
// set timer 1 prescale factor to 64
sbi(TCCR1B, CS11);
#if F_CPU >= 8000000L
sbi(TCCR1B, CS10);
#endif
#elif defined(TCCR1) && defined(CS11) && defined(CS10)
sbi(TCCR1, CS11);
#if F_CPU >= 8000000L
sbi(TCCR1, CS10);
#endif
#endif
// put timer 1 in 8-bit phase correct pwm mode
#if defined(TCCR1A) && defined(WGM10)
sbi(TCCR1A, WGM10);
#elif defined(TCCR1)
#warning this needs to be finished
#endif
// set timer 2 prescale factor to 64
#if defined(TCCR2) && defined(CS22)
sbi(TCCR2, CS22);
#elif defined(TCCR2B) && defined(CS22)
sbi(TCCR2B, CS22);
#else
#warning Timer 2 not finished (may not be present on this CPU)
#endif
// configure timer 2 for phase correct pwm (8-bit)
#if defined(TCCR2) && defined(WGM20)
sbi(TCCR2, WGM20);
#elif defined(TCCR2A) && defined(WGM20)
sbi(TCCR2A, WGM20);
#else
#warning Timer 2 not finished (may not be present on this CPU)
#endif
#if defined(TCCR3B) && defined(CS31) && defined(WGM30)
sbi(TCCR3B, CS31); // set timer 3 prescale factor to 64
sbi(TCCR3B, CS30);
sbi(TCCR3A, WGM30); // put timer 3 in 8-bit phase correct pwm mode
#endif
#if defined(TCCR4A) && defined(TCCR4B) && defined(TCCR4D) /* beginning of timer4 block for 32U4 and similar */
sbi(TCCR4B, CS42); // set timer4 prescale factor to 64
sbi(TCCR4B, CS41);
sbi(TCCR4B, CS40);
sbi(TCCR4D, WGM40); // put timer 4 in phase- and frequency-correct PWM mode
sbi(TCCR4A, PWM4A); // enable PWM mode for comparator OCR4A
sbi(TCCR4C, PWM4D); // enable PWM mode for comparator OCR4D
#else /* beginning of timer4 block for ATMEGA1280 and ATMEGA2560 */
#if defined(TCCR4B) && defined(CS41) && defined(WGM40)
sbi(TCCR4B, CS41); // set timer 4 prescale factor to 64
sbi(TCCR4B, CS40);
sbi(TCCR4A, WGM40); // put timer 4 in 8-bit phase correct pwm mode
#endif
#endif /* end timer4 block for ATMEGA1280/2560 and similar */
#if defined(TCCR5B) && defined(CS51) && defined(WGM50)
sbi(TCCR5B, CS51); // set timer 5 prescale factor to 64
sbi(TCCR5B, CS50);
sbi(TCCR5A, WGM50); // put timer 5 in 8-bit phase correct pwm mode
#endif
#if defined(ADCSRA)
// set a2d prescale factor to 128
// 16 MHz / 128 = 125 KHz, inside the desired 50-200 KHz range.
// XXX: this will not work properly for other clock speeds, and
// this code should use F_CPU to determine the prescale factor.
sbi(ADCSRA, ADPS2);
sbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
// enable a2d conversions
sbi(ADCSRA, ADEN);
#endif
// the bootloader connects pins 0 and 1 to the USART; disconnect them
// here so they can be used as normal digital i/o; they will be
// reconnected in Serial.begin()
#if defined(UCSRB)
UCSRB = 0;
#elif defined(UCSR0B)
UCSR0B = 0;
#endif
}

View File

@@ -1,282 +0,0 @@
/*
wiring_analog.c - analog input and output
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
Modified 28 September 2010 by Mark Sproul
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#include "wiring_private.h"
#include "pins_arduino.h"
uint8_t analog_reference = DEFAULT;
void analogReference(uint8_t mode)
{
// can't actually set the register here because the default setting
// will connect AVCC and the AREF pin, which would cause a short if
// there's something connected to AREF.
analog_reference = mode;
}
int analogRead(uint8_t pin)
{
uint8_t low, high;
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
if (pin >= 54) pin -= 54; // allow for channel or pin numbers
#elif defined(__AVR_ATmega32U4__)
if (pin >= 18) pin -= 18; // allow for channel or pin numbers
#elif defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
if (pin >= 24) pin -= 24; // allow for channel or pin numbers
#else
if (pin >= 14) pin -= 14; // allow for channel or pin numbers
#endif
#if defined(__AVR_ATmega32U4__)
pin = analogPinToChannel(pin);
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
#elif defined(ADCSRB) && defined(MUX5)
// the MUX5 bit of ADCSRB selects whether we're reading from channels
// 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
#endif
// set the analog reference (high two bits of ADMUX) and select the
// channel (low 4 bits). this also sets ADLAR (left-adjust result)
// to 0 (the default).
#if defined(ADMUX)
ADMUX = (analog_reference << 6) | (pin & 0x07);
#endif
// without a delay, we seem to read from the wrong channel
//delay(1);
#if defined(ADCSRA) && defined(ADCL)
// start the conversion
sbi(ADCSRA, ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
// we have to read ADCL first; doing so locks both ADCL
// and ADCH until ADCH is read. reading ADCL second would
// cause the results of each conversion to be discarded,
// as ADCL and ADCH would be locked when it completed.
low = ADCL;
high = ADCH;
#else
// we dont have an ADC, return 0
low = 0;
high = 0;
#endif
// combine the two bytes
return (high << 8) | low;
}
// Right now, PWM output only works on the pins with
// hardware support. These are defined in the appropriate
// pins_*.c file. For the rest of the pins, we default
// to digital output.
void analogWrite(uint8_t pin, int val)
{
// We need to make sure the PWM output is enabled for those pins
// that support it, as we turn it off when digitally reading or
// writing with them. Also, make sure the pin is in output mode
// for consistenty with Wiring, which doesn't require a pinMode
// call for the analog output pins.
pinMode(pin, OUTPUT);
if (val == 0)
{
digitalWrite(pin, LOW);
}
else if (val == 255)
{
digitalWrite(pin, HIGH);
}
else
{
switch(digitalPinToTimer(pin))
{
// XXX fix needed for atmega8
#if defined(TCCR0) && defined(COM00) && !defined(__AVR_ATmega8__)
case TIMER0A:
// connect pwm to pin on timer 0
sbi(TCCR0, COM00);
OCR0 = val; // set pwm duty
break;
#endif
#if defined(TCCR0A) && defined(COM0A1)
case TIMER0A:
// connect pwm to pin on timer 0, channel A
sbi(TCCR0A, COM0A1);
OCR0A = val; // set pwm duty
break;
#endif
#if defined(TCCR0A) && defined(COM0B1)
case TIMER0B:
// connect pwm to pin on timer 0, channel B
sbi(TCCR0A, COM0B1);
OCR0B = val; // set pwm duty
break;
#endif
#if defined(TCCR1A) && defined(COM1A1)
case TIMER1A:
// connect pwm to pin on timer 1, channel A
sbi(TCCR1A, COM1A1);
OCR1A = val; // set pwm duty
break;
#endif
#if defined(TCCR1A) && defined(COM1B1)
case TIMER1B:
// connect pwm to pin on timer 1, channel B
sbi(TCCR1A, COM1B1);
OCR1B = val; // set pwm duty
break;
#endif
#if defined(TCCR2) && defined(COM21)
case TIMER2:
// connect pwm to pin on timer 2
sbi(TCCR2, COM21);
OCR2 = val; // set pwm duty
break;
#endif
#if defined(TCCR2A) && defined(COM2A1)
case TIMER2A:
// connect pwm to pin on timer 2, channel A
sbi(TCCR2A, COM2A1);
OCR2A = val; // set pwm duty
break;
#endif
#if defined(TCCR2A) && defined(COM2B1)
case TIMER2B:
// connect pwm to pin on timer 2, channel B
sbi(TCCR2A, COM2B1);
OCR2B = val; // set pwm duty
break;
#endif
#if defined(TCCR3A) && defined(COM3A1)
case TIMER3A:
// connect pwm to pin on timer 3, channel A
sbi(TCCR3A, COM3A1);
OCR3A = val; // set pwm duty
break;
#endif
#if defined(TCCR3A) && defined(COM3B1)
case TIMER3B:
// connect pwm to pin on timer 3, channel B
sbi(TCCR3A, COM3B1);
OCR3B = val; // set pwm duty
break;
#endif
#if defined(TCCR3A) && defined(COM3C1)
case TIMER3C:
// connect pwm to pin on timer 3, channel C
sbi(TCCR3A, COM3C1);
OCR3C = val; // set pwm duty
break;
#endif
#if defined(TCCR4A)
case TIMER4A:
//connect pwm to pin on timer 4, channel A
sbi(TCCR4A, COM4A1);
#if defined(COM4A0) // only used on 32U4
cbi(TCCR4A, COM4A0);
#endif
OCR4A = val; // set pwm duty
break;
#endif
#if defined(TCCR4A) && defined(COM4B1)
case TIMER4B:
// connect pwm to pin on timer 4, channel B
sbi(TCCR4A, COM4B1);
OCR4B = val; // set pwm duty
break;
#endif
#if defined(TCCR4A) && defined(COM4C1)
case TIMER4C:
// connect pwm to pin on timer 4, channel C
sbi(TCCR4A, COM4C1);
OCR4C = val; // set pwm duty
break;
#endif
#if defined(TCCR4C) && defined(COM4D1)
case TIMER4D:
// connect pwm to pin on timer 4, channel D
sbi(TCCR4C, COM4D1);
#if defined(COM4D0) // only used on 32U4
cbi(TCCR4C, COM4D0);
#endif
OCR4D = val; // set pwm duty
break;
#endif
#if defined(TCCR5A) && defined(COM5A1)
case TIMER5A:
// connect pwm to pin on timer 5, channel A
sbi(TCCR5A, COM5A1);
OCR5A = val; // set pwm duty
break;
#endif
#if defined(TCCR5A) && defined(COM5B1)
case TIMER5B:
// connect pwm to pin on timer 5, channel B
sbi(TCCR5A, COM5B1);
OCR5B = val; // set pwm duty
break;
#endif
#if defined(TCCR5A) && defined(COM5C1)
case TIMER5C:
// connect pwm to pin on timer 5, channel C
sbi(TCCR5A, COM5C1);
OCR5C = val; // set pwm duty
break;
#endif
case NOT_ON_TIMER:
default:
if (val < 128) {
digitalWrite(pin, LOW);
} else {
digitalWrite(pin, HIGH);
}
}
}
}

View File

@@ -1,178 +0,0 @@
/*
wiring_digital.c - digital input and output functions
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
Modified 28 September 2010 by Mark Sproul
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#define ARDUINO_MAIN
#include "wiring_private.h"
#include "pins_arduino.h"
void pinMode(uint8_t pin, uint8_t mode)
{
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *reg, *out;
if (port == NOT_A_PIN) return;
// JWS: can I let the optimizer do this?
reg = portModeRegister(port);
out = portOutputRegister(port);
if (mode == INPUT) {
uint8_t oldSREG = SREG;
cli();
*reg &= ~bit;
*out &= ~bit;
SREG = oldSREG;
} else if (mode == INPUT_PULLUP) {
uint8_t oldSREG = SREG;
cli();
*reg &= ~bit;
*out |= bit;
SREG = oldSREG;
} else {
uint8_t oldSREG = SREG;
cli();
*reg |= bit;
SREG = oldSREG;
}
}
// Forcing this inline keeps the callers from having to push their own stuff
// on the stack. It is a good performance win and only takes 1 more byte per
// user than calling. (It will take more bytes on the 168.)
//
// But shouldn't this be moved into pinMode? Seems silly to check and do on
// each digitalread or write.
//
// Mark Sproul:
// - Removed inline. Save 170 bytes on atmega1280
// - changed to a switch statment; added 32 bytes but much easier to read and maintain.
// - Added more #ifdefs, now compiles for atmega645
//
//static inline void turnOffPWM(uint8_t timer) __attribute__ ((always_inline));
//static inline void turnOffPWM(uint8_t timer)
static void turnOffPWM(uint8_t timer)
{
switch (timer)
{
#if defined(TCCR1A) && defined(COM1A1)
case TIMER1A: cbi(TCCR1A, COM1A1); break;
#endif
#if defined(TCCR1A) && defined(COM1B1)
case TIMER1B: cbi(TCCR1A, COM1B1); break;
#endif
#if defined(TCCR2) && defined(COM21)
case TIMER2: cbi(TCCR2, COM21); break;
#endif
#if defined(TCCR0A) && defined(COM0A1)
case TIMER0A: cbi(TCCR0A, COM0A1); break;
#endif
#if defined(TIMER0B) && defined(COM0B1)
case TIMER0B: cbi(TCCR0A, COM0B1); break;
#endif
#if defined(TCCR2A) && defined(COM2A1)
case TIMER2A: cbi(TCCR2A, COM2A1); break;
#endif
#if defined(TCCR2A) && defined(COM2B1)
case TIMER2B: cbi(TCCR2A, COM2B1); break;
#endif
#if defined(TCCR3A) && defined(COM3A1)
case TIMER3A: cbi(TCCR3A, COM3A1); break;
#endif
#if defined(TCCR3A) && defined(COM3B1)
case TIMER3B: cbi(TCCR3A, COM3B1); break;
#endif
#if defined(TCCR3A) && defined(COM3C1)
case TIMER3C: cbi(TCCR3A, COM3C1); break;
#endif
#if defined(TCCR4A) && defined(COM4A1)
case TIMER4A: cbi(TCCR4A, COM4A1); break;
#endif
#if defined(TCCR4A) && defined(COM4B1)
case TIMER4B: cbi(TCCR4A, COM4B1); break;
#endif
#if defined(TCCR4A) && defined(COM4C1)
case TIMER4C: cbi(TCCR4A, COM4C1); break;
#endif
#if defined(TCCR4C) && defined(COM4D1)
case TIMER4D: cbi(TCCR4C, COM4D1); break;
#endif
#if defined(TCCR5A)
case TIMER5A: cbi(TCCR5A, COM5A1); break;
case TIMER5B: cbi(TCCR5A, COM5B1); break;
case TIMER5C: cbi(TCCR5A, COM5C1); break;
#endif
}
}
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG;
}
int digitalRead(uint8_t pin)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
if (port == NOT_A_PIN) return LOW;
// If the pin that support PWM output, we need to turn it off
// before getting a digital reading.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}

View File

@@ -1,71 +0,0 @@
/*
wiring_private.h - Internal header file.
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 239 2007-01-12 17:58:39Z mellis $
*/
#ifndef WiringPrivate_h
#define WiringPrivate_h
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdarg.h>
#include "Arduino.h"
#ifdef __cplusplus
extern "C"{
#endif
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
#define EXTERNAL_INT_0 0
#define EXTERNAL_INT_1 1
#define EXTERNAL_INT_2 2
#define EXTERNAL_INT_3 3
#define EXTERNAL_INT_4 4
#define EXTERNAL_INT_5 5
#define EXTERNAL_INT_6 6
#define EXTERNAL_INT_7 7
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define EXTERNAL_NUM_INTERRUPTS 8
#elif defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
#define EXTERNAL_NUM_INTERRUPTS 3
#elif defined(__AVR_ATmega32U4__)
#define EXTERNAL_NUM_INTERRUPTS 4
#else
#define EXTERNAL_NUM_INTERRUPTS 2
#endif
typedef void (*voidFuncPtr)(void);
#ifdef __cplusplus
} // extern "C"
#endif
#endif

View File

@@ -1,69 +0,0 @@
/*
wiring_pulse.c - pulseIn() function
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#include "wiring_private.h"
#include "pins_arduino.h"
/* Measures the length (in microseconds) of a pulse on the pin; state is HIGH
* or LOW, the type of pulse to measure. Works on pulses from 2-3 microseconds
* to 3 minutes in length, but must be called at least a few dozen microseconds
* before the start of the pulse. */
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout)
{
// cache the port and bit of the pin in order to speed up the
// pulse width measuring loop and achieve finer resolution. calling
// digitalRead() instead yields much coarser resolution.
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
uint8_t stateMask = (state ? bit : 0);
unsigned long width = 0; // keep initialization out of time critical area
// convert the timeout from microseconds to a number of times through
// the initial loop; it takes 16 clock cycles per iteration.
unsigned long numloops = 0;
unsigned long maxloops = microsecondsToClockCycles(timeout) / 16;
// wait for any previous pulse to end
while ((*portInputRegister(port) & bit) == stateMask)
if (numloops++ == maxloops)
return 0;
// wait for the pulse to start
while ((*portInputRegister(port) & bit) != stateMask)
if (numloops++ == maxloops)
return 0;
// wait for the pulse to stop
while ((*portInputRegister(port) & bit) == stateMask) {
if (numloops++ == maxloops)
return 0;
width++;
}
// convert the reading to microseconds. The loop has been determined
// to be 20 clock cycles long and have about 16 clocks between the edge
// and the start of the loop. There will be some error introduced by
// the interrupt handlers.
return clockCyclesToMicroseconds(width * 21 + 16);
}

View File

@@ -1,55 +0,0 @@
/*
wiring_shift.c - shiftOut() function
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#include "wiring_private.h"
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t value = 0;
uint8_t i;
for (i = 0; i < 8; ++i) {
digitalWrite(clockPin, HIGH);
if (bitOrder == LSBFIRST)
value |= digitalRead(dataPin) << i;
else
value |= digitalRead(dataPin) << (7 - i);
digitalWrite(clockPin, LOW);
}
return value;
}
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
uint8_t i;
for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST)
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}

View File

@@ -1,285 +0,0 @@
/*
pins_arduino.h - Pin definition functions for Arduino
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2007 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
Changelog
-----------
11/25/11 - ryan@ryanmsutton.com - Add pins for Sanguino 644P and 1284P
07/15/12 - ryan@ryanmsutton.com - Updated for arduino0101
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <avr/pgmspace.h>
#define NOT_A_PIN 0
#define NOT_A_PORT 0
#define NOT_ON_TIMER 0
#define TIMER0A 1
#define TIMER0B 2
#define TIMER1A 3
#define TIMER1B 4
#define TIMER2 5
#define TIMER2A 6
#define TIMER2B 7
#define TIMER3A 8
#define TIMER3B 9
#define TIMER3C 10
#define TIMER4A 11
#define TIMER4B 12
#define TIMER4C 13
#define TIMER5A 14
#define TIMER5B 15
#define TIMER5C 16
const static uint8_t SS = 4;
const static uint8_t MOSI = 5;
const static uint8_t MISO = 6;
const static uint8_t SCK = 7;
static const uint8_t SDA = 17;
static const uint8_t SCL = 16;
static const uint8_t LED_BUILTIN = 13;
static const uint8_t A0 = 31;
static const uint8_t A1 = 30;
static const uint8_t A2 = 29;
static const uint8_t A3 = 28;
static const uint8_t A4 = 27;
static const uint8_t A5 = 26;
static const uint8_t A6 = 25;
static const uint8_t A7 = 24;
// On the ATmega1280, the addresses of some of the port registers are
// greater than 255, so we can't store them in uint8_t's.
// extern const uint16_t PROGMEM port_to_mode_PGM[];
// extern const uint16_t PROGMEM port_to_input_PGM[];
// extern const uint16_t PROGMEM port_to_output_PGM[];
// extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
// extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
// extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
// ATMEL ATMEGA644P / SANGUINO
//
// +---\/---+
// INT0 (D 0) PB0 1| |40 PA0 (AI 0 / D31)
// INT1 (D 1) PB1 2| |39 PA1 (AI 1 / D30)
// INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D29)
// PWM (D 3) PB3 4| |37 PA3 (AI 3 / D28)
// PWM (D 4) PB4 5| |36 PA4 (AI 4 / D27)
// MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D26)
// MISO (D 6) PB6 7| |34 PA6 (AI 6 / D25)
// SCK (D 7) PB7 8| |33 PA7 (AI 7 / D24)
// RST 9| |32 AREF
// VCC 10| |31 GND
// GND 11| |30 AVCC
// XTAL2 12| |29 PC7 (D 23)
// XTAL1 13| |28 PC6 (D 22)
// RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI
// TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO
// RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS
// TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK
// PWM (D 12) PD4 18| |23 PC1 (D 17) SDA
// PWM (D 13) PD5 19| |22 PC0 (D 16) SCL
// PWM (D 14) PD6 20| |21 PD7 (D 15) PWM
// +--------+
//
#define NUM_DIGITAL_PINS 24
#define NUM_ANALOG_INPUTS 8
#define analogInputToDigitalPin(p) ((p < 7) ? (p) + 24 : -1)
#define digitalPinHasPWM(p) ((p) == 3 || (p) == 4 || (p) == 12 || (p) == 13 || (p) == 14 || (p) == 15 )
#define digitalPinToPCICR(p) ( (((p) >= 0) && ((p) <= 31)) ? (&PCICR) : ((uint8_t *)0) )
#define digitalPinToPCICRbit(p) ( (((p) >= 24) && ((p) <= 31)) ? 0 : \
( (((p) >= 0) && ((p) <= 7)) ? 1 : \
( (((p) >= 16) && ((p) <= 23)) ? 2 : \
( (((p) >= 8) && ((p) <= 15)) ? 3 : \
0 ) ) ) )
#define digitalPinToPCMSK(p) ( (((p) >= 24) && ((p) <= 31)) ? (&PCMSK0) : \
( (((p) >= 0) && ((p) <= 7)) ? (&PCMSK1) : \
( (((p) >= 16) && ((p) <= 23)) ? (&PCMSK2) : \
( (((p) >= 8) && ((p) <= 15)) ? (&PCMSK3) : \
((uint8_t *)0) ) ) ) )
#define digitalPinToPCMSKbit(p) ( (((p) >= 24) && ((p) <= 31)) ? (31 - (p)) : \
( (((p) >= 0) && ((p) <= 7)) ? (p) : \
( (((p) >= 16) && ((p) <= 23)) ? ((p) - 16) : \
( (((p) >= 8) && ((p) <= 15)) ? ((p) - 8) : \
0 ) ) ) )
#define PA 1
#define PB 2
#define PC 3
#define PD 4
#define PE 5
#define PF 6
#define PG 7
#define PH 8
#define PJ 10
#define PK 11
#define PL 12
#ifdef ARDUINO_MAIN
// these arrays map port names (e.g. port B) to the
// appropriate addresses for various functions (e.g. reading
// and writing)
const uint16_t PROGMEM port_to_mode_PGM[] =
{
NOT_A_PORT,
(uint16_t) &DDRA,
(uint16_t) &DDRB,
(uint16_t) &DDRC,
(uint16_t) &DDRD,
};
const uint16_t PROGMEM port_to_output_PGM[] =
{
NOT_A_PORT,
(uint16_t) &PORTA,
(uint16_t) &PORTB,
(uint16_t) &PORTC,
(uint16_t) &PORTD,
};
const uint16_t PROGMEM port_to_input_PGM[] =
{
NOT_A_PORT,
(uint16_t) &PINA,
(uint16_t) &PINB,
(uint16_t) &PINC,
(uint16_t) &PIND,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] =
{
PB, /* 0 */
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PD, /* 8 */
PD,
PD,
PD,
PD,
PD,
PD,
PD,
PC, /* 16 */
PC,
PC,
PC,
PC,
PC,
PC,
PC,
PA, /* 24 */
PA,
PA,
PA,
PA,
PA,
PA,
PA /* 31 */
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] =
{
_BV(0), /* 0, port B */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(0), /* 8, port D */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(0), /* 16, port C */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(7), /* 24, port A */
_BV(6),
_BV(5),
_BV(4),
_BV(3),
_BV(2),
_BV(1),
_BV(0)
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] =
{
NOT_ON_TIMER, /* 0 - PB0 */
NOT_ON_TIMER, /* 1 - PB1 */
NOT_ON_TIMER, /* 2 - PB2 */
TIMER0A, /* 3 - PB3 */
TIMER0B, /* 4 - PB4 */
NOT_ON_TIMER, /* 5 - PB5 */
NOT_ON_TIMER, /* 6 - PB6 */
NOT_ON_TIMER, /* 7 - PB7 */
NOT_ON_TIMER, /* 8 - PD0 */
NOT_ON_TIMER, /* 9 - PD1 */
NOT_ON_TIMER, /* 10 - PD2 */
NOT_ON_TIMER, /* 11 - PD3 */
TIMER1B, /* 12 - PD4 */
TIMER1A, /* 13 - PD5 */
TIMER2B, /* 14 - PD6 */
TIMER2A, /* 15 - PD7 */
NOT_ON_TIMER, /* 16 - PC0 */
NOT_ON_TIMER, /* 17 - PC1 */
NOT_ON_TIMER, /* 18 - PC2 */
NOT_ON_TIMER, /* 19 - PC3 */
NOT_ON_TIMER, /* 20 - PC4 */
NOT_ON_TIMER, /* 21 - PC5 */
NOT_ON_TIMER, /* 22 - PC6 */
NOT_ON_TIMER, /* 23 - PC7 */
NOT_ON_TIMER, /* 24 - PA0 */
NOT_ON_TIMER, /* 25 - PA1 */
NOT_ON_TIMER, /* 26 - PA2 */
NOT_ON_TIMER, /* 27 - PA3 */
NOT_ON_TIMER, /* 28 - PA4 */
NOT_ON_TIMER, /* 29 - PA5 */
NOT_ON_TIMER, /* 30 - PA6 */
NOT_ON_TIMER /* 31 - PA7 */
};
#endif
#endif

View File

@@ -1,22 +0,0 @@
# See: http://code.google.com/p/arduino/wiki/Platforms
##############################################################
mega2560.name=RAMBo
mega2560.upload.protocol=wiring
mega2560.upload.maximum_size=258048
mega2560.upload.speed=115200
mega2560.bootloader.low_fuses=0xFF
mega2560.bootloader.high_fuses=0xD8
mega2560.bootloader.extended_fuses=0xFD
mega2560.bootloader.path=stk500v2
mega2560.bootloader.file=stk500boot_v2_mega2560.hex
mega2560.bootloader.unlock_bits=0x3F
mega2560.bootloader.lock_bits=0x0F
mega2560.build.mcu=atmega2560
mega2560.build.f_cpu=16000000L
mega2560.build.core=arduino
mega2560.build.variant=standard

View File

@@ -1,215 +0,0 @@
#ifndef Arduino_h
#define Arduino_h
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "binary.h"
#ifdef __cplusplus
extern "C"{
#endif
#define HIGH 0x1
#define LOW 0x0
#define INPUT 0x0
#define OUTPUT 0x1
#define INPUT_PULLUP 0x2
#define true 0x1
#define false 0x0
#define PI 3.1415926535897932384626433832795
#define HALF_PI 1.5707963267948966192313216916398
#define TWO_PI 6.283185307179586476925286766559
#define DEG_TO_RAD 0.017453292519943295769236907684886
#define RAD_TO_DEG 57.295779513082320876798154814105
#define SERIAL 0x0
#define DISPLAY 0x1
#define LSBFIRST 0
#define MSBFIRST 1
#define CHANGE 1
#define FALLING 2
#define RISING 3
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
#define DEFAULT 0
#define EXTERNAL 1
#define INTERNAL 2
#else
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
#define INTERNAL1V1 2
#define INTERNAL2V56 3
#else
#define INTERNAL 3
#endif
#define DEFAULT 1
#define EXTERNAL 0
#endif
// undefine stdlib's abs if encountered
#ifdef abs
#undef abs
#endif
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(x) ((x)>0?(x):-(x))
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
#define radians(deg) ((deg)*DEG_TO_RAD)
#define degrees(rad) ((rad)*RAD_TO_DEG)
#define sq(x) ((x)*(x))
#define interrupts() sei()
#define noInterrupts() cli()
#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )
#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() )
#define lowByte(w) ((uint8_t) ((w) & 0xff))
#define highByte(w) ((uint8_t) ((w) >> 8))
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
typedef unsigned int word;
#define bit(b) (1UL << (b))
typedef uint8_t boolean;
typedef uint8_t byte;
void init(void);
void pinMode(uint8_t, uint8_t);
void digitalWrite(uint8_t, uint8_t);
int digitalRead(uint8_t);
int analogRead(uint8_t);
void analogReference(uint8_t mode);
void analogWrite(uint8_t, int);
unsigned long millis(void);
unsigned long micros(void);
void delay(unsigned long);
void delayMicroseconds(unsigned int us);
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
void attachInterrupt(uint8_t, void (*)(void), int mode);
void detachInterrupt(uint8_t);
void setup(void);
void loop(void);
// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.
#define analogInPinToBit(P) (P)
// On the ATmega1280, the addresses of some of the port registers are
// greater than 255, so we can't store them in uint8_t's.
extern const uint16_t PROGMEM port_to_mode_PGM[];
extern const uint16_t PROGMEM port_to_input_PGM[];
extern const uint16_t PROGMEM port_to_output_PGM[];
extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.
//
// These perform slightly better as macros compared to inline functions
//
#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
#define analogInPinToBit(P) (P)
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )
#define NOT_A_PIN 0
#define NOT_A_PORT 0
#ifdef ARDUINO_MAIN
#define PA 1
#define PB 2
#define PC 3
#define PD 4
#define PE 5
#define PF 6
#define PG 7
#define PH 8
#define PJ 10
#define PK 11
#define PL 12
#endif
#define NOT_ON_TIMER 0
#define TIMER0A 1
#define TIMER0B 2
#define TIMER1A 3
#define TIMER1B 4
#define TIMER2 5
#define TIMER2A 6
#define TIMER2B 7
#define TIMER3A 8
#define TIMER3B 9
#define TIMER3C 10
#define TIMER4A 11
#define TIMER4B 12
#define TIMER4C 13
#define TIMER4D 14
#define TIMER5A 15
#define TIMER5B 16
#define TIMER5C 17
#ifdef __cplusplus
} // extern "C"
#endif
#ifdef __cplusplus
#include "WCharacter.h"
#include "WString.h"
#include "HardwareSerial.h"
uint16_t makeWord(uint16_t w);
uint16_t makeWord(byte h, byte l);
#define word(...) makeWord(__VA_ARGS__)
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
void noTone(uint8_t _pin);
// WMath prototypes
long random(long);
long random(long, long);
void randomSeed(unsigned int);
long map(long, long, long, long, long);
#endif
#include "pins_arduino.h"
#endif

View File

@@ -1,239 +0,0 @@
/* Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#include "Platform.h"
#include "USBAPI.h"
#include <avr/wdt.h>
#if defined(USBCON)
#ifdef CDC_ENABLED
#if (RAMEND < 1000)
#define SERIAL_BUFFER_SIZE 16
#else
#define SERIAL_BUFFER_SIZE 64
#endif
struct ring_buffer
{
unsigned char buffer[SERIAL_BUFFER_SIZE];
volatile int head;
volatile int tail;
};
ring_buffer cdc_rx_buffer = { { 0 }, 0, 0};
typedef struct
{
u32 dwDTERate;
u8 bCharFormat;
u8 bParityType;
u8 bDataBits;
u8 lineState;
} LineInfo;
static volatile LineInfo _usbLineInfo = { 57600, 0x00, 0x00, 0x00, 0x00 };
#define WEAK __attribute__ ((weak))
extern const CDCDescriptor _cdcInterface PROGMEM;
const CDCDescriptor _cdcInterface =
{
D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1),
// CDC communication interface
D_INTERFACE(CDC_ACM_INTERFACE,1,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0),
D_CDCCS(CDC_HEADER,0x10,0x01), // Header (1.10 bcd)
D_CDCCS(CDC_CALL_MANAGEMENT,1,1), // Device handles call management (not)
D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT,6), // SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported
D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE), // Communication interface is master, data interface is slave 0
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),USB_ENDPOINT_TYPE_INTERRUPT,0x10,0x40),
// CDC data interface
D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0),
D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,0x40,0),
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,0x40,0)
};
int WEAK CDC_GetInterface(u8* interfaceNum)
{
interfaceNum[0] += 2; // uses 2
return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface));
}
bool WEAK CDC_Setup(Setup& setup)
{
u8 r = setup.bRequest;
u8 requestType = setup.bmRequestType;
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
{
if (CDC_GET_LINE_CODING == r)
{
USB_SendControl(0,(void*)&_usbLineInfo,7);
return true;
}
}
if (REQUEST_HOSTTODEVICE_CLASS_INTERFACE == requestType)
{
if (CDC_SET_LINE_CODING == r)
{
USB_RecvControl((void*)&_usbLineInfo,7);
return true;
}
if (CDC_SET_CONTROL_LINE_STATE == r)
{
_usbLineInfo.lineState = setup.wValueL;
// auto-reset into the bootloader is triggered when the port, already
// open at 1200 bps, is closed. this is the signal to start the watchdog
// with a relatively long period so it can finish housekeeping tasks
// like servicing endpoints before the sketch ends
if (1200 == _usbLineInfo.dwDTERate) {
// We check DTR state to determine if host port is open (bit 0 of lineState).
if ((_usbLineInfo.lineState & 0x01) == 0) {
*(uint16_t *)0x0800 = 0x7777;
wdt_enable(WDTO_120MS);
} else {
// Most OSs do some intermediate steps when configuring ports and DTR can
// twiggle more than once before stabilizing.
// To avoid spurious resets we set the watchdog to 250ms and eventually
// cancel if DTR goes back high.
wdt_disable();
wdt_reset();
*(uint16_t *)0x0800 = 0x0;
}
}
return true;
}
}
return false;
}
int _serialPeek = -1;
void Serial_::begin(uint16_t baud_count)
{
}
void Serial_::end(void)
{
}
void Serial_::accept(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
int i = (unsigned int)(buffer->head+1) % SERIAL_BUFFER_SIZE;
// if we should be storing the received character into the location
// just before the tail (meaning that the head would advance to the
// current location of the tail), we're about to overflow the buffer
// and so we don't write the character or advance the head.
// while we have room to store a byte
while (i != buffer->tail) {
int c = USB_Recv(CDC_RX);
if (c == -1)
break; // no more data
buffer->buffer[buffer->head] = c;
buffer->head = i;
i = (unsigned int)(buffer->head+1) % SERIAL_BUFFER_SIZE;
}
}
int Serial_::available(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
return (unsigned int)(SERIAL_BUFFER_SIZE + buffer->head - buffer->tail) % SERIAL_BUFFER_SIZE;
}
int Serial_::peek(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
if (buffer->head == buffer->tail) {
return -1;
} else {
return buffer->buffer[buffer->tail];
}
}
int Serial_::read(void)
{
ring_buffer *buffer = &cdc_rx_buffer;
// if the head isn't ahead of the tail, we don't have any characters
if (buffer->head == buffer->tail) {
return -1;
} else {
unsigned char c = buffer->buffer[buffer->tail];
buffer->tail = (unsigned int)(buffer->tail + 1) % SERIAL_BUFFER_SIZE;
return c;
}
}
void Serial_::flush(void)
{
USB_Flush(CDC_TX);
}
size_t Serial_::write(uint8_t c)
{
/* only try to send bytes if the high-level CDC connection itself
is open (not just the pipe) - the OS should set lineState when the port
is opened and clear lineState when the port is closed.
bytes sent before the user opens the connection or after
the connection is closed are lost - just like with a UART. */
// TODO - ZE - check behavior on different OSes and test what happens if an
// open connection isn't broken cleanly (cable is yanked out, host dies
// or locks up, or host virtual serial port hangs)
if (_usbLineInfo.lineState > 0) {
int r = USB_Send(CDC_TX,&c,1);
if (r > 0) {
return r;
} else {
setWriteError();
return 0;
}
}
setWriteError();
return 0;
}
// This operator is a convenient way for a sketch to check whether the
// port has actually been configured and opened by the host (as opposed
// to just being connected to the host). It can be used, for example, in
// setup() before printing to ensure that an application on the host is
// actually ready to receive and display the data.
// We add a short delay before returning to fix a bug observed by Federico
// where the port is configured (lineState != 0) but not quite opened.
Serial_::operator bool() {
bool result = false;
if (_usbLineInfo.lineState > 0)
result = true;
delay(10);
return result;
}
Serial_ Serial;
#endif
#endif /* if defined(USBCON) */

View File

@@ -1,26 +0,0 @@
#ifndef client_h
#define client_h
#include "Print.h"
#include "Stream.h"
#include "IPAddress.h"
class Client : public Stream {
public:
virtual int connect(IPAddress ip, uint16_t port) =0;
virtual int connect(const char *host, uint16_t port) =0;
virtual size_t write(uint8_t) =0;
virtual size_t write(const uint8_t *buf, size_t size) =0;
virtual int available() = 0;
virtual int read() = 0;
virtual int read(uint8_t *buf, size_t size) = 0;
virtual int peek() = 0;
virtual void flush() = 0;
virtual void stop() = 0;
virtual uint8_t connected() = 0;
virtual operator bool() = 0;
protected:
uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); };
};
#endif

View File

@@ -1,520 +0,0 @@
/* Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#include "Platform.h"
#include "USBAPI.h"
#include "USBDesc.h"
#if defined(USBCON)
#ifdef HID_ENABLED
//#define RAWHID_ENABLED
// Singletons for mouse and keyboard
Mouse_ Mouse;
Keyboard_ Keyboard;
//================================================================================
//================================================================================
// HID report descriptor
#define LSB(_x) ((_x) & 0xFF)
#define MSB(_x) ((_x) >> 8)
#define RAWHID_USAGE_PAGE 0xFFC0
#define RAWHID_USAGE 0x0C00
#define RAWHID_TX_SIZE 64
#define RAWHID_RX_SIZE 64
extern const u8 _hidReportDescriptor[] PROGMEM;
const u8 _hidReportDescriptor[] = {
// Mouse
0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 54
0x09, 0x02, // USAGE (Mouse)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
0x85, 0x01, // REPORT_ID (1)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x03, // USAGE_MAXIMUM (Button 3)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x03, // REPORT_COUNT (3)
0x75, 0x01, // REPORT_SIZE (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x38, // USAGE (Wheel)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x06, // INPUT (Data,Var,Rel)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
// Keyboard
0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 47
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x02, // REPORT_ID (2)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x65, // LOGICAL_MAXIMUM (101)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0, // END_COLLECTION
#if RAWHID_ENABLED
// RAW HID
0x06, LSB(RAWHID_USAGE_PAGE), MSB(RAWHID_USAGE_PAGE), // 30
0x0A, LSB(RAWHID_USAGE), MSB(RAWHID_USAGE),
0xA1, 0x01, // Collection 0x01
0x85, 0x03, // REPORT_ID (3)
0x75, 0x08, // report size = 8 bits
0x15, 0x00, // logical minimum = 0
0x26, 0xFF, 0x00, // logical maximum = 255
0x95, 64, // report count TX
0x09, 0x01, // usage
0x81, 0x02, // Input (array)
0x95, 64, // report count RX
0x09, 0x02, // usage
0x91, 0x02, // Output (array)
0xC0 // end collection
#endif
};
extern const HIDDescriptor _hidInterface PROGMEM;
const HIDDescriptor _hidInterface =
{
D_INTERFACE(HID_INTERFACE,1,3,0,0),
D_HIDREPORT(sizeof(_hidReportDescriptor)),
D_ENDPOINT(USB_ENDPOINT_IN (HID_ENDPOINT_INT),USB_ENDPOINT_TYPE_INTERRUPT,0x40,0x01)
};
//================================================================================
//================================================================================
// Driver
u8 _hid_protocol = 1;
u8 _hid_idle = 1;
#define WEAK __attribute__ ((weak))
int WEAK HID_GetInterface(u8* interfaceNum)
{
interfaceNum[0] += 1; // uses 1
return USB_SendControl(TRANSFER_PGM,&_hidInterface,sizeof(_hidInterface));
}
int WEAK HID_GetDescriptor(int i)
{
return USB_SendControl(TRANSFER_PGM,_hidReportDescriptor,sizeof(_hidReportDescriptor));
}
void WEAK HID_SendReport(u8 id, const void* data, int len)
{
USB_Send(HID_TX, &id, 1);
USB_Send(HID_TX | TRANSFER_RELEASE,data,len);
}
bool WEAK HID_Setup(Setup& setup)
{
u8 r = setup.bRequest;
u8 requestType = setup.bmRequestType;
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
{
if (HID_GET_REPORT == r)
{
//HID_GetReport();
return true;
}
if (HID_GET_PROTOCOL == r)
{
//Send8(_hid_protocol); // TODO
return true;
}
}
if (REQUEST_HOSTTODEVICE_CLASS_INTERFACE == requestType)
{
if (HID_SET_PROTOCOL == r)
{
_hid_protocol = setup.wValueL;
return true;
}
if (HID_SET_IDLE == r)
{
_hid_idle = setup.wValueL;
return true;
}
}
return false;
}
//================================================================================
//================================================================================
// Mouse
Mouse_::Mouse_(void) : _buttons(0)
{
}
void Mouse_::begin(void)
{
}
void Mouse_::end(void)
{
}
void Mouse_::click(uint8_t b)
{
_buttons = b;
move(0,0,0);
_buttons = 0;
move(0,0,0);
}
void Mouse_::move(signed char x, signed char y, signed char wheel)
{
u8 m[4];
m[0] = _buttons;
m[1] = x;
m[2] = y;
m[3] = wheel;
HID_SendReport(1,m,4);
}
void Mouse_::buttons(uint8_t b)
{
if (b != _buttons)
{
_buttons = b;
move(0,0,0);
}
}
void Mouse_::press(uint8_t b)
{
buttons(_buttons | b);
}
void Mouse_::release(uint8_t b)
{
buttons(_buttons & ~b);
}
bool Mouse_::isPressed(uint8_t b)
{
if ((b & _buttons) > 0)
return true;
return false;
}
//================================================================================
//================================================================================
// Keyboard
Keyboard_::Keyboard_(void)
{
}
void Keyboard_::begin(void)
{
}
void Keyboard_::end(void)
{
}
void Keyboard_::sendReport(KeyReport* keys)
{
HID_SendReport(2,keys,sizeof(KeyReport));
}
extern
const uint8_t _asciimap[128] PROGMEM;
#define SHIFT 0x80
const uint8_t _asciimap[128] =
{
0x00, // NUL
0x00, // SOH
0x00, // STX
0x00, // ETX
0x00, // EOT
0x00, // ENQ
0x00, // ACK
0x00, // BEL
0x2a, // BS Backspace
0x2b, // TAB Tab
0x28, // LF Enter
0x00, // VT
0x00, // FF
0x00, // CR
0x00, // SO
0x00, // SI
0x00, // DEL
0x00, // DC1
0x00, // DC2
0x00, // DC3
0x00, // DC4
0x00, // NAK
0x00, // SYN
0x00, // ETB
0x00, // CAN
0x00, // EM
0x00, // SUB
0x00, // ESC
0x00, // FS
0x00, // GS
0x00, // RS
0x00, // US
0x2c, // ' '
0x1e|SHIFT, // !
0x34|SHIFT, // "
0x20|SHIFT, // #
0x21|SHIFT, // $
0x22|SHIFT, // %
0x24|SHIFT, // &
0x34, // '
0x26|SHIFT, // (
0x27|SHIFT, // )
0x25|SHIFT, // *
0x2e|SHIFT, // +
0x36, // ,
0x2d, // -
0x37, // .
0x38, // /
0x27, // 0
0x1e, // 1
0x1f, // 2
0x20, // 3
0x21, // 4
0x22, // 5
0x23, // 6
0x24, // 7
0x25, // 8
0x26, // 9
0x33|SHIFT, // :
0x33, // ;
0x36|SHIFT, // <
0x2e, // =
0x37|SHIFT, // >
0x38|SHIFT, // ?
0x1f|SHIFT, // @
0x04|SHIFT, // A
0x05|SHIFT, // B
0x06|SHIFT, // C
0x07|SHIFT, // D
0x08|SHIFT, // E
0x09|SHIFT, // F
0x0a|SHIFT, // G
0x0b|SHIFT, // H
0x0c|SHIFT, // I
0x0d|SHIFT, // J
0x0e|SHIFT, // K
0x0f|SHIFT, // L
0x10|SHIFT, // M
0x11|SHIFT, // N
0x12|SHIFT, // O
0x13|SHIFT, // P
0x14|SHIFT, // Q
0x15|SHIFT, // R
0x16|SHIFT, // S
0x17|SHIFT, // T
0x18|SHIFT, // U
0x19|SHIFT, // V
0x1a|SHIFT, // W
0x1b|SHIFT, // X
0x1c|SHIFT, // Y
0x1d|SHIFT, // Z
0x2f, // [
0x31, // bslash
0x30, // ]
0x23|SHIFT, // ^
0x2d|SHIFT, // _
0x35, // `
0x04, // a
0x05, // b
0x06, // c
0x07, // d
0x08, // e
0x09, // f
0x0a, // g
0x0b, // h
0x0c, // i
0x0d, // j
0x0e, // k
0x0f, // l
0x10, // m
0x11, // n
0x12, // o
0x13, // p
0x14, // q
0x15, // r
0x16, // s
0x17, // t
0x18, // u
0x19, // v
0x1a, // w
0x1b, // x
0x1c, // y
0x1d, // z
0x2f|SHIFT, //
0x31|SHIFT, // |
0x30|SHIFT, // }
0x35|SHIFT, // ~
0 // DEL
};
uint8_t USBPutChar(uint8_t c);
// press() adds the specified key (printing, non-printing, or modifier)
// to the persistent key report and sends the report. Because of the way
// USB HID works, the host acts like the key remains pressed until we
// call release(), releaseAll(), or otherwise clear the report and resend.
size_t Keyboard_::press(uint8_t k)
{
uint8_t i;
if (k >= 136) { // it's a non-printing key (not a modifier)
k = k - 136;
} else if (k >= 128) { // it's a modifier key
_keyReport.modifiers |= (1<<(k-128));
k = 0;
} else { // it's a printing key
k = pgm_read_byte(_asciimap + k);
if (!k) {
setWriteError();
return 0;
}
if (k & 0x80) { // it's a capital letter or other character reached with shift
_keyReport.modifiers |= 0x02; // the left shift modifier
k &= 0x7F;
}
}
// Add k to the key report only if it's not already present
// and if there is an empty slot.
if (_keyReport.keys[0] != k && _keyReport.keys[1] != k &&
_keyReport.keys[2] != k && _keyReport.keys[3] != k &&
_keyReport.keys[4] != k && _keyReport.keys[5] != k) {
for (i=0; i<6; i++) {
if (_keyReport.keys[i] == 0x00) {
_keyReport.keys[i] = k;
break;
}
}
if (i == 6) {
setWriteError();
return 0;
}
}
sendReport(&_keyReport);
return 1;
}
// release() takes the specified key out of the persistent key report and
// sends the report. This tells the OS the key is no longer pressed and that
// it shouldn't be repeated any more.
size_t Keyboard_::release(uint8_t k)
{
uint8_t i;
if (k >= 136) { // it's a non-printing key (not a modifier)
k = k - 136;
} else if (k >= 128) { // it's a modifier key
_keyReport.modifiers &= ~(1<<(k-128));
k = 0;
} else { // it's a printing key
k = pgm_read_byte(_asciimap + k);
if (!k) {
return 0;
}
if (k & 0x80) { // it's a capital letter or other character reached with shift
_keyReport.modifiers &= ~(0x02); // the left shift modifier
k &= 0x7F;
}
}
// Test the key report to see if k is present. Clear it if it exists.
// Check all positions in case the key is present more than once (which it shouldn't be)
for (i=0; i<6; i++) {
if (0 != k && _keyReport.keys[i] == k) {
_keyReport.keys[i] = 0x00;
}
}
sendReport(&_keyReport);
return 1;
}
void Keyboard_::releaseAll(void)
{
_keyReport.keys[0] = 0;
_keyReport.keys[1] = 0;
_keyReport.keys[2] = 0;
_keyReport.keys[3] = 0;
_keyReport.keys[4] = 0;
_keyReport.keys[5] = 0;
_keyReport.modifiers = 0;
sendReport(&_keyReport);
}
size_t Keyboard_::write(uint8_t c)
{
uint8_t p = press(c); // Keydown
uint8_t r = release(c); // Keyup
return (p); // just return the result of press() since release() almost always returns 1
}
#endif
#endif /* if defined(USBCON) */

View File

@@ -1,519 +0,0 @@
/*
HardwareSerial.cpp - Hardware serial library for Wiring
Copyright (c) 2006 Nicholas Zambetti. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Modified 23 November 2006 by David A. Mellis
Modified 28 September 2010 by Mark Sproul
Modified 14 August 2012 by Alarus
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "Arduino.h"
#include "wiring_private.h"
// this next line disables the entire HardwareSerial.cpp,
// this is so I can support Attiny series and any other chip without a uart
#if defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H)
#include "HardwareSerial.h"
/*
* on ATmega8, the uart and its bits are not numbered, so there is no "TXC0"
* definition.
*/
#if !defined(TXC0)
#if defined(TXC)
#define TXC0 TXC
#elif defined(TXC1)
// Some devices have uart1 but no uart0
#define TXC0 TXC1
#else
#error TXC0 not definable in HardwareSerial.h
#endif
#endif
// Define constants and variables for buffering incoming serial data. We're
// using a ring buffer (I think), in which head is the index of the location
// to which to write the next incoming character and tail is the index of the
// location from which to read.
#if (RAMEND < 1000)
#define SERIAL_BUFFER_SIZE 16
#else
#define SERIAL_BUFFER_SIZE 64
#endif
struct ring_buffer
{
unsigned char buffer[SERIAL_BUFFER_SIZE];
volatile unsigned int head;
volatile unsigned int tail;
};
#if defined(USBCON)
ring_buffer rx_buffer = { { 0 }, 0, 0};
ring_buffer tx_buffer = { { 0 }, 0, 0};
#endif
#if defined(UBRRH) || defined(UBRR0H)
ring_buffer rx_buffer = { { 0 }, 0, 0 };
ring_buffer tx_buffer = { { 0 }, 0, 0 };
#endif
#if defined(UBRR1H)
ring_buffer rx_buffer1 = { { 0 }, 0, 0 };
ring_buffer tx_buffer1 = { { 0 }, 0, 0 };
#endif
#if defined(UBRR2H)
ring_buffer rx_buffer2 = { { 0 }, 0, 0 };
ring_buffer tx_buffer2 = { { 0 }, 0, 0 };
#endif
#if defined(UBRR3H)
ring_buffer rx_buffer3 = { { 0 }, 0, 0 };
ring_buffer tx_buffer3 = { { 0 }, 0, 0 };
#endif
inline void store_char(unsigned char c, ring_buffer *buffer)
{
int i = (unsigned int)(buffer->head + 1) % SERIAL_BUFFER_SIZE;
// if we should be storing the received character into the location
// just before the tail (meaning that the head would advance to the
// current location of the tail), we're about to overflow the buffer
// and so we don't write the character or advance the head.
if (i != buffer->tail) {
buffer->buffer[buffer->head] = c;
buffer->head = i;
}
}
#if !defined(USART0_RX_vect) && defined(USART1_RX_vect)
// do nothing - on the 32u4 the first USART is USART1
#else
#if !defined(USART_RX_vect) && !defined(SIG_USART0_RECV) && \
!defined(SIG_UART0_RECV) && !defined(USART0_RX_vect) && \
!defined(SIG_UART_RECV)
#error "Don't know what the Data Received vector is called for the first UART"
#else
void serialEvent() __attribute__((weak));
void serialEvent() {}
#define serialEvent_implemented
#if defined(USART_RX_vect)
SIGNAL(USART_RX_vect)
#elif defined(SIG_USART0_RECV)
SIGNAL(SIG_USART0_RECV)
#elif defined(SIG_UART0_RECV)
SIGNAL(SIG_UART0_RECV)
#elif defined(USART0_RX_vect)
SIGNAL(USART0_RX_vect)
#elif defined(SIG_UART_RECV)
SIGNAL(SIG_UART_RECV)
#endif
{
#if defined(UDR0)
if (bit_is_clear(UCSR0A, UPE0)) {
unsigned char c = UDR0;
store_char(c, &rx_buffer);
} else {
unsigned char c = UDR0;
};
#elif defined(UDR)
if (bit_is_clear(UCSRA, PE)) {
unsigned char c = UDR;
store_char(c, &rx_buffer);
} else {
unsigned char c = UDR;
};
#else
#error UDR not defined
#endif
}
#endif
#endif
#if defined(USART1_RX_vect)
void serialEvent1() __attribute__((weak));
void serialEvent1() {}
#define serialEvent1_implemented
SIGNAL(USART1_RX_vect)
{
if (bit_is_clear(UCSR1A, UPE1)) {
unsigned char c = UDR1;
store_char(c, &rx_buffer1);
} else {
unsigned char c = UDR1;
};
}
#elif defined(SIG_USART1_RECV)
#error SIG_USART1_RECV
#endif
#if defined(USART2_RX_vect) && defined(UDR2)
void serialEvent2() __attribute__((weak));
void serialEvent2() {}
#define serialEvent2_implemented
SIGNAL(USART2_RX_vect)
{
if (bit_is_clear(UCSR2A, UPE2)) {
unsigned char c = UDR2;
store_char(c, &rx_buffer2);
} else {
unsigned char c = UDR2;
};
}
#elif defined(SIG_USART2_RECV)
#error SIG_USART2_RECV
#endif
#if defined(USART3_RX_vect) && defined(UDR3)
void serialEvent3() __attribute__((weak));
void serialEvent3() {}
#define serialEvent3_implemented
SIGNAL(USART3_RX_vect)
{
if (bit_is_clear(UCSR3A, UPE3)) {
unsigned char c = UDR3;
store_char(c, &rx_buffer3);
} else {
unsigned char c = UDR3;
};
}
#elif defined(SIG_USART3_RECV)
#error SIG_USART3_RECV
#endif
void serialEventRun(void)
{
#ifdef serialEvent_implemented
if (Serial.available()) serialEvent();
#endif
#ifdef serialEvent1_implemented
if (Serial1.available()) serialEvent1();
#endif
#ifdef serialEvent2_implemented
if (Serial2.available()) serialEvent2();
#endif
#ifdef serialEvent3_implemented
if (Serial3.available()) serialEvent3();
#endif
}
#if !defined(USART0_UDRE_vect) && defined(USART1_UDRE_vect)
// do nothing - on the 32u4 the first USART is USART1
#else
#if !defined(UART0_UDRE_vect) && !defined(UART_UDRE_vect) && !defined(USART0_UDRE_vect) && !defined(USART_UDRE_vect)
#error "Don't know what the Data Register Empty vector is called for the first UART"
#else
#if defined(UART0_UDRE_vect)
ISR(UART0_UDRE_vect)
#elif defined(UART_UDRE_vect)
ISR(UART_UDRE_vect)
#elif defined(USART0_UDRE_vect)
ISR(USART0_UDRE_vect)
#elif defined(USART_UDRE_vect)
ISR(USART_UDRE_vect)
#endif
{
if (tx_buffer.head == tx_buffer.tail) {
// Buffer empty, so disable interrupts
#if defined(UCSR0B)
cbi(UCSR0B, UDRIE0);
#else
cbi(UCSRB, UDRIE);
#endif
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer.buffer[tx_buffer.tail];
tx_buffer.tail = (tx_buffer.tail + 1) % SERIAL_BUFFER_SIZE;
#if defined(UDR0)
UDR0 = c;
#elif defined(UDR)
UDR = c;
#else
#error UDR not defined
#endif
}
}
#endif
#endif
#ifdef USART1_UDRE_vect
ISR(USART1_UDRE_vect)
{
if (tx_buffer1.head == tx_buffer1.tail) {
// Buffer empty, so disable interrupts
cbi(UCSR1B, UDRIE1);
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer1.buffer[tx_buffer1.tail];
tx_buffer1.tail = (tx_buffer1.tail + 1) % SERIAL_BUFFER_SIZE;
UDR1 = c;
}
}
#endif
#ifdef USART2_UDRE_vect
ISR(USART2_UDRE_vect)
{
if (tx_buffer2.head == tx_buffer2.tail) {
// Buffer empty, so disable interrupts
cbi(UCSR2B, UDRIE2);
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer2.buffer[tx_buffer2.tail];
tx_buffer2.tail = (tx_buffer2.tail + 1) % SERIAL_BUFFER_SIZE;
UDR2 = c;
}
}
#endif
#ifdef USART3_UDRE_vect
ISR(USART3_UDRE_vect)
{
if (tx_buffer3.head == tx_buffer3.tail) {
// Buffer empty, so disable interrupts
cbi(UCSR3B, UDRIE3);
}
else {
// There is more data in the output buffer. Send the next byte
unsigned char c = tx_buffer3.buffer[tx_buffer3.tail];
tx_buffer3.tail = (tx_buffer3.tail + 1) % SERIAL_BUFFER_SIZE;
UDR3 = c;
}
}
#endif
// Constructors ////////////////////////////////////////////////////////////////
HardwareSerial::HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
volatile uint8_t *ucsra, volatile uint8_t *ucsrb,
volatile uint8_t *ucsrc, volatile uint8_t *udr,
uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x)
{
_rx_buffer = rx_buffer;
_tx_buffer = tx_buffer;
_ubrrh = ubrrh;
_ubrrl = ubrrl;
_ucsra = ucsra;
_ucsrb = ucsrb;
_ucsrc = ucsrc;
_udr = udr;
_rxen = rxen;
_txen = txen;
_rxcie = rxcie;
_udrie = udrie;
_u2x = u2x;
}
// Public Methods //////////////////////////////////////////////////////////////
void HardwareSerial::begin(unsigned long baud)
{
uint16_t baud_setting;
bool use_u2x = true;
#if F_CPU == 16000000UL
// hardcoded exception for compatibility with the bootloader shipped
// with the Duemilanove and previous boards and the firmware on the 8U2
// on the Uno and Mega 2560.
if (baud == 57600) {
use_u2x = false;
}
#endif
try_again:
if (use_u2x) {
*_ucsra = 1 << _u2x;
baud_setting = (F_CPU / 4 / baud - 1) / 2;
} else {
*_ucsra = 0;
baud_setting = (F_CPU / 8 / baud - 1) / 2;
}
if ((baud_setting > 4095) && use_u2x)
{
use_u2x = false;
goto try_again;
}
// assign the baud_setting, a.k.a. ubbr (USART Baud Rate Register)
*_ubrrh = baud_setting >> 8;
*_ubrrl = baud_setting;
transmitting = false;
sbi(*_ucsrb, _rxen);
sbi(*_ucsrb, _txen);
sbi(*_ucsrb, _rxcie);
cbi(*_ucsrb, _udrie);
}
void HardwareSerial::begin(unsigned long baud, byte config)
{
uint16_t baud_setting;
uint8_t current_config;
bool use_u2x = true;
#if F_CPU == 16000000UL
// hardcoded exception for compatibility with the bootloader shipped
// with the Duemilanove and previous boards and the firmware on the 8U2
// on the Uno and Mega 2560.
if (baud == 57600) {
use_u2x = false;
}
#endif
try_again:
if (use_u2x) {
*_ucsra = 1 << _u2x;
baud_setting = (F_CPU / 4 / baud - 1) / 2;
} else {
*_ucsra = 0;
baud_setting = (F_CPU / 8 / baud - 1) / 2;
}
if ((baud_setting > 4095) && use_u2x)
{
use_u2x = false;
goto try_again;
}
// assign the baud_setting, a.k.a. ubbr (USART Baud Rate Register)
*_ubrrh = baud_setting >> 8;
*_ubrrl = baud_setting;
//set the data bits, parity, and stop bits
#if defined(__AVR_ATmega8__)
config |= 0x80; // select UCSRC register (shared with UBRRH)
#endif
*_ucsrc = config;
sbi(*_ucsrb, _rxen);
sbi(*_ucsrb, _txen);
sbi(*_ucsrb, _rxcie);
cbi(*_ucsrb, _udrie);
}
void HardwareSerial::end()
{
// wait for transmission of outgoing data
while (_tx_buffer->head != _tx_buffer->tail)
;
cbi(*_ucsrb, _rxen);
cbi(*_ucsrb, _txen);
cbi(*_ucsrb, _rxcie);
cbi(*_ucsrb, _udrie);
// clear any received data
_rx_buffer->head = _rx_buffer->tail;
}
int HardwareSerial::available(void)
{
return (unsigned int)(SERIAL_BUFFER_SIZE + _rx_buffer->head - _rx_buffer->tail) % SERIAL_BUFFER_SIZE;
}
int HardwareSerial::peek(void)
{
if (_rx_buffer->head == _rx_buffer->tail) {
return -1;
} else {
return _rx_buffer->buffer[_rx_buffer->tail];
}
}
int HardwareSerial::read(void)
{
// if the head isn't ahead of the tail, we don't have any characters
if (_rx_buffer->head == _rx_buffer->tail) {
return -1;
} else {
unsigned char c = _rx_buffer->buffer[_rx_buffer->tail];
_rx_buffer->tail = (unsigned int)(_rx_buffer->tail + 1) % SERIAL_BUFFER_SIZE;
return c;
}
}
void HardwareSerial::flush()
{
// UDR is kept full while the buffer is not empty, so TXC triggers when EMPTY && SENT
while (transmitting && ! (*_ucsra & _BV(TXC0)));
transmitting = false;
}
size_t HardwareSerial::write(uint8_t c)
{
int i = (_tx_buffer->head + 1) % SERIAL_BUFFER_SIZE;
// If the output buffer is full, there's nothing for it other than to
// wait for the interrupt handler to empty it a bit
// ???: return 0 here instead?
while (i == _tx_buffer->tail)
;
_tx_buffer->buffer[_tx_buffer->head] = c;
_tx_buffer->head = i;
sbi(*_ucsrb, _udrie);
// clear the TXC bit -- "can be cleared by writing a one to its bit location"
transmitting = true;
sbi(*_ucsra, TXC0);
return 1;
}
HardwareSerial::operator bool() {
return true;
}
// Preinstantiate Objects //////////////////////////////////////////////////////
#if defined(UBRRH) && defined(UBRRL)
HardwareSerial Serial(&rx_buffer, &tx_buffer, &UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR, RXEN, TXEN, RXCIE, UDRIE, U2X);
#elif defined(UBRR0H) && defined(UBRR0L)
HardwareSerial Serial(&rx_buffer, &tx_buffer, &UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0, RXEN0, TXEN0, RXCIE0, UDRIE0, U2X0);
#elif defined(USBCON)
// do nothing - Serial object and buffers are initialized in CDC code
#else
#error no serial port defined (port 0)
#endif
#if defined(UBRR1H)
HardwareSerial Serial1(&rx_buffer1, &tx_buffer1, &UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UCSR1C, &UDR1, RXEN1, TXEN1, RXCIE1, UDRIE1, U2X1);
#endif
#if defined(UBRR2H)
HardwareSerial Serial2(&rx_buffer2, &tx_buffer2, &UBRR2H, &UBRR2L, &UCSR2A, &UCSR2B, &UCSR2C, &UDR2, RXEN2, TXEN2, RXCIE2, UDRIE2, U2X2);
#endif
#if defined(UBRR3H)
HardwareSerial Serial3(&rx_buffer3, &tx_buffer3, &UBRR3H, &UBRR3L, &UCSR3A, &UCSR3B, &UCSR3C, &UDR3, RXEN3, TXEN3, RXCIE3, UDRIE3, U2X3);
#endif
#endif // whole file

View File

@@ -1,115 +0,0 @@
/*
HardwareSerial.h - Hardware serial library for Wiring
Copyright (c) 2006 Nicholas Zambetti. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Modified 28 September 2010 by Mark Sproul
Modified 14 August 2012 by Alarus
*/
#ifndef HardwareSerial_h
#define HardwareSerial_h
#include <inttypes.h>
#include "Stream.h"
struct ring_buffer;
class HardwareSerial : public Stream
{
private:
ring_buffer *_rx_buffer;
ring_buffer *_tx_buffer;
volatile uint8_t *_ubrrh;
volatile uint8_t *_ubrrl;
volatile uint8_t *_ucsra;
volatile uint8_t *_ucsrb;
volatile uint8_t *_ucsrc;
volatile uint8_t *_udr;
uint8_t _rxen;
uint8_t _txen;
uint8_t _rxcie;
uint8_t _udrie;
uint8_t _u2x;
bool transmitting;
public:
HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
volatile uint8_t *ucsra, volatile uint8_t *ucsrb,
volatile uint8_t *ucsrc, volatile uint8_t *udr,
uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x);
void begin(unsigned long);
void begin(unsigned long, uint8_t);
void end();
virtual int available(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
inline size_t write(unsigned long n) { return write((uint8_t)n); }
inline size_t write(long n) { return write((uint8_t)n); }
inline size_t write(unsigned int n) { return write((uint8_t)n); }
inline size_t write(int n) { return write((uint8_t)n); }
using Print::write; // pull in write(str) and write(buf, size) from Print
operator bool();
};
// Define config for Serial.begin(baud, config);
#define SERIAL_5N1 0x00
#define SERIAL_6N1 0x02
#define SERIAL_7N1 0x04
#define SERIAL_8N1 0x06
#define SERIAL_5N2 0x08
#define SERIAL_6N2 0x0A
#define SERIAL_7N2 0x0C
#define SERIAL_8N2 0x0E
#define SERIAL_5E1 0x20
#define SERIAL_6E1 0x22
#define SERIAL_7E1 0x24
#define SERIAL_8E1 0x26
#define SERIAL_5E2 0x28
#define SERIAL_6E2 0x2A
#define SERIAL_7E2 0x2C
#define SERIAL_8E2 0x2E
#define SERIAL_5O1 0x30
#define SERIAL_6O1 0x32
#define SERIAL_7O1 0x34
#define SERIAL_8O1 0x36
#define SERIAL_5O2 0x38
#define SERIAL_6O2 0x3A
#define SERIAL_7O2 0x3C
#define SERIAL_8O2 0x3E
#if defined(UBRRH) || defined(UBRR0H)
extern HardwareSerial Serial;
#elif defined(USBCON)
#include "USBAPI.h"
// extern HardwareSerial Serial_;
#endif
#if defined(UBRR1H)
extern HardwareSerial Serial1;
#endif
#if defined(UBRR2H)
extern HardwareSerial Serial2;
#endif
#if defined(UBRR3H)
extern HardwareSerial Serial3;
#endif
extern void serialEventRun(void) __attribute__((weak));
#endif

View File

@@ -1,56 +0,0 @@
#include <Arduino.h>
#include <IPAddress.h>
IPAddress::IPAddress()
{
memset(_address, 0, sizeof(_address));
}
IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet)
{
_address[0] = first_octet;
_address[1] = second_octet;
_address[2] = third_octet;
_address[3] = fourth_octet;
}
IPAddress::IPAddress(uint32_t address)
{
memcpy(_address, &address, sizeof(_address));
}
IPAddress::IPAddress(const uint8_t *address)
{
memcpy(_address, address, sizeof(_address));
}
IPAddress& IPAddress::operator=(const uint8_t *address)
{
memcpy(_address, address, sizeof(_address));
return *this;
}
IPAddress& IPAddress::operator=(uint32_t address)
{
memcpy(_address, (const uint8_t *)&address, sizeof(_address));
return *this;
}
bool IPAddress::operator==(const uint8_t* addr)
{
return memcmp(addr, _address, sizeof(_address)) == 0;
}
size_t IPAddress::printTo(Print& p) const
{
size_t n = 0;
for (int i =0; i < 3; i++)
{
n += p.print(_address[i], DEC);
n += p.print('.');
}
n += p.print(_address[3], DEC);
return n;
}

View File

@@ -1,76 +0,0 @@
/*
*
* MIT License:
* Copyright (c) 2011 Adrian McEwen
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* adrianm@mcqn.com 1/1/2011
*/
#ifndef IPAddress_h
#define IPAddress_h
#include <Printable.h>
// A class to make it easier to handle and pass around IP addresses
class IPAddress : public Printable {
private:
uint8_t _address[4]; // IPv4 address
// Access the raw byte array containing the address. Because this returns a pointer
// to the internal structure rather than a copy of the address this function should only
// be used when you know that the usage of the returned uint8_t* will be transient and not
// stored.
uint8_t* raw_address() { return _address; };
public:
// Constructors
IPAddress();
IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet);
IPAddress(uint32_t address);
IPAddress(const uint8_t *address);
// Overloaded cast operator to allow IPAddress objects to be used where a pointer
// to a four-byte uint8_t array is expected
operator uint32_t() { return *((uint32_t*)_address); };
bool operator==(const IPAddress& addr) { return (*((uint32_t*)_address)) == (*((uint32_t*)addr._address)); };
bool operator==(const uint8_t* addr);
// Overloaded index operator to allow getting and setting individual octets of the address
uint8_t operator[](int index) const { return _address[index]; };
uint8_t& operator[](int index) { return _address[index]; };
// Overloaded copy operators to allow initialisation of IPAddress objects from other types
IPAddress& operator=(const uint8_t *address);
IPAddress& operator=(uint32_t address);
virtual size_t printTo(Print& p) const;
friend class EthernetClass;
friend class UDP;
friend class Client;
friend class Server;
friend class DhcpClass;
friend class DNSClient;
};
const IPAddress INADDR_NONE(0,0,0,0);
#endif

View File

@@ -1,23 +0,0 @@
#ifndef __PLATFORM_H__
#define __PLATFORM_H__
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <util/delay.h>
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
#include "Arduino.h"
#if defined(USBCON)
#include "USBDesc.h"
#include "USBCore.h"
#include "USBAPI.h"
#endif /* if defined(USBCON) */
#endif

View File

@@ -1,268 +0,0 @@
/*
Print.cpp - Base class that provides print() and println()
Copyright (c) 2008 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Modified 23 November 2006 by David A. Mellis
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "Arduino.h"
#include "Print.h"
// Public Methods //////////////////////////////////////////////////////////////
/* default implementation: may be overridden */
size_t Print::write(const uint8_t *buffer, size_t size)
{
size_t n = 0;
while (size--) {
n += write(*buffer++);
}
return n;
}
size_t Print::print(const __FlashStringHelper *ifsh)
{
const char PROGMEM *p = (const char PROGMEM *)ifsh;
size_t n = 0;
while (1) {
unsigned char c = pgm_read_byte(p++);
if (c == 0) break;
n += write(c);
}
return n;
}
size_t Print::print(const String &s)
{
size_t n = 0;
for (uint16_t i = 0; i < s.length(); i++) {
n += write(s[i]);
}
return n;
}
size_t Print::print(const char str[])
{
return write(str);
}
size_t Print::print(char c)
{
return write(c);
}
size_t Print::print(unsigned char b, int base)
{
return print((unsigned long) b, base);
}
size_t Print::print(int n, int base)
{
return print((long) n, base);
}
size_t Print::print(unsigned int n, int base)
{
return print((unsigned long) n, base);
}
size_t Print::print(long n, int base)
{
if (base == 0) {
return write(n);
} else if (base == 10) {
if (n < 0) {
int t = print('-');
n = -n;
return printNumber(n, 10) + t;
}
return printNumber(n, 10);
} else {
return printNumber(n, base);
}
}
size_t Print::print(unsigned long n, int base)
{
if (base == 0) return write(n);
else return printNumber(n, base);
}
size_t Print::print(double n, int digits)
{
return printFloat(n, digits);
}
size_t Print::println(const __FlashStringHelper *ifsh)
{
size_t n = print(ifsh);
n += println();
return n;
}
size_t Print::print(const Printable& x)
{
return x.printTo(*this);
}
size_t Print::println(void)
{
size_t n = print('\r');
n += print('\n');
return n;
}
size_t Print::println(const String &s)
{
size_t n = print(s);
n += println();
return n;
}
size_t Print::println(const char c[])
{
size_t n = print(c);
n += println();
return n;
}
size_t Print::println(char c)
{
size_t n = print(c);
n += println();
return n;
}
size_t Print::println(unsigned char b, int base)
{
size_t n = print(b, base);
n += println();
return n;
}
size_t Print::println(int num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(unsigned int num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(long num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(unsigned long num, int base)
{
size_t n = print(num, base);
n += println();
return n;
}
size_t Print::println(double num, int digits)
{
size_t n = print(num, digits);
n += println();
return n;
}
size_t Print::println(const Printable& x)
{
size_t n = print(x);
n += println();
return n;
}
// Private Methods /////////////////////////////////////////////////////////////
size_t Print::printNumber(unsigned long n, uint8_t base) {
char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
char *str = &buf[sizeof(buf) - 1];
*str = '\0';
// prevent crash if called with base == 1
if (base < 2) base = 10;
do {
unsigned long m = n;
n /= base;
char c = m - base * n;
*--str = c < 10 ? c + '0' : c + 'A' - 10;
} while(n);
return write(str);
}
size_t Print::printFloat(double number, uint8_t digits)
{
size_t n = 0;
if (isnan(number)) return print("nan");
if (isinf(number)) return print("inf");
if (number > 4294967040.0) return print ("ovf"); // constant determined empirically
if (number <-4294967040.0) return print ("ovf"); // constant determined empirically
// Handle negative numbers
if (number < 0.0)
{
n += print('-');
number = -number;
}
// Round correctly so that print(1.999, 2) prints as "2.00"
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;
number += rounding;
// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
n += print(int_part);
// Print the decimal point, but only if there are digits beyond
if (digits > 0) {
n += print(".");
}
// Extract digits from the remainder one at a time
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
n += print(toPrint);
remainder -= toPrint;
}
return n;
}

View File

@@ -1,81 +0,0 @@
/*
Print.h - Base class that provides print() and println()
Copyright (c) 2008 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef Print_h
#define Print_h
#include <inttypes.h>
#include <stdio.h> // for size_t
#include "WString.h"
#include "Printable.h"
#define DEC 10
#define HEX 16
#define OCT 8
#define BIN 2
class Print
{
private:
int write_error;
size_t printNumber(unsigned long, uint8_t);
size_t printFloat(double, uint8_t);
protected:
void setWriteError(int err = 1) { write_error = err; }
public:
Print() : write_error(0) {}
int getWriteError() { return write_error; }
void clearWriteError() { setWriteError(0); }
virtual size_t write(uint8_t) = 0;
size_t write(const char *str) {
if (str == NULL) return 0;
return write((const uint8_t *)str, strlen(str));
}
virtual size_t write(const uint8_t *buffer, size_t size);
size_t print(const __FlashStringHelper *);
size_t print(const String &);
size_t print(const char[]);
size_t print(char);
size_t print(unsigned char, int = DEC);
size_t print(int, int = DEC);
size_t print(unsigned int, int = DEC);
size_t print(long, int = DEC);
size_t print(unsigned long, int = DEC);
size_t print(double, int = 2);
size_t print(const Printable&);
size_t println(const __FlashStringHelper *);
size_t println(const String &s);
size_t println(const char[]);
size_t println(char);
size_t println(unsigned char, int = DEC);
size_t println(int, int = DEC);
size_t println(unsigned int, int = DEC);
size_t println(long, int = DEC);
size_t println(unsigned long, int = DEC);
size_t println(double, int = 2);
size_t println(const Printable&);
size_t println(void);
};
#endif

View File

@@ -1,40 +0,0 @@
/*
Printable.h - Interface class that allows printing of complex types
Copyright (c) 2011 Adrian McEwen. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef Printable_h
#define Printable_h
#include <new.h>
class Print;
/** The Printable class provides a way for new classes to allow themselves to be printed.
By deriving from Printable and implementing the printTo method, it will then be possible
for users to print out instances of this class by passing them into the usual
Print::print and Print::println methods.
*/
class Printable
{
public:
virtual size_t printTo(Print& p) const = 0;
};
#endif

View File

@@ -1,9 +0,0 @@
#ifndef server_h
#define server_h
class Server : public Print {
public:
virtual void begin() =0;
};
#endif

View File

@@ -1,270 +0,0 @@
/*
Stream.cpp - adds parsing methods to Stream class
Copyright (c) 2008 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Created July 2011
parsing functions based on TextFinder library by Michael Margolis
*/
#include "Arduino.h"
#include "Stream.h"
#define PARSE_TIMEOUT 1000 // default number of milli-seconds to wait
#define NO_SKIP_CHAR 1 // a magic char not found in a valid ASCII numeric field
// private method to read stream with timeout
int Stream::timedRead()
{
int c;
_startMillis = millis();
do {
c = read();
if (c >= 0) return c;
} while(millis() - _startMillis < _timeout);
return -1; // -1 indicates timeout
}
// private method to peek stream with timeout
int Stream::timedPeek()
{
int c;
_startMillis = millis();
do {
c = peek();
if (c >= 0) return c;
} while(millis() - _startMillis < _timeout);
return -1; // -1 indicates timeout
}
// returns peek of the next digit in the stream or -1 if timeout
// discards non-numeric characters
int Stream::peekNextDigit()
{
int c;
while (1) {
c = timedPeek();
if (c < 0) return c; // timeout
if (c == '-') return c;
if (c >= '0' && c <= '9') return c;
read(); // discard non-numeric
}
}
// Public Methods
//////////////////////////////////////////////////////////////
void Stream::setTimeout(unsigned long timeout) // sets the maximum number of milliseconds to wait
{
_timeout = timeout;
}
// find returns true if the target string is found
bool Stream::find(char *target)
{
return findUntil(target, NULL);
}
// reads data from the stream until the target string of given length is found
// returns true if target string is found, false if timed out
bool Stream::find(char *target, size_t length)
{
return findUntil(target, length, NULL, 0);
}
// as find but search ends if the terminator string is found
bool Stream::findUntil(char *target, char *terminator)
{
return findUntil(target, strlen(target), terminator, strlen(terminator));
}
// reads data from the stream until the target string of the given length is found
// search terminated if the terminator string is found
// returns true if target string is found, false if terminated or timed out
bool Stream::findUntil(char *target, size_t targetLen, char *terminator, size_t termLen)
{
size_t index = 0; // maximum target string length is 64k bytes!
size_t termIndex = 0;
int c;
if( *target == 0)
return true; // return true if target is a null string
while( (c = timedRead()) > 0){
if(c != target[index])
index = 0; // reset index if any char does not match
if( c == target[index]){
//////Serial.print("found "); Serial.write(c); Serial.print("index now"); Serial.println(index+1);
if(++index >= targetLen){ // return true if all chars in the target match
return true;
}
}
if(termLen > 0 && c == terminator[termIndex]){
if(++termIndex >= termLen)
return false; // return false if terminate string found before target string
}
else
termIndex = 0;
}
return false;
}
// returns the first valid (long) integer value from the current position.
// initial characters that are not digits (or the minus sign) are skipped
// function is terminated by the first character that is not a digit.
long Stream::parseInt()
{
return parseInt(NO_SKIP_CHAR); // terminate on first non-digit character (or timeout)
}
// as above but a given skipChar is ignored
// this allows format characters (typically commas) in values to be ignored
long Stream::parseInt(char skipChar)
{
boolean isNegative = false;
long value = 0;
int c;
c = peekNextDigit();
// ignore non numeric leading characters
if(c < 0)
return 0; // zero returned if timeout
do{
if(c == skipChar)
; // ignore this charactor
else if(c == '-')
isNegative = true;
else if(c >= '0' && c <= '9') // is c a digit?
value = value * 10 + c - '0';
read(); // consume the character we got with peek
c = timedPeek();
}
while( (c >= '0' && c <= '9') || c == skipChar );
if(isNegative)
value = -value;
return value;
}
// as parseInt but returns a floating point value
float Stream::parseFloat()
{
return parseFloat(NO_SKIP_CHAR);
}
// as above but the given skipChar is ignored
// this allows format characters (typically commas) in values to be ignored
float Stream::parseFloat(char skipChar){
boolean isNegative = false;
boolean isFraction = false;
long value = 0;
char c;
float fraction = 1.0;
c = peekNextDigit();
// ignore non numeric leading characters
if(c < 0)
return 0; // zero returned if timeout
do{
if(c == skipChar)
; // ignore
else if(c == '-')
isNegative = true;
else if (c == '.')
isFraction = true;
else if(c >= '0' && c <= '9') { // is c a digit?
value = value * 10 + c - '0';
if(isFraction)
fraction *= 0.1;
}
read(); // consume the character we got with peek
c = timedPeek();
}
while( (c >= '0' && c <= '9') || c == '.' || c == skipChar );
if(isNegative)
value = -value;
if(isFraction)
return value * fraction;
else
return value;
}
// read characters from stream into buffer
// terminates if length characters have been read, or timeout (see setTimeout)
// returns the number of characters placed in the buffer
// the buffer is NOT null terminated.
//
size_t Stream::readBytes(char *buffer, size_t length)
{
size_t count = 0;
while (count < length) {
int c = timedRead();
if (c < 0) break;
*buffer++ = (char)c;
count++;
}
return count;
}
// as readBytes with terminator character
// terminates if length characters have been read, timeout, or if the terminator character detected
// returns the number of characters placed in the buffer (0 means no valid data found)
size_t Stream::readBytesUntil(char terminator, char *buffer, size_t length)
{
if (length < 1) return 0;
size_t index = 0;
while (index < length) {
int c = timedRead();
if (c < 0 || c == terminator) break;
*buffer++ = (char)c;
index++;
}
return index; // return number of characters, not including null terminator
}
String Stream::readString()
{
String ret;
int c = timedRead();
while (c >= 0)
{
ret += (char)c;
c = timedRead();
}
return ret;
}
String Stream::readStringUntil(char terminator)
{
String ret;
int c = timedRead();
while (c >= 0 && c != terminator)
{
ret += (char)c;
c = timedRead();
}
return ret;
}

View File

@@ -1,96 +0,0 @@
/*
Stream.h - base class for character-based streams.
Copyright (c) 2010 David A. Mellis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
parsing functions based on TextFinder library by Michael Margolis
*/
#ifndef Stream_h
#define Stream_h
#include <inttypes.h>
#include "Print.h"
// compatability macros for testing
/*
#define getInt() parseInt()
#define getInt(skipChar) parseInt(skipchar)
#define getFloat() parseFloat()
#define getFloat(skipChar) parseFloat(skipChar)
#define getString( pre_string, post_string, buffer, length)
readBytesBetween( pre_string, terminator, buffer, length)
*/
class Stream : public Print
{
private:
unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read
unsigned long _startMillis; // used for timeout measurement
int timedRead(); // private method to read stream with timeout
int timedPeek(); // private method to peek stream with timeout
int peekNextDigit(); // returns the next numeric digit in the stream or -1 if timeout
public:
virtual int available() = 0;
virtual int read() = 0;
virtual int peek() = 0;
virtual void flush() = 0;
Stream() {_timeout=1000;}
// parsing methods
void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second
bool find(char *target); // reads data from the stream until the target string is found
// returns true if target string is found, false if timed out (see setTimeout)
bool find(char *target, size_t length); // reads data from the stream until the target string of given length is found
// returns true if target string is found, false if timed out
bool findUntil(char *target, char *terminator); // as find but search ends if the terminator string is found
bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen); // as above but search ends if the terminate string is found
long parseInt(); // returns the first valid (long) integer value from the current position.
// initial characters that are not digits (or the minus sign) are skipped
// integer is terminated by the first character that is not a digit.
float parseFloat(); // float version of parseInt
size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer
// terminates if length characters have been read or timeout (see setTimeout)
// returns the number of characters placed in the buffer (0 means no valid data found)
size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character
// terminates if length characters have been read, timeout, or if the terminator character detected
// returns the number of characters placed in the buffer (0 means no valid data found)
// Arduino String functions to be added here
String readString();
String readStringUntil(char terminator);
protected:
long parseInt(char skipChar); // as above but the given skipChar is ignored
// as above but the given skipChar is ignored
// this allows format characters (typically commas) in values to be ignored
float parseFloat(char skipChar); // as above but the given skipChar is ignored
};
#endif

View File

@@ -1,616 +0,0 @@
/* Tone.cpp
A Tone Generator Library
Written by Brett Hagman
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Version Modified By Date Comments
------- ----------- -------- --------
0001 B Hagman 09/08/02 Initial coding
0002 B Hagman 09/08/18 Multiple pins
0003 B Hagman 09/08/18 Moved initialization from constructor to begin()
0004 B Hagman 09/09/26 Fixed problems with ATmega8
0005 B Hagman 09/11/23 Scanned prescalars for best fit on 8 bit timers
09/11/25 Changed pin toggle method to XOR
09/11/25 Fixed timer0 from being excluded
0006 D Mellis 09/12/29 Replaced objects with functions
0007 M Sproul 10/08/29 Changed #ifdefs from cpu to register
0008 S Kanemoto 12/06/22 Fixed for Leonardo by @maris_HY
*************************************************/
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "Arduino.h"
#include "pins_arduino.h"
#if defined(__AVR_ATmega8__) || defined(__AVR_ATmega128__)
#define TCCR2A TCCR2
#define TCCR2B TCCR2
#define COM2A1 COM21
#define COM2A0 COM20
#define OCR2A OCR2
#define TIMSK2 TIMSK
#define OCIE2A OCIE2
#define TIMER2_COMPA_vect TIMER2_COMP_vect
#define TIMSK1 TIMSK
#endif
// timerx_toggle_count:
// > 0 - duration specified
// = 0 - stopped
// < 0 - infinitely (until stop() method called, or new play() called)
#if !defined(__AVR_ATmega8__)
volatile long timer0_toggle_count;
volatile uint8_t *timer0_pin_port;
volatile uint8_t timer0_pin_mask;
#endif
volatile long timer1_toggle_count;
volatile uint8_t *timer1_pin_port;
volatile uint8_t timer1_pin_mask;
volatile long timer2_toggle_count;
volatile uint8_t *timer2_pin_port;
volatile uint8_t timer2_pin_mask;
#if defined(TIMSK3)
volatile long timer3_toggle_count;
volatile uint8_t *timer3_pin_port;
volatile uint8_t timer3_pin_mask;
#endif
#if defined(TIMSK4)
volatile long timer4_toggle_count;
volatile uint8_t *timer4_pin_port;
volatile uint8_t timer4_pin_mask;
#endif
#if defined(TIMSK5)
volatile long timer5_toggle_count;
volatile uint8_t *timer5_pin_port;
volatile uint8_t timer5_pin_mask;
#endif
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 3, 4, 5, 1, 0 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255, 255, 255, 255 */ };
#elif defined(__AVR_ATmega8__)
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ };
#elif defined(__AVR_ATmega32U4__)
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER3
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 3 /*, 1 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ };
#else
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
// Leave timer 0 to last.
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1, 0 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255 */ };
#endif
static int8_t toneBegin(uint8_t _pin)
{
int8_t _timer = -1;
// if we're already using the pin, the timer should be configured.
for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
if (tone_pins[i] == _pin) {
return pgm_read_byte(tone_pin_to_timer_PGM + i);
}
}
// search for an unused timer.
for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
if (tone_pins[i] == 255) {
tone_pins[i] = _pin;
_timer = pgm_read_byte(tone_pin_to_timer_PGM + i);
break;
}
}
if (_timer != -1)
{
// Set timer specific stuff
// All timers in CTC mode
// 8 bit timers will require changing prescalar values,
// whereas 16 bit timers are set to either ck/1 or ck/64 prescalar
switch (_timer)
{
#if defined(TCCR0A) && defined(TCCR0B)
case 0:
// 8 bit timer
TCCR0A = 0;
TCCR0B = 0;
bitWrite(TCCR0A, WGM01, 1);
bitWrite(TCCR0B, CS00, 1);
timer0_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer0_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR1A) && defined(TCCR1B) && defined(WGM12)
case 1:
// 16 bit timer
TCCR1A = 0;
TCCR1B = 0;
bitWrite(TCCR1B, WGM12, 1);
bitWrite(TCCR1B, CS10, 1);
timer1_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer1_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR2A) && defined(TCCR2B)
case 2:
// 8 bit timer
TCCR2A = 0;
TCCR2B = 0;
bitWrite(TCCR2A, WGM21, 1);
bitWrite(TCCR2B, CS20, 1);
timer2_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer2_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR3A) && defined(TCCR3B) && defined(TIMSK3)
case 3:
// 16 bit timer
TCCR3A = 0;
TCCR3B = 0;
bitWrite(TCCR3B, WGM32, 1);
bitWrite(TCCR3B, CS30, 1);
timer3_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer3_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR4A) && defined(TCCR4B) && defined(TIMSK4)
case 4:
// 16 bit timer
TCCR4A = 0;
TCCR4B = 0;
#if defined(WGM42)
bitWrite(TCCR4B, WGM42, 1);
#elif defined(CS43)
#warning this may not be correct
// atmega32u4
bitWrite(TCCR4B, CS43, 1);
#endif
bitWrite(TCCR4B, CS40, 1);
timer4_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer4_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
#if defined(TCCR5A) && defined(TCCR5B) && defined(TIMSK5)
case 5:
// 16 bit timer
TCCR5A = 0;
TCCR5B = 0;
bitWrite(TCCR5B, WGM52, 1);
bitWrite(TCCR5B, CS50, 1);
timer5_pin_port = portOutputRegister(digitalPinToPort(_pin));
timer5_pin_mask = digitalPinToBitMask(_pin);
break;
#endif
}
}
return _timer;
}
// frequency (in hertz) and duration (in milliseconds).
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration)
{
uint8_t prescalarbits = 0b001;
long toggle_count = 0;
uint32_t ocr = 0;
int8_t _timer;
_timer = toneBegin(_pin);
if (_timer >= 0)
{
// Set the pinMode as OUTPUT
pinMode(_pin, OUTPUT);
// if we are using an 8 bit timer, scan through prescalars to find the best fit
if (_timer == 0 || _timer == 2)
{
ocr = F_CPU / frequency / 2 - 1;
prescalarbits = 0b001; // ck/1: same for both timers
if (ocr > 255)
{
ocr = F_CPU / frequency / 2 / 8 - 1;
prescalarbits = 0b010; // ck/8: same for both timers
if (_timer == 2 && ocr > 255)
{
ocr = F_CPU / frequency / 2 / 32 - 1;
prescalarbits = 0b011;
}
if (ocr > 255)
{
ocr = F_CPU / frequency / 2 / 64 - 1;
prescalarbits = _timer == 0 ? 0b011 : 0b100;
if (_timer == 2 && ocr > 255)
{
ocr = F_CPU / frequency / 2 / 128 - 1;
prescalarbits = 0b101;
}
if (ocr > 255)
{
ocr = F_CPU / frequency / 2 / 256 - 1;
prescalarbits = _timer == 0 ? 0b100 : 0b110;
if (ocr > 255)
{
// can't do any better than /1024
ocr = F_CPU / frequency / 2 / 1024 - 1;
prescalarbits = _timer == 0 ? 0b101 : 0b111;
}
}
}
}
#if defined(TCCR0B)
if (_timer == 0)
{
TCCR0B = prescalarbits;
}
else
#endif
#if defined(TCCR2B)
{
TCCR2B = prescalarbits;
}
#else
{
// dummy place holder to make the above ifdefs work
}
#endif
}
else
{
// two choices for the 16 bit timers: ck/1 or ck/64
ocr = F_CPU / frequency / 2 - 1;
prescalarbits = 0b001;
if (ocr > 0xffff)
{
ocr = F_CPU / frequency / 2 / 64 - 1;
prescalarbits = 0b011;
}
if (_timer == 1)
{
#if defined(TCCR1B)
TCCR1B = (TCCR1B & 0b11111000) | prescalarbits;
#endif
}
#if defined(TCCR3B)
else if (_timer == 3)
TCCR3B = (TCCR3B & 0b11111000) | prescalarbits;
#endif
#if defined(TCCR4B)
else if (_timer == 4)
TCCR4B = (TCCR4B & 0b11111000) | prescalarbits;
#endif
#if defined(TCCR5B)
else if (_timer == 5)
TCCR5B = (TCCR5B & 0b11111000) | prescalarbits;
#endif
}
// Calculate the toggle count
if (duration > 0)
{
toggle_count = 2 * frequency * duration / 1000;
}
else
{
toggle_count = -1;
}
// Set the OCR for the given timer,
// set the toggle count,
// then turn on the interrupts
switch (_timer)
{
#if defined(OCR0A) && defined(TIMSK0) && defined(OCIE0A)
case 0:
OCR0A = ocr;
timer0_toggle_count = toggle_count;
bitWrite(TIMSK0, OCIE0A, 1);
break;
#endif
case 1:
#if defined(OCR1A) && defined(TIMSK1) && defined(OCIE1A)
OCR1A = ocr;
timer1_toggle_count = toggle_count;
bitWrite(TIMSK1, OCIE1A, 1);
#elif defined(OCR1A) && defined(TIMSK) && defined(OCIE1A)
// this combination is for at least the ATmega32
OCR1A = ocr;
timer1_toggle_count = toggle_count;
bitWrite(TIMSK, OCIE1A, 1);
#endif
break;
#if defined(OCR2A) && defined(TIMSK2) && defined(OCIE2A)
case 2:
OCR2A = ocr;
timer2_toggle_count = toggle_count;
bitWrite(TIMSK2, OCIE2A, 1);
break;
#endif
#if defined(TIMSK3)
case 3:
OCR3A = ocr;
timer3_toggle_count = toggle_count;
bitWrite(TIMSK3, OCIE3A, 1);
break;
#endif
#if defined(TIMSK4)
case 4:
OCR4A = ocr;
timer4_toggle_count = toggle_count;
bitWrite(TIMSK4, OCIE4A, 1);
break;
#endif
#if defined(OCR5A) && defined(TIMSK5) && defined(OCIE5A)
case 5:
OCR5A = ocr;
timer5_toggle_count = toggle_count;
bitWrite(TIMSK5, OCIE5A, 1);
break;
#endif
}
}
}
// XXX: this function only works properly for timer 2 (the only one we use
// currently). for the others, it should end the tone, but won't restore
// proper PWM functionality for the timer.
void disableTimer(uint8_t _timer)
{
switch (_timer)
{
case 0:
#if defined(TIMSK0)
TIMSK0 = 0;
#elif defined(TIMSK)
TIMSK = 0; // atmega32
#endif
break;
#if defined(TIMSK1) && defined(OCIE1A)
case 1:
bitWrite(TIMSK1, OCIE1A, 0);
break;
#endif
case 2:
#if defined(TIMSK2) && defined(OCIE2A)
bitWrite(TIMSK2, OCIE2A, 0); // disable interrupt
#endif
#if defined(TCCR2A) && defined(WGM20)
TCCR2A = (1 << WGM20);
#endif
#if defined(TCCR2B) && defined(CS22)
TCCR2B = (TCCR2B & 0b11111000) | (1 << CS22);
#endif
#if defined(OCR2A)
OCR2A = 0;
#endif
break;
#if defined(TIMSK3)
case 3:
TIMSK3 = 0;
break;
#endif
#if defined(TIMSK4)
case 4:
TIMSK4 = 0;
break;
#endif
#if defined(TIMSK5)
case 5:
TIMSK5 = 0;
break;
#endif
}
}
void noTone(uint8_t _pin)
{
int8_t _timer = -1;
for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
if (tone_pins[i] == _pin) {
_timer = pgm_read_byte(tone_pin_to_timer_PGM + i);
tone_pins[i] = 255;
}
}
disableTimer(_timer);
digitalWrite(_pin, 0);
}
#ifdef USE_TIMER0
ISR(TIMER0_COMPA_vect)
{
if (timer0_toggle_count != 0)
{
// toggle the pin
*timer0_pin_port ^= timer0_pin_mask;
if (timer0_toggle_count > 0)
timer0_toggle_count--;
}
else
{
disableTimer(0);
*timer0_pin_port &= ~(timer0_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER1
ISR(TIMER1_COMPA_vect)
{
if (timer1_toggle_count != 0)
{
// toggle the pin
*timer1_pin_port ^= timer1_pin_mask;
if (timer1_toggle_count > 0)
timer1_toggle_count--;
}
else
{
disableTimer(1);
*timer1_pin_port &= ~(timer1_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER2
ISR(TIMER2_COMPA_vect)
{
if (timer2_toggle_count != 0)
{
// toggle the pin
*timer2_pin_port ^= timer2_pin_mask;
if (timer2_toggle_count > 0)
timer2_toggle_count--;
}
else
{
// need to call noTone() so that the tone_pins[] entry is reset, so the
// timer gets initialized next time we call tone().
// XXX: this assumes timer 2 is always the first one used.
noTone(tone_pins[0]);
// disableTimer(2);
// *timer2_pin_port &= ~(timer2_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER3
ISR(TIMER3_COMPA_vect)
{
if (timer3_toggle_count != 0)
{
// toggle the pin
*timer3_pin_port ^= timer3_pin_mask;
if (timer3_toggle_count > 0)
timer3_toggle_count--;
}
else
{
disableTimer(3);
*timer3_pin_port &= ~(timer3_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER4
ISR(TIMER4_COMPA_vect)
{
if (timer4_toggle_count != 0)
{
// toggle the pin
*timer4_pin_port ^= timer4_pin_mask;
if (timer4_toggle_count > 0)
timer4_toggle_count--;
}
else
{
disableTimer(4);
*timer4_pin_port &= ~(timer4_pin_mask); // keep pin low after stop
}
}
#endif
#ifdef USE_TIMER5
ISR(TIMER5_COMPA_vect)
{
if (timer5_toggle_count != 0)
{
// toggle the pin
*timer5_pin_port ^= timer5_pin_mask;
if (timer5_toggle_count > 0)
timer5_toggle_count--;
}
else
{
disableTimer(5);
*timer5_pin_port &= ~(timer5_pin_mask); // keep pin low after stop
}
}
#endif

View File

@@ -1,196 +0,0 @@
#ifndef __USBAPI__
#define __USBAPI__
#if defined(USBCON)
//================================================================================
//================================================================================
// USB
class USBDevice_
{
public:
USBDevice_();
bool configured();
void attach();
void detach(); // Serial port goes down too...
void poll();
};
extern USBDevice_ USBDevice;
//================================================================================
//================================================================================
// Serial over CDC (Serial1 is the physical port)
class Serial_ : public Stream
{
private:
ring_buffer *_cdc_rx_buffer;
public:
void begin(uint16_t baud_count);
void end(void);
virtual int available(void);
virtual void accept(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
using Print::write; // pull in write(str) and write(buf, size) from Print
operator bool();
};
extern Serial_ Serial;
//================================================================================
//================================================================================
// Mouse
#define MOUSE_LEFT 1
#define MOUSE_RIGHT 2
#define MOUSE_MIDDLE 4
#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)
class Mouse_
{
private:
uint8_t _buttons;
void buttons(uint8_t b);
public:
Mouse_(void);
void begin(void);
void end(void);
void click(uint8_t b = MOUSE_LEFT);
void move(signed char x, signed char y, signed char wheel = 0);
void press(uint8_t b = MOUSE_LEFT); // press LEFT by default
void release(uint8_t b = MOUSE_LEFT); // release LEFT by default
bool isPressed(uint8_t b = MOUSE_LEFT); // check LEFT by default
};
extern Mouse_ Mouse;
//================================================================================
//================================================================================
// Keyboard
#define KEY_LEFT_CTRL 0x80
#define KEY_LEFT_SHIFT 0x81
#define KEY_LEFT_ALT 0x82
#define KEY_LEFT_GUI 0x83
#define KEY_RIGHT_CTRL 0x84
#define KEY_RIGHT_SHIFT 0x85
#define KEY_RIGHT_ALT 0x86
#define KEY_RIGHT_GUI 0x87
#define KEY_UP_ARROW 0xDA
#define KEY_DOWN_ARROW 0xD9
#define KEY_LEFT_ARROW 0xD8
#define KEY_RIGHT_ARROW 0xD7
#define KEY_BACKSPACE 0xB2
#define KEY_TAB 0xB3
#define KEY_RETURN 0xB0
#define KEY_ESC 0xB1
#define KEY_INSERT 0xD1
#define KEY_DELETE 0xD4
#define KEY_PAGE_UP 0xD3
#define KEY_PAGE_DOWN 0xD6
#define KEY_HOME 0xD2
#define KEY_END 0xD5
#define KEY_CAPS_LOCK 0xC1
#define KEY_F1 0xC2
#define KEY_F2 0xC3
#define KEY_F3 0xC4
#define KEY_F4 0xC5
#define KEY_F5 0xC6
#define KEY_F6 0xC7
#define KEY_F7 0xC8
#define KEY_F8 0xC9
#define KEY_F9 0xCA
#define KEY_F10 0xCB
#define KEY_F11 0xCC
#define KEY_F12 0xCD
// Low level key report: up to 6 keys and shift, ctrl etc at once
typedef struct
{
uint8_t modifiers;
uint8_t reserved;
uint8_t keys[6];
} KeyReport;
class Keyboard_ : public Print
{
private:
KeyReport _keyReport;
void sendReport(KeyReport* keys);
public:
Keyboard_(void);
void begin(void);
void end(void);
virtual size_t write(uint8_t k);
virtual size_t press(uint8_t k);
virtual size_t release(uint8_t k);
virtual void releaseAll(void);
};
extern Keyboard_ Keyboard;
//================================================================================
//================================================================================
// Low level API
typedef struct
{
uint8_t bmRequestType;
uint8_t bRequest;
uint8_t wValueL;
uint8_t wValueH;
uint16_t wIndex;
uint16_t wLength;
} Setup;
//================================================================================
//================================================================================
// HID 'Driver'
int HID_GetInterface(uint8_t* interfaceNum);
int HID_GetDescriptor(int i);
bool HID_Setup(Setup& setup);
void HID_SendReport(uint8_t id, const void* data, int len);
//================================================================================
//================================================================================
// MSC 'Driver'
int MSC_GetInterface(uint8_t* interfaceNum);
int MSC_GetDescriptor(int i);
bool MSC_Setup(Setup& setup);
bool MSC_Data(uint8_t rx,uint8_t tx);
//================================================================================
//================================================================================
// CSC 'Driver'
int CDC_GetInterface(uint8_t* interfaceNum);
int CDC_GetDescriptor(int i);
bool CDC_Setup(Setup& setup);
//================================================================================
//================================================================================
#define TRANSFER_PGM 0x80
#define TRANSFER_RELEASE 0x40
#define TRANSFER_ZERO 0x20
int USB_SendControl(uint8_t flags, const void* d, int len);
int USB_RecvControl(void* d, int len);
uint8_t USB_Available(uint8_t ep);
int USB_Send(uint8_t ep, const void* data, int len); // blocking
int USB_Recv(uint8_t ep, void* data, int len); // non-blocking
int USB_Recv(uint8_t ep); // non-blocking
void USB_Flush(uint8_t ep);
#endif
#endif /* if defined(USBCON) */

View File

@@ -1,684 +0,0 @@
/* Copyright (c) 2010, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#include "Platform.h"
#include "USBAPI.h"
#include "USBDesc.h"
#if defined(USBCON)
#define EP_TYPE_CONTROL 0x00
#define EP_TYPE_BULK_IN 0x81
#define EP_TYPE_BULK_OUT 0x80
#define EP_TYPE_INTERRUPT_IN 0xC1
#define EP_TYPE_INTERRUPT_OUT 0xC0
#define EP_TYPE_ISOCHRONOUS_IN 0x41
#define EP_TYPE_ISOCHRONOUS_OUT 0x40
/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */
#define TX_RX_LED_PULSE_MS 100
volatile u8 TxLEDPulse; /**< Milliseconds remaining for data Tx LED pulse */
volatile u8 RxLEDPulse; /**< Milliseconds remaining for data Rx LED pulse */
//==================================================================
//==================================================================
extern const u16 STRING_LANGUAGE[] PROGMEM;
extern const u16 STRING_IPRODUCT[] PROGMEM;
extern const u16 STRING_IMANUFACTURER[] PROGMEM;
extern const DeviceDescriptor USB_DeviceDescriptor PROGMEM;
extern const DeviceDescriptor USB_DeviceDescriptorA PROGMEM;
const u16 STRING_LANGUAGE[2] = {
(3<<8) | (2+2),
0x0409 // English
};
const u16 STRING_IPRODUCT[17] = {
(3<<8) | (2+2*16),
#if USB_PID == 0x8036
'A','r','d','u','i','n','o',' ','L','e','o','n','a','r','d','o'
#elif USB_PID == 0x8037
'A','r','d','u','i','n','o',' ','M','i','c','r','o',' ',' ',' '
#elif USB_PID == 0x803C
'A','r','d','u','i','n','o',' ','E','s','p','l','o','r','a',' '
#elif USB_PID == 0x9208
'L','i','l','y','P','a','d','U','S','B',' ',' ',' ',' ',' ',' '
#else
'U','S','B',' ','I','O',' ','B','o','a','r','d',' ',' ',' ',' '
#endif
};
const u16 STRING_IMANUFACTURER[12] = {
(3<<8) | (2+2*11),
#if USB_VID == 0x2341
'A','r','d','u','i','n','o',' ','L','L','C'
#elif USB_VID == 0x1b4f
'S','p','a','r','k','F','u','n',' ',' ',' '
#else
'U','n','k','n','o','w','n',' ',' ',' ',' '
#endif
};
#ifdef CDC_ENABLED
#define DEVICE_CLASS 0x02
#else
#define DEVICE_CLASS 0x00
#endif
// DEVICE DESCRIPTOR
const DeviceDescriptor USB_DeviceDescriptor =
D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
const DeviceDescriptor USB_DeviceDescriptorA =
D_DEVICE(DEVICE_CLASS,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
//==================================================================
//==================================================================
volatile u8 _usbConfiguration = 0;
static inline void WaitIN(void)
{
while (!(UEINTX & (1<<TXINI)));
}
static inline void ClearIN(void)
{
UEINTX = ~(1<<TXINI);
}
static inline void WaitOUT(void)
{
while (!(UEINTX & (1<<RXOUTI)))
;
}
static inline u8 WaitForINOrOUT()
{
while (!(UEINTX & ((1<<TXINI)|(1<<RXOUTI))))
;
return (UEINTX & (1<<RXOUTI)) == 0;
}
static inline void ClearOUT(void)
{
UEINTX = ~(1<<RXOUTI);
}
void Recv(volatile u8* data, u8 count)
{
while (count--)
*data++ = UEDATX;
RXLED1; // light the RX LED
RxLEDPulse = TX_RX_LED_PULSE_MS;
}
static inline u8 Recv8()
{
RXLED1; // light the RX LED
RxLEDPulse = TX_RX_LED_PULSE_MS;
return UEDATX;
}
static inline void Send8(u8 d)
{
UEDATX = d;
}
static inline void SetEP(u8 ep)
{
UENUM = ep;
}
static inline u8 FifoByteCount()
{
return UEBCLX;
}
static inline u8 ReceivedSetupInt()
{
return UEINTX & (1<<RXSTPI);
}
static inline void ClearSetupInt()
{
UEINTX = ~((1<<RXSTPI) | (1<<RXOUTI) | (1<<TXINI));
}
static inline void Stall()
{
UECONX = (1<<STALLRQ) | (1<<EPEN);
}
static inline u8 ReadWriteAllowed()
{
return UEINTX & (1<<RWAL);
}
static inline u8 Stalled()
{
return UEINTX & (1<<STALLEDI);
}
static inline u8 FifoFree()
{
return UEINTX & (1<<FIFOCON);
}
static inline void ReleaseRX()
{
UEINTX = 0x6B; // FIFOCON=0 NAKINI=1 RWAL=1 NAKOUTI=0 RXSTPI=1 RXOUTI=0 STALLEDI=1 TXINI=1
}
static inline void ReleaseTX()
{
UEINTX = 0x3A; // FIFOCON=0 NAKINI=0 RWAL=1 NAKOUTI=1 RXSTPI=1 RXOUTI=0 STALLEDI=1 TXINI=0
}
static inline u8 FrameNumber()
{
return UDFNUML;
}
//==================================================================
//==================================================================
u8 USBGetConfiguration(void)
{
return _usbConfiguration;
}
#define USB_RECV_TIMEOUT
class LockEP
{
u8 _sreg;
public:
LockEP(u8 ep) : _sreg(SREG)
{
cli();
SetEP(ep & 7);
}
~LockEP()
{
SREG = _sreg;
}
};
// Number of bytes, assumes a rx endpoint
u8 USB_Available(u8 ep)
{
LockEP lock(ep);
return FifoByteCount();
}
// Non Blocking receive
// Return number of bytes read
int USB_Recv(u8 ep, void* d, int len)
{
if (!_usbConfiguration || len < 0)
return -1;
LockEP lock(ep);
u8 n = FifoByteCount();
len = min(n,len);
n = len;
u8* dst = (u8*)d;
while (n--)
*dst++ = Recv8();
if (len && !FifoByteCount()) // release empty buffer
ReleaseRX();
return len;
}
// Recv 1 byte if ready
int USB_Recv(u8 ep)
{
u8 c;
if (USB_Recv(ep,&c,1) != 1)
return -1;
return c;
}
// Space in send EP
u8 USB_SendSpace(u8 ep)
{
LockEP lock(ep);
if (!ReadWriteAllowed())
return 0;
return 64 - FifoByteCount();
}
// Blocking Send of data to an endpoint
int USB_Send(u8 ep, const void* d, int len)
{
if (!_usbConfiguration)
return -1;
int r = len;
const u8* data = (const u8*)d;
u8 zero = ep & TRANSFER_ZERO;
u8 timeout = 250; // 250ms timeout on send? TODO
while (len)
{
u8 n = USB_SendSpace(ep);
if (n == 0)
{
if (!(--timeout))
return -1;
delay(1);
continue;
}
if (n > len)
n = len;
len -= n;
{
LockEP lock(ep);
if (ep & TRANSFER_ZERO)
{
while (n--)
Send8(0);
}
else if (ep & TRANSFER_PGM)
{
while (n--)
Send8(pgm_read_byte(data++));
}
else
{
while (n--)
Send8(*data++);
}
if (!ReadWriteAllowed() || ((len == 0) && (ep & TRANSFER_RELEASE))) // Release full buffer
ReleaseTX();
}
}
TXLED1; // light the TX LED
TxLEDPulse = TX_RX_LED_PULSE_MS;
return r;
}
extern const u8 _initEndpoints[] PROGMEM;
const u8 _initEndpoints[] =
{
0,
#ifdef CDC_ENABLED
EP_TYPE_INTERRUPT_IN, // CDC_ENDPOINT_ACM
EP_TYPE_BULK_OUT, // CDC_ENDPOINT_OUT
EP_TYPE_BULK_IN, // CDC_ENDPOINT_IN
#endif
#ifdef HID_ENABLED
EP_TYPE_INTERRUPT_IN // HID_ENDPOINT_INT
#endif
};
#define EP_SINGLE_64 0x32 // EP0
#define EP_DOUBLE_64 0x36 // Other endpoints
static
void InitEP(u8 index, u8 type, u8 size)
{
UENUM = index;
UECONX = 1;
UECFG0X = type;
UECFG1X = size;
}
static
void InitEndpoints()
{
for (u8 i = 1; i < sizeof(_initEndpoints); i++)
{
UENUM = i;
UECONX = 1;
UECFG0X = pgm_read_byte(_initEndpoints+i);
UECFG1X = EP_DOUBLE_64;
}
UERST = 0x7E; // And reset them
UERST = 0;
}
// Handle CLASS_INTERFACE requests
static
bool ClassInterfaceRequest(Setup& setup)
{
u8 i = setup.wIndex;
#ifdef CDC_ENABLED
if (CDC_ACM_INTERFACE == i)
return CDC_Setup(setup);
#endif
#ifdef HID_ENABLED
if (HID_INTERFACE == i)
return HID_Setup(setup);
#endif
return false;
}
int _cmark;
int _cend;
void InitControl(int end)
{
SetEP(0);
_cmark = 0;
_cend = end;
}
static
bool SendControl(u8 d)
{
if (_cmark < _cend)
{
if (!WaitForINOrOUT())
return false;
Send8(d);
if (!((_cmark + 1) & 0x3F))
ClearIN(); // Fifo is full, release this packet
}
_cmark++;
return true;
};
// Clipped by _cmark/_cend
int USB_SendControl(u8 flags, const void* d, int len)
{
int sent = len;
const u8* data = (const u8*)d;
bool pgm = flags & TRANSFER_PGM;
while (len--)
{
u8 c = pgm ? pgm_read_byte(data++) : *data++;
if (!SendControl(c))
return -1;
}
return sent;
}
// Does not timeout or cross fifo boundaries
// Will only work for transfers <= 64 bytes
// TODO
int USB_RecvControl(void* d, int len)
{
WaitOUT();
Recv((u8*)d,len);
ClearOUT();
return len;
}
int SendInterfaces()
{
int total = 0;
u8 interfaces = 0;
#ifdef CDC_ENABLED
total = CDC_GetInterface(&interfaces);
#endif
#ifdef HID_ENABLED
total += HID_GetInterface(&interfaces);
#endif
return interfaces;
}
// Construct a dynamic configuration descriptor
// This really needs dynamic endpoint allocation etc
// TODO
static
bool SendConfiguration(int maxlen)
{
// Count and measure interfaces
InitControl(0);
int interfaces = SendInterfaces();
ConfigDescriptor config = D_CONFIG(_cmark + sizeof(ConfigDescriptor),interfaces);
// Now send them
InitControl(maxlen);
USB_SendControl(0,&config,sizeof(ConfigDescriptor));
SendInterfaces();
return true;
}
u8 _cdcComposite = 0;
static
bool SendDescriptor(Setup& setup)
{
u8 t = setup.wValueH;
if (USB_CONFIGURATION_DESCRIPTOR_TYPE == t)
return SendConfiguration(setup.wLength);
InitControl(setup.wLength);
#ifdef HID_ENABLED
if (HID_REPORT_DESCRIPTOR_TYPE == t)
return HID_GetDescriptor(t);
#endif
u8 desc_length = 0;
const u8* desc_addr = 0;
if (USB_DEVICE_DESCRIPTOR_TYPE == t)
{
if (setup.wLength == 8)
_cdcComposite = 1;
desc_addr = _cdcComposite ? (const u8*)&USB_DeviceDescriptorA : (const u8*)&USB_DeviceDescriptor;
}
else if (USB_STRING_DESCRIPTOR_TYPE == t)
{
if (setup.wValueL == 0)
desc_addr = (const u8*)&STRING_LANGUAGE;
else if (setup.wValueL == IPRODUCT)
desc_addr = (const u8*)&STRING_IPRODUCT;
else if (setup.wValueL == IMANUFACTURER)
desc_addr = (const u8*)&STRING_IMANUFACTURER;
else
return false;
}
if (desc_addr == 0)
return false;
if (desc_length == 0)
desc_length = pgm_read_byte(desc_addr);
USB_SendControl(TRANSFER_PGM,desc_addr,desc_length);
return true;
}
// Endpoint 0 interrupt
ISR(USB_COM_vect)
{
SetEP(0);
if (!ReceivedSetupInt())
return;
Setup setup;
Recv((u8*)&setup,8);
ClearSetupInt();
u8 requestType = setup.bmRequestType;
if (requestType & REQUEST_DEVICETOHOST)
WaitIN();
else
ClearIN();
bool ok = true;
if (REQUEST_STANDARD == (requestType & REQUEST_TYPE))
{
// Standard Requests
u8 r = setup.bRequest;
if (GET_STATUS == r)
{
Send8(0); // TODO
Send8(0);
}
else if (CLEAR_FEATURE == r)
{
}
else if (SET_FEATURE == r)
{
}
else if (SET_ADDRESS == r)
{
WaitIN();
UDADDR = setup.wValueL | (1<<ADDEN);
}
else if (GET_DESCRIPTOR == r)
{
ok = SendDescriptor(setup);
}
else if (SET_DESCRIPTOR == r)
{
ok = false;
}
else if (GET_CONFIGURATION == r)
{
Send8(1);
}
else if (SET_CONFIGURATION == r)
{
if (REQUEST_DEVICE == (requestType & REQUEST_RECIPIENT))
{
InitEndpoints();
_usbConfiguration = setup.wValueL;
} else
ok = false;
}
else if (GET_INTERFACE == r)
{
}
else if (SET_INTERFACE == r)
{
}
}
else
{
InitControl(setup.wLength); // Max length of transfer
ok = ClassInterfaceRequest(setup);
}
if (ok)
ClearIN();
else
{
Stall();
}
}
void USB_Flush(u8 ep)
{
SetEP(ep);
if (FifoByteCount())
ReleaseTX();
}
// General interrupt
ISR(USB_GEN_vect)
{
u8 udint = UDINT;
UDINT = 0;
// End of Reset
if (udint & (1<<EORSTI))
{
InitEP(0,EP_TYPE_CONTROL,EP_SINGLE_64); // init ep0
_usbConfiguration = 0; // not configured yet
UEIENX = 1 << RXSTPE; // Enable interrupts for ep0
}
// Start of Frame - happens every millisecond so we use it for TX and RX LED one-shot timing, too
if (udint & (1<<SOFI))
{
#ifdef CDC_ENABLED
USB_Flush(CDC_TX); // Send a tx frame if found
if (USB_Available(CDC_RX)) // Handle received bytes (if any)
Serial.accept();
#endif
// check whether the one-shot period has elapsed. if so, turn off the LED
if (TxLEDPulse && !(--TxLEDPulse))
TXLED0;
if (RxLEDPulse && !(--RxLEDPulse))
RXLED0;
}
}
// VBUS or counting frames
// Any frame counting?
u8 USBConnected()
{
u8 f = UDFNUML;
delay(3);
return f != UDFNUML;
}
//=======================================================================
//=======================================================================
USBDevice_ USBDevice;
USBDevice_::USBDevice_()
{
}
void USBDevice_::attach()
{
_usbConfiguration = 0;
UHWCON = 0x01; // power internal reg
USBCON = (1<<USBE)|(1<<FRZCLK); // clock frozen, usb enabled
#if F_CPU == 16000000UL
PLLCSR = 0x12; // Need 16 MHz xtal
#elif F_CPU == 8000000UL
PLLCSR = 0x02; // Need 8 MHz xtal
#endif
while (!(PLLCSR & (1<<PLOCK))) // wait for lock pll
;
// Some tests on specific versions of macosx (10.7.3), reported some
// strange behaviuors when the board is reset using the serial
// port touch at 1200 bps. This delay fixes this behaviour.
delay(1);
USBCON = ((1<<USBE)|(1<<OTGPADE)); // start USB clock
UDIEN = (1<<EORSTE)|(1<<SOFE); // Enable interrupts for EOR (End of Reset) and SOF (start of frame)
UDCON = 0; // enable attach resistor
TX_RX_LED_INIT;
}
void USBDevice_::detach()
{
}
// Check for interrupts
// TODO: VBUS detection
bool USBDevice_::configured()
{
return _usbConfiguration;
}
void USBDevice_::poll()
{
}
#endif /* if defined(USBCON) */

View File

@@ -1,303 +0,0 @@
// Copyright (c) 2010, Peter Barrett
/*
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#ifndef __USBCORE_H__
#define __USBCORE_H__
// Standard requests
#define GET_STATUS 0
#define CLEAR_FEATURE 1
#define SET_FEATURE 3
#define SET_ADDRESS 5
#define GET_DESCRIPTOR 6
#define SET_DESCRIPTOR 7
#define GET_CONFIGURATION 8
#define SET_CONFIGURATION 9
#define GET_INTERFACE 10
#define SET_INTERFACE 11
// bmRequestType
#define REQUEST_HOSTTODEVICE 0x00
#define REQUEST_DEVICETOHOST 0x80
#define REQUEST_DIRECTION 0x80
#define REQUEST_STANDARD 0x00
#define REQUEST_CLASS 0x20
#define REQUEST_VENDOR 0x40
#define REQUEST_TYPE 0x60
#define REQUEST_DEVICE 0x00
#define REQUEST_INTERFACE 0x01
#define REQUEST_ENDPOINT 0x02
#define REQUEST_OTHER 0x03
#define REQUEST_RECIPIENT 0x03
#define REQUEST_DEVICETOHOST_CLASS_INTERFACE (REQUEST_DEVICETOHOST + REQUEST_CLASS + REQUEST_INTERFACE)
#define REQUEST_HOSTTODEVICE_CLASS_INTERFACE (REQUEST_HOSTTODEVICE + REQUEST_CLASS + REQUEST_INTERFACE)
// Class requests
#define CDC_SET_LINE_CODING 0x20
#define CDC_GET_LINE_CODING 0x21
#define CDC_SET_CONTROL_LINE_STATE 0x22
#define MSC_RESET 0xFF
#define MSC_GET_MAX_LUN 0xFE
#define HID_GET_REPORT 0x01
#define HID_GET_IDLE 0x02
#define HID_GET_PROTOCOL 0x03
#define HID_SET_REPORT 0x09
#define HID_SET_IDLE 0x0A
#define HID_SET_PROTOCOL 0x0B
// Descriptors
#define USB_DEVICE_DESC_SIZE 18
#define USB_CONFIGUARTION_DESC_SIZE 9
#define USB_INTERFACE_DESC_SIZE 9
#define USB_ENDPOINT_DESC_SIZE 7
#define USB_DEVICE_DESCRIPTOR_TYPE 1
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
#define USB_STRING_DESCRIPTOR_TYPE 3
#define USB_INTERFACE_DESCRIPTOR_TYPE 4
#define USB_ENDPOINT_DESCRIPTOR_TYPE 5
#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
#define USB_DEVICE_CLASS_STORAGE 0x08
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
#define USB_CONFIG_POWERED_MASK 0x40
#define USB_CONFIG_BUS_POWERED 0x80
#define USB_CONFIG_SELF_POWERED 0xC0
#define USB_CONFIG_REMOTE_WAKEUP 0x20
// bMaxPower in Configuration Descriptor
#define USB_CONFIG_POWER_MA(mA) ((mA)/2)
// bEndpointAddress in Endpoint Descriptor
#define USB_ENDPOINT_DIRECTION_MASK 0x80
#define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
#define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
#define USB_ENDPOINT_TYPE_MASK 0x03
#define USB_ENDPOINT_TYPE_CONTROL 0x00
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
#define USB_ENDPOINT_TYPE_BULK 0x02
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
#define TOBYTES(x) ((x) & 0xFF),(((x) >> 8) & 0xFF)
#define CDC_V1_10 0x0110
#define CDC_COMMUNICATION_INTERFACE_CLASS 0x02
#define CDC_CALL_MANAGEMENT 0x01
#define CDC_ABSTRACT_CONTROL_MODEL 0x02
#define CDC_HEADER 0x00
#define CDC_ABSTRACT_CONTROL_MANAGEMENT 0x02
#define CDC_UNION 0x06
#define CDC_CS_INTERFACE 0x24
#define CDC_CS_ENDPOINT 0x25
#define CDC_DATA_INTERFACE_CLASS 0x0A
#define MSC_SUBCLASS_SCSI 0x06
#define MSC_PROTOCOL_BULK_ONLY 0x50
#define HID_HID_DESCRIPTOR_TYPE 0x21
#define HID_REPORT_DESCRIPTOR_TYPE 0x22
#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23
// Device
typedef struct {
u8 len; // 18
u8 dtype; // 1 USB_DEVICE_DESCRIPTOR_TYPE
u16 usbVersion; // 0x200
u8 deviceClass;
u8 deviceSubClass;
u8 deviceProtocol;
u8 packetSize0; // Packet 0
u16 idVendor;
u16 idProduct;
u16 deviceVersion; // 0x100
u8 iManufacturer;
u8 iProduct;
u8 iSerialNumber;
u8 bNumConfigurations;
} DeviceDescriptor;
// Config
typedef struct {
u8 len; // 9
u8 dtype; // 2
u16 clen; // total length
u8 numInterfaces;
u8 config;
u8 iconfig;
u8 attributes;
u8 maxPower;
} ConfigDescriptor;
// String
// Interface
typedef struct
{
u8 len; // 9
u8 dtype; // 4
u8 number;
u8 alternate;
u8 numEndpoints;
u8 interfaceClass;
u8 interfaceSubClass;
u8 protocol;
u8 iInterface;
} InterfaceDescriptor;
// Endpoint
typedef struct
{
u8 len; // 7
u8 dtype; // 5
u8 addr;
u8 attr;
u16 packetSize;
u8 interval;
} EndpointDescriptor;
// Interface Association Descriptor
// Used to bind 2 interfaces together in CDC compostite device
typedef struct
{
u8 len; // 8
u8 dtype; // 11
u8 firstInterface;
u8 interfaceCount;
u8 functionClass;
u8 funtionSubClass;
u8 functionProtocol;
u8 iInterface;
} IADDescriptor;
// CDC CS interface descriptor
typedef struct
{
u8 len; // 5
u8 dtype; // 0x24
u8 subtype;
u8 d0;
u8 d1;
} CDCCSInterfaceDescriptor;
typedef struct
{
u8 len; // 4
u8 dtype; // 0x24
u8 subtype;
u8 d0;
} CDCCSInterfaceDescriptor4;
typedef struct
{
u8 len;
u8 dtype; // 0x24
u8 subtype; // 1
u8 bmCapabilities;
u8 bDataInterface;
} CMFunctionalDescriptor;
typedef struct
{
u8 len;
u8 dtype; // 0x24
u8 subtype; // 1
u8 bmCapabilities;
} ACMFunctionalDescriptor;
typedef struct
{
// IAD
IADDescriptor iad; // Only needed on compound device
// Control
InterfaceDescriptor cif; //
CDCCSInterfaceDescriptor header;
CMFunctionalDescriptor callManagement; // Call Management
ACMFunctionalDescriptor controlManagement; // ACM
CDCCSInterfaceDescriptor functionalDescriptor; // CDC_UNION
EndpointDescriptor cifin;
// Data
InterfaceDescriptor dif;
EndpointDescriptor in;
EndpointDescriptor out;
} CDCDescriptor;
typedef struct
{
InterfaceDescriptor msc;
EndpointDescriptor in;
EndpointDescriptor out;
} MSCDescriptor;
typedef struct
{
u8 len; // 9
u8 dtype; // 0x21
u8 addr;
u8 versionL; // 0x101
u8 versionH; // 0x101
u8 country;
u8 desctype; // 0x22 report
u8 descLenL;
u8 descLenH;
} HIDDescDescriptor;
typedef struct
{
InterfaceDescriptor hid;
HIDDescDescriptor desc;
EndpointDescriptor in;
} HIDDescriptor;
#define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs) \
{ 18, 1, 0x200, _class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs }
#define D_CONFIG(_totalLength,_interfaces) \
{ 9, 2, _totalLength,_interfaces, 1, 0, USB_CONFIG_BUS_POWERED, USB_CONFIG_POWER_MA(500) }
#define D_INTERFACE(_n,_numEndpoints,_class,_subClass,_protocol) \
{ 9, 4, _n, 0, _numEndpoints, _class,_subClass, _protocol, 0 }
#define D_ENDPOINT(_addr,_attr,_packetSize, _interval) \
{ 7, 5, _addr,_attr,_packetSize, _interval }
#define D_IAD(_firstInterface, _count, _class, _subClass, _protocol) \
{ 8, 11, _firstInterface, _count, _class, _subClass, _protocol, 0 }
#define D_HIDREPORT(_descriptorLength) \
{ 9, 0x21, 0x1, 0x1, 0, 1, 0x22, _descriptorLength, 0 }
#define D_CDCCS(_subtype,_d0,_d1) { 5, 0x24, _subtype, _d0, _d1 }
#define D_CDCCS4(_subtype,_d0) { 4, 0x24, _subtype, _d0 }
#endif

View File

@@ -1,63 +0,0 @@
/* Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#define CDC_ENABLED
#define HID_ENABLED
#ifdef CDC_ENABLED
#define CDC_INTERFACE_COUNT 2
#define CDC_ENPOINT_COUNT 3
#else
#define CDC_INTERFACE_COUNT 0
#define CDC_ENPOINT_COUNT 0
#endif
#ifdef HID_ENABLED
#define HID_INTERFACE_COUNT 1
#define HID_ENPOINT_COUNT 1
#else
#define HID_INTERFACE_COUNT 0
#define HID_ENPOINT_COUNT 0
#endif
#define CDC_ACM_INTERFACE 0 // CDC ACM
#define CDC_DATA_INTERFACE 1 // CDC Data
#define CDC_FIRST_ENDPOINT 1
#define CDC_ENDPOINT_ACM (CDC_FIRST_ENDPOINT) // CDC First
#define CDC_ENDPOINT_OUT (CDC_FIRST_ENDPOINT+1)
#define CDC_ENDPOINT_IN (CDC_FIRST_ENDPOINT+2)
#define HID_INTERFACE (CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT) // HID Interface
#define HID_FIRST_ENDPOINT (CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT)
#define HID_ENDPOINT_INT (HID_FIRST_ENDPOINT)
#define INTERFACE_COUNT (MSC_INTERFACE + MSC_INTERFACE_COUNT)
#ifdef CDC_ENABLED
#define CDC_RX CDC_ENDPOINT_OUT
#define CDC_TX CDC_ENDPOINT_IN
#endif
#ifdef HID_ENABLED
#define HID_TX HID_ENDPOINT_INT
#endif
#define IMANUFACTURER 1
#define IPRODUCT 2

View File

@@ -1,88 +0,0 @@
/*
* Udp.cpp: Library to send/receive UDP packets.
*
* NOTE: UDP is fast, but has some important limitations (thanks to Warren Gray for mentioning these)
* 1) UDP does not guarantee the order in which assembled UDP packets are received. This
* might not happen often in practice, but in larger network topologies, a UDP
* packet can be received out of sequence.
* 2) UDP does not guard against lost packets - so packets *can* disappear without the sender being
* aware of it. Again, this may not be a concern in practice on small local networks.
* For more information, see http://www.cafeaulait.org/course/week12/35.html
*
* MIT License:
* Copyright (c) 2008 Bjoern Hartmann
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* bjoern@cs.stanford.edu 12/30/2008
*/
#ifndef udp_h
#define udp_h
#include <Stream.h>
#include <IPAddress.h>
class UDP : public Stream {
public:
virtual uint8_t begin(uint16_t) =0; // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use
virtual void stop() =0; // Finish with the UDP socket
// Sending UDP packets
// Start building up a packet to send to the remote host specific in ip and port
// Returns 1 if successful, 0 if there was a problem with the supplied IP address or port
virtual int beginPacket(IPAddress ip, uint16_t port) =0;
// Start building up a packet to send to the remote host specific in host and port
// Returns 1 if successful, 0 if there was a problem resolving the hostname or port
virtual int beginPacket(const char *host, uint16_t port) =0;
// Finish off this packet and send it
// Returns 1 if the packet was sent successfully, 0 if there was an error
virtual int endPacket() =0;
// Write a single byte into the packet
virtual size_t write(uint8_t) =0;
// Write size bytes from buffer into the packet
virtual size_t write(const uint8_t *buffer, size_t size) =0;
// Start processing the next available incoming packet
// Returns the size of the packet in bytes, or 0 if no packets are available
virtual int parsePacket() =0;
// Number of bytes remaining in the current packet
virtual int available() =0;
// Read a single byte from the current packet
virtual int read() =0;
// Read up to len bytes from the current packet and place them into buffer
// Returns the number of bytes read, or 0 if none are available
virtual int read(unsigned char* buffer, size_t len) =0;
// Read up to len characters from the current packet and place them into buffer
// Returns the number of characters read, or 0 if none are available
virtual int read(char* buffer, size_t len) =0;
// Return the next byte from the current packet without moving on to the next byte
virtual int peek() =0;
virtual void flush() =0; // Finish reading the current packet
// Return the IP address of the host who sent the current incoming packet
virtual IPAddress remoteIP() =0;
// Return the port of the host who sent the current incoming packet
virtual uint16_t remotePort() =0;
protected:
uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); };
};
#endif

View File

@@ -1,168 +0,0 @@
/*
WCharacter.h - Character utility functions for Wiring & Arduino
Copyright (c) 2010 Hernando Barragan. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef Character_h
#define Character_h
#include <ctype.h>
// WCharacter.h prototypes
inline boolean isAlphaNumeric(int c) __attribute__((always_inline));
inline boolean isAlpha(int c) __attribute__((always_inline));
inline boolean isAscii(int c) __attribute__((always_inline));
inline boolean isWhitespace(int c) __attribute__((always_inline));
inline boolean isControl(int c) __attribute__((always_inline));
inline boolean isDigit(int c) __attribute__((always_inline));
inline boolean isGraph(int c) __attribute__((always_inline));
inline boolean isLowerCase(int c) __attribute__((always_inline));
inline boolean isPrintable(int c) __attribute__((always_inline));
inline boolean isPunct(int c) __attribute__((always_inline));
inline boolean isSpace(int c) __attribute__((always_inline));
inline boolean isUpperCase(int c) __attribute__((always_inline));
inline boolean isHexadecimalDigit(int c) __attribute__((always_inline));
inline int toAscii(int c) __attribute__((always_inline));
inline int toLowerCase(int c) __attribute__((always_inline));
inline int toUpperCase(int c)__attribute__((always_inline));
// Checks for an alphanumeric character.
// It is equivalent to (isalpha(c) || isdigit(c)).
inline boolean isAlphaNumeric(int c)
{
return ( isalnum(c) == 0 ? false : true);
}
// Checks for an alphabetic character.
// It is equivalent to (isupper(c) || islower(c)).
inline boolean isAlpha(int c)
{
return ( isalpha(c) == 0 ? false : true);
}
// Checks whether c is a 7-bit unsigned char value
// that fits into the ASCII character set.
inline boolean isAscii(int c)
{
return ( isascii (c) == 0 ? false : true);
}
// Checks for a blank character, that is, a space or a tab.
inline boolean isWhitespace(int c)
{
return ( isblank (c) == 0 ? false : true);
}
// Checks for a control character.
inline boolean isControl(int c)
{
return ( iscntrl (c) == 0 ? false : true);
}
// Checks for a digit (0 through 9).
inline boolean isDigit(int c)
{
return ( isdigit (c) == 0 ? false : true);
}
// Checks for any printable character except space.
inline boolean isGraph(int c)
{
return ( isgraph (c) == 0 ? false : true);
}
// Checks for a lower-case character.
inline boolean isLowerCase(int c)
{
return (islower (c) == 0 ? false : true);
}
// Checks for any printable character including space.
inline boolean isPrintable(int c)
{
return ( isprint (c) == 0 ? false : true);
}
// Checks for any printable character which is not a space
// or an alphanumeric character.
inline boolean isPunct(int c)
{
return ( ispunct (c) == 0 ? false : true);
}
// Checks for white-space characters. For the avr-libc library,
// these are: space, formfeed ('\f'), newline ('\n'), carriage
// return ('\r'), horizontal tab ('\t'), and vertical tab ('\v').
inline boolean isSpace(int c)
{
return ( isspace (c) == 0 ? false : true);
}
// Checks for an uppercase letter.
inline boolean isUpperCase(int c)
{
return ( isupper (c) == 0 ? false : true);
}
// Checks for a hexadecimal digits, i.e. one of 0 1 2 3 4 5 6 7
// 8 9 a b c d e f A B C D E F.
inline boolean isHexadecimalDigit(int c)
{
return ( isxdigit (c) == 0 ? false : true);
}
// Converts c to a 7-bit unsigned char value that fits into the
// ASCII character set, by clearing the high-order bits.
inline int toAscii(int c)
{
return toascii (c);
}
// Warning:
// Many people will be unhappy if you use this function.
// This function will convert accented letters into random
// characters.
// Converts the letter c to lower case, if possible.
inline int toLowerCase(int c)
{
return tolower (c);
}
// Converts the letter c to upper case, if possible.
inline int toUpperCase(int c)
{
return toupper (c);
}
#endif

View File

@@ -1,322 +0,0 @@
/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
Part of the Wiring project - http://wiring.uniandes.edu.co
Copyright (c) 2004-05 Hernando Barragan
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
Modified 24 November 2006 by David A. Mellis
Modified 1 August 2010 by Mark Sproul
*/
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include "wiring_private.h"
static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS];
// volatile static voidFuncPtr twiIntFunc;
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {
if(interruptNum < EXTERNAL_NUM_INTERRUPTS) {
intFunc[interruptNum] = userFunc;
// Configure the interrupt mode (trigger on low input, any change, rising
// edge, or falling edge). The mode constants were chosen to correspond
// to the configuration bits in the hardware register, so we simply shift
// the mode into place.
// Enable the interrupt.
switch (interruptNum) {
#if defined(__AVR_ATmega32U4__)
// I hate doing this, but the register assignment differs between the 1280/2560
// and the 32U4. Since avrlib defines registers PCMSK1 and PCMSK2 that aren't
// even present on the 32U4 this is the only way to distinguish between them.
case 0:
EICRA = (EICRA & ~((1<<ISC00) | (1<<ISC01))) | (mode << ISC00);
EIMSK |= (1<<INT0);
break;
case 1:
EICRA = (EICRA & ~((1<<ISC10) | (1<<ISC11))) | (mode << ISC10);
EIMSK |= (1<<INT1);
break;
case 2:
EICRA = (EICRA & ~((1<<ISC20) | (1<<ISC21))) | (mode << ISC20);
EIMSK |= (1<<INT2);
break;
case 3:
EICRA = (EICRA & ~((1<<ISC30) | (1<<ISC31))) | (mode << ISC30);
EIMSK |= (1<<INT3);
break;
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
case 2:
EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
EIMSK |= (1 << INT0);
break;
case 3:
EICRA = (EICRA & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
EIMSK |= (1 << INT1);
break;
case 4:
EICRA = (EICRA & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
EIMSK |= (1 << INT2);
break;
case 5:
EICRA = (EICRA & ~((1 << ISC30) | (1 << ISC31))) | (mode << ISC30);
EIMSK |= (1 << INT3);
break;
case 0:
EICRB = (EICRB & ~((1 << ISC40) | (1 << ISC41))) | (mode << ISC40);
EIMSK |= (1 << INT4);
break;
case 1:
EICRB = (EICRB & ~((1 << ISC50) | (1 << ISC51))) | (mode << ISC50);
EIMSK |= (1 << INT5);
break;
case 6:
EICRB = (EICRB & ~((1 << ISC60) | (1 << ISC61))) | (mode << ISC60);
EIMSK |= (1 << INT6);
break;
case 7:
EICRB = (EICRB & ~((1 << ISC70) | (1 << ISC71))) | (mode << ISC70);
EIMSK |= (1 << INT7);
break;
#else
case 0:
#if defined(EICRA) && defined(ISC00) && defined(EIMSK)
EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
EIMSK |= (1 << INT0);
#elif defined(MCUCR) && defined(ISC00) && defined(GICR)
MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
GICR |= (1 << INT0);
#elif defined(MCUCR) && defined(ISC00) && defined(GIMSK)
MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
GIMSK |= (1 << INT0);
#else
#error attachInterrupt not finished for this CPU (case 0)
#endif
break;
case 1:
#if defined(EICRA) && defined(ISC10) && defined(ISC11) && defined(EIMSK)
EICRA = (EICRA & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
EIMSK |= (1 << INT1);
#elif defined(MCUCR) && defined(ISC10) && defined(ISC11) && defined(GICR)
MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
GICR |= (1 << INT1);
#elif defined(MCUCR) && defined(ISC10) && defined(GIMSK) && defined(GIMSK)
MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
GIMSK |= (1 << INT1);
#else
#warning attachInterrupt may need some more work for this cpu (case 1)
#endif
break;
case 2:
#if defined(EICRA) && defined(ISC20) && defined(ISC21) && defined(EIMSK)
EICRA = (EICRA & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
EIMSK |= (1 << INT2);
#elif defined(MCUCR) && defined(ISC20) && defined(ISC21) && defined(GICR)
MCUCR = (MCUCR & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
GICR |= (1 << INT2);
#elif defined(MCUCR) && defined(ISC20) && defined(GIMSK) && defined(GIMSK)
MCUCR = (MCUCR & ~((1 << ISC20) | (1 << ISC21))) | (mode << ISC20);
GIMSK |= (1 << INT2);
#endif
break;
#endif
}
}
}
void detachInterrupt(uint8_t interruptNum) {
if(interruptNum < EXTERNAL_NUM_INTERRUPTS) {
// Disable the interrupt. (We can't assume that interruptNum is equal
// to the number of the EIMSK bit to clear, as this isn't true on the
// ATmega8. There, INT0 is 6 and INT1 is 7.)
switch (interruptNum) {
#if defined(__AVR_ATmega32U4__)
case 0:
EIMSK &= ~(1<<INT0);
break;
case 1:
EIMSK &= ~(1<<INT1);
break;
case 2:
EIMSK &= ~(1<<INT2);
break;
case 3:
EIMSK &= ~(1<<INT3);
break;
#elif defined(EICRA) && defined(EICRB) && defined(EIMSK)
case 2:
EIMSK &= ~(1 << INT0);
break;
case 3:
EIMSK &= ~(1 << INT1);
break;
case 4:
EIMSK &= ~(1 << INT2);
break;
case 5:
EIMSK &= ~(1 << INT3);
break;
case 0:
EIMSK &= ~(1 << INT4);
break;
case 1:
EIMSK &= ~(1 << INT5);
break;
case 6:
EIMSK &= ~(1 << INT6);
break;
case 7:
EIMSK &= ~(1 << INT7);
break;
#else
case 0:
#if defined(EIMSK) && defined(INT0)
EIMSK &= ~(1 << INT0);
#elif defined(GICR) && defined(ISC00)
GICR &= ~(1 << INT0); // atmega32
#elif defined(GIMSK) && defined(INT0)
GIMSK &= ~(1 << INT0);
#else
#error detachInterrupt not finished for this cpu
#endif
break;
case 1:
#if defined(EIMSK) && defined(INT1)
EIMSK &= ~(1 << INT1);
#elif defined(GICR) && defined(INT1)
GICR &= ~(1 << INT1); // atmega32
#elif defined(GIMSK) && defined(INT1)
GIMSK &= ~(1 << INT1);
#else
#warning detachInterrupt may need some more work for this cpu (case 1)
#endif
break;
#endif
}
intFunc[interruptNum] = 0;
}
}
/*
void attachInterruptTwi(void (*userFunc)(void) ) {
twiIntFunc = userFunc;
}
*/
#if defined(__AVR_ATmega32U4__)
SIGNAL(INT0_vect) {
if(intFunc[EXTERNAL_INT_0])
intFunc[EXTERNAL_INT_0]();
}
SIGNAL(INT1_vect) {
if(intFunc[EXTERNAL_INT_1])
intFunc[EXTERNAL_INT_1]();
}
SIGNAL(INT2_vect) {
if(intFunc[EXTERNAL_INT_2])
intFunc[EXTERNAL_INT_2]();
}
SIGNAL(INT3_vect) {
if(intFunc[EXTERNAL_INT_3])
intFunc[EXTERNAL_INT_3]();
}
#elif defined(EICRA) && defined(EICRB)
SIGNAL(INT0_vect) {
if(intFunc[EXTERNAL_INT_2])
intFunc[EXTERNAL_INT_2]();
}
SIGNAL(INT1_vect) {
if(intFunc[EXTERNAL_INT_3])
intFunc[EXTERNAL_INT_3]();
}
SIGNAL(INT2_vect) {
if(intFunc[EXTERNAL_INT_4])
intFunc[EXTERNAL_INT_4]();
}
SIGNAL(INT3_vect) {
if(intFunc[EXTERNAL_INT_5])
intFunc[EXTERNAL_INT_5]();
}
SIGNAL(INT4_vect) {
if(intFunc[EXTERNAL_INT_0])
intFunc[EXTERNAL_INT_0]();
}
SIGNAL(INT5_vect) {
if(intFunc[EXTERNAL_INT_1])
intFunc[EXTERNAL_INT_1]();
}
SIGNAL(INT6_vect) {
if(intFunc[EXTERNAL_INT_6])
intFunc[EXTERNAL_INT_6]();
}
SIGNAL(INT7_vect) {
if(intFunc[EXTERNAL_INT_7])
intFunc[EXTERNAL_INT_7]();
}
#else
SIGNAL(INT0_vect) {
if(intFunc[EXTERNAL_INT_0])
intFunc[EXTERNAL_INT_0]();
}
SIGNAL(INT1_vect) {
if(intFunc[EXTERNAL_INT_1])
intFunc[EXTERNAL_INT_1]();
}
#if defined(EICRA) && defined(ISC20)
SIGNAL(INT2_vect) {
if(intFunc[EXTERNAL_INT_2])
intFunc[EXTERNAL_INT_2]();
}
#endif
#endif
/*
SIGNAL(SIG_2WIRE_SERIAL) {
if(twiIntFunc)
twiIntFunc();
}
*/

View File

@@ -1,60 +0,0 @@
/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
Part of the Wiring project - http://wiring.org.co
Copyright (c) 2004-06 Hernando Barragan
Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id$
*/
extern "C" {
#include "stdlib.h"
}
void randomSeed(unsigned int seed)
{
if (seed != 0) {
srandom(seed);
}
}
long random(long howbig)
{
if (howbig == 0) {
return 0;
}
return random() % howbig;
}
long random(long howsmall, long howbig)
{
if (howsmall >= howbig) {
return howsmall;
}
long diff = howbig - howsmall;
return random(diff) + howsmall;
}
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
unsigned int makeWord(unsigned int w) { return w; }
unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; }

View File

@@ -1,645 +0,0 @@
/*
WString.cpp - String library for Wiring & Arduino
...mostly rewritten by Paul Stoffregen...
Copyright (c) 2009-10 Hernando Barragan. All rights reserved.
Copyright 2011, Paul Stoffregen, paul@pjrc.com
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "WString.h"
/*********************************************/
/* Constructors */
/*********************************************/
String::String(const char *cstr)
{
init();
if (cstr) copy(cstr, strlen(cstr));
}
String::String(const String &value)
{
init();
*this = value;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String::String(String &&rval)
{
init();
move(rval);
}
String::String(StringSumHelper &&rval)
{
init();
move(rval);
}
#endif
String::String(char c)
{
init();
char buf[2];
buf[0] = c;
buf[1] = 0;
*this = buf;
}
String::String(unsigned char value, unsigned char base)
{
init();
char buf[9];
utoa(value, buf, base);
*this = buf;
}
String::String(int value, unsigned char base)
{
init();
char buf[18];
itoa(value, buf, base);
*this = buf;
}
String::String(unsigned int value, unsigned char base)
{
init();
char buf[17];
utoa(value, buf, base);
*this = buf;
}
String::String(long value, unsigned char base)
{
init();
char buf[34];
ltoa(value, buf, base);
*this = buf;
}
String::String(unsigned long value, unsigned char base)
{
init();
char buf[33];
ultoa(value, buf, base);
*this = buf;
}
String::~String()
{
free(buffer);
}
/*********************************************/
/* Memory Management */
/*********************************************/
inline void String::init(void)
{
buffer = NULL;
capacity = 0;
len = 0;
flags = 0;
}
void String::invalidate(void)
{
if (buffer) free(buffer);
buffer = NULL;
capacity = len = 0;
}
unsigned char String::reserve(unsigned int size)
{
if (buffer && capacity >= size) return 1;
if (changeBuffer(size)) {
if (len == 0) buffer[0] = 0;
return 1;
}
return 0;
}
unsigned char String::changeBuffer(unsigned int maxStrLen)
{
char *newbuffer = (char *)realloc(buffer, maxStrLen + 1);
if (newbuffer) {
buffer = newbuffer;
capacity = maxStrLen;
return 1;
}
return 0;
}
/*********************************************/
/* Copy and Move */
/*********************************************/
String & String::copy(const char *cstr, unsigned int length)
{
if (!reserve(length)) {
invalidate();
return *this;
}
len = length;
strcpy(buffer, cstr);
return *this;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void String::move(String &rhs)
{
if (buffer) {
if (capacity >= rhs.len) {
strcpy(buffer, rhs.buffer);
len = rhs.len;
rhs.len = 0;
return;
} else {
free(buffer);
}
}
buffer = rhs.buffer;
capacity = rhs.capacity;
len = rhs.len;
rhs.buffer = NULL;
rhs.capacity = 0;
rhs.len = 0;
}
#endif
String & String::operator = (const String &rhs)
{
if (this == &rhs) return *this;
if (rhs.buffer) copy(rhs.buffer, rhs.len);
else invalidate();
return *this;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String & String::operator = (String &&rval)
{
if (this != &rval) move(rval);
return *this;
}
String & String::operator = (StringSumHelper &&rval)
{
if (this != &rval) move(rval);
return *this;
}
#endif
String & String::operator = (const char *cstr)
{
if (cstr) copy(cstr, strlen(cstr));
else invalidate();
return *this;
}
/*********************************************/
/* concat */
/*********************************************/
unsigned char String::concat(const String &s)
{
return concat(s.buffer, s.len);
}
unsigned char String::concat(const char *cstr, unsigned int length)
{
unsigned int newlen = len + length;
if (!cstr) return 0;
if (length == 0) return 1;
if (!reserve(newlen)) return 0;
strcpy(buffer + len, cstr);
len = newlen;
return 1;
}
unsigned char String::concat(const char *cstr)
{
if (!cstr) return 0;
return concat(cstr, strlen(cstr));
}
unsigned char String::concat(char c)
{
char buf[2];
buf[0] = c;
buf[1] = 0;
return concat(buf, 1);
}
unsigned char String::concat(unsigned char num)
{
char buf[4];
itoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(int num)
{
char buf[7];
itoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(unsigned int num)
{
char buf[6];
utoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(long num)
{
char buf[12];
ltoa(num, buf, 10);
return concat(buf, strlen(buf));
}
unsigned char String::concat(unsigned long num)
{
char buf[11];
ultoa(num, buf, 10);
return concat(buf, strlen(buf));
}
/*********************************************/
/* Concatenate */
/*********************************************/
StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(rhs.buffer, rhs.len)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!cstr || !a.concat(cstr, strlen(cstr))) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, char c)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(c)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, int num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, long num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num)
{
StringSumHelper &a = const_cast<StringSumHelper&>(lhs);
if (!a.concat(num)) a.invalidate();
return a;
}
/*********************************************/
/* Comparison */
/*********************************************/
int String::compareTo(const String &s) const
{
if (!buffer || !s.buffer) {
if (s.buffer && s.len > 0) return 0 - *(unsigned char *)s.buffer;
if (buffer && len > 0) return *(unsigned char *)buffer;
return 0;
}
return strcmp(buffer, s.buffer);
}
unsigned char String::equals(const String &s2) const
{
return (len == s2.len && compareTo(s2) == 0);
}
unsigned char String::equals(const char *cstr) const
{
if (len == 0) return (cstr == NULL || *cstr == 0);
if (cstr == NULL) return buffer[0] == 0;
return strcmp(buffer, cstr) == 0;
}
unsigned char String::operator<(const String &rhs) const
{
return compareTo(rhs) < 0;
}
unsigned char String::operator>(const String &rhs) const
{
return compareTo(rhs) > 0;
}
unsigned char String::operator<=(const String &rhs) const
{
return compareTo(rhs) <= 0;
}
unsigned char String::operator>=(const String &rhs) const
{
return compareTo(rhs) >= 0;
}
unsigned char String::equalsIgnoreCase( const String &s2 ) const
{
if (this == &s2) return 1;
if (len != s2.len) return 0;
if (len == 0) return 1;
const char *p1 = buffer;
const char *p2 = s2.buffer;
while (*p1) {
if (tolower(*p1++) != tolower(*p2++)) return 0;
}
return 1;
}
unsigned char String::startsWith( const String &s2 ) const
{
if (len < s2.len) return 0;
return startsWith(s2, 0);
}
unsigned char String::startsWith( const String &s2, unsigned int offset ) const
{
if (offset > len - s2.len || !buffer || !s2.buffer) return 0;
return strncmp( &buffer[offset], s2.buffer, s2.len ) == 0;
}
unsigned char String::endsWith( const String &s2 ) const
{
if ( len < s2.len || !buffer || !s2.buffer) return 0;
return strcmp(&buffer[len - s2.len], s2.buffer) == 0;
}
/*********************************************/
/* Character Access */
/*********************************************/
char String::charAt(unsigned int loc) const
{
return operator[](loc);
}
void String::setCharAt(unsigned int loc, char c)
{
if (loc < len) buffer[loc] = c;
}
char & String::operator[](unsigned int index)
{
static char dummy_writable_char;
if (index >= len || !buffer) {
dummy_writable_char = 0;
return dummy_writable_char;
}
return buffer[index];
}
char String::operator[]( unsigned int index ) const
{
if (index >= len || !buffer) return 0;
return buffer[index];
}
void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const
{
if (!bufsize || !buf) return;
if (index >= len) {
buf[0] = 0;
return;
}
unsigned int n = bufsize - 1;
if (n > len - index) n = len - index;
strncpy((char *)buf, buffer + index, n);
buf[n] = 0;
}
/*********************************************/
/* Search */
/*********************************************/
int String::indexOf(char c) const
{
return indexOf(c, 0);
}
int String::indexOf( char ch, unsigned int fromIndex ) const
{
if (fromIndex >= len) return -1;
const char* temp = strchr(buffer + fromIndex, ch);
if (temp == NULL) return -1;
return temp - buffer;
}
int String::indexOf(const String &s2) const
{
return indexOf(s2, 0);
}
int String::indexOf(const String &s2, unsigned int fromIndex) const
{
if (fromIndex >= len) return -1;
const char *found = strstr(buffer + fromIndex, s2.buffer);
if (found == NULL) return -1;
return found - buffer;
}
int String::lastIndexOf( char theChar ) const
{
return lastIndexOf(theChar, len - 1);
}
int String::lastIndexOf(char ch, unsigned int fromIndex) const
{
if (fromIndex >= len) return -1;
char tempchar = buffer[fromIndex + 1];
buffer[fromIndex + 1] = '\0';
char* temp = strrchr( buffer, ch );
buffer[fromIndex + 1] = tempchar;
if (temp == NULL) return -1;
return temp - buffer;
}
int String::lastIndexOf(const String &s2) const
{
return lastIndexOf(s2, len - s2.len);
}
int String::lastIndexOf(const String &s2, unsigned int fromIndex) const
{
if (s2.len == 0 || len == 0 || s2.len > len) return -1;
if (fromIndex >= len) fromIndex = len - 1;
int found = -1;
for (char *p = buffer; p <= buffer + fromIndex; p++) {
p = strstr(p, s2.buffer);
if (!p) break;
if ((unsigned int)(p - buffer) <= fromIndex) found = p - buffer;
}
return found;
}
String String::substring( unsigned int left ) const
{
return substring(left, len);
}
String String::substring(unsigned int left, unsigned int right) const
{
if (left > right) {
unsigned int temp = right;
right = left;
left = temp;
}
String out;
if (left > len) return out;
if (right > len) right = len;
char temp = buffer[right]; // save the replaced character
buffer[right] = '\0';
out = buffer + left; // pointer arithmetic
buffer[right] = temp; //restore character
return out;
}
/*********************************************/
/* Modification */
/*********************************************/
void String::replace(char find, char replace)
{
if (!buffer) return;
for (char *p = buffer; *p; p++) {
if (*p == find) *p = replace;
}
}
void String::replace(const String& find, const String& replace)
{
if (len == 0 || find.len == 0) return;
int diff = replace.len - find.len;
char *readFrom = buffer;
char *foundAt;
if (diff == 0) {
while ((foundAt = strstr(readFrom, find.buffer)) != NULL) {
memcpy(foundAt, replace.buffer, replace.len);
readFrom = foundAt + replace.len;
}
} else if (diff < 0) {
char *writeTo = buffer;
while ((foundAt = strstr(readFrom, find.buffer)) != NULL) {
unsigned int n = foundAt - readFrom;
memcpy(writeTo, readFrom, n);
writeTo += n;
memcpy(writeTo, replace.buffer, replace.len);
writeTo += replace.len;
readFrom = foundAt + find.len;
len += diff;
}
strcpy(writeTo, readFrom);
} else {
unsigned int size = len; // compute size needed for result
while ((foundAt = strstr(readFrom, find.buffer)) != NULL) {
readFrom = foundAt + find.len;
size += diff;
}
if (size == len) return;
if (size > capacity && !changeBuffer(size)) return; // XXX: tell user!
int index = len - 1;
while (index >= 0 && (index = lastIndexOf(find, index)) >= 0) {
readFrom = buffer + index + find.len;
memmove(readFrom + diff, readFrom, len - (readFrom - buffer));
len += diff;
buffer[len] = 0;
memcpy(buffer + index, replace.buffer, replace.len);
index--;
}
}
}
void String::toLowerCase(void)
{
if (!buffer) return;
for (char *p = buffer; *p; p++) {
*p = tolower(*p);
}
}
void String::toUpperCase(void)
{
if (!buffer) return;
for (char *p = buffer; *p; p++) {
*p = toupper(*p);
}
}
void String::trim(void)
{
if (!buffer || len == 0) return;
char *begin = buffer;
while (isspace(*begin)) begin++;
char *end = buffer + len - 1;
while (isspace(*end) && end >= begin) end--;
len = end + 1 - begin;
if (begin > buffer) memcpy(buffer, begin, len);
buffer[len] = 0;
}
/*********************************************/
/* Parsing / Conversion */
/*********************************************/
long String::toInt(void) const
{
if (buffer) return atol(buffer);
return 0;
}

View File

@@ -1,205 +0,0 @@
/*
WString.h - String library for Wiring & Arduino
...mostly rewritten by Paul Stoffregen...
Copyright (c) 2009-10 Hernando Barragan. All right reserved.
Copyright 2011, Paul Stoffregen, paul@pjrc.com
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef String_class_h
#define String_class_h
#ifdef __cplusplus
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <avr/pgmspace.h>
// When compiling programs with this class, the following gcc parameters
// dramatically increase performance and memory (RAM) efficiency, typically
// with little or no increase in code size.
// -felide-constructors
// -std=c++0x
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
// An inherited class for holding the result of a concatenation. These
// result objects are assumed to be writable by subsequent concatenations.
class StringSumHelper;
// The string class
class String
{
// use a function pointer to allow for "if (s)" without the
// complications of an operator bool(). for more information, see:
// http://www.artima.com/cppsource/safebool.html
typedef void (String::*StringIfHelperType)() const;
void StringIfHelper() const {}
public:
// constructors
// creates a copy of the initial value.
// if the initial value is null or invalid, or if memory allocation
// fails, the string will be marked as invalid (i.e. "if (s)" will
// be false).
String(const char *cstr = "");
String(const String &str);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String(String &&rval);
String(StringSumHelper &&rval);
#endif
explicit String(char c);
explicit String(unsigned char, unsigned char base=10);
explicit String(int, unsigned char base=10);
explicit String(unsigned int, unsigned char base=10);
explicit String(long, unsigned char base=10);
explicit String(unsigned long, unsigned char base=10);
~String(void);
// memory management
// return true on success, false on failure (in which case, the string
// is left unchanged). reserve(0), if successful, will validate an
// invalid string (i.e., "if (s)" will be true afterwards)
unsigned char reserve(unsigned int size);
inline unsigned int length(void) const {return len;}
// creates a copy of the assigned value. if the value is null or
// invalid, or if the memory allocation fails, the string will be
// marked as invalid ("if (s)" will be false).
String & operator = (const String &rhs);
String & operator = (const char *cstr);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
String & operator = (String &&rval);
String & operator = (StringSumHelper &&rval);
#endif
// concatenate (works w/ built-in types)
// returns true on success, false on failure (in which case, the string
// is left unchanged). if the argument is null or invalid, the
// concatenation is considered unsucessful.
unsigned char concat(const String &str);
unsigned char concat(const char *cstr);
unsigned char concat(char c);
unsigned char concat(unsigned char c);
unsigned char concat(int num);
unsigned char concat(unsigned int num);
unsigned char concat(long num);
unsigned char concat(unsigned long num);
// if there's not enough memory for the concatenated value, the string
// will be left unchanged (but this isn't signalled in any way)
String & operator += (const String &rhs) {concat(rhs); return (*this);}
String & operator += (const char *cstr) {concat(cstr); return (*this);}
String & operator += (char c) {concat(c); return (*this);}
String & operator += (unsigned char num) {concat(num); return (*this);}
String & operator += (int num) {concat(num); return (*this);}
String & operator += (unsigned int num) {concat(num); return (*this);}
String & operator += (long num) {concat(num); return (*this);}
String & operator += (unsigned long num) {concat(num); return (*this);}
friend StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs);
friend StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr);
friend StringSumHelper & operator + (const StringSumHelper &lhs, char c);
friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, int num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, long num);
friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num);
// comparison (only works w/ Strings and "strings")
operator StringIfHelperType() const { return buffer ? &String::StringIfHelper : 0; }
int compareTo(const String &s) const;
unsigned char equals(const String &s) const;
unsigned char equals(const char *cstr) const;
unsigned char operator == (const String &rhs) const {return equals(rhs);}
unsigned char operator == (const char *cstr) const {return equals(cstr);}
unsigned char operator != (const String &rhs) const {return !equals(rhs);}
unsigned char operator != (const char *cstr) const {return !equals(cstr);}
unsigned char operator < (const String &rhs) const;
unsigned char operator > (const String &rhs) const;
unsigned char operator <= (const String &rhs) const;
unsigned char operator >= (const String &rhs) const;
unsigned char equalsIgnoreCase(const String &s) const;
unsigned char startsWith( const String &prefix) const;
unsigned char startsWith(const String &prefix, unsigned int offset) const;
unsigned char endsWith(const String &suffix) const;
// character acccess
char charAt(unsigned int index) const;
void setCharAt(unsigned int index, char c);
char operator [] (unsigned int index) const;
char& operator [] (unsigned int index);
void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const;
void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const
{getBytes((unsigned char *)buf, bufsize, index);}
// search
int indexOf( char ch ) const;
int indexOf( char ch, unsigned int fromIndex ) const;
int indexOf( const String &str ) const;
int indexOf( const String &str, unsigned int fromIndex ) const;
int lastIndexOf( char ch ) const;
int lastIndexOf( char ch, unsigned int fromIndex ) const;
int lastIndexOf( const String &str ) const;
int lastIndexOf( const String &str, unsigned int fromIndex ) const;
String substring( unsigned int beginIndex ) const;
String substring( unsigned int beginIndex, unsigned int endIndex ) const;
// modification
void replace(char find, char replace);
void replace(const String& find, const String& replace);
void toLowerCase(void);
void toUpperCase(void);
void trim(void);
// parsing/conversion
long toInt(void) const;
protected:
char *buffer; // the actual char array
unsigned int capacity; // the array length minus one (for the '\0')
unsigned int len; // the String length (not counting the '\0')
unsigned char flags; // unused, for future features
protected:
void init(void);
void invalidate(void);
unsigned char changeBuffer(unsigned int maxStrLen);
unsigned char concat(const char *cstr, unsigned int length);
// copy and move
String & copy(const char *cstr, unsigned int length);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void move(String &rhs);
#endif
};
class StringSumHelper : public String
{
public:
StringSumHelper(const String &s) : String(s) {}
StringSumHelper(const char *p) : String(p) {}
StringSumHelper(char c) : String(c) {}
StringSumHelper(unsigned char num) : String(num) {}
StringSumHelper(int num) : String(num) {}
StringSumHelper(unsigned int num) : String(num) {}
StringSumHelper(long num) : String(num) {}
StringSumHelper(unsigned long num) : String(num) {}
};
#endif // __cplusplus
#endif // String_class_h

View File

@@ -1,515 +0,0 @@
#ifndef Binary_h
#define Binary_h
#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
#define B11 3
#define B011 3
#define B0011 3
#define B00011 3
#define B000011 3
#define B0000011 3
#define B00000011 3
#define B100 4
#define B0100 4
#define B00100 4
#define B000100 4
#define B0000100 4
#define B00000100 4
#define B101 5
#define B0101 5
#define B00101 5
#define B000101 5
#define B0000101 5
#define B00000101 5
#define B110 6
#define B0110 6
#define B00110 6
#define B000110 6
#define B0000110 6
#define B00000110 6
#define B111 7
#define B0111 7
#define B00111 7
#define B000111 7
#define B0000111 7
#define B00000111 7
#define B1000 8
#define B01000 8
#define B001000 8
#define B0001000 8
#define B00001000 8
#define B1001 9
#define B01001 9
#define B001001 9
#define B0001001 9
#define B00001001 9
#define B1010 10
#define B01010 10
#define B001010 10
#define B0001010 10
#define B00001010 10
#define B1011 11
#define B01011 11
#define B001011 11
#define B0001011 11
#define B00001011 11
#define B1100 12
#define B01100 12
#define B001100 12
#define B0001100 12
#define B00001100 12
#define B1101 13
#define B01101 13
#define B001101 13
#define B0001101 13
#define B00001101 13
#define B1110 14
#define B01110 14
#define B001110 14
#define B0001110 14
#define B00001110 14
#define B1111 15
#define B01111 15
#define B001111 15
#define B0001111 15
#define B00001111 15
#define B10000 16
#define B010000 16
#define B0010000 16
#define B00010000 16
#define B10001 17
#define B010001 17
#define B0010001 17
#define B00010001 17
#define B10010 18
#define B010010 18
#define B0010010 18
#define B00010010 18
#define B10011 19
#define B010011 19
#define B0010011 19
#define B00010011 19
#define B10100 20
#define B010100 20
#define B0010100 20
#define B00010100 20
#define B10101 21
#define B010101 21
#define B0010101 21
#define B00010101 21
#define B10110 22
#define B010110 22
#define B0010110 22
#define B00010110 22
#define B10111 23
#define B010111 23
#define B0010111 23
#define B00010111 23
#define B11000 24
#define B011000 24
#define B0011000 24
#define B00011000 24
#define B11001 25
#define B011001 25
#define B0011001 25
#define B00011001 25
#define B11010 26
#define B011010 26
#define B0011010 26
#define B00011010 26
#define B11011 27
#define B011011 27
#define B0011011 27
#define B00011011 27
#define B11100 28
#define B011100 28
#define B0011100 28
#define B00011100 28
#define B11101 29
#define B011101 29
#define B0011101 29
#define B00011101 29
#define B11110 30
#define B011110 30
#define B0011110 30
#define B00011110 30
#define B11111 31
#define B011111 31
#define B0011111 31
#define B00011111 31
#define B100000 32
#define B0100000 32
#define B00100000 32
#define B100001 33
#define B0100001 33
#define B00100001 33
#define B100010 34
#define B0100010 34
#define B00100010 34
#define B100011 35
#define B0100011 35
#define B00100011 35
#define B100100 36
#define B0100100 36
#define B00100100 36
#define B100101 37
#define B0100101 37
#define B00100101 37
#define B100110 38
#define B0100110 38
#define B00100110 38
#define B100111 39
#define B0100111 39
#define B00100111 39
#define B101000 40
#define B0101000 40
#define B00101000 40
#define B101001 41
#define B0101001 41
#define B00101001 41
#define B101010 42
#define B0101010 42
#define B00101010 42
#define B101011 43
#define B0101011 43
#define B00101011 43
#define B101100 44
#define B0101100 44
#define B00101100 44
#define B101101 45
#define B0101101 45
#define B00101101 45
#define B101110 46
#define B0101110 46
#define B00101110 46
#define B101111 47
#define B0101111 47
#define B00101111 47
#define B110000 48
#define B0110000 48
#define B00110000 48
#define B110001 49
#define B0110001 49
#define B00110001 49
#define B110010 50
#define B0110010 50
#define B00110010 50
#define B110011 51
#define B0110011 51
#define B00110011 51
#define B110100 52
#define B0110100 52
#define B00110100 52
#define B110101 53
#define B0110101 53
#define B00110101 53
#define B110110 54
#define B0110110 54
#define B00110110 54
#define B110111 55
#define B0110111 55
#define B00110111 55
#define B111000 56
#define B0111000 56
#define B00111000 56
#define B111001 57
#define B0111001 57
#define B00111001 57
#define B111010 58
#define B0111010 58
#define B00111010 58
#define B111011 59
#define B0111011 59
#define B00111011 59
#define B111100 60
#define B0111100 60
#define B00111100 60
#define B111101 61
#define B0111101 61
#define B00111101 61
#define B111110 62
#define B0111110 62
#define B00111110 62
#define B111111 63
#define B0111111 63
#define B00111111 63
#define B1000000 64
#define B01000000 64
#define B1000001 65
#define B01000001 65
#define B1000010 66
#define B01000010 66
#define B1000011 67
#define B01000011 67
#define B1000100 68
#define B01000100 68
#define B1000101 69
#define B01000101 69
#define B1000110 70
#define B01000110 70
#define B1000111 71
#define B01000111 71
#define B1001000 72
#define B01001000 72
#define B1001001 73
#define B01001001 73
#define B1001010 74
#define B01001010 74
#define B1001011 75
#define B01001011 75
#define B1001100 76
#define B01001100 76
#define B1001101 77
#define B01001101 77
#define B1001110 78
#define B01001110 78
#define B1001111 79
#define B01001111 79
#define B1010000 80
#define B01010000 80
#define B1010001 81
#define B01010001 81
#define B1010010 82
#define B01010010 82
#define B1010011 83
#define B01010011 83
#define B1010100 84
#define B01010100 84
#define B1010101 85
#define B01010101 85
#define B1010110 86
#define B01010110 86
#define B1010111 87
#define B01010111 87
#define B1011000 88
#define B01011000 88
#define B1011001 89
#define B01011001 89
#define B1011010 90
#define B01011010 90
#define B1011011 91
#define B01011011 91
#define B1011100 92
#define B01011100 92
#define B1011101 93
#define B01011101 93
#define B1011110 94
#define B01011110 94
#define B1011111 95
#define B01011111 95
#define B1100000 96
#define B01100000 96
#define B1100001 97
#define B01100001 97
#define B1100010 98
#define B01100010 98
#define B1100011 99
#define B01100011 99
#define B1100100 100
#define B01100100 100
#define B1100101 101
#define B01100101 101
#define B1100110 102
#define B01100110 102
#define B1100111 103
#define B01100111 103
#define B1101000 104
#define B01101000 104
#define B1101001 105
#define B01101001 105
#define B1101010 106
#define B01101010 106
#define B1101011 107
#define B01101011 107
#define B1101100 108
#define B01101100 108
#define B1101101 109
#define B01101101 109
#define B1101110 110
#define B01101110 110
#define B1101111 111
#define B01101111 111
#define B1110000 112
#define B01110000 112
#define B1110001 113
#define B01110001 113
#define B1110010 114
#define B01110010 114
#define B1110011 115
#define B01110011 115
#define B1110100 116
#define B01110100 116
#define B1110101 117
#define B01110101 117
#define B1110110 118
#define B01110110 118
#define B1110111 119
#define B01110111 119
#define B1111000 120
#define B01111000 120
#define B1111001 121
#define B01111001 121
#define B1111010 122
#define B01111010 122
#define B1111011 123
#define B01111011 123
#define B1111100 124
#define B01111100 124
#define B1111101 125
#define B01111101 125
#define B1111110 126
#define B01111110 126
#define B1111111 127
#define B01111111 127
#define B10000000 128
#define B10000001 129
#define B10000010 130
#define B10000011 131
#define B10000100 132
#define B10000101 133
#define B10000110 134
#define B10000111 135
#define B10001000 136
#define B10001001 137
#define B10001010 138
#define B10001011 139
#define B10001100 140
#define B10001101 141
#define B10001110 142
#define B10001111 143
#define B10010000 144
#define B10010001 145
#define B10010010 146
#define B10010011 147
#define B10010100 148
#define B10010101 149
#define B10010110 150
#define B10010111 151
#define B10011000 152
#define B10011001 153
#define B10011010 154
#define B10011011 155
#define B10011100 156
#define B10011101 157
#define B10011110 158
#define B10011111 159
#define B10100000 160
#define B10100001 161
#define B10100010 162
#define B10100011 163
#define B10100100 164
#define B10100101 165
#define B10100110 166
#define B10100111 167
#define B10101000 168
#define B10101001 169
#define B10101010 170
#define B10101011 171
#define B10101100 172
#define B10101101 173
#define B10101110 174
#define B10101111 175
#define B10110000 176
#define B10110001 177
#define B10110010 178
#define B10110011 179
#define B10110100 180
#define B10110101 181
#define B10110110 182
#define B10110111 183
#define B10111000 184
#define B10111001 185
#define B10111010 186
#define B10111011 187
#define B10111100 188
#define B10111101 189
#define B10111110 190
#define B10111111 191
#define B11000000 192
#define B11000001 193
#define B11000010 194
#define B11000011 195
#define B11000100 196
#define B11000101 197
#define B11000110 198
#define B11000111 199
#define B11001000 200
#define B11001001 201
#define B11001010 202
#define B11001011 203
#define B11001100 204
#define B11001101 205
#define B11001110 206
#define B11001111 207
#define B11010000 208
#define B11010001 209
#define B11010010 210
#define B11010011 211
#define B11010100 212
#define B11010101 213
#define B11010110 214
#define B11010111 215
#define B11011000 216
#define B11011001 217
#define B11011010 218
#define B11011011 219
#define B11011100 220
#define B11011101 221
#define B11011110 222
#define B11011111 223
#define B11100000 224
#define B11100001 225
#define B11100010 226
#define B11100011 227
#define B11100100 228
#define B11100101 229
#define B11100110 230
#define B11100111 231
#define B11101000 232
#define B11101001 233
#define B11101010 234
#define B11101011 235
#define B11101100 236
#define B11101101 237
#define B11101110 238
#define B11101111 239
#define B11110000 240
#define B11110001 241
#define B11110010 242
#define B11110011 243
#define B11110100 244
#define B11110101 245
#define B11110110 246
#define B11110111 247
#define B11111000 248
#define B11111001 249
#define B11111010 250
#define B11111011 251
#define B11111100 252
#define B11111101 253
#define B11111110 254
#define B11111111 255
#endif

View File

@@ -1,20 +0,0 @@
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}

View File

@@ -1,18 +0,0 @@
#include <new.h>
void * operator new(size_t size)
{
return malloc(size);
}
void operator delete(void * ptr)
{
free(ptr);
}
int __cxa_guard_acquire(__guard *g) {return !*(char *)(g);};
void __cxa_guard_release (__guard *g) {*(char *)g = 1;};
void __cxa_guard_abort (__guard *) {};
void __cxa_pure_virtual(void) {};

View File

@@ -1,22 +0,0 @@
/* Header to define new/delete operators as they aren't provided by avr-gcc by default
Taken from http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453
*/
#ifndef NEW_H
#define NEW_H
#include <stdlib.h>
void * operator new(size_t size);
void operator delete(void * ptr);
__extension__ typedef int __guard __attribute__((mode (__DI__)));
extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *);
extern "C" void __cxa_pure_virtual(void);
#endif

View File

@@ -1,324 +0,0 @@
/*
wiring.c - Partial implementation of the Wiring API for the ATmega8.
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id$
*/
#include "wiring_private.h"
// the prescaler is set so that timer0 ticks every 64 clock cycles, and the
// the overflow handler is called every 256 ticks.
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256))
// the whole number of milliseconds per timer0 overflow
#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)
// the fractional number of milliseconds per timer0 overflow. we shift right
// by three to fit these numbers into a byte. (for the clock speeds we care
// about - 8 and 16 MHz - this doesn't lose precision.)
#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
#define FRACT_MAX (1000 >> 3)
volatile unsigned long timer0_overflow_count = 0;
volatile unsigned long timer0_millis = 0;
static unsigned char timer0_fract = 0;
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
SIGNAL(TIM0_OVF_vect)
#else
SIGNAL(TIMER0_OVF_vect)
#endif
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
}
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}
unsigned long micros() {
unsigned long m;
uint8_t oldSREG = SREG, t;
cli();
m = timer0_overflow_count;
#if defined(TCNT0)
t = TCNT0;
#elif defined(TCNT0L)
t = TCNT0L;
#else
#error TIMER 0 not defined
#endif
#ifdef TIFR0
if ((TIFR0 & _BV(TOV0)) && (t < 255))
m++;
#else
if ((TIFR & _BV(TOV0)) && (t < 255))
m++;
#endif
SREG = oldSREG;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}
void delay(unsigned long ms)
{
uint16_t start = (uint16_t)micros();
while (ms > 0) {
if (((uint16_t)micros() - start) >= 1000) {
ms--;
start += 1000;
}
}
}
/* Delay for the given number of microseconds. Assumes a 8 or 16 MHz clock. */
void delayMicroseconds(unsigned int us)
{
// calling avrlib's delay_us() function with low values (e.g. 1 or
// 2 microseconds) gives delays longer than desired.
//delay_us(us);
#if F_CPU >= 20000000L
// for the 20 MHz clock on rare Arduino boards
// for a one-microsecond delay, simply wait 2 cycle and return. The overhead
// of the function call yields a delay of exactly a one microsecond.
__asm__ __volatile__ (
"nop" "\n\t"
"nop"); //just waiting 2 cycle
if (--us == 0)
return;
// the following loop takes a 1/5 of a microsecond (4 cycles)
// per iteration, so execute it five times for each microsecond of
// delay requested.
us = (us<<2) + us; // x5 us
// account for the time taken in the preceeding commands.
us -= 2;
#elif F_CPU >= 16000000L
// for the 16 MHz clock on most Arduino boards
// for a one-microsecond delay, simply return. the overhead
// of the function call yields a delay of approximately 1 1/8 us.
if (--us == 0)
return;
// the following loop takes a quarter of a microsecond (4 cycles)
// per iteration, so execute it four times for each microsecond of
// delay requested.
us <<= 2;
// account for the time taken in the preceeding commands.
us -= 2;
#else
// for the 8 MHz internal clock on the ATmega168
// for a one- or two-microsecond delay, simply return. the overhead of
// the function calls takes more than two microseconds. can't just
// subtract two, since us is unsigned; we'd overflow.
if (--us == 0)
return;
if (--us == 0)
return;
// the following loop takes half of a microsecond (4 cycles)
// per iteration, so execute it twice for each microsecond of
// delay requested.
us <<= 1;
// partially compensate for the time taken by the preceeding commands.
// we can't subtract any more than this or we'd overflow w/ small delays.
us--;
#endif
// busy wait
__asm__ __volatile__ (
"1: sbiw %0,1" "\n\t" // 2 cycles
"brne 1b" : "=w" (us) : "0" (us) // 2 cycles
);
}
void init()
{
// this needs to be called before setup() or some functions won't
// work there
sei();
// on the ATmega168, timer 0 is also used for fast hardware pwm
// (using phase-correct PWM would mean that timer 0 overflowed half as often
// resulting in different millis() behavior on the ATmega8 and ATmega168)
#if defined(TCCR0A) && defined(WGM01)
sbi(TCCR0A, WGM01);
sbi(TCCR0A, WGM00);
#endif
// set timer 0 prescale factor to 64
#if defined(__AVR_ATmega128__)
// CPU specific: different values for the ATmega128
sbi(TCCR0, CS02);
#elif defined(TCCR0) && defined(CS01) && defined(CS00)
// this combination is for the standard atmega8
sbi(TCCR0, CS01);
sbi(TCCR0, CS00);
#elif defined(TCCR0B) && defined(CS01) && defined(CS00)
// this combination is for the standard 168/328/1280/2560
sbi(TCCR0B, CS01);
sbi(TCCR0B, CS00);
#elif defined(TCCR0A) && defined(CS01) && defined(CS00)
// this combination is for the __AVR_ATmega645__ series
sbi(TCCR0A, CS01);
sbi(TCCR0A, CS00);
#else
#error Timer 0 prescale factor 64 not set correctly
#endif
// enable timer 0 overflow interrupt
#if defined(TIMSK) && defined(TOIE0)
sbi(TIMSK, TOIE0);
#elif defined(TIMSK0) && defined(TOIE0)
sbi(TIMSK0, TOIE0);
#else
#error Timer 0 overflow interrupt not set correctly
#endif
// timers 1 and 2 are used for phase-correct hardware pwm
// this is better for motors as it ensures an even waveform
// note, however, that fast pwm mode can achieve a frequency of up
// 8 MHz (with a 16 MHz clock) at 50% duty cycle
#if defined(TCCR1B) && defined(CS11) && defined(CS10)
TCCR1B = 0;
// set timer 1 prescale factor to 64
sbi(TCCR1B, CS11);
#if F_CPU >= 8000000L
sbi(TCCR1B, CS10);
#endif
#elif defined(TCCR1) && defined(CS11) && defined(CS10)
sbi(TCCR1, CS11);
#if F_CPU >= 8000000L
sbi(TCCR1, CS10);
#endif
#endif
// put timer 1 in 8-bit phase correct pwm mode
#if defined(TCCR1A) && defined(WGM10)
sbi(TCCR1A, WGM10);
#elif defined(TCCR1)
#warning this needs to be finished
#endif
// set timer 2 prescale factor to 64
#if defined(TCCR2) && defined(CS22)
sbi(TCCR2, CS22);
#elif defined(TCCR2B) && defined(CS22)
sbi(TCCR2B, CS22);
#else
#warning Timer 2 not finished (may not be present on this CPU)
#endif
// configure timer 2 for phase correct pwm (8-bit)
#if defined(TCCR2) && defined(WGM20)
sbi(TCCR2, WGM20);
#elif defined(TCCR2A) && defined(WGM20)
sbi(TCCR2A, WGM20);
#else
#warning Timer 2 not finished (may not be present on this CPU)
#endif
#if defined(TCCR3B) && defined(CS31) && defined(WGM30)
sbi(TCCR3B, CS31); // set timer 3 prescale factor to 64
sbi(TCCR3B, CS30);
sbi(TCCR3A, WGM30); // put timer 3 in 8-bit phase correct pwm mode
#endif
#if defined(TCCR4A) && defined(TCCR4B) && defined(TCCR4D) /* beginning of timer4 block for 32U4 and similar */
sbi(TCCR4B, CS42); // set timer4 prescale factor to 64
sbi(TCCR4B, CS41);
sbi(TCCR4B, CS40);
sbi(TCCR4D, WGM40); // put timer 4 in phase- and frequency-correct PWM mode
sbi(TCCR4A, PWM4A); // enable PWM mode for comparator OCR4A
sbi(TCCR4C, PWM4D); // enable PWM mode for comparator OCR4D
#else /* beginning of timer4 block for ATMEGA1280 and ATMEGA2560 */
#if defined(TCCR4B) && defined(CS41) && defined(WGM40)
sbi(TCCR4B, CS41); // set timer 4 prescale factor to 64
sbi(TCCR4B, CS40);
sbi(TCCR4A, WGM40); // put timer 4 in 8-bit phase correct pwm mode
#endif
#endif /* end timer4 block for ATMEGA1280/2560 and similar */
#if defined(TCCR5B) && defined(CS51) && defined(WGM50)
sbi(TCCR5B, CS51); // set timer 5 prescale factor to 64
sbi(TCCR5B, CS50);
sbi(TCCR5A, WGM50); // put timer 5 in 8-bit phase correct pwm mode
#endif
#if defined(ADCSRA)
// set a2d prescale factor to 128
// 16 MHz / 128 = 125 KHz, inside the desired 50-200 KHz range.
// XXX: this will not work properly for other clock speeds, and
// this code should use F_CPU to determine the prescale factor.
sbi(ADCSRA, ADPS2);
sbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
// enable a2d conversions
sbi(ADCSRA, ADEN);
#endif
// the bootloader connects pins 0 and 1 to the USART; disconnect them
// here so they can be used as normal digital i/o; they will be
// reconnected in Serial.begin()
#if defined(UCSRB)
UCSRB = 0;
#elif defined(UCSR0B)
UCSR0B = 0;
#endif
}

View File

@@ -1,282 +0,0 @@
/*
wiring_analog.c - analog input and output
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
Modified 28 September 2010 by Mark Sproul
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#include "wiring_private.h"
#include "pins_arduino.h"
uint8_t analog_reference = DEFAULT;
void analogReference(uint8_t mode)
{
// can't actually set the register here because the default setting
// will connect AVCC and the AREF pin, which would cause a short if
// there's something connected to AREF.
analog_reference = mode;
}
int analogRead(uint8_t pin)
{
uint8_t low, high;
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
if (pin >= 54) pin -= 54; // allow for channel or pin numbers
#elif defined(__AVR_ATmega32U4__)
if (pin >= 18) pin -= 18; // allow for channel or pin numbers
#elif defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
if (pin >= 24) pin -= 24; // allow for channel or pin numbers
#else
if (pin >= 14) pin -= 14; // allow for channel or pin numbers
#endif
#if defined(__AVR_ATmega32U4__)
pin = analogPinToChannel(pin);
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
#elif defined(ADCSRB) && defined(MUX5)
// the MUX5 bit of ADCSRB selects whether we're reading from channels
// 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
#endif
// set the analog reference (high two bits of ADMUX) and select the
// channel (low 4 bits). this also sets ADLAR (left-adjust result)
// to 0 (the default).
#if defined(ADMUX)
ADMUX = (analog_reference << 6) | (pin & 0x07);
#endif
// without a delay, we seem to read from the wrong channel
//delay(1);
#if defined(ADCSRA) && defined(ADCL)
// start the conversion
sbi(ADCSRA, ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
// we have to read ADCL first; doing so locks both ADCL
// and ADCH until ADCH is read. reading ADCL second would
// cause the results of each conversion to be discarded,
// as ADCL and ADCH would be locked when it completed.
low = ADCL;
high = ADCH;
#else
// we dont have an ADC, return 0
low = 0;
high = 0;
#endif
// combine the two bytes
return (high << 8) | low;
}
// Right now, PWM output only works on the pins with
// hardware support. These are defined in the appropriate
// pins_*.c file. For the rest of the pins, we default
// to digital output.
void analogWrite(uint8_t pin, int val)
{
// We need to make sure the PWM output is enabled for those pins
// that support it, as we turn it off when digitally reading or
// writing with them. Also, make sure the pin is in output mode
// for consistenty with Wiring, which doesn't require a pinMode
// call for the analog output pins.
pinMode(pin, OUTPUT);
if (val == 0)
{
digitalWrite(pin, LOW);
}
else if (val == 255)
{
digitalWrite(pin, HIGH);
}
else
{
switch(digitalPinToTimer(pin))
{
// XXX fix needed for atmega8
#if defined(TCCR0) && defined(COM00) && !defined(__AVR_ATmega8__)
case TIMER0A:
// connect pwm to pin on timer 0
sbi(TCCR0, COM00);
OCR0 = val; // set pwm duty
break;
#endif
#if defined(TCCR0A) && defined(COM0A1)
case TIMER0A:
// connect pwm to pin on timer 0, channel A
sbi(TCCR0A, COM0A1);
OCR0A = val; // set pwm duty
break;
#endif
#if defined(TCCR0A) && defined(COM0B1)
case TIMER0B:
// connect pwm to pin on timer 0, channel B
sbi(TCCR0A, COM0B1);
OCR0B = val; // set pwm duty
break;
#endif
#if defined(TCCR1A) && defined(COM1A1)
case TIMER1A:
// connect pwm to pin on timer 1, channel A
sbi(TCCR1A, COM1A1);
OCR1A = val; // set pwm duty
break;
#endif
#if defined(TCCR1A) && defined(COM1B1)
case TIMER1B:
// connect pwm to pin on timer 1, channel B
sbi(TCCR1A, COM1B1);
OCR1B = val; // set pwm duty
break;
#endif
#if defined(TCCR2) && defined(COM21)
case TIMER2:
// connect pwm to pin on timer 2
sbi(TCCR2, COM21);
OCR2 = val; // set pwm duty
break;
#endif
#if defined(TCCR2A) && defined(COM2A1)
case TIMER2A:
// connect pwm to pin on timer 2, channel A
sbi(TCCR2A, COM2A1);
OCR2A = val; // set pwm duty
break;
#endif
#if defined(TCCR2A) && defined(COM2B1)
case TIMER2B:
// connect pwm to pin on timer 2, channel B
sbi(TCCR2A, COM2B1);
OCR2B = val; // set pwm duty
break;
#endif
#if defined(TCCR3A) && defined(COM3A1)
case TIMER3A:
// connect pwm to pin on timer 3, channel A
sbi(TCCR3A, COM3A1);
OCR3A = val; // set pwm duty
break;
#endif
#if defined(TCCR3A) && defined(COM3B1)
case TIMER3B:
// connect pwm to pin on timer 3, channel B
sbi(TCCR3A, COM3B1);
OCR3B = val; // set pwm duty
break;
#endif
#if defined(TCCR3A) && defined(COM3C1)
case TIMER3C:
// connect pwm to pin on timer 3, channel C
sbi(TCCR3A, COM3C1);
OCR3C = val; // set pwm duty
break;
#endif
#if defined(TCCR4A)
case TIMER4A:
//connect pwm to pin on timer 4, channel A
sbi(TCCR4A, COM4A1);
#if defined(COM4A0) // only used on 32U4
cbi(TCCR4A, COM4A0);
#endif
OCR4A = val; // set pwm duty
break;
#endif
#if defined(TCCR4A) && defined(COM4B1)
case TIMER4B:
// connect pwm to pin on timer 4, channel B
sbi(TCCR4A, COM4B1);
OCR4B = val; // set pwm duty
break;
#endif
#if defined(TCCR4A) && defined(COM4C1)
case TIMER4C:
// connect pwm to pin on timer 4, channel C
sbi(TCCR4A, COM4C1);
OCR4C = val; // set pwm duty
break;
#endif
#if defined(TCCR4C) && defined(COM4D1)
case TIMER4D:
// connect pwm to pin on timer 4, channel D
sbi(TCCR4C, COM4D1);
#if defined(COM4D0) // only used on 32U4
cbi(TCCR4C, COM4D0);
#endif
OCR4D = val; // set pwm duty
break;
#endif
#if defined(TCCR5A) && defined(COM5A1)
case TIMER5A:
// connect pwm to pin on timer 5, channel A
sbi(TCCR5A, COM5A1);
OCR5A = val; // set pwm duty
break;
#endif
#if defined(TCCR5A) && defined(COM5B1)
case TIMER5B:
// connect pwm to pin on timer 5, channel B
sbi(TCCR5A, COM5B1);
OCR5B = val; // set pwm duty
break;
#endif
#if defined(TCCR5A) && defined(COM5C1)
case TIMER5C:
// connect pwm to pin on timer 5, channel C
sbi(TCCR5A, COM5C1);
OCR5C = val; // set pwm duty
break;
#endif
case NOT_ON_TIMER:
default:
if (val < 128) {
digitalWrite(pin, LOW);
} else {
digitalWrite(pin, HIGH);
}
}
}
}

View File

@@ -1,178 +0,0 @@
/*
wiring_digital.c - digital input and output functions
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
Modified 28 September 2010 by Mark Sproul
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#define ARDUINO_MAIN
#include "wiring_private.h"
#include "pins_arduino.h"
void pinMode(uint8_t pin, uint8_t mode)
{
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *reg, *out;
if (port == NOT_A_PIN) return;
// JWS: can I let the optimizer do this?
reg = portModeRegister(port);
out = portOutputRegister(port);
if (mode == INPUT) {
uint8_t oldSREG = SREG;
cli();
*reg &= ~bit;
*out &= ~bit;
SREG = oldSREG;
} else if (mode == INPUT_PULLUP) {
uint8_t oldSREG = SREG;
cli();
*reg &= ~bit;
*out |= bit;
SREG = oldSREG;
} else {
uint8_t oldSREG = SREG;
cli();
*reg |= bit;
SREG = oldSREG;
}
}
// Forcing this inline keeps the callers from having to push their own stuff
// on the stack. It is a good performance win and only takes 1 more byte per
// user than calling. (It will take more bytes on the 168.)
//
// But shouldn't this be moved into pinMode? Seems silly to check and do on
// each digitalread or write.
//
// Mark Sproul:
// - Removed inline. Save 170 bytes on atmega1280
// - changed to a switch statment; added 32 bytes but much easier to read and maintain.
// - Added more #ifdefs, now compiles for atmega645
//
//static inline void turnOffPWM(uint8_t timer) __attribute__ ((always_inline));
//static inline void turnOffPWM(uint8_t timer)
static void turnOffPWM(uint8_t timer)
{
switch (timer)
{
#if defined(TCCR1A) && defined(COM1A1)
case TIMER1A: cbi(TCCR1A, COM1A1); break;
#endif
#if defined(TCCR1A) && defined(COM1B1)
case TIMER1B: cbi(TCCR1A, COM1B1); break;
#endif
#if defined(TCCR2) && defined(COM21)
case TIMER2: cbi(TCCR2, COM21); break;
#endif
#if defined(TCCR0A) && defined(COM0A1)
case TIMER0A: cbi(TCCR0A, COM0A1); break;
#endif
#if defined(TIMER0B) && defined(COM0B1)
case TIMER0B: cbi(TCCR0A, COM0B1); break;
#endif
#if defined(TCCR2A) && defined(COM2A1)
case TIMER2A: cbi(TCCR2A, COM2A1); break;
#endif
#if defined(TCCR2A) && defined(COM2B1)
case TIMER2B: cbi(TCCR2A, COM2B1); break;
#endif
#if defined(TCCR3A) && defined(COM3A1)
case TIMER3A: cbi(TCCR3A, COM3A1); break;
#endif
#if defined(TCCR3A) && defined(COM3B1)
case TIMER3B: cbi(TCCR3A, COM3B1); break;
#endif
#if defined(TCCR3A) && defined(COM3C1)
case TIMER3C: cbi(TCCR3A, COM3C1); break;
#endif
#if defined(TCCR4A) && defined(COM4A1)
case TIMER4A: cbi(TCCR4A, COM4A1); break;
#endif
#if defined(TCCR4A) && defined(COM4B1)
case TIMER4B: cbi(TCCR4A, COM4B1); break;
#endif
#if defined(TCCR4A) && defined(COM4C1)
case TIMER4C: cbi(TCCR4A, COM4C1); break;
#endif
#if defined(TCCR4C) && defined(COM4D1)
case TIMER4D: cbi(TCCR4C, COM4D1); break;
#endif
#if defined(TCCR5A)
case TIMER5A: cbi(TCCR5A, COM5A1); break;
case TIMER5B: cbi(TCCR5A, COM5B1); break;
case TIMER5C: cbi(TCCR5A, COM5C1); break;
#endif
}
}
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG;
}
int digitalRead(uint8_t pin)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
if (port == NOT_A_PIN) return LOW;
// If the pin that support PWM output, we need to turn it off
// before getting a digital reading.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}

View File

@@ -1,71 +0,0 @@
/*
wiring_private.h - Internal header file.
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 239 2007-01-12 17:58:39Z mellis $
*/
#ifndef WiringPrivate_h
#define WiringPrivate_h
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdarg.h>
#include "Arduino.h"
#ifdef __cplusplus
extern "C"{
#endif
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
#define EXTERNAL_INT_0 0
#define EXTERNAL_INT_1 1
#define EXTERNAL_INT_2 2
#define EXTERNAL_INT_3 3
#define EXTERNAL_INT_4 4
#define EXTERNAL_INT_5 5
#define EXTERNAL_INT_6 6
#define EXTERNAL_INT_7 7
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define EXTERNAL_NUM_INTERRUPTS 8
#elif defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
#define EXTERNAL_NUM_INTERRUPTS 3
#elif defined(__AVR_ATmega32U4__)
#define EXTERNAL_NUM_INTERRUPTS 4
#else
#define EXTERNAL_NUM_INTERRUPTS 2
#endif
typedef void (*voidFuncPtr)(void);
#ifdef __cplusplus
} // extern "C"
#endif
#endif

View File

@@ -1,69 +0,0 @@
/*
wiring_pulse.c - pulseIn() function
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#include "wiring_private.h"
#include "pins_arduino.h"
/* Measures the length (in microseconds) of a pulse on the pin; state is HIGH
* or LOW, the type of pulse to measure. Works on pulses from 2-3 microseconds
* to 3 minutes in length, but must be called at least a few dozen microseconds
* before the start of the pulse. */
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout)
{
// cache the port and bit of the pin in order to speed up the
// pulse width measuring loop and achieve finer resolution. calling
// digitalRead() instead yields much coarser resolution.
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
uint8_t stateMask = (state ? bit : 0);
unsigned long width = 0; // keep initialization out of time critical area
// convert the timeout from microseconds to a number of times through
// the initial loop; it takes 16 clock cycles per iteration.
unsigned long numloops = 0;
unsigned long maxloops = microsecondsToClockCycles(timeout) / 16;
// wait for any previous pulse to end
while ((*portInputRegister(port) & bit) == stateMask)
if (numloops++ == maxloops)
return 0;
// wait for the pulse to start
while ((*portInputRegister(port) & bit) != stateMask)
if (numloops++ == maxloops)
return 0;
// wait for the pulse to stop
while ((*portInputRegister(port) & bit) == stateMask) {
if (numloops++ == maxloops)
return 0;
width++;
}
// convert the reading to microseconds. The loop has been determined
// to be 20 clock cycles long and have about 16 clocks between the edge
// and the start of the loop. There will be some error introduced by
// the interrupt handlers.
return clockCyclesToMicroseconds(width * 21 + 16);
}

View File

@@ -1,55 +0,0 @@
/*
wiring_shift.c - shiftOut() function
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2005-2006 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
*/
#include "wiring_private.h"
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t value = 0;
uint8_t i;
for (i = 0; i < 8; ++i) {
digitalWrite(clockPin, HIGH);
if (bitOrder == LSBFIRST)
value |= digitalRead(dataPin) << i;
else
value |= digitalRead(dataPin) << (7 - i);
digitalWrite(clockPin, LOW);
}
return value;
}
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
uint8_t i;
for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST)
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}

View File

@@ -1,411 +0,0 @@
/*
pins_arduino.h - Pin definition functions for Arduino
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2007 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <avr/pgmspace.h>
#define NUM_DIGITAL_PINS 82
#define NUM_ANALOG_INPUTS 16
#define analogInputToDigitalPin(p) ((p < 16) ? (p) + 54 : -1)
#define digitalPinHasPWM(p) (((p) >= 2 && (p) <= 13) || ((p) >= 44 && (p)<= 46))
static const uint8_t SS = 53;
static const uint8_t MOSI = 51;
static const uint8_t MISO = 50;
static const uint8_t SCK = 52;
static const uint8_t SDA = 20;
static const uint8_t SCL = 21;
static const uint8_t LED_BUILTIN = 13;
static const uint8_t A0 = 54;
static const uint8_t A1 = 55;
static const uint8_t A2 = 56;
static const uint8_t A3 = 57;
static const uint8_t A4 = 58;
static const uint8_t A5 = 59;
static const uint8_t A6 = 60;
static const uint8_t A7 = 61;
static const uint8_t A8 = 62;
static const uint8_t A9 = 63;
static const uint8_t A10 = 64;
static const uint8_t A11 = 65;
static const uint8_t A12 = 66;
static const uint8_t A13 = 67;
static const uint8_t A14 = 68;
static const uint8_t A15 = 69;
// A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins)
// Only pins available for RECEIVE (TRANSMIT can be on any pin):
// (I've deliberately left out pin mapping to the Hardware USARTs - seems senseless to me)
// Pins: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
#define digitalPinToPCICR(p) ( (((p) >= 10) && ((p) <= 13)) || \
(((p) >= 50) && ((p) <= 53)) || \
(((p) >= 62) && ((p) <= 69)) ? (&PCICR) : ((uint8_t *)0) )
#define digitalPinToPCICRbit(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? 0 : \
( (((p) >= 62) && ((p) <= 69)) ? 2 : \
0 ) )
#define digitalPinToPCMSK(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? (&PCMSK0) : \
( (((p) >= 62) && ((p) <= 69)) ? (&PCMSK2) : \
((uint8_t *)0) ) )
#define digitalPinToPCMSKbit(p) ( (((p) >= 10) && ((p) <= 13)) ? ((p) - 6) : \
( ((p) == 50) ? 3 : \
( ((p) == 51) ? 2 : \
( ((p) == 52) ? 1 : \
( ((p) == 53) ? 0 : \
( (((p) >= 62) && ((p) <= 69)) ? ((p) - 62) : \
0 ) ) ) ) ) )
#ifdef ARDUINO_MAIN
const uint16_t PROGMEM port_to_mode_PGM[] = {
NOT_A_PORT,
(uint16_t) &DDRA,
(uint16_t) &DDRB,
(uint16_t) &DDRC,
(uint16_t) &DDRD,
(uint16_t) &DDRE,
(uint16_t) &DDRF,
(uint16_t) &DDRG,
(uint16_t) &DDRH,
NOT_A_PORT,
(uint16_t) &DDRJ,
(uint16_t) &DDRK,
(uint16_t) &DDRL,
};
const uint16_t PROGMEM port_to_output_PGM[] = {
NOT_A_PORT,
(uint16_t) &PORTA,
(uint16_t) &PORTB,
(uint16_t) &PORTC,
(uint16_t) &PORTD,
(uint16_t) &PORTE,
(uint16_t) &PORTF,
(uint16_t) &PORTG,
(uint16_t) &PORTH,
NOT_A_PORT,
(uint16_t) &PORTJ,
(uint16_t) &PORTK,
(uint16_t) &PORTL,
};
const uint16_t PROGMEM port_to_input_PGM[] = {
NOT_A_PIN,
(uint16_t) &PINA,
(uint16_t) &PINB,
(uint16_t) &PINC,
(uint16_t) &PIND,
(uint16_t) &PINE,
(uint16_t) &PINF,
(uint16_t) &PING,
(uint16_t) &PINH,
NOT_A_PIN,
(uint16_t) &PINJ,
(uint16_t) &PINK,
(uint16_t) &PINL,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
// PORTLIST
// -------------------------------------------
PE , // PE 0 ** 0 ** USART0_RX
PE , // PE 1 ** 1 ** USART0_TX
PE , // PE 4 ** 2 ** PWM2
PE , // PE 5 ** 3 ** PWM3
PG , // PG 5 ** 4 ** PWM4
PE , // PE 3 ** 5 ** PWM5
PH , // PH 3 ** 6 ** PWM6
PH , // PH 4 ** 7 ** PWM7
PH , // PH 5 ** 8 ** PWM8
PH , // PH 6 ** 9 ** PWM9
PB , // PB 4 ** 10 ** PWM10
PB , // PB 5 ** 11 ** PWM11
PB , // PB 6 ** 12 ** PWM12
PB , // PB 7 ** 13 ** PWM13
PJ , // PJ 1 ** 14 ** USART3_TX
PJ , // PJ 0 ** 15 ** USART3_RX
PH , // PH 1 ** 16 ** USART2_TX
PH , // PH 0 ** 17 ** USART2_RX
PD , // PD 3 ** 18 ** USART1_TX
PD , // PD 2 ** 19 ** USART1_RX
PD , // PD 1 ** 20 ** I2C_SDA
PD , // PD 0 ** 21 ** I2C_SCL
PA , // PA 0 ** 22 ** D22
PA , // PA 1 ** 23 ** D23
PA , // PA 2 ** 24 ** D24
PA , // PA 3 ** 25 ** D25
PA , // PA 4 ** 26 ** D26
PA , // PA 5 ** 27 ** D27
PA , // PA 6 ** 28 ** D28
PA , // PA 7 ** 29 ** D29
PC , // PC 7 ** 30 ** D30
PC , // PC 6 ** 31 ** D31
PC , // PC 5 ** 32 ** D32
PC , // PC 4 ** 33 ** D33
PC , // PC 3 ** 34 ** D34
PC , // PC 2 ** 35 ** D35
PC , // PC 1 ** 36 ** D36
PC , // PC 0 ** 37 ** D37
PD , // PD 7 ** 38 ** D38
PG , // PG 2 ** 39 ** D39
PG , // PG 1 ** 40 ** D40
PG , // PG 0 ** 41 ** D41
PL , // PL 7 ** 42 ** D42
PL , // PL 6 ** 43 ** D43
PL , // PL 5 ** 44 ** D44
PL , // PL 4 ** 45 ** D45
PL , // PL 3 ** 46 ** D46
PL , // PL 2 ** 47 ** D47
PL , // PL 1 ** 48 ** D48
PL , // PL 0 ** 49 ** D49
PB , // PB 3 ** 50 ** SPI_MISO
PB , // PB 2 ** 51 ** SPI_MOSI
PB , // PB 1 ** 52 ** SPI_SCK
PB , // PB 0 ** 53 ** SPI_SS
PF , // PF 0 ** 54 ** A0
PF , // PF 1 ** 55 ** A1
PF , // PF 2 ** 56 ** A2
PF , // PF 3 ** 57 ** A3
PF , // PF 4 ** 58 ** A4
PF , // PF 5 ** 59 ** A5
PF , // PF 6 ** 60 ** A6
PF , // PF 7 ** 61 ** A7
PK , // PK 0 ** 62 ** A8
PK , // PK 1 ** 63 ** A9
PK , // PK 2 ** 64 ** A10
PK , // PK 3 ** 65 ** A11
PK , // PK 4 ** 66 ** A12
PK , // PK 5 ** 67 ** A13
PK , // PK 6 ** 68 ** A14
PK , // PK 7 ** 69 ** A15
PG , // PG 4 ** 70 ** D70
PG , // PG 3 ** 71 ** D71
PJ , // PJ 2 ** 72 ** D72
PJ , // PJ 3 ** 73 ** D73
PJ , // PJ 7 ** 74 ** D74
PJ , // PJ 4 ** 75 ** D75
PJ , // PJ 5 ** 76 ** D76
PJ , // PJ 6 ** 77 ** D77
PE , // PE 2 ** 78 ** D78
PE , // PE 6 ** 79 ** D79
PE , // PE 7 ** 80 ** D80
PD , // PD 4 ** 81 ** D81
PD , // PD 5 ** 82 ** D82
PD , // PD 6 ** 83 ** D83
PH , // PH 2 ** 84 ** D84
PH , // PH 7 ** 85 ** D85
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
// PIN IN PORT
// -------------------------------------------
_BV( 0 ) , // PE 0 ** 0 ** USART0_RX
_BV( 1 ) , // PE 1 ** 1 ** USART0_TX
_BV( 4 ) , // PE 4 ** 2 ** PWM2
_BV( 5 ) , // PE 5 ** 3 ** PWM3
_BV( 5 ) , // PG 5 ** 4 ** PWM4
_BV( 3 ) , // PE 3 ** 5 ** PWM5
_BV( 3 ) , // PH 3 ** 6 ** PWM6
_BV( 4 ) , // PH 4 ** 7 ** PWM7
_BV( 5 ) , // PH 5 ** 8 ** PWM8
_BV( 6 ) , // PH 6 ** 9 ** PWM9
_BV( 4 ) , // PB 4 ** 10 ** PWM10
_BV( 5 ) , // PB 5 ** 11 ** PWM11
_BV( 6 ) , // PB 6 ** 12 ** PWM12
_BV( 7 ) , // PB 7 ** 13 ** PWM13
_BV( 1 ) , // PJ 1 ** 14 ** USART3_TX
_BV( 0 ) , // PJ 0 ** 15 ** USART3_RX
_BV( 1 ) , // PH 1 ** 16 ** USART2_TX
_BV( 0 ) , // PH 0 ** 17 ** USART2_RX
_BV( 3 ) , // PD 3 ** 18 ** USART1_TX
_BV( 2 ) , // PD 2 ** 19 ** USART1_RX
_BV( 1 ) , // PD 1 ** 20 ** I2C_SDA
_BV( 0 ) , // PD 0 ** 21 ** I2C_SCL
_BV( 0 ) , // PA 0 ** 22 ** D22
_BV( 1 ) , // PA 1 ** 23 ** D23
_BV( 2 ) , // PA 2 ** 24 ** D24
_BV( 3 ) , // PA 3 ** 25 ** D25
_BV( 4 ) , // PA 4 ** 26 ** D26
_BV( 5 ) , // PA 5 ** 27 ** D27
_BV( 6 ) , // PA 6 ** 28 ** D28
_BV( 7 ) , // PA 7 ** 29 ** D29
_BV( 7 ) , // PC 7 ** 30 ** D30
_BV( 6 ) , // PC 6 ** 31 ** D31
_BV( 5 ) , // PC 5 ** 32 ** D32
_BV( 4 ) , // PC 4 ** 33 ** D33
_BV( 3 ) , // PC 3 ** 34 ** D34
_BV( 2 ) , // PC 2 ** 35 ** D35
_BV( 1 ) , // PC 1 ** 36 ** D36
_BV( 0 ) , // PC 0 ** 37 ** D37
_BV( 7 ) , // PD 7 ** 38 ** D38
_BV( 2 ) , // PG 2 ** 39 ** D39
_BV( 1 ) , // PG 1 ** 40 ** D40
_BV( 0 ) , // PG 0 ** 41 ** D41
_BV( 7 ) , // PL 7 ** 42 ** D42
_BV( 6 ) , // PL 6 ** 43 ** D43
_BV( 5 ) , // PL 5 ** 44 ** D44
_BV( 4 ) , // PL 4 ** 45 ** D45
_BV( 3 ) , // PL 3 ** 46 ** D46
_BV( 2 ) , // PL 2 ** 47 ** D47
_BV( 1 ) , // PL 1 ** 48 ** D48
_BV( 0 ) , // PL 0 ** 49 ** D49
_BV( 3 ) , // PB 3 ** 50 ** SPI_MISO
_BV( 2 ) , // PB 2 ** 51 ** SPI_MOSI
_BV( 1 ) , // PB 1 ** 52 ** SPI_SCK
_BV( 0 ) , // PB 0 ** 53 ** SPI_SS
_BV( 0 ) , // PF 0 ** 54 ** A0
_BV( 1 ) , // PF 1 ** 55 ** A1
_BV( 2 ) , // PF 2 ** 56 ** A2
_BV( 3 ) , // PF 3 ** 57 ** A3
_BV( 4 ) , // PF 4 ** 58 ** A4
_BV( 5 ) , // PF 5 ** 59 ** A5
_BV( 6 ) , // PF 6 ** 60 ** A6
_BV( 7 ) , // PF 7 ** 61 ** A7
_BV( 0 ) , // PK 0 ** 62 ** A8
_BV( 1 ) , // PK 1 ** 63 ** A9
_BV( 2 ) , // PK 2 ** 64 ** A10
_BV( 3 ) , // PK 3 ** 65 ** A11
_BV( 4 ) , // PK 4 ** 66 ** A12
_BV( 5 ) , // PK 5 ** 67 ** A13
_BV( 6 ) , // PK 6 ** 68 ** A14
_BV( 7 ) , // PK 7 ** 69 ** A15
_BV( 4 ) , // PG 4 ** 70 ** D70
_BV( 3 ) , // PG 3 ** 71 ** D71
_BV( 2 ) , // PJ 2 ** 72 ** D72
_BV( 3 ) , // PJ 3 ** 73 ** D73
_BV( 7 ) , // PJ 7 ** 74 ** D74
_BV( 4 ) , // PJ 4 ** 75 ** D75
_BV( 5 ) , // PJ 5 ** 76 ** D76
_BV( 6 ) , // PJ 6 ** 77 ** D77
_BV( 2 ) , // PE 2 ** 78 ** D78
_BV( 6 ) , // PE 6 ** 79 ** D79
_BV( 7 ) , // PE 7 ** 80 ** D80
_BV( 4 ) , // PD 4 ** 81 ** D81
_BV( 5 ) , // PD 5 ** 82 ** D82
_BV( 6 ) , // PD 6 ** 83 ** D83
_BV( 2 ) , // PH 2 ** 84 ** D84
_BV( 7 ) , // PH 7 ** 85 ** D85
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
// TIMERS
// -------------------------------------------
NOT_ON_TIMER , // PE 0 ** 0 ** USART0_RX
NOT_ON_TIMER , // PE 1 ** 1 ** USART0_TX
TIMER3B , // PE 4 ** 2 ** PWM2
TIMER3C , // PE 5 ** 3 ** PWM3
TIMER0B , // PG 5 ** 4 ** PWM4
TIMER3A , // PE 3 ** 5 ** PWM5
TIMER4A , // PH 3 ** 6 ** PWM6
TIMER4B , // PH 4 ** 7 ** PWM7
TIMER4C , // PH 5 ** 8 ** PWM8
TIMER2B , // PH 6 ** 9 ** PWM9
TIMER2A , // PB 4 ** 10 ** PWM10
TIMER1A , // PB 5 ** 11 ** PWM11
TIMER1B , // PB 6 ** 12 ** PWM12
TIMER0A , // PB 7 ** 13 ** PWM13
NOT_ON_TIMER , // PJ 1 ** 14 ** USART3_TX
NOT_ON_TIMER , // PJ 0 ** 15 ** USART3_RX
NOT_ON_TIMER , // PH 1 ** 16 ** USART2_TX
NOT_ON_TIMER , // PH 0 ** 17 ** USART2_RX
NOT_ON_TIMER , // PD 3 ** 18 ** USART1_TX
NOT_ON_TIMER , // PD 2 ** 19 ** USART1_RX
NOT_ON_TIMER , // PD 1 ** 20 ** I2C_SDA
NOT_ON_TIMER , // PD 0 ** 21 ** I2C_SCL
NOT_ON_TIMER , // PA 0 ** 22 ** D22
NOT_ON_TIMER , // PA 1 ** 23 ** D23
NOT_ON_TIMER , // PA 2 ** 24 ** D24
NOT_ON_TIMER , // PA 3 ** 25 ** D25
NOT_ON_TIMER , // PA 4 ** 26 ** D26
NOT_ON_TIMER , // PA 5 ** 27 ** D27
NOT_ON_TIMER , // PA 6 ** 28 ** D28
NOT_ON_TIMER , // PA 7 ** 29 ** D29
NOT_ON_TIMER , // PC 7 ** 30 ** D30
NOT_ON_TIMER , // PC 6 ** 31 ** D31
NOT_ON_TIMER , // PC 5 ** 32 ** D32
NOT_ON_TIMER , // PC 4 ** 33 ** D33
NOT_ON_TIMER , // PC 3 ** 34 ** D34
NOT_ON_TIMER , // PC 2 ** 35 ** D35
NOT_ON_TIMER , // PC 1 ** 36 ** D36
NOT_ON_TIMER , // PC 0 ** 37 ** D37
NOT_ON_TIMER , // PD 7 ** 38 ** D38
NOT_ON_TIMER , // PG 2 ** 39 ** D39
NOT_ON_TIMER , // PG 1 ** 40 ** D40
NOT_ON_TIMER , // PG 0 ** 41 ** D41
NOT_ON_TIMER , // PL 7 ** 42 ** D42
NOT_ON_TIMER , // PL 6 ** 43 ** D43
TIMER5C , // PL 5 ** 44 ** D44
TIMER5B , // PL 4 ** 45 ** D45
TIMER5A , // PL 3 ** 46 ** D46
NOT_ON_TIMER , // PL 2 ** 47 ** D47
NOT_ON_TIMER , // PL 1 ** 48 ** D48
NOT_ON_TIMER , // PL 0 ** 49 ** D49
NOT_ON_TIMER , // PB 3 ** 50 ** SPI_MISO
NOT_ON_TIMER , // PB 2 ** 51 ** SPI_MOSI
NOT_ON_TIMER , // PB 1 ** 52 ** SPI_SCK
NOT_ON_TIMER , // PB 0 ** 53 ** SPI_SS
NOT_ON_TIMER , // PF 0 ** 54 ** A0
NOT_ON_TIMER , // PF 1 ** 55 ** A1
NOT_ON_TIMER , // PF 2 ** 56 ** A2
NOT_ON_TIMER , // PF 3 ** 57 ** A3
NOT_ON_TIMER , // PF 4 ** 58 ** A4
NOT_ON_TIMER , // PF 5 ** 59 ** A5
NOT_ON_TIMER , // PF 6 ** 60 ** A6
NOT_ON_TIMER , // PF 7 ** 61 ** A7
NOT_ON_TIMER , // PK 0 ** 62 ** A8
NOT_ON_TIMER , // PK 1 ** 63 ** A9
NOT_ON_TIMER , // PK 2 ** 64 ** A10
NOT_ON_TIMER , // PK 3 ** 65 ** A11
NOT_ON_TIMER , // PK 4 ** 66 ** A12
NOT_ON_TIMER , // PK 5 ** 67 ** A13
NOT_ON_TIMER , // PK 6 ** 68 ** A14
NOT_ON_TIMER , // PK 7 ** 69 ** A15
NOT_ON_TIMER , // PG 4 ** 70 ** D70
NOT_ON_TIMER , // PG 3 ** 71 ** D71
NOT_ON_TIMER , // PJ 2 ** 72 ** D72
NOT_ON_TIMER , // PJ 3 ** 73 ** D73
NOT_ON_TIMER , // PJ 7 ** 74 ** D74
NOT_ON_TIMER , // PJ 4 ** 75 ** D75
NOT_ON_TIMER , // PJ 5 ** 76 ** D76
NOT_ON_TIMER , // PJ 6 ** 77 ** D77
NOT_ON_TIMER , // PE 2 ** 78 ** D78
NOT_ON_TIMER , // PE 6 ** 79 ** D79
NOT_ON_TIMER , // PE 7 ** 80 ** D80
NOT_ON_TIMER , // PD 4 ** 81 ** D81
NOT_ON_TIMER , // PD 5 ** 82 ** D82
NOT_ON_TIMER , // PD 6 ** 83 ** D83
NOT_ON_TIMER , // PH 2 ** 84 ** D84
NOT_ON_TIMER , // PH 7 ** 85 ** D85
};
#endif
#endif

View File

@@ -1,310 +0,0 @@
#include "LiquidCrystal.h"
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "Arduino.h"
// When the display powers up, it is configured as follows:
//
// 1. Display clear
// 2. Function set:
// DL = 1; 8-bit interface data
// N = 0; 1-line display
// F = 0; 5x8 dot character font
// 3. Display on/off control:
// D = 0; Display off
// C = 0; Cursor off
// B = 0; Blinking off
// 4. Entry mode set:
// I/D = 1; Increment by 1
// S = 0; No shift
//
// Note, however, that resetting the Arduino doesn't reset the LCD, so we
// can't assume that it's in that state when a sketch starts (and the
// LiquidCrystal constructor is called).
LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
}
LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
}
LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
{
init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
}
LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
{
init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
}
void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
_rs_pin = rs;
_rw_pin = rw;
_enable_pin = enable;
_data_pins[0] = d0;
_data_pins[1] = d1;
_data_pins[2] = d2;
_data_pins[3] = d3;
_data_pins[4] = d4;
_data_pins[5] = d5;
_data_pins[6] = d6;
_data_pins[7] = d7;
pinMode(_rs_pin, OUTPUT);
// we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
if (_rw_pin != 255) {
pinMode(_rw_pin, OUTPUT);
}
pinMode(_enable_pin, OUTPUT);
if (fourbitmode)
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
else
_displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
begin(16, 1);
}
void LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
if (lines > 1) {
_displayfunction |= LCD_2LINE;
}
_numlines = lines;
_currline = 0;
// for some 1 line displays you can select a 10 pixel high font
if ((dotsize != 0) && (lines == 1)) {
_displayfunction |= LCD_5x10DOTS;
}
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
// according to datasheet, we need at least 40ms after power rises above 2.7V
// before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50
delayMicroseconds(50000);
// Now we pull both RS and R/W low to begin commands
digitalWrite(_rs_pin, LOW);
digitalWrite(_enable_pin, LOW);
if (_rw_pin != 255) {
digitalWrite(_rw_pin, LOW);
}
//put the LCD into 4 bit or 8 bit mode
if (! (_displayfunction & LCD_8BITMODE)) {
// this is according to the hitachi HD44780 datasheet
// figure 24, pg 46
// we start in 8bit mode, try to set 4 bit mode
write4bits(0x03);
delayMicroseconds(4500); // wait min 4.1ms
// second try
write4bits(0x03);
delayMicroseconds(4500); // wait min 4.1ms
// third go!
write4bits(0x03);
delayMicroseconds(150);
// finally, set to 4-bit interface
write4bits(0x02);
} else {
// this is according to the hitachi HD44780 datasheet
// page 45 figure 23
// Send function set command sequence
command(LCD_FUNCTIONSET | _displayfunction);
delayMicroseconds(4500); // wait more than 4.1ms
// second try
command(LCD_FUNCTIONSET | _displayfunction);
delayMicroseconds(150);
// third go
command(LCD_FUNCTIONSET | _displayfunction);
}
// finally, set # lines, font size, etc.
command(LCD_FUNCTIONSET | _displayfunction);
// turn the display on with no cursor or blinking default
_displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;
display();
// clear it off
clear();
// Initialize to default text direction (for romance languages)
_displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
// set the entry mode
command(LCD_ENTRYMODESET | _displaymode);
}
/********** high level commands, for the user! */
void LiquidCrystal::clear()
{
command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
void LiquidCrystal::home()
{
command(LCD_RETURNHOME); // set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
void LiquidCrystal::setCursor(uint8_t col, uint8_t row)
{
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
if ( row >= _numlines ) {
row = _numlines-1; // we count rows starting w/0
}
command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}
// Turn the display on/off (quickly)
void LiquidCrystal::noDisplay() {
_displaycontrol &= ~LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void LiquidCrystal::display() {
_displaycontrol |= LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// Turns the underline cursor on/off
void LiquidCrystal::noCursor() {
_displaycontrol &= ~LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void LiquidCrystal::cursor() {
_displaycontrol |= LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// Turn on and off the blinking cursor
void LiquidCrystal::noBlink() {
_displaycontrol &= ~LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void LiquidCrystal::blink() {
_displaycontrol |= LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// These commands scroll the display without changing the RAM
void LiquidCrystal::scrollDisplayLeft(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
}
void LiquidCrystal::scrollDisplayRight(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
}
// This is for text that flows Left to Right
void LiquidCrystal::leftToRight(void) {
_displaymode |= LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This is for text that flows Right to Left
void LiquidCrystal::rightToLeft(void) {
_displaymode &= ~LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This will 'right justify' text from the cursor
void LiquidCrystal::autoscroll(void) {
_displaymode |= LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This will 'left justify' text from the cursor
void LiquidCrystal::noAutoscroll(void) {
_displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void LiquidCrystal::createChar(uint8_t location, uint8_t charmap[]) {
location &= 0x7; // we only have 8 locations 0-7
command(LCD_SETCGRAMADDR | (location << 3));
for (int i=0; i<8; i++) {
write(charmap[i]);
}
}
/*********** mid level commands, for sending data/cmds */
inline void LiquidCrystal::command(uint8_t value) {
send(value, LOW);
}
inline size_t LiquidCrystal::write(uint8_t value) {
send(value, HIGH);
return 1; // assume sucess
}
/************ low level data pushing commands **********/
// write either command or data, with automatic 4/8-bit selection
void LiquidCrystal::send(uint8_t value, uint8_t mode) {
digitalWrite(_rs_pin, mode);
// if there is a RW pin indicated, set it low to Write
if (_rw_pin != 255) {
digitalWrite(_rw_pin, LOW);
}
if (_displayfunction & LCD_8BITMODE) {
write8bits(value);
} else {
write4bits(value>>4);
write4bits(value);
}
}
void LiquidCrystal::pulseEnable(void) {
digitalWrite(_enable_pin, LOW);
delayMicroseconds(1);
digitalWrite(_enable_pin, HIGH);
delayMicroseconds(1); // enable pulse must be >450ns
digitalWrite(_enable_pin, LOW);
delayMicroseconds(100); // commands need > 37us to settle
}
void LiquidCrystal::write4bits(uint8_t value) {
for (int i = 0; i < 4; i++) {
pinMode(_data_pins[i], OUTPUT);
digitalWrite(_data_pins[i], (value >> i) & 0x01);
}
pulseEnable();
}
void LiquidCrystal::write8bits(uint8_t value) {
for (int i = 0; i < 8; i++) {
pinMode(_data_pins[i], OUTPUT);
digitalWrite(_data_pins[i], (value >> i) & 0x01);
}
pulseEnable();
}

Some files were not shown because too many files have changed in this diff Show More