diff options
author | Zach Eveland <zeveland@blacklabel-development.com> | 2011-10-27 09:32:27 -0400 |
---|---|---|
committer | Zach Eveland <zeveland@blacklabel-development.com> | 2011-10-27 09:32:27 -0400 |
commit | 29cfd9e9fe12cc10fc8f4bae5c884c514ad95902 (patch) | |
tree | bfb510ae9f7401ae7ea4958f07d016fe7b7148f7 | |
parent | c0a9e827c12565c375eb1992478eb005851c0053 (diff) | |
parent | f9ed282a16a6ac89cbd8458cd174332d64d0428b (diff) |
Merge branch 'master' of github.com:arduino/Arduino into diskloader_reboot
Conflicts:
app/src/processing/app/Editor.java
app/src/processing/app/Sketch.java
build/shared/examples/4.Communication/SerialCallResponse/SerialCallResponse.pde
build/shared/lib/theme/theme.txt
hardware/arduino/cores/arduino/HardwareSerial.h
hardware/arduino/cores/arduino/Print.cpp
hardware/arduino/cores/arduino/WString.h
hardware/arduino/variants/mega/pins_arduino.h
libraries/Ethernet/examples/PachubeClient/PachubeClient.ino
libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino
libraries/Firmata/examples/EchoString/EchoString.ino
libraries/SD/File.cpp
libraries/SoftwareSerial/SoftwareSerial.cpp
libraries/SoftwareSerial/SoftwareSerial.h
libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino
libraries/SoftwareSerial/keywords.txt
-rw-r--r-- | boards.txt | 2 | ||||
-rwxr-xr-x | bootloaders/stk500v2/stk500boot.c | 3 | ||||
-rw-r--r-- | bootloaders/stk500v2/stk500boot_v2_mega2560.hex | 648 | ||||
-rw-r--r-- | cores/arduino/HardwareSerial.h | 14 | ||||
-rwxr-xr-x | cores/arduino/Print.cpp | 207 | ||||
-rw-r--r-- | cores/arduino/WString.h | 255 | ||||
-rwxr-xr-x[-rw-r--r--] | variants/mega/pins_arduino.h | 228 |
7 files changed, 474 insertions, 883 deletions
@@ -10,7 +10,7 @@ uno.bootloader.extended_fuses=0x05 uno.bootloader.path=optiboot uno.bootloader.file=optiboot_atmega328.hex uno.bootloader.unlock_bits=0x3F -uno.bootloader.lock_bits=0x0F +uno.bootloader.lock_bits=0x2F uno.build.mcu=atmega328p uno.build.f_cpu=16000000L uno.build.core=arduino diff --git a/bootloaders/stk500v2/stk500boot.c b/bootloaders/stk500v2/stk500boot.c index 13dec89..3d5b095 100755 --- a/bootloaders/stk500v2/stk500boot.c +++ b/bootloaders/stk500v2/stk500boot.c @@ -95,7 +95,8 @@ LICENSE: #include "command.h" -#if defined(_MEGA_BOARD_) || defined(_BOARD_AMBER128_) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) +//#if defined(_MEGA_BOARD_) || defined(_BOARD_AMBER128_) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) +#if 0 #define ENABLE_MONITOR static void RunMonitor(void); #endif diff --git a/bootloaders/stk500v2/stk500boot_v2_mega2560.hex b/bootloaders/stk500v2/stk500boot_v2_mega2560.hex index 4f36699..ace9cb1 100644 --- a/bootloaders/stk500v2/stk500boot_v2_mega2560.hex +++ b/bootloaders/stk500v2/stk500boot_v2_mega2560.hex @@ -1,513 +1,141 @@ :020000023000CC
-:10E000000D94F6F20D941FF30D941FF30D941FF36E
-:10E010000D941FF30D941FF30D941FF30D941FF334
-:10E020000D941FF30D941FF30D941FF30D941FF324
-:10E030000D941FF30D941FF30D941FF30D941FF314
-:10E040000D941FF30D941FF30D941FF30D941FF304
-:10E050000D941FF30D941FF30D941FF30D941FF3F4
-:10E060000D941FF30D941FF30D941FF30D941FF3E4
-:10E070000D941FF30D941FF30D941FF30D941FF3D4
-:10E080000D941FF30D941FF30D941FF30D941FF3C4
-:10E090000D941FF30D941FF30D941FF30D941FF3B4
-:10E0A0000D941FF30D941FF30D941FF30D941FF3A4
-:10E0B0000D941FF30D941FF30D941FF30D941FF394
-:10E0C0000D941FF30D941FF30D941FF30D941FF384
-:10E0D0000D941FF30D941FF30D941FF30D941FF374
-:10E0E0000D941FF341546D65676132353630004140
-:10E0F000726475696E6F206578706C6F72657220DE
-:10E1000073746B3530305632206279204D4C530099
-:10E11000426F6F746C6F616465723E004875683F52
-:10E1200000436F6D70696C6564206F6E20203D2028
-:10E1300000435055205479706520202020203D2038
-:10E14000005F5F4156525F415243485F5F203D2070
-:10E1500000415652204C69624320566572203D2092
-:10E16000004743432056657273696F6E20203D203F
-:10E1700000435055207369676E61747572653D2068
-:10E18000004C6F77206675736520202020203D208D
-:10E1900000486967682066757365202020203D204F
-:10E1A00000457874206675736520202020203D206E
-:10E1B000004C6F636B2066757365202020203D2026
-:10E1C00000536570202039203230313000312E3636
-:10E1D0002E3700342E332E33005623202020414486
-:10E1E00044522020206F7020636F6465202020201F
-:10E1F00020696E737472756374696F6E20616464F4
-:10E2000072202020496E74657272757074006E6F92
-:10E2100020766563746F7200726A6D702020006AE8
-:10E220006D7020005768617420706F72743A0050EE
-:10E230006F7274206E6F7420737570706F72746576
-:10E2400064004D7573742062652061206C65747480
-:10E2500065720020005772697474696E67204545C5
-:10E260000052656164696E6720454500656570729E
-:10E270006F6D206572726F7220636F756E743D00F2
-:10E28000504F525400303D5A65726F206164647281
-:10E290006573732063747273003F3D435055207360
-:10E2A0007461747300403D454550524F4D20746574
-:10E2B000737400423D426C696E6B204C45440045CE
-:10E2C0003D44756D7020454550524F4D00463D44CC
-:10E2D000756D7020464C41534800483D48656C7050
-:10E2E000004C3D4C69737420492F4F20506F72745D
-:10E2F0007300513D517569742026206A756D702038
-:10E30000746F20757365722070676D00523D44759F
-:10E310006D702052414D00563D73686F7720696ED5
-:10E320007465727275707420566563746F727300D1
-:10E33000593D506F727420626C696E6B002A0052F6
-:10E340004553455400494E543000494E543100491C
-:10E350004E543200494E543300494E543400494E15
-:10E36000543500494E543600494E54370050434905
-:10E370004E5430005043494E5431005043494E549E
-:10E3800032005744540054494D45523020434F4DBC
-:10E3900050410054494D45523020434F4D504200AA
-:10E3A00054494D455230204F56460054494D455230
-:10E3B0003120434150540054494D45523120434F80
-:10E3C0004D50410054494D45523120434F4D50422C
-:10E3D0000054494D45523120434F4D50430054495C
-:10E3E0004D455231204F56460054494D455232203A
-:10E3F000434F4D50410054494D45523220434F4DFB
-:10E4000050420054494D455232204F56460054491F
-:10E410004D45523320434150540054494D455233E9
-:10E4200020434F4D50410054494D45523320434FF6
-:10E430004D50420054494D45523320434F4D5043B7
-:10E440000054494D455233204F56460054494D45DE
-:10E45000523420434150540054494D4552342043D6
-:10E460004F4D50410054494D45523420434F4D507B
-:10E47000420054494D45523420434F4D50430054BF
-:10E48000494D455234204F56460054494D4552356A
-:10E4900020434150540054494D45523520434F4D7F
-:10E4A00050410054494D45523520434F4D50420094
-:10E4B00054494D45523520434F4D50430054494D2A
-:10E4C000455235204F564600555341525430205244
-:10E4D000580055534152543020554452450055532D
-:10E4E0004152543020545800555341525431205217
-:10E4F000580055534152543120554452450055530C
-:10E5000041525431205458005553415254322052F4
-:10E5100058005553415254322055445245005553EA
-:10E5200041525432205458005553415254332052D2
-:10E5300058005553415254332055445245005553C9
-:10E5400041525433205458005350492053544300EF
-:10E5500041444300414E414C4F4720434F4D5000F2
-:10E560004545205245414459005457490053504DA8
-:10E57000205245414459002A003FE345E34AE34F16
-:10E58000E354E359E35EE363E368E36DE374E37B41
-:10E59000E382E3E9E3F6E303E4ABE3B7E3C4E3D107
-:10E5A000E3DEE386E393E3A0E348E5C8E4D2E4DEF8
-:10E5B000E454E550E560E50EE41AE427E434E44170
-:10E5C000E4E8E4F2E4FEE469E56DE54CE458E46572
-:10E5D000E472E47FE48AE496E4A3E4B0E4BDE408F2
-:10E5E000E512E51EE528E532E53EE50011241FBEF3
-:10E5F000CFEFD1E2DEBFCDBF01E00CBF12E0A0E063
-:10E60000B2E0EAEDFFEF03E00BBF02C007900D920E
-:10E61000A030B107D9F712E0A0E0B2E001C01D922E
-:10E62000AC30B107E1F70F94FBF40D94EBFF01E27E
-:10E630000EBF0FEF0DBF11241FBE0D94FBF40D9400
-:10E6400000F020E030E040ED57E005C0FA013197DE
-:10E65000F1F72F5F3F4F28173907C0F308959C014A
-:10E66000442737FD4095542FDA01C901860F911DCB
-:10E67000A11DB11DABBFFC018791882369F0809378
-:10E68000C6008091C00086FFFCCF8091C0008064EE
-:10E690008093C0006F5FE8CF08958DE08093C6003F
-:10E6A0008091C00086FFFCCF8091C0008064809381
-:10E6B000C0008AE08093C6008091C00086FFFCCF36
-:10E6C0008091C00080648093C00008950F942FF360
-:10E6D0000F944DF30895FC019081992359F0909384
-:10E6E000C6008091C00086FFFCCF8091C00080648E
-:10E6F0008093C0003196992379F70895282F982F99
-:10E7000092959F70892F805D8A3308F0895F80938E
-:10E71000C6008091C00086FFFCCF8091C00080645D
-:10E720008093C000822F8F70982F905D9A3308F0ED
-:10E73000995F9093C6008091C00086FFFCCF8091C6
-:10E74000C00080648093C00008959C01FB01853661
-:10E7500091051CF46330710594F0C90164E670E022
-:10E760000F948CFF605D7F4F6093C6008091C00066
-:10E7700086FFFCCF8091C00080648093C0002B3066
-:10E78000310514F43297B4F0C90164E670E00F94D7
-:10E790008CFF6AE070E00F948CFF605D7F4F6093A8
-:10E7A000C6008091C00086FFFCCF8091C0008064CD
-:10E7B0008093C000C9016AE070E00F948CFFC0969E
-:10E7C0008093C6008091C00086FFFCCF8091C0007E
-:10E7D00080648093C0000895282F277020642093C0
-:10E7E0007C0020917B0086958695869590E08170CF
-:10E7F000907033E0880F991F3A95E1F7277F282B17
-:10E8000020937B0080917A00806480937A008091CD
-:10E810007A0086FDFCCF2091780040917900942FFA
-:10E8200080E030E0282B392BC90108951F93182F61
-:10E8300080E892EE60E00F942FF31093C600809171
-:10E84000C00086FFFCCF8091C00080648093C00030
-:10E850000F944DF31F9108952F923F924F925F9224
-:10E860006F927F928F929F92AF92BF92CF92DF92E0
-:10E87000EF92FF920F931F93DF93CF93CDB7DEB745
-:10E8800062970FB6F894DEBF0FBECDBF382E622E52
-:10E89000CA01DB015C016D01772460E2262E2E01A6
-:10E8A0000894411C511C8BC081E0A81680E0B8067A
-:10E8B00081E0C80680E0D80628F0C601AA27BB2759
-:10E8C0000F947EF3BB27AD2D9C2D8B2D0F947EF3E3
-:10E8D0008A2D0F947EF32092C6008091C00086FF9F
-:10E8E000FCCF8091C00080648093C0009DE2909333
-:10E8F000C6008091C00086FFFCCF8091C00080647C
-:10E900008093C0002092C6008091C00086FFFCCF9B
-:10E910008091C00080648093C000198286017501D7
-:10E9200088249924A1E03A1651F03A1620F0B2E07A
-:10E930003B1661F409C00BBFF701779007C0C70110
-:10E940000F94D5FF782E02C0F7017080872D0F94A9
-:10E950007EF32092C6008091C00086FFFCCF80919C
-:10E96000C00080648093C000872D8052F401EF7056
-:10E97000F0708F3520F4E40DF51D708204C0E40DB5
-:10E98000F51D8EE280830894E11CF11C011D111D10
-:10E990000894811C911C90E18916910409F0C2CF62
-:10E9A00080E190E0A0E0B0E0A80EB91ECA1EDB1E18
-:10E9B000198AC2010F946BF30F944DF36A94662089
-:10E9C00009F072CF62960FB6F894DEBF0FBECDBFCE
-:10E9D000CF91DF911F910F91FF90EF90DF90CF903B
-:10E9E000BF90AF909F908F907F906F905F904F906F
-:10E9F0003F902F9008952F923F924F925F926F9287
-:10EA00007F928F929F92AF92BF92CF92DF92EF92BE
-:10EA1000FF920F931F93DF93CF93CDB7DEB7CD5304
-:10EA2000D1400FB6F894DEBF0FBECDBF279A2F9A04
-:10EA30008091C00082608093C00080E18093C40018
-:10EA400088E18093C1000000EE24FF248701B4E038
-:10EA5000AB2EB12CCC24DD2424C0C5010197F1F7E5
-:10EA60000894E11CF11C011D111D21E2E2162EE4A7
-:10EA7000F20620E0020720E0120718F0A1E0CA2EFB
-:10EA8000D12CC801B70128E53BE140E050E00F94EC
-:10EA90009FFF611571058105910519F485B18058B5
-:10EAA00085B98091C00087FD03C0C114D104A9F2CB
-:10EAB000A6014F5F5F4FC25EDE4F59834883CE5140
-:10EAC000D140C25EDE4F68817981CE51D140613044
-:10EAD000710511F00D946EFFC05DDE4F1982188232
-:10EAE000C053D14060E0C15DDE4F1882CF52D140AB
-:10EAF000AA24BB24C05EDE4F188219821A821B82B0
-:10EB0000C052D140CE5CDE4F188219821A821B821D
-:10EB1000C253D14080E090E0A0E0B0E0ABBFFC0188
-:10EB2000A791B691C45CDE4FB983A883CC53D14082
-:10EB30000D9469FFC25EDE4FE881F981CE51D1406C
-:10EB4000319709F52091C600C25EDE4F1982188206
-:10EB5000CE51D14022C02F5F3F4F4F4F5F4F2130EA
-:10EB6000F2E13F07FAE74F07F0E05F0780F0C45C8F
-:10EB7000DE4F08811981CC53D1400F5F1F4F19F030
-:10EB8000EE27FF27099420E030E040E050E080913C
-:10EB9000C00087FFE0CF2091C600213209F094C663
-:10EBA0000894A11CB11C33E0A316B10409F08EC671
-:10EBB00000E010E018C041E24093C6008091C00020
-:10EBC00086FFFCCF8091C00080648093C0002F5FDF
-:10EBD0003F4F2931310579F70F944DF30F5F1F4FE8
-:10EBE0000530110519F020E030E0E5CF1092080261
-:10EBF0001092090210920A0210920B021092040263
-:10EC00001092050210920602109207021092000262
-:10EC10001092010210920202109203028FEE90EE07
-:10EC200060E00F9466F380E191EE60E00F942FF3C3
-:10EC30008091C00087FFFCCF9091C600903608F00D
-:10EC40009F759032B8F09093C6008091C00086FF07
-:10EC5000FCCF8091C00080648093C00080E28093EC
-:10EC6000C6008091C00086FFFCCF8091C000806408
-:10EC70008093C000983409F4DBC19934B8F492341D
-:10EC800009F45DC1933458F4903319F1903308F4CA
-:10EC900018C69F33A1F1903409F013C6BDC0953456
-:10ECA00009F474C1963409F00CC69CC1923509F47C
-:10ECB0002FC2933538F49C3409F4F9C1913509F029
-:10ECC00000C61CC2963509F449C2993509F0F9C548
-:10ECD0009CC485E892EE62E00F9466F31092040201
-:10ECE000109205021092060210920702109208027A
-:10ECF0001092090210920A0210920B0217C189E9C0
-:10ED000092EE62E00F9466F38FEE90EE60E00F9467
-:10ED100066F381E291EE60E00F942FF381EC91EEC7
-:10ED200060E00F9466F381E391EE60E00F942FF3BF
-:10ED300084EE90EE60E00F9466F381E491EE60E083
-:10ED40000F942FF386E090E061E070E00F94A5F35C
-:10ED50000F944DF381E691EE60E00F942FF383ED75
-:10ED600091EE60E00F9466F381E591EE60E00F9420
-:10ED70002FF38DEC91EE60E00F9466F381E791EE56
-:10ED800060E00F942FF38EE10F947EF388E90F94E7
-:10ED90007EF381E00F947EF30F944DF381E891EEC2
-:10EDA00060E00F942FF319E0E0E0F0E010935700DB
-:10EDB000E4918E2F0F947EF30F944DF381E991EE41
-:10EDC00060E00F942FF3E3E0F0E010935700E4913C
-:10EDD0008E2F0F947EF30F944DF381EA91EE60E055
-:10EDE0000F942FF3E2E0F0E010935700E4918E2FA0
-:10EDF0000F947EF30F944DF381EB91EE60E00F944E
-:10EE00002FF3E1E0F0E0109357001491812F0F945D
-:10EE10007EF30F944DF307CF85EA92EE62E00F94F4
-:10EE200066F385E592EE60E00F9466F30F944DF380
-:10EE300000E010E019C0C8016F2D0F94DDFFFF2026
-:10EE400031F483E592EE60E00F942FF30BC0F09263
-:10EE5000C6008091C00086FFFCCF8091C000806416
-:10EE60008093C0000F5F1F4FC80181519F41AA27A7
-:10EE700097FDA095BA2FABBFFC01F7905AE2F516AB
-:10EE800021F062E000301607B1F60F944DF30F94B5
-:10EE90004DF381E692EE60E00F9466F30F944DF32C
-:10EEA000CC24DD2400E010E01EC0C8010F94D5FF83
-:10EEB000F82E882331F483E592EE60E00F942FF36F
-:10EEC0000BC08093C6008091C00086FFFCCF80916C
-:10EED000C00080648093C000FE1419F00894C11C27
-:10EEE000D11C0F5F1F4FC80181519F41AA2797FD79
-:10EEF000A095BA2FABBFFC01E7907AE2E71621F0AC
-:10EF000082E00030180789F60F944DF30F944DF30B
-:10EF10008CE692EE60E00F942FF3C60161E070E0A2
-:10EF20000F94A5F30F944DF30F944DF3109200023C
-:10EF300010920102109202021092030274CE83EB2F
-:10EF400092EE62E00F9466F3279A2F9A16C02F98DC
-:10EF500080E090E0E0EDF7E03197F1F7019684363C
-:10EF60009105C1F72F9A80E090E0E0EDF7E031974E
-:10EF7000F1F7019684369105C1F78091C00087FFB3
-:10EF8000E6CF8091C00087FFFCCF95C48FEB92EE57
-:10EF900062E00F9466F3409100025091010260918B
-:10EFA00002027091030281E020E10F942CF4809121
-:10EFB000000290910102A0910202B09103028050E0
-:10EFC0009F4FAF4FBF4F8093000290930102A093D9
-:10EFD0000202B093030280509041A040B04008F478
-:10EFE00022CEA4CF8DEC92EE62E00F9466F34091B6
-:10EFF000040250910502609106027091070280E0C0
-:10F0000020E10F942CF48091040290910502A091CC
-:10F010000602B091070280509F4FAF4FBF4F8093C1
-:10F02000040290930502A0930602B0930702FBCD61
-:10F030008AED92EE62E00F9466F385E892EE60E06E
-:10F040000F9466F389E992EE60E00F9466F385EA27
-:10F0500092EE60E00F9466F383EB92EE60E00F9423
-:10F0600066F38FEB92EE60E00F9466F38DEC92EE18
-:10F0700060E00F9466F38AED92EE60E00F9466F321
-:10F0800081EE92EE60E00F9466F382EF92EE60E024
-:10F090000F9466F38CE093EE60E00F9466F387E1E3
-:10F0A00093EE60E00F9466F380E393EEB9CD81EECA
-:10F0B00092EE62E00F9466F381E40F9416F482E41A
-:10F0C0000F9416F483E40F9416F484E40F9416F46A
-:10F0D00085E40F9416F486E40F9416F487E40F94F5
-:10F0E00016F488E40F9416F48AE40F9416F48BE473
-:10F0F0000F9416F48CE40F9416F495CD82EF92EEF3
-:10F1000062E00F9466F399249394AA24BB2445C427
-:10F110008CE093EE62E00F9466F340910802509108
-:10F12000090260910A0270910B0282E020E10F94C3
-:10F130002CF48091080290910902A0910A02B091EA
-:10F140000B0280509F4FAF4FBF4F809308029093A8
-:10F150000902A0930A02B0930B0265CD87E193EEFA
-:10F1600062E00F9466F384EE90EE60E00F9466F335
-:10F1700089ED91EE60E00F9466F309E715EECC5D42
-:10F18000DE4F19830883C452D1406624772443019B
-:10F19000CA5DDE4F19821882C652D140A401930184
-:10F1A0005695479537952795C85DDE4F2883398357
-:10F1B0004A835B83C852D140CA5DDE4F4881598182
-:10F1C000C652D1404F5F5F4FCA5DDE4F59834883BF
-:10F1D000C652D140CA0162E070E00F94A5F350E23C
-:10F1E0005093C6008091C00086FFFCCF8091C00084
-:10F1F00080648093C0006DE26093C6008091C0007F
-:10F2000086FFFCCF8091C00080648093C00070E2D4
-:10F210007093C6008091C00086FFFCCF8091C00033
-:10F2200080648093C000C85DDE4FE880F9800A8169
-:10F230001B81C852D140BB27A12F902F8F2D0F9437
-:10F240007EF3C85DDE4F8881C852D1400F947EF3B3
-:10F2500070E2F72EF092C6008091C00086FFFCCFCE
-:10F260008091C00080648093C0000DE30093C600CD
-:10F270008091C00086FFFCCF8091C00080648093A5
-:10F28000C00010E21093C6008091C00086FFFCCF42
-:10F290008091C00080648093C0008BBEF3012791F1
-:10F2A000C45DDE4F2883CC52D140A22EBB24CC2497
-:10F2B000DD240894611C711C811C911C8BBEF30120
-:10F2C0008791282E332444245524142D032DF22C09
-:10F2D000EE24EA0CFB1C0C1D1D1D0894611C711C06
-:10F2E000811C911C8BBEF3013791C35DDE4F3883C7
-:10F2F000CD52D1400894611C711C811C911C8BBEA5
-:10F30000F3014791C25DDE4F4883CE52D1402DEFCD
-:10F310003FEF4FEF5FEF620E731E841E951E0F943A
-:10F320007EF330E23093C6008091C00086FFFCCFB0
-:10F330008091C00080648093C000C45DDE4F8881EE
-:10F34000CC52D1400F947EF340E24093C6008091AE
-:10F35000C00086FFFCCF8091C00080648093C00015
-:10F36000C25DDE4F8881CE52D1400F947EF350E2D1
-:10F370005093C6008091C00086FFFCCF8091C000F2
-:10F3800080648093C000C35DDE4F8881CD52D14040
-:10F390000F947EF360E26093C6008091C00086FF08
-:10F3A000FCCF8091C00080648093C0007FEFE7169F
-:10F3B0007FEFF70670E0070770E0170731F48EE083
-:10F3C00092EE60E00F942FF3DFC0D801C701807088
-:10F3D000907CA070B0708050904CA040B040D1F5AF
-:10F3E0002FEF3FE340E050E0E222F3220423152315
-:10F3F000C85DDE4FA880B980CA80DB80C852D1408A
-:10F40000AE0CBF1CC01ED11EAA0CBB1CCC1CDD1C2C
-:10F4100088E192EE60E00F942FF3BB27A12F902F8D
-:10F420008F2D0F947EF38E2D0F947EF330E2309368
-:10F43000C6008091C00086FFFCCF8091C000806430
-:10F440008093C0004EE34093C6008091C00086FFC9
-:10F45000FCCF87C06EE07EEF80E090E0E622F722EE
-:10F46000082319237CE0E71674E9F70670E0070724
-:10F4700070E0170709F088C0C25DDE4F8881CE5268
-:10F48000D140E82EFF2400E010E0102F0F2DFE2CBD
-:10F49000EE24C35DDE4F9881CD52D140E90EF11CC0
-:10F4A000011D111DD601C50181709070A070B07052
-:10F4B000DC0199278827E80EF91E0A1F1B1F20EF81
-:10F4C00030E040E050E0A222B322C422D522F1E194
-:10F4D000AA0CBB1CCC1CDD1CFA95D1F7EA0CFB1C5A
-:10F4E0000C1D1D1D41E050E060E070E0242235223B
-:10F4F00046225722E5E1220C331C441C551CEA9598
-:10F50000D1F7E20CF31C041D151D57016801AA0C6C
-:10F51000BB1CCC1CDD1C8FE192EE60E00F942FF33E
-:10F52000C801AA27BB270F947EF3BB27A12F902FDA
-:10F530008F2D0F947EF38E2D0F947EF350E2509317
-:10F54000C6008091C00086FFFCCF8091C00080641F
-:10F550008093C0006EE36093C6008091C00086FF78
-:10F56000FCCF8091C00080648093C000C601AA27B0
-:10F57000BB270F947EF3BB27AD2D9C2D8B2D0F94B5
-:10F580007EF38A2D0F947EF370E27093C600809113
-:10F59000C00086FFFCCF8091C00080648093C000D3
-:10F5A000CC5DDE4FE881F981C452D140CF01AA275A
-:10F5B00097FDA095BA2FABBFFC018791969160E0B3
-:10F5C0000F942FF30F944DF3CC5DDE4F088119811A
-:10F5D000C452D1400E5F1F4FCC5DDE4F19830883AC
-:10F5E000C452D140CA5DDE4F28813981C652D14014
-:10F5F0002933310509F417CB44E050E060E070E0B6
-:10F60000640E751E861E971EC9CD80E393EE62E0E0
-:10F610000F9466F384E292EE60E00F942FF38091F2
-:10F62000C00087FFFCCF1091C6001F751093C60065
-:10F630008091C00086FFFCCF8091C00080648093E1
-:10F64000C0000F944DF3812F81548A3108F036C1E8
-:10F65000163409F495C0173490F4133409F44EC0ED
-:10F66000143430F41134F1F0123409F01DC130C0FB
-:10F67000143409F459C0153409F016C16BC01A349A
-:10F6800009F4C4C01B3438F4173409F48FC018349B
-:10F6900009F00AC1A1C01B3409F4D2C01C3409F01E
-:10F6A00003C1E8C08FEF81B90DC082B1809582B9E6
-:10F6B00080E090E0E0EDF7E03197F1F70196883CCB
-:10F6C0009105C1F78091C00087FFEFCF12B8EFC05E
-:10F6D0008FEF84B90DC085B1809585B980E090E049
-:10F6E000E0EDF7E03197F1F70196883C9105C1F71D
-:10F6F0008091C00087FFEFCF15B8D9C08FEF87B9D1
-:10F700000DC088B1809588B980E090E0E0EDF7E029
-:10F710003197F1F70196883C9105C1F78091C000BF
-:10F7200087FFEFCF18B8C3C08FEF8AB90DC08BB178
-:10F7300080958BB980E090E0E0EDF7E03197F1F74C
-:10F740000196883C9105C1F78091C00087FFEFCFFB
-:10F750001BB8ADC08FEF8DB90DC08EB180958EB93D
-:10F7600080E090E0E0EDF7E03197F1F70196883C1A
-:10F770009105C1F78091C00087FFEFCF1EB897C0F9
-:10F780008FEF80BB0DC081B3809581BB80E090E09E
-:10F79000E0EDF7E03197F1F70196883C9105C1F76C
-:10F7A0008091C00087FFEFCF11BA81C08FEF83BB7C
-:10F7B0000DC084B3809584BB80E090E0E0EDF7E07D
-:10F7C0003197F1F70196883C9105C1F78091C0000F
-:10F7D00087FFEFCF14BA6BC08FEF809301010FC08A
-:10F7E0008091020180958093020180E090E0E0ED3D
-:10F7F000F7E03197F1F70196883C9105C1F78091C8
-:10F80000C00087FFEDCF1092020151C08FEF8093AF
-:10F8100004010FC08091050180958093050180E06F
-:10F8200090E0E0EDF7E03197F1F70196883C910523
-:10F83000C1F78091C00087FFEDCF1092050137C05E
-:10F840008FEF809307010FC080910801809580930E
-:10F85000080180E090E0E0EDF7E03197F1F70196E4
-:10F86000883C9105C1F78091C00087FFEDCF1092D1
-:10F8700008011DC08FEF80930A010FC080910B011A
-:10F88000809580930B0180E090E0E0EDF7E0319708
-:10F89000F1F70196883C9105C1F78091C00087FF80
-:10F8A000EDCF10920B0103C08FE292EEB9C98091A7
-:10F8B000C00087FFFCCF8091C600B5C982E492EEFC
-:10F8C000AFC98CE191EEACC9AA24BB24933061F19D
-:10F8D000943028F4913089F0923008F508C09530C2
-:10F8E000B1F1953040F1963009F053C04EC02B3144
-:10F8F00009F020C991E06BE11DC9213041F0C15DE3
-:10F90000DE4F5881CF52D140251709F002C362273C
-:10F91000C15DDE4F2883CF52D14092E00BC9B22F98
-:10F92000A0E0622793E006C9822F90E0A82BB92BB4
-:10F93000622794E0FFC82E3009F0EBC2622795E001
-:10F94000C05DDE4F19821882C053D140F3C8E1E098
-:10F95000F0E0EC0FFD1FC05DDE4FE880F980C05382
-:10F96000D140EE0DFF1D208387010F5F1F4FC05D4B
-:10F97000DE4F19830883C053D14062270A171B0743
-:10F9800009F0D8C8D80196E0D5C8261709F0C1C239
-:10F9900003C0973009F0CEC899248981833109F4D6
-:10F9A000FCC08431C8F4863009F4C2C0873050F4FA
-:10F9B000823009F4F0C0833009F458C0813009F076
-:10F9C0000AC23EC0813109F462C0823108F0A6C08B
-:10F9D000803109F000C2DFC0883109F472C089317A
-:10F9E00050F4853109F4D9C0853108F477C18631E6
-:10F9F00009F0F1C173C18A3109F457C08A3108F4A2
-:10FA00007CC08B3109F446C08D3109F0E4C18D8191
-:10FA1000803311F090E00AC08F81882311F49EE1B9
-:10FA200005C0813011F091E001C098E91A821B8273
-:10FA30008D818C831D829E831F8227E030E0CFC1A1
-:10FA40001A8288E08B8381E48C8386E58D8382E54E
-:10FA50008E8389E48F8383E5888780E589878FE5B6
-:10FA60008A8782E38B872BE030E0B9C18A818139B4
-:10FA700041F0823941F0803911F48FE005C080E017
-:10FA800003C082E001C08AE01A828B8344C09924BB
-:10FA9000939481C08D81882311F48EE12CC0813034
-:10FAA00011F081E028C088E926C01A82E1E0F0E088
-:10FAB00089E08093570084918B831C8224E030E09E
-:10FAC0008EC18B81803589F48C81883039F4E2E0F5
-:10FAD000F0E089E08093570084910DC0E0E0F0E011
-:10FAE00089E080935700849106C0E3E0F0E089E06C
-:10FAF0008093570084911A82DFCF8D81836C99E0C7
-:10FB0000E1E0F0E0082E90935700E89507B600FC7E
-:10FB1000FDCF1A821B8223E030E061C11A82CE5CE5
-:10FB2000DE4F188219821A821B82C253D14055C1FE
-:10FB30008A8190E0A0E0B0E0582F442733272227A5
-:10FB40008B8190E0A0E0B0E0DC0199278827282B8A
-:10FB5000392B4A2B5B2B8D8190E0A0E0B0E0282B65
-:10FB6000392B4A2B5B2B8C8190E0A0E0B0E0BA2FC0
-:10FB7000A92F982F8827282B392B4A2B5B2B220F54
-:10FB8000331F441F551FC05EDE4F288339834A83CD
-:10FB90005B83C052D1401A8220C19A812B8183316C
-:10FBA00049F0C05EDE4F488159816A817B81C05235
-:10FBB000D1408AC0CE5CDE4F488159816A817B8109
-:10FBC000C253D140403080EC580783E0680780E0A2
-:10FBD0007807F0F483E0FA0160935B0080935700AC
-:10FBE000E89507B600FCFDCFCE5CDE4F4881598119
-:10FBF0006A817B81C253D14040505F4F6F4F7F4F2E
-:10FC0000CE5CDE4F488359836A837B83C253D140E5
-:10FC1000C95CDE4F9883C753D140CA5CDE4F18825F
-:10FC2000C653D140022F10E0CA5CDE4F6881798153
-:10FC3000C653D140062B172BC05EDE4F4881598139
-:10FC40006A817B81C052D140DE011B9631E08C91EC
-:10FC500011962C9111971296C75CDE4F2883C953D9
-:10FC6000D140C85CDE4F1882C853D14090E0C85CD8
-:10FC7000DE4FE881F981C853D1408E2B9F2B0C01B8
-:10FC8000FA0160935B0030935700E89511244E5FB2
-:10FC90005F4F6F4F7F4F02501040C9F685E0C05E46
-:10FCA000DE4FE880F9800A811B81C052D140F70104
-:10FCB00000935B0080935700E89507B600FCFDCFEA
-:10FCC00081E180935700E8951A82C05EDE4F488339
-:10FCD00059836A837B83C052D1407FC0FA80C55C60
-:10FCE000DE4FF882CB53D140C65CDE4F1882CA5338
-:10FCF000D1408B81C82EDD24C65CDE4F088119817E
-:10FD0000CA53D140C02AD12A1A828981BE016D5FAF
-:10FD10007F4F843121F59601C05EDE4FE880F98087
-:10FD20000A811B81C052D1400BBFF7018791969188
-:10FD3000DB018C9311969C936E5F7F4FD801C701B6
-:10FD40000296A11DB11DC05EDE4F88839983AA83F0
-:10FD5000BB83C052D14022503040F1F636C0C05E65
-:10FD6000DE4F288139814A815B81C052D14008949D
-:10FD7000C108D108760100E010E00894C11CD11C34
-:10FD80000894E11CF11C011D111DE20EF31E041F5D
-:10FD9000151F21BDBB27A52F942F832F82BD2F5F59
-:10FDA0003F4F4F4F5F4FF89A80B5DB018D93BD01F8
-:10FDB0002E153F054007510761F7C05EDE4F2883CF
-:10FDC00039834A835B83C052D14096012D5F3F4FF8
-:10FDD000FB01108204C080EC8A8322E030E08BE1DA
-:10FDE0008093C6008091C00086FFFCCF8091C00048
-:10FDF00080648093C000C15DDE4FF881CF52D14056
-:10FE0000F093C6008091C00086FFFCCF8091C000B7
-:10FE100080648093C000432F3093C6008091C0005F
-:10FE200086FFFCCF8091C00080648093C000922F39
-:10FE30002093C6008091C00086FFFCCF8091C00057
-:10FE400080648093C0008EE08093C6008091C000E3
-:10FE500086FFFCCF8091C00080648093C00065E184
-:10FE6000C15DDE4FE880CF52D1406E2569276427FF
-:10FE7000FE01319610C090819093C6008091C00021
-:10FE800086FFFCCF31968091C00080648093C000D3
-:10FE90006927215030402115310569F76093C6006C
-:10FEA0008091C00086FFFCCF8091C0008064809369
-:10FEB000C00085B1805885B9992081F4C15DDE4FBD
-:10FEC0000881CF52D1400F5FC15DDE4F0883CF5212
-:10FED000D14090E0A0E0B0E00D949AF527982F98DB
-:10FEE00080E090E020ED37E0F9013197F1F70196DD
-:10FEF00084369105C9F700008091C0008D7F809302
-:10FF0000C00081E180935700E895EE27FF27099410
-:10FF1000FFCF90E00D949AF597FB092E07260AD0A3
-:10FF200077FD04D02ED006D000201AF4709561958C
-:10FF30007F4F0895F6F7909581959F4F0895A1E220
-:10FF40001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F53
-:10FF5000FF1FA217B307E407F50720F0A21BB30B9E
-:10FF6000E40BF50B661F771F881F991F1A9469F71A
-:10FF700060957095809590959B01AC01BD01CF0176
-:10FF80000895AA1BBB1B51E107C0AA1FBB1FA617E0
-:10FF9000B70710F0A61BB70B881F991F5A95A9F732
-:10FFA00080959095BC01CD010895F999FECF92BD41
-:10FFB00081BDF89A992780B50895262FF999FECF2B
-:10FFC0001FBA92BD81BD20BD0FB6F894FA9AF99A76
-:0AFFD0000FBE01960895F894FFCFCC
+:10E000000D9472F00D9493F00D9493F00D9493F0A1
+:10E010000D9493F00D9493F00D9493F00D9493F070
+:10E020000D9493F00D9493F00D9493F00D9493F060
+:10E030000D9493F00D9493F00D9493F00D9493F050
+:10E040000D9493F00D9493F00D9493F00D9493F040
+:10E050000D9493F00D9493F00D9493F00D9493F030
+:10E060000D9493F00D9493F00D9493F00D9493F020
+:10E070000D9493F00D9493F00D9493F00D9493F010
+:10E080000D9493F00D9493F00D9493F00D9493F000
+:10E090000D9493F00D9493F00D9493F00D9493F0F0
+:10E0A0000D9493F00D9493F00D9493F00D9493F0E0
+:10E0B0000D9493F00D9493F00D9493F00D9493F0D0
+:10E0C0000D9493F00D9493F00D9493F00D9493F0C0
+:10E0D0000D9493F00D9493F00D9493F00D9493F0B0
+:10E0E0000D9493F011241FBECFEFD1E2DEBFCDBF60
+:10E0F00001E00CBF12E0A0E0B2E0E0EAF8EE03E0DD
+:10E100000BBF02C007900D92A030B107D9F70F9452
+:10E11000A3F00D944EF401E20EBF0FEF0DBF1124DA
+:10E120001FBE0D94A3F00D9400F020E030E040ED10
+:10E1300057E005C0FA013197F1F72F5F3F4F2817DD
+:10E140003907C0F308952F923F924F925F926F92DA
+:10E150007F928F929F92AF92BF92CF92DF92EF9277
+:10E16000FF920F931F93DF93CF93CDB7DEB7C852C3
+:10E17000D1400FB6F894DEBF0FBECDBF279A2F9ABD
+:10E180008091C00082608093C00080E18093C400D1
+:10E1900088E18093C1000000EE24FF248701E4E0C1
+:10E1A000AE2EB12CCC24DD2424C0C5010197F1F79B
+:10E1B0000894E11CF11C011D111D21E2E2162EE460
+:10E1C000F20620E0020720E0120718F071E0C72EE7
+:10E1D000D12CC801B70128E53BE140E050E00F94A5
+:10E1E0002CF4611571058105910519F485B18058EC
+:10E1F00085B98091C00087FD03C0C114D104A9F284
+:10E20000A6014F5F5F4FC25EDE4F59834883CE51F8
+:10E21000D140C25EDE4F68817981CE51D1406130FC
+:10E22000710509F0FCC222243324A0E0C05EDE4F59
+:10E230001882C052D1408824992454014424552482
+:10E240003201ABBEF40187919691C95DDE4F99838F
+:10E250008883C752D140DFC2C25EDE4FE881F981B8
+:10E26000CE51D140319709F53091C600C25EDE4FE4
+:10E2700019821882CE51D14022C04F5F5F4F6F4F3D
+:10E280007F4F4130F2E15F07FAE76F07F0E07F0769
+:10E2900080F0C95DDE4F28813981C752D1402F5FA0
+:10E2A0003F4F19F0EE27FF27099440E050E060E06F
+:10E2B00070E08091C00087FFE0CF3091C6009330BE
+:10E2C00061F1943028F4913089F0923008F508C05B
+:10E2D000953091F1953040F1963009F043C03EC041
+:10E2E0003B3109F0B9CF91E0ABE1B6CF313041F02D
+:10E2F000C05EDE4F5881C052D140351709F0AAC226
+:10E30000A327C05EDE4F3883C052D14092E0A4CF35
+:10E31000132F00E0A32793E09FCF832F90E0082BDB
+:10E32000192BA32794E098CF3E3009F093C2A3277E
+:10E3300095E02224332490CFE1E0F0E0EC0FFD1FC4
+:10E34000E20DF31D30830894211C311CA3272016F5
+:10E35000310609F081CF810196E07ECF3A1709F0AE
+:10E3600079C203C0973009F077CF8981833109F4EE
+:10E37000F4C08431C0F4863009F4C2C0873048F458
+:10E38000823069F1833009F45BC0813009F0C4C187
+:10E3900041C0813109F465C0823108F0ACC08031E0
+:10E3A00009F0BAC11CC0883109F474C0893150F435
+:10E3B000853109F4D2C0853108F443C1863109F0B2
+:10E3C000ABC13FC18A3109F45CC08A3108F482C014
+:10E3D0008B3109F44BC08D3109F09EC102C090E031
+:10E3E00041C08D81803311F090E00AC08F81882375
+:10E3F00011F49EE105C0813011F091E001C098E96F
+:10E400001A821B828D818C831D829E831F8247E02E
+:10E4100050E086C11A8288E08B8381E48C8386E594
+:10E420008D8382E58E8389E48F8383E5888780E509
+:10E4300089878FE58A8782E38B874BE050E070C144
+:10E440008A81813941F0823941F0803911F48FE0BD
+:10E4500005C080E003C082E001C08AE01A828B839D
+:10E4600047C091E01A8242E050E05BC18D81882371
+:10E4700011F48EE129C0813011F081E025C088E9D6
+:10E4800023C01A82E1E0F0E069E060935700E49174
+:10E49000EB831CC08B81803589F48C81883039F402
+:10E4A00029E0E2E0F0E02093570084910DC029E0DC
+:10E4B000E0E0F0E020935700849106C0E3E0F0E054
+:10E4C00039E03093570084911A828B831C8244E098
+:10E4D00050E026C18D81836C49E0E1E0F0E0082E38
+:10E4E00040935700E89507B600FCFDCF1A821B82C7
+:10E4F00043E050E015C11A824424552432010EC174
+:10E500008A8190E0A0E0B0E0B82EAA249924882463
+:10E510008B8190E0A0E0B0E0DC0199278827882A71
+:10E52000992AAA2ABB2A8D8190E0A0E0B0E0882A2F
+:10E53000992AAA2ABB2A8C8190E0A0E0B0E0BA2FE9
+:10E54000A92F982F8827882A992AAA2ABB2A880CBB
+:10E55000991CAA1CBB1C1A82E1C09A813B818331A1
+:10E5600019F0B501A40169C050E0451650EC5506FC
+:10E5700053E0650650E0750690F463E0F2016092A6
+:10E580005B0060935700E89507B600FCFDCF40E0C4
+:10E5900051E060E070E0440E551E661E771ECE5DB1
+:10E5A000DE4F9883C252D140CF5DDE4F1882C152F8
+:10E5B000D140032F10E0CF5DDE4F68817981C152D9
+:10E5C000D140062B172BB501A401DE011B968C91BF
+:10E5D00011962C9111971296CC5DDE4F2883C45270
+:10E5E000D140CD5DDE4F1882C352D14090E0CD5D69
+:10E5F000DE4FE881F981C352D1408E2B9F2B21E061
+:10E600000C01FA0160935B0020935700E8951124F8
+:10E610004E5F5F4F6F4F7F4F02501040C1F635E0A5
+:10E62000F401A0925B0030935700E89507B600FC18
+:10E63000FDCF81E180935700E8951A824A015B0182
+:10E640006DC09A81CA5DDE4F9883C652D140CB5DC2
+:10E65000DE4F1882C552D1408B81C82EDD24CB5DA0
+:10E66000DE4FA881B981C552D140CA2ADB2A1A825D
+:10E6700089818431E9F4A60123E0E22EF12CEC0E2D
+:10E68000FD1EABBEF40187919691F70180839183C3
+:10E6900022E030E0E20EF31E62E070E080E090E005
+:10E6A000860E971EA81EB91E4250504051F72EC02C
+:10E6B000B501A40193E0E92EF12CEC0EFD1E0894A7
+:10E6C000C108D108860120E030E00894C11CD11CAB
+:10E6D0000F5F1F4F2F4F3F4F080D191D2A1D3B1D68
+:10E6E00041BDBB27A72F962F852F82BD4F5F5F4F60
+:10E6F0006F4F7F4FF89A80B5D7018D937D014017FA
+:10E7000051076207730761F74A015B01A6014D5F7C
+:10E710005F4FF701108204C0F0ECFA8342E050E052
+:10E7200090E02BE12093C6008091C00086FFFCCFD3
+:10E730008091C00080648093C000C05EDE4F38814D
+:10E74000C052D1403093C6008091C00086FFFCCFFC
+:10E750008091C00080648093C000652F5093C600F4
+:10E760008091C00086FFFCCF8091C00080648093C0
+:10E77000C000342F4093C6008091C00086FFFCCFBC
+:10E780008091C00080648093C0008EE08093C600BA
+:10E790008091C00086FFFCCF8091C0008064809390
+:10E7A000C000A5E1C05EDE4F7881C052D140A727EE
+:10E7B000A327A627FE01319610C030813093C600F2
+:10E7C0008091C00086FFFCCF31968091C0008064AC
+:10E7D0008093C000A327415050404115510569F76F
+:10E7E000A093C6008091C00086FFFCCF8091C0003E
+:10E7F00080648093C00085B1805885B9992379F4ED
+:10E80000C05EDE4F8881C052D1408F5FC05EDE4F58
+:10E810008883C052D14090E000E010E01DCD2798E1
+:10E820002F9880E090E020ED37E0F9013197F1F783
+:10E83000019684369105C9F700008091C0008D7F54
+:10E840008093C00081E180935700E895EE27FF2771
+:10E850000994FFCF90E000CDA1E21A2EAA1BBB1BAA
+:10E86000FD010DC0AA1FBB1FEE1FFF1FA217B3079C
+:10E87000E407F50720F0A21BB30BE40BF50B661FB2
+:10E88000771F881F991F1A9469F760957095809576
+:10E8900090959B01AC01BD01CF010895F894FFCF85
:040000033000E000E9
:00000001FF
diff --git a/cores/arduino/HardwareSerial.h b/cores/arduino/HardwareSerial.h index 176abe1..9dc67c4 100644 --- a/cores/arduino/HardwareSerial.h +++ b/cores/arduino/HardwareSerial.h @@ -32,7 +32,6 @@ 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; @@ -41,29 +40,28 @@ class HardwareSerial : public Stream uint8_t _rxen; uint8_t _txen; uint8_t _rxcie; - uint8_t _udrie; + uint8_t _udre; uint8_t _u2x; public: - HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer, + HardwareSerial(ring_buffer *rx_buffer, volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra, volatile uint8_t *ucsrb, volatile uint8_t *udr, - uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x); + uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udre, uint8_t u2x); void begin(unsigned long); void end(); virtual int available(void); virtual int peek(void); virtual int read(void); virtual void flush(void); - virtual size_t write(uint8_t); + virtual void write(uint8_t); using Print::write; // pull in write(str) and write(buf, size) from Print }; #if defined(UBRRH) || defined(UBRR0H) extern HardwareSerial Serial; #elif defined(USBCON) - #include "USBAPI.h" -// extern HardwareSerial Serial_; + #include "usb_api.h" #endif #if defined(UBRR1H) extern HardwareSerial Serial1; @@ -75,6 +73,4 @@ class HardwareSerial : public Stream extern HardwareSerial Serial3; #endif -extern void serialEventRun(void) __attribute__((weak)); - #endif diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index ff9b154..fd68942 100755 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -23,213 +23,173 @@ #include <stdio.h> #include <string.h> #include <math.h> -#include "Arduino.h" +#include "wiring.h" #include "Print.h" // Public Methods ////////////////////////////////////////////////////////////// /* default implementation: may be overridden */ -size_t Print::write(const uint8_t *buffer, size_t size) +void Print::write(const char *str) { - size_t n = 0; - while (size--) { - n += write(*buffer++); - } - return n; + while (*str) + write(*str++); } -size_t Print::print(const __FlashStringHelper *ifsh) +/* default implementation: may be overridden */ +void Print::write(const uint8_t *buffer, size_t size) { - const prog_char *p = (const prog_char *)ifsh; - size_t n = 0; - while (1) { - unsigned char c = pgm_read_byte(p++); - if (c == 0) break; - n += write(c); - } - return n; + while (size--) + write(*buffer++); } -size_t Print::print(const String &s) +void Print::print(const String &s) { - size_t n = 0; - for (uint16_t i = 0; i < s.length(); i++) { - n += write(s[i]); + for (unsigned int i = 0; i < s.length(); i++) { + write(s[i]); } - return n; } -size_t Print::print(const char str[]) +void Print::print(const char str[]) { - return write(str); + write(str); } -size_t Print::print(char c) +void Print::print(char c, int base) { - return write(c); + print((long) c, base); } -size_t Print::print(unsigned char b, int base) +void Print::print(unsigned char b, int base) { - return print((unsigned long) b, base); + print((unsigned long) b, base); } -size_t Print::print(int n, int base) +void Print::print(int n, int base) { - return print((long) n, base); + print((long) n, base); } -size_t Print::print(unsigned int n, int base) +void Print::print(unsigned int n, int base) { - return print((unsigned long) n, base); + print((unsigned long) n, base); } -size_t Print::print(long n, int base) +void Print::print(long n, int base) { if (base == 0) { - return write(n); + write(n); } else if (base == 10) { if (n < 0) { - int t = print('-'); + print('-'); n = -n; - return printNumber(n, 10) + t; } - return printNumber(n, 10); + printNumber(n, 10); } else { - return printNumber(n, base); + 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) +void Print::print(unsigned long n, int base) { - return printFloat(n, digits); + if (base == 0) write(n); + else printNumber(n, base); } -size_t Print::println(const __FlashStringHelper *ifsh) +void Print::print(double n, int digits) { - size_t n = print(ifsh); - n += println(); - return n; + printFloat(n, digits); } -size_t Print::print(const Printable& x) +void Print::println(void) { - return x.printTo(*this); + print('\r'); + print('\n'); } -size_t Print::println(void) +void Print::println(const String &s) { - size_t n = print('\r'); - n += print('\n'); - return n; + print(s); + println(); } -size_t Print::println(const String &s) +void Print::println(const char c[]) { - size_t n = print(s); - n += println(); - return n; + print(c); + println(); } -size_t Print::println(const char c[]) +void Print::println(char c, int base) { - size_t n = print(c); - n += println(); - return n; + print(c, base); + println(); } -size_t Print::println(char c) +void Print::println(unsigned char b, int base) { - size_t n = print(c); - n += println(); - return n; + print(b, base); + println(); } -size_t Print::println(unsigned char b, int base) +void Print::println(int n, int base) { - size_t n = print(b, base); - n += println(); - return n; + print(n, base); + println(); } -size_t Print::println(int num, int base) +void Print::println(unsigned int n, int base) { - size_t n = print(num, base); - n += println(); - return n; + print(n, base); + println(); } -size_t Print::println(unsigned int num, int base) +void Print::println(long n, int base) { - size_t n = print(num, base); - n += println(); - return n; + print(n, base); + println(); } -size_t Print::println(long num, int base) +void Print::println(unsigned long n, int base) { - size_t n = print(num, base); - n += println(); - return n; + print(n, base); + println(); } -size_t Print::println(unsigned long num, int base) +void Print::println(double n, int digits) { - 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; + print(n, digits); + println(); } // 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'; +void Print::printNumber(unsigned long n, uint8_t base) +{ + unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. + unsigned long i = 0; - // prevent crash if called with base == 1 - if (base < 2) base = 10; + if (n == 0) { + print('0'); + return; + } - do { - unsigned long m = n; + while (n > 0) { + buf[i++] = n % base; n /= base; - char c = m - base * n; - *--str = c < 10 ? c + '0' : c + 'A' - 10; - } while(n); + } - return write(str); + for (; i > 0; i--) + print((char) (buf[i - 1] < 10 ? + '0' + buf[i - 1] : + 'A' + buf[i - 1] - 10)); } -size_t Print::printFloat(double number, uint8_t digits) +void Print::printFloat(double number, uint8_t digits) { - size_t n = 0; - // Handle negative numbers if (number < 0.0) { - n += print('-'); + print('-'); number = -number; } @@ -243,21 +203,18 @@ size_t Print::printFloat(double number, uint8_t digits) // 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(int_part); // Print the decimal point, but only if there are digits beyond - if (digits > 0) { - n += print("."); - } + if (digits > 0) + print("."); // Extract digits from the remainder one at a time while (digits-- > 0) { remainder *= 10.0; int toPrint = int(remainder); - n += print(toPrint); + print(toPrint); remainder -= toPrint; } - - return n; } diff --git a/cores/arduino/WString.h b/cores/arduino/WString.h index d76d2a3..56faf9a 100644 --- a/cores/arduino/WString.h +++ b/cores/arduino/WString.h @@ -1,8 +1,6 @@ /* 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 @@ -19,187 +17,96 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef String_class_h -#define String_class_h -#ifdef __cplusplus +#ifndef String_h +#define String_h +//#include "WProgram.h" #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<__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; + public: + // constructors + String( const char *value = "" ); + String( const String &value ); + String( const char ); + String( const unsigned char ); + String( const int, const int base=10); + String( const unsigned int, const int base=10 ); + String( const long, const int base=10 ); + String( const unsigned long, const int base=10 ); + ~String() { free(_buffer); _length = _capacity = 0;} //added _length = _capacity = 0; + + // operators + const String & operator = ( const String &rhs ); + const String & operator +=( const String &rhs ); + //const String & operator +=( const char ); + int operator ==( const String &rhs ) const; + int operator !=( const String &rhs ) const; + int operator < ( const String &rhs ) const; + int operator > ( const String &rhs ) const; + int operator <=( const String &rhs ) const; + int operator >=( const String &rhs ) const; + char operator []( unsigned int index ) const; + char& operator []( unsigned int index ); + //operator const char *() const { return _buffer; } + + // general methods + char charAt( unsigned int index ) const; + int compareTo( const String &anotherString ) const; + unsigned char endsWith( const String &suffix ) const; + unsigned char equals( const String &anObject ) const; + unsigned char equalsIgnoreCase( const String &anotherString ) const; + 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; + unsigned int length( ) const { return _length; } + void setCharAt(unsigned int index, const char ch); + unsigned char startsWith( const String &prefix ) const; + unsigned char startsWith( const String &prefix, unsigned int toffset ) const; + String substring( unsigned int beginIndex ) const; + String substring( unsigned int beginIndex, unsigned int endIndex ) const; + String toLowerCase( ) const; + String toUpperCase( ) const; + String trim( ) const; + void getBytes(unsigned char *buf, unsigned int bufsize); + void toCharArray(char *buf, unsigned int bufsize); + long toInt( ); + const String& concat( const String &str ); + String replace( char oldChar, char newChar ); + String replace( const String& match, const String& replace ); + friend String operator + ( String lhs, const String &rhs ); + + protected: + char *_buffer; // the actual char array + unsigned int _capacity; // the array length minus one (for the '\0') + unsigned int _length; // the String length (not counting the '\0') + + void getBuffer(unsigned int maxStrLen); + + private: - // 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 +// allocate buffer space +inline void String::getBuffer(unsigned int maxStrLen) { -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) {} -}; + _capacity = maxStrLen; + _buffer = (char *) malloc(_capacity + 1); + if (_buffer == NULL) _length = _capacity = 0; +} + +inline String operator+( String lhs, const String &rhs ) +{ + return lhs += rhs; +} + -#endif // __cplusplus -#endif // String_class_h +#endif diff --git a/variants/mega/pins_arduino.h b/variants/mega/pins_arduino.h index 237173a..62e10ad 100644..100755 --- a/variants/mega/pins_arduino.h +++ b/variants/mega/pins_arduino.h @@ -1,8 +1,8 @@ /* - pins_arduino.h - Pin definition functions for Arduino - Part of Arduino - http://www.arduino.cc/ + pins_arduino.c - pin definitions for the Arduino board + Part of Arduino / Wiring Lite - Copyright (c) 2007 David A. Mellis + Copyright (c) 2005 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 @@ -19,72 +19,66 @@ 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 $ + $Id$ */ -#ifndef Pins_Arduino_h -#define Pins_Arduino_h +#include <avr/io.h> +#include "wiring_private.h" +#include "pins_arduino.h" -#include <avr/pgmspace.h> +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. -#define NUM_DIGITAL_PINS 70 -#define NUM_ANALOG_INPUTS 16 -#define analogInputToDigitalPin(p) ((p < 16) ? (p) + 54 : -1) -#define digitalPinHasPWM(p) (((p) >= 2 && (p) <= 13) || ((p) >= 44 && (p)<= 46)) +// ATMEL ATMEGA8 & 168 / ARDUINO +// +// +-\/-+ +// PC6 1| |28 PC5 (AI 5) +// (D 0) PD0 2| |27 PC4 (AI 4) +// (D 1) PD1 3| |26 PC3 (AI 3) +// (D 2) PD2 4| |25 PC2 (AI 2) +// PWM+ (D 3) PD3 5| |24 PC1 (AI 1) +// (D 4) PD4 6| |23 PC0 (AI 0) +// VCC 7| |22 GND +// GND 8| |21 AREF +// PB6 9| |20 AVCC +// PB7 10| |19 PB5 (D 13) +// PWM+ (D 5) PD5 11| |18 PB4 (D 12) +// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM +// (D 7) PD7 13| |16 PB2 (D 10) PWM +// (D 8) PB0 14| |15 PB1 (D 9) PWM +// +----+ +// +// (PWM+ indicates the additional PWM pins on the ATmega168.) -const static uint8_t SS = 53; -const static uint8_t MOSI = 51; -const static uint8_t MISO = 50; -const static uint8_t SCK = 52; +// ATMEL ATMEGA1280 / ARDUINO +// +// 0-7 PE0-PE7 works +// 8-13 PB0-PB5 works +// 14-21 PA0-PA7 works +// 22-29 PH0-PH7 works +// 30-35 PG5-PG0 works +// 36-43 PC7-PC0 works +// 44-51 PJ7-PJ0 works +// 52-59 PL7-PL0 works +// 60-67 PD7-PD0 works +// A0-A7 PF0-PF7 +// A8-A15 PK0-PK7 -const static uint8_t SDA = 20; -const static uint8_t SCL = 21; -const static uint8_t LED = 13; +#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 -const static uint8_t A0 = 54; -const static uint8_t A1 = 55; -const static uint8_t A2 = 56; -const static uint8_t A3 = 57; -const static uint8_t A4 = 58; -const static uint8_t A5 = 59; -const static uint8_t A6 = 60; -const static uint8_t A7 = 61; -const static uint8_t A8 = 62; -const static uint8_t A9 = 63; -const static uint8_t A10 = 64; -const static uint8_t A11 = 65; -const static uint8_t A12 = 66; -const static uint8_t A13 = 67; -const static uint8_t A14 = 68; -const static 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 +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) const uint16_t PROGMEM port_to_mode_PGM[] = { NOT_A_PORT, (uint16_t) &DDRA, @@ -357,7 +351,115 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { NOT_ON_TIMER , // PK 6 ** 68 ** A14 NOT_ON_TIMER , // PK 7 ** 69 ** A15 }; +#else +// 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, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, +}; -#endif +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, +}; -#endif
\ No newline at end of file +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, /* 0 */ + PD, + PD, + PD, + PD, + PD, + PD, + PD, + PB, /* 8 */ + PB, + PB, + PB, + PB, + PB, + PC, /* 14 */ + PC, + PC, + PC, + PC, + PC, +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(0), /* 0, port D */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(6), + _BV(7), + _BV(0), /* 8, port B */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(0), /* 14, port C */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, /* 0 - port D */ + NOT_ON_TIMER, + NOT_ON_TIMER, + // on the ATmega168, digital pin 3 has hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, +#else + TIMER2B, +#endif + NOT_ON_TIMER, + // on the ATmega168, digital pins 5 and 6 have hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, + NOT_ON_TIMER, +#else + TIMER0B, + TIMER0A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, /* 8 - port B */ + TIMER1A, + TIMER1B, +#if defined(__AVR_ATmega8__) + TIMER2, +#else + TIMER2A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, /* 14 - port C */ + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; +#endif |