From ddf58ffb08c1564d4d05bca75609177d5bb4afb3 Mon Sep 17 00:00:00 2001 From: Eve Entropia Date: Tue, 30 Mar 2010 20:10:36 +0200 Subject: [PATCH] arduino-0017-linux-x64 --- arduino-0017-linux-x64/arduino | 20 + .../AnalogInOutSerial/AnalogInOutSerial.pde | 50 + .../Analog/AnalogInSerial/AnalogInSerial.pde | 29 + .../Analog/AnalogInput/AnalogInput.pde | 48 + .../AnalogWriteMega/AnalogWriteMega.pde | 42 + .../Analog/Calibration/Calibration.pde | 73 + .../examples/Analog/Fading/Fading.pde | 43 + .../examples/Analog/Smoothing/Smoothing.pde | 64 + .../Communication/ASCIITable/ASCIITable.pde | 73 + .../examples/Communication/Dimmer/Dimmer.pde | 360 + .../examples/Communication/Graph/Graph.pde | 578 + .../examples/Communication/MIDI/Midi.pde | 47 + .../MultiSerialMega/MultiSerialMega.pde | 31 + .../PhysicalPixel/PhysicalPixel.pde | 707 + .../SerialCallResponse/SerialCallResponse.pde | 1193 ++ .../SerialCallResponseASCII.pde | 1267 ++ .../VirtualColorMixer/VirtualColorMixer.pde | 697 + .../examples/Control/Arrays/Arrays.pde | 55 + .../ForLoopIteration/ForLoopIteration.pde | 45 + .../IfStatementConditional.pde | 53 + .../WhileStatementConditional.pde | 86 + .../Control/switchCase/switchCase.pde | 59 + .../Control/switchCase2/switchCase2.pde | 64 + .../examples/Digital/Blink/Blink.pde | 40 + .../BlinkWithoutDelay/BlinkWithoutDelay.pde | 58 + .../examples/Digital/Button/Button.pde | 54 + .../examples/Digital/Debounce/Debounce.pde | 74 + .../examples/Digital/Melody/Melody.pde | 71 + .../StateChangeDetection.pde | 88 + .../RowColumnScanning/RowColumnScanning.pde | 112 + .../examples/Display/barGraph/barGraph.pde | 58 + .../examples/Sensors/ADXL3xx/ADXL3xx.pde | 62 + .../examples/Sensors/Knock/Knock.pde | 53 + .../Sensors/Memsic2125/Memsic2125.pde | 61 + .../examples/Sensors/Ping/Ping.pde | 82 + .../AnalogReadSerial/AnalogReadSerial.pde | 12 + .../Stubs/AnalogReadWrite/AnalogReadWrite.pde | 13 + .../Stubs/BareMinumum/BareMinumum.pde | 9 + .../DigitalReadSerial/DigitalReadSerial.pde | 13 + .../DigitalReadWrite/DigitalReadWrite.pde | 12 + .../examples/Stubs/HelloWorld/HelloWorld.pde | 9 + arduino-0017-linux-x64/hardware/boards.txt | 220 + .../bootloaders/atmega/ATmegaBOOT_168.c | 1054 ++ .../atmega/ATmegaBOOT_168_atmega1280.hex | 245 + .../atmega/ATmegaBOOT_168_atmega328.hex | 125 + .../ATmegaBOOT_168_atmega328_pro_8MHz.hex | 124 + .../atmega/ATmegaBOOT_168_diecimila.hex | 126 + .../bootloaders/atmega/ATmegaBOOT_168_ng.hex | 110 + .../atmega/ATmegaBOOT_168_pro_8MHz.hex | 126 + .../hardware/bootloaders/atmega/Makefile | 224 + .../hardware/bootloaders/atmega8/ATmegaBOOT.c | 507 + .../bootloaders/atmega8/ATmegaBOOT.hex | 66 + .../hardware/bootloaders/atmega8/Makefile | 88 + .../hardware/bootloaders/bt/ATmegaBOOT_168.c | 1032 ++ .../bootloaders/bt/ATmegaBOOT_168.hex | 121 + .../bootloaders/lilypad/LilyPadBOOT_168.hex | 117 + .../bootloaders/lilypad/src/ATmegaBOOT.c | 979 ++ .../hardware/bootloaders/lilypad/src/Makefile | 84 + .../hardware/cores/arduino/HardwareSerial.cpp | 219 + .../hardware/cores/arduino/HardwareSerial.h | 65 + .../hardware/cores/arduino/Makefile | 244 + .../hardware/cores/arduino/Print.cpp | 215 + .../hardware/cores/arduino/Print.h | 62 + .../hardware/cores/arduino/WConstants.h | 1 + .../hardware/cores/arduino/WInterrupts.c | 215 + .../hardware/cores/arduino/WMath.cpp | 60 + .../hardware/cores/arduino/WProgram.h | 29 + .../hardware/cores/arduino/binary.h | 515 + .../hardware/cores/arduino/main.cxx | 12 + .../hardware/cores/arduino/pins_arduino.c | 469 + .../hardware/cores/arduino/pins_arduino.h | 76 + .../hardware/cores/arduino/wiring.c | 250 + .../hardware/cores/arduino/wiring.h | 137 + .../hardware/cores/arduino/wiring_analog.c | 179 + .../hardware/cores/arduino/wiring_digital.c | 111 + .../hardware/cores/arduino/wiring_private.h | 68 + .../hardware/cores/arduino/wiring_pulse.c | 66 + .../hardware/cores/arduino/wiring_shift.c | 40 + .../hardware/cores/atmega8/pins_atmega8.c | 119 + .../hardware/cores/blank/WProgram.h | 0 .../hardware/cores/blank/main.cxx | 0 .../hardware/libraries/EEPROM/EEPROM.cpp | 50 + .../hardware/libraries/EEPROM/EEPROM.h | 35 + .../examples/eeprom_clear/eeprom_clear.pde | 21 + .../examples/eeprom_read/eeprom_read.pde | 38 + .../examples/eeprom_write/eeprom_write.pde | 38 + .../hardware/libraries/EEPROM/keywords.txt | 18 + .../hardware/libraries/Ethernet/Client.cpp | 148 + .../hardware/libraries/Ethernet/Client.h | 31 + .../hardware/libraries/Ethernet/Ethernet.cpp | 38 + .../hardware/libraries/Ethernet/Ethernet.h | 22 + .../hardware/libraries/Ethernet/Server.cpp | 91 + .../hardware/libraries/Ethernet/Server.h | 25 + .../examples/ChatServer/ChatServer.pde | 34 + .../Ethernet/examples/WebClient/WebClient.pde | 41 + .../Ethernet/examples/WebServer/WebServer.pde | 61 + .../hardware/libraries/Ethernet/keywords.txt | 30 + .../libraries/Ethernet/utility/socket.c | 558 + .../libraries/Ethernet/utility/socket.h | 23 + .../hardware/libraries/Ethernet/utility/spi.h | 58 + .../libraries/Ethernet/utility/types.h | 165 + .../libraries/Ethernet/utility/w5100.c | 1302 ++ .../libraries/Ethernet/utility/w5100.h | 299 + .../hardware/libraries/Firmata/Firmata.cpp | 445 + .../hardware/libraries/Firmata/Firmata.h | 229 + .../hardware/libraries/Firmata/LICENSE.txt | 458 + .../hardware/libraries/Firmata/TODO.txt | 14 + .../examples/AnalogFirmata/AnalogFirmata.pde | 83 + .../Firmata/examples/AnalogFirmata/Makefile | 263 + .../examples/EchoString/EchoString.pde | 40 + .../Firmata/examples/EchoString/Makefile | 263 + .../examples/I2CFirmata/I2CFirmata.pde | 217 + .../Firmata/examples/ServoFirmata/Makefile | 263 + .../examples/ServoFirmata/ServoFirmata.pde | 39 + .../examples/SimpleAnalogFirmata/Makefile | 263 + .../SimpleAnalogFirmata.pde | 32 + .../examples/SimpleDigitalFirmata/Makefile | 263 + .../SimpleDigitalFirmata.pde | 58 + .../examples/StandardFirmata/LICENSE.txt | 458 + .../Firmata/examples/StandardFirmata/Makefile | 273 + .../StandardFirmata/StandardFirmata.pde | 293 + .../hardware/libraries/Firmata/keywords.txt | 62 + .../hardware/libraries/LCD4Bit/LCD4Bit.cpp | 236 + .../hardware/libraries/LCD4Bit/LCD4Bit.h | 27 + .../LCD4BitExample/LCD4BitExample.pde | 47 + .../hardware/libraries/LCD4Bit/keywords.txt | 27 + .../hardware/libraries/LCD4Bit/readme.txt | 38 + .../libraries/LiquidCrystal/LiquidCrystal.cpp | 309 + .../libraries/LiquidCrystal/LiquidCrystal.h | 104 + .../examples/Autoscroll/Autoscroll.pde | 70 + .../LiquidCrystal/examples/Blink/Blink.pde | 58 + .../LiquidCrystal/examples/Cursor/Cursor.pde | 58 + .../examples/Display/Display.pde | 58 + .../examples/HelloWorld/HelloWorld.pde | 56 + .../LiquidCrystal/examples/Scroll/Scroll.pde | 83 + .../examples/SerialDisplay/SerialDisplay.pde | 62 + .../examples/TextDirection/TextDirection.pde | 84 + .../examples/setCursor/setCursor.pde | 68 + .../libraries/LiquidCrystal/keywords.txt | 37 + .../hardware/libraries/Matrix/Matrix.cpp | 229 + .../hardware/libraries/Matrix/Matrix.h | 54 + .../examples/hello_matrix/hello_matrix.pde | 42 + .../sprite_animation/sprite_animation.pde | 48 + .../hardware/libraries/Matrix/keywords.txt | 22 + .../hardware/libraries/Servo/Servo.cpp | 268 + .../hardware/libraries/Servo/Servo.h | 92 + .../libraries/Servo/examples/Knob/Knob.pde | 22 + .../libraries/Servo/examples/Sweep/Sweep.pde | 29 + .../hardware/libraries/Servo/keywords.txt | 24 + .../SoftwareSerial/SoftwareSerial.cpp | 227 + .../libraries/SoftwareSerial/SoftwareSerial.h | 56 + .../libraries/SoftwareSerial/keywords.txt | 18 + .../hardware/libraries/Sprite/Sprite.cpp | 95 + .../hardware/libraries/Sprite/Sprite.h | 48 + .../hardware/libraries/Sprite/binary.h | 515 + .../hardware/libraries/Sprite/keywords.txt | 534 + .../hardware/libraries/Stepper/Stepper.cpp | 220 + .../hardware/libraries/Stepper/Stepper.h | 83 + .../Stepper/examples/MotorKnob/MotorKnob.pde | 40 + .../hardware/libraries/Stepper/keywords.txt | 28 + .../hardware/libraries/Wire/Wire.cpp | 265 + .../hardware/libraries/Wire/Wire.h | 67 + .../SFRRanger_reader/SFRRanger_reader.pde | 84 + .../digital_potentiometer.pde | 34 + .../examples/master_reader/master_reader.pde | 29 + .../examples/master_writer/master_writer.pde | 28 + .../slave_receiver/slave_receiver.pde | 35 + .../examples/slave_sender/slave_sender.pde | 29 + .../hardware/libraries/Wire/keywords.txt | 31 + .../hardware/libraries/Wire/utility/twi.c | 479 + .../hardware/libraries/Wire/utility/twi.h | 57 + .../hardware/programmers.txt | 15 + .../hardware/tools/avr/bin/avr-ar | 1 + .../hardware/tools/avr/bin/avr-g++ | 1 + .../hardware/tools/avr/bin/avr-gcc | 1 + arduino-0017-linux-x64/hardware/tools/avrdude | Bin 0 -> 616454 bytes .../hardware/tools/avrdude.conf | 11721 ++++++++++++++++ arduino-0017-linux-x64/lib/RXTXcomm.jar | Bin 0 -> 60866 bytes arduino-0017-linux-x64/lib/about.jpg | Bin 0 -> 115730 bytes arduino-0017-linux-x64/lib/antlr.jar | Bin 0 -> 443876 bytes arduino-0017-linux-x64/lib/core.jar | Bin 0 -> 229715 bytes arduino-0017-linux-x64/lib/ecj.jar | Bin 0 -> 1647271 bytes arduino-0017-linux-x64/lib/jna.jar | Bin 0 -> 625227 bytes arduino-0017-linux-x64/lib/keywords.txt | 168 + arduino-0017-linux-x64/lib/librxtxSerial.so | Bin 0 -> 174170 bytes arduino-0017-linux-x64/lib/oro.jar | Bin 0 -> 26707 bytes arduino-0017-linux-x64/lib/pde.jar | Bin 0 -> 533215 bytes arduino-0017-linux-x64/lib/preferences.txt | 227 + arduino-0017-linux-x64/lib/theme/buttons.gif | Bin 0 -> 2739 bytes arduino-0017-linux-x64/lib/theme/resize.gif | Bin 0 -> 869 bytes .../lib/theme/tab-sel-left.gif | Bin 0 -> 832 bytes .../lib/theme/tab-sel-menu.gif | Bin 0 -> 891 bytes .../lib/theme/tab-sel-mid.gif | Bin 0 -> 830 bytes .../lib/theme/tab-sel-right.gif | Bin 0 -> 834 bytes .../lib/theme/tab-unsel-left.gif | Bin 0 -> 844 bytes .../lib/theme/tab-unsel-menu.gif | Bin 0 -> 896 bytes .../lib/theme/tab-unsel-mid.gif | Bin 0 -> 828 bytes .../lib/theme/tab-unsel-right.gif | Bin 0 -> 842 bytes arduino-0017-linux-x64/lib/theme/theme.txt | 101 + arduino-0017-linux-x64/libraries/howto.txt | 5 + .../libraries/javascript/library/export.txt | 6 + .../javascript/library/javascript.jar | Bin 0 -> 2568 bytes .../libraries/minim/library/jl1.0.jar | Bin 0 -> 105446 bytes .../libraries/minim/library/jsminim.jar | Bin 0 -> 46443 bytes .../libraries/minim/library/minim-spi.jar | Bin 0 -> 2858 bytes .../libraries/minim/library/minim.jar | Bin 0 -> 51439 bytes .../libraries/minim/library/mp3spi1.9.4.jar | Bin 0 -> 24538 bytes .../libraries/minim/library/tritonus_aos.jar | Bin 0 -> 10401 bytes .../minim/library/tritonus_share.jar | Bin 0 -> 102673 bytes .../libraries/minim/license.txt | 339 + .../libraries/minim/version.txt | 1 + arduino-0017-linux-x64/readme.txt | 379 + .../reference/ASCIIchart.html | 231 + arduino-0017-linux-x64/reference/Abs.html | 88 + .../reference/AnalogRead.html | 106 + .../reference/AnalogReference.html | 96 + .../reference/AnalogWrite.html | 112 + .../reference/Arithmetic.html | 99 + arduino-0017-linux-x64/reference/Array.html | 118 + .../reference/Assignment.html | 85 + .../reference/AttachInterrupt.html | 114 + .../reference/BeginSerial.html | 85 + arduino-0017-linux-x64/reference/Bit.html | 84 + .../reference/BitClear.html | 86 + arduino-0017-linux-x64/reference/BitRead.html | 86 + arduino-0017-linux-x64/reference/BitSet.html | 86 + .../reference/BitWrite.html | 88 + .../reference/Bitshift.html | 118 + .../reference/BitwiseAnd.html | 168 + .../reference/BitwiseCompound.html | 184 + .../reference/BitwiseXorNot.html | 83 + arduino-0017-linux-x64/reference/Board.html | 132 + arduino-0017-linux-x64/reference/Boolean.html | 110 + .../reference/BooleanVariables.html | 101 + arduino-0017-linux-x64/reference/Braces.html | 118 + arduino-0017-linux-x64/reference/Break.html | 84 + arduino-0017-linux-x64/reference/Byte.html | 77 + .../reference/ByteCast.html | 81 + arduino-0017-linux-x64/reference/Cast.html | 90 + arduino-0017-linux-x64/reference/Char.html | 84 + .../reference/CharCast.html | 81 + .../reference/ClientAvailable.html | 125 + .../reference/ClientConnect.html | 126 + .../reference/ClientConnected.html | 126 + .../reference/ClientConstructor.html | 125 + .../reference/ClientFlush.html | 80 + .../reference/ClientPrint.html | 84 + .../reference/ClientPrintln.html | 84 + .../reference/ClientRead.html | 80 + .../reference/ClientStop.html | 81 + .../reference/ClientWrite.html | 79 + .../reference/Comments.html | 87 + .../reference/Comparison.html | 93 + arduino-0017-linux-x64/reference/Const.html | 89 + .../reference/Constants.html | 111 + .../reference/Constrain.html | 91 + .../reference/Continue.html | 83 + arduino-0017-linux-x64/reference/Cos.html | 83 + arduino-0017-linux-x64/reference/Define.html | 98 + arduino-0017-linux-x64/reference/Delay.html | 104 + .../reference/DelayMicroseconds.html | 109 + .../reference/DetachInterrupt.html | 75 + .../reference/DigitalRead.html | 109 + .../reference/DigitalWrite.html | 110 + arduino-0017-linux-x64/reference/DoWhile.html | 86 + arduino-0017-linux-x64/reference/Double.html | 77 + arduino-0017-linux-x64/reference/EEPROM.html | 72 + .../reference/EEPROMRead.html | 108 + .../reference/EEPROMWrite.html | 101 + arduino-0017-linux-x64/reference/Else.html | 102 + .../reference/Ethernet.html | 95 + .../reference/EthernetBegin.html | 101 + .../reference/Extended.html | 225 + arduino-0017-linux-x64/reference/FAQ.html | 102 + arduino-0017-linux-x64/reference/Float.html | 97 + .../reference/FloatCast.html | 81 + arduino-0017-linux-x64/reference/For.html | 104 + .../reference/Fpconstants.html | 85 + .../reference/FunctionDeclaration.html | 140 + arduino-0017-linux-x64/reference/Goto.html | 92 + .../reference/Guide_ArduinoBT.html | 79 + .../Guide_ArduinoEthernetShield.html | 72 + .../reference/Guide_ArduinoLilyPad.html | 80 + .../reference/Guide_ArduinoMini.html | 105 + .../reference/Guide_ArduinoNano.html | 79 + .../reference/Guide_ArduinoPro.html | 94 + .../reference/Guide_ArduinoProMini.html | 89 + .../reference/Guide_ArduinoXbeeShield.html | 149 + .../reference/Guide_Board.html | 82 + .../reference/Guide_Environment.html | 211 + .../reference/Guide_Guide.html | 61 + .../reference/Guide_HomePage.html | 81 + .../reference/Guide_Introduction.html | 77 + .../reference/Guide_MacOSX.html | 122 + .../reference/Guide_RecentChanges.html | 135 + .../reference/Guide_References.html | 82 + .../reference/Guide_Troubleshooting.html | 241 + .../reference/Guide_Windows.html | 134 + .../reference/Guide_index.html | 89 + .../reference/HighByte.html | 82 + .../reference/HomePage.html | 192 + arduino-0017-linux-x64/reference/If.html | 104 + arduino-0017-linux-x64/reference/Include.html | 83 + .../reference/Increment.html | 92 + .../reference/IncrementCompound.html | 91 + arduino-0017-linux-x64/reference/Int.html | 100 + arduino-0017-linux-x64/reference/IntCast.html | 81 + .../reference/IntegerConstants.html | 132 + .../reference/Interrupts.html | 93 + .../reference/Keywords.html | 275 + .../reference/Libraries.html | 124 + .../reference/LiquidCrystal.html | 90 + .../reference/LiquidCrystalAutoscroll.html | 80 + .../reference/LiquidCrystalBegin.html | 82 + .../reference/LiquidCrystalBlink.html | 83 + .../reference/LiquidCrystalClear.html | 78 + .../reference/LiquidCrystalConstructor.html | 98 + .../reference/LiquidCrystalCreateChar.html | 109 + .../reference/LiquidCrystalCursor.html | 82 + .../reference/LiquidCrystalDisplay.html | 82 + .../reference/LiquidCrystalHome.html | 78 + .../reference/LiquidCrystalLeftToRight.html | 80 + .../reference/LiquidCrystalNoAutoscroll.html | 80 + .../reference/LiquidCrystalNoBlink.html | 82 + .../reference/LiquidCrystalNoCursor.html | 82 + .../reference/LiquidCrystalNoDisplay.html | 82 + .../reference/LiquidCrystalPrint.html | 96 + .../reference/LiquidCrystalRightToLeft.html | 80 + .../LiquidCrystalScrollDisplayLeft.html | 82 + .../LiquidCrystalScrollDisplayRight.html | 82 + .../reference/LiquidCrystalSetCursor.html | 82 + .../reference/LiquidCrystalWrite.html | 99 + arduino-0017-linux-x64/reference/Long.html | 86 + .../reference/LongCast.html | 81 + arduino-0017-linux-x64/reference/Loop.html | 93 + arduino-0017-linux-x64/reference/LowByte.html | 82 + arduino-0017-linux-x64/reference/Map.html | 124 + arduino-0017-linux-x64/reference/Max.html | 97 + arduino-0017-linux-x64/reference/Micros.html | 99 + arduino-0017-linux-x64/reference/Millis.html | 101 + arduino-0017-linux-x64/reference/Min.html | 97 + arduino-0017-linux-x64/reference/Modulo.html | 109 + .../reference/NoInterrupts.html | 91 + arduino-0017-linux-x64/reference/PROGMEM.html | 197 + arduino-0017-linux-x64/reference/PinMode.html | 108 + arduino-0017-linux-x64/reference/Pointer.html | 70 + .../reference/PortManipulation.html | 125 + arduino-0017-linux-x64/reference/Pow.html | 85 + .../reference/PrintBinary.html | 80 + .../reference/PrintByte.html | 80 + .../reference/PrintHex.html | 80 + .../reference/PrintInteger.html | 80 + .../reference/PrintMode.html | 79 + .../reference/PrintNewline.html | 80 + .../reference/PrintOctal.html | 80 + .../reference/PrintString.html | 80 + arduino-0017-linux-x64/reference/PulseIn.html | 102 + arduino-0017-linux-x64/reference/Random.html | 115 + .../reference/RandomSeed.html | 99 + .../reference/RecentChanges.html | 395 + arduino-0017-linux-x64/reference/Return.html | 102 + arduino-0017-linux-x64/reference/Scope.html | 95 + .../reference/SemiColon.html | 76 + arduino-0017-linux-x64/reference/Serial.html | 89 + .../reference/SerialAvailable.html | 82 + .../reference/SerialRead.html | 82 + .../reference/SerialWrite.html | 82 + .../reference/Serial_Available.html | 120 + .../reference/Serial_Begin.html | 107 + .../reference/Serial_Flush.html | 72 + .../reference/Serial_Print.html | 199 + .../reference/Serial_Println.html | 136 + .../reference/Serial_Read.html | 97 + .../reference/Serial_Write.html | 78 + .../reference/ServerAvailable.html | 112 + .../reference/ServerBegin.html | 112 + .../reference/ServerConstructor.html | 112 + .../reference/ServerPrint.html | 84 + .../reference/ServerPrintln.html | 84 + .../reference/ServerWrite.html | 112 + arduino-0017-linux-x64/reference/Servo.html | 82 + .../reference/ServoAttach.html | 101 + .../reference/ServoAttached.html | 84 + .../reference/ServoDetach.html | 81 + .../reference/ServoRead.html | 83 + .../reference/ServoWrite.html | 97 + arduino-0017-linux-x64/reference/Setup.html | 85 + .../reference/ShiftOut.html | 145 + arduino-0017-linux-x64/reference/Sin.html | 84 + arduino-0017-linux-x64/reference/Sizeof.html | 106 + .../reference/SoftwareSerial.html | 90 + .../reference/SoftwareSerialBegin.html | 104 + .../reference/SoftwareSerialConstructor.html | 87 + .../reference/SoftwareSerialExample.html | 123 + .../reference/SoftwareSerialPrint.html | 117 + .../reference/SoftwareSerialPrintln.html | 117 + .../reference/SoftwareSerialRead.html | 94 + arduino-0017-linux-x64/reference/Sq.html | 79 + arduino-0017-linux-x64/reference/Sqrt.html | 79 + arduino-0017-linux-x64/reference/Static.html | 122 + arduino-0017-linux-x64/reference/Stepper.html | 79 + .../reference/StepperBipolarCircuit.html | 71 + .../reference/StepperConstructor.html | 87 + .../reference/StepperExample.html | 108 + .../reference/StepperSetSpeed.html | 80 + .../reference/StepperStep.html | 80 + .../reference/StepperUnipolarCircuit.html | 72 + arduino-0017-linux-x64/reference/String.html | 137 + .../reference/StyleGuide.html | 192 + .../reference/SwitchCase.html | 91 + arduino-0017-linux-x64/reference/Tan.html | 84 + .../reference/UnsignedChar.html | 82 + .../reference/UnsignedInt.html | 96 + .../reference/UnsignedLong.html | 100 + .../reference/VariableDeclaration.html | 113 + arduino-0017-linux-x64/reference/Void.html | 88 + .../reference/Volatile.html | 101 + arduino-0017-linux-x64/reference/While.html | 87 + arduino-0017-linux-x64/reference/Wire.html | 83 + .../reference/WireAvailable.html | 78 + .../reference/WireBegin.html | 77 + .../reference/WireBeginTransmission.html | 79 + .../reference/WireEndTransmission.html | 79 + .../reference/WireOnReceive.html | 78 + .../reference/WireOnRequest.html | 78 + .../reference/WireReceive.html | 78 + .../reference/WireRequestFrom.html | 81 + .../reference/WireSend.html | 87 + arduino-0017-linux-x64/reference/Word.html | 76 + .../reference/WordCast.html | 85 + arduino-0017-linux-x64/reference/arduino.css | 140 + .../reference/environment.html | 3 + arduino-0017-linux-x64/reference/index.html | 194 + arduino-0017-linux-x64/tools/Mangler/make.sh | 11 + .../tools/Mangler/src/Mangler.java | 94 + arduino-0017-linux-x64/tools/howto.txt | 143 + 436 files changed, 62981 insertions(+) create mode 100755 arduino-0017-linux-x64/arduino create mode 100644 arduino-0017-linux-x64/examples/Analog/AnalogInOutSerial/AnalogInOutSerial.pde create mode 100644 arduino-0017-linux-x64/examples/Analog/AnalogInSerial/AnalogInSerial.pde create mode 100644 arduino-0017-linux-x64/examples/Analog/AnalogInput/AnalogInput.pde create mode 100644 arduino-0017-linux-x64/examples/Analog/AnalogWriteMega/AnalogWriteMega.pde create mode 100644 arduino-0017-linux-x64/examples/Analog/Calibration/Calibration.pde create mode 100644 arduino-0017-linux-x64/examples/Analog/Fading/Fading.pde create mode 100644 arduino-0017-linux-x64/examples/Analog/Smoothing/Smoothing.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/ASCIITable/ASCIITable.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/Dimmer/Dimmer.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/Graph/Graph.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/MIDI/Midi.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/MultiSerialMega/MultiSerialMega.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/PhysicalPixel/PhysicalPixel.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/SerialCallResponse/SerialCallResponse.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/SerialCallResponseASCII/SerialCallResponseASCII.pde create mode 100644 arduino-0017-linux-x64/examples/Communication/VirtualColorMixer/VirtualColorMixer.pde create mode 100644 arduino-0017-linux-x64/examples/Control/Arrays/Arrays.pde create mode 100644 arduino-0017-linux-x64/examples/Control/ForLoopIteration/ForLoopIteration.pde create mode 100644 arduino-0017-linux-x64/examples/Control/IfStatementConditional/IfStatementConditional.pde create mode 100644 arduino-0017-linux-x64/examples/Control/WhileStatementConditional/WhileStatementConditional.pde create mode 100644 arduino-0017-linux-x64/examples/Control/switchCase/switchCase.pde create mode 100644 arduino-0017-linux-x64/examples/Control/switchCase2/switchCase2.pde create mode 100644 arduino-0017-linux-x64/examples/Digital/Blink/Blink.pde create mode 100644 arduino-0017-linux-x64/examples/Digital/BlinkWithoutDelay/BlinkWithoutDelay.pde create mode 100644 arduino-0017-linux-x64/examples/Digital/Button/Button.pde create mode 100644 arduino-0017-linux-x64/examples/Digital/Debounce/Debounce.pde create mode 100644 arduino-0017-linux-x64/examples/Digital/Melody/Melody.pde create mode 100644 arduino-0017-linux-x64/examples/Digital/StateChangeDetection/StateChangeDetection.pde create mode 100644 arduino-0017-linux-x64/examples/Display/RowColumnScanning/RowColumnScanning.pde create mode 100644 arduino-0017-linux-x64/examples/Display/barGraph/barGraph.pde create mode 100644 arduino-0017-linux-x64/examples/Sensors/ADXL3xx/ADXL3xx.pde create mode 100644 arduino-0017-linux-x64/examples/Sensors/Knock/Knock.pde create mode 100644 arduino-0017-linux-x64/examples/Sensors/Memsic2125/Memsic2125.pde create mode 100644 arduino-0017-linux-x64/examples/Sensors/Ping/Ping.pde create mode 100644 arduino-0017-linux-x64/examples/Stubs/AnalogReadSerial/AnalogReadSerial.pde create mode 100644 arduino-0017-linux-x64/examples/Stubs/AnalogReadWrite/AnalogReadWrite.pde create mode 100644 arduino-0017-linux-x64/examples/Stubs/BareMinumum/BareMinumum.pde create mode 100644 arduino-0017-linux-x64/examples/Stubs/DigitalReadSerial/DigitalReadSerial.pde create mode 100644 arduino-0017-linux-x64/examples/Stubs/DigitalReadWrite/DigitalReadWrite.pde create mode 100644 arduino-0017-linux-x64/examples/Stubs/HelloWorld/HelloWorld.pde create mode 100644 arduino-0017-linux-x64/hardware/boards.txt create mode 100755 arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168.c create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega1280.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_diecimila.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_ng.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_pro_8MHz.hex create mode 100755 arduino-0017-linux-x64/hardware/bootloaders/atmega/Makefile create mode 100755 arduino-0017-linux-x64/hardware/bootloaders/atmega8/ATmegaBOOT.c create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega8/ATmegaBOOT.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/atmega8/Makefile create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/bt/ATmegaBOOT_168.c create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/bt/ATmegaBOOT_168.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/lilypad/LilyPadBOOT_168.hex create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/lilypad/src/ATmegaBOOT.c create mode 100644 arduino-0017-linux-x64/hardware/bootloaders/lilypad/src/Makefile create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.cpp create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.h create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/Makefile create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/Print.cpp create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/Print.h create mode 100644 arduino-0017-linux-x64/hardware/cores/arduino/WConstants.h create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/WInterrupts.c create mode 100644 arduino-0017-linux-x64/hardware/cores/arduino/WMath.cpp create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/WProgram.h create mode 100644 arduino-0017-linux-x64/hardware/cores/arduino/binary.h create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/main.cxx create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.c create mode 100644 arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.h create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/wiring.c create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/wiring.h create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/wiring_analog.c create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/wiring_digital.c create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/wiring_private.h create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/wiring_pulse.c create mode 100755 arduino-0017-linux-x64/hardware/cores/arduino/wiring_shift.c create mode 100755 arduino-0017-linux-x64/hardware/cores/atmega8/pins_atmega8.c create mode 100755 arduino-0017-linux-x64/hardware/cores/blank/WProgram.h create mode 100644 arduino-0017-linux-x64/hardware/cores/blank/main.cxx create mode 100755 arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.cpp create mode 100755 arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_read/eeprom_read.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_write/eeprom_write.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/EEPROM/keywords.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.cpp create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.cpp create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.cpp create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/ChatServer/ChatServer.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebClient/WebClient.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebServer/WebServer.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Ethernet/keywords.txt create mode 100755 arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.c create mode 100755 arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.h create mode 100755 arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/spi.h create mode 100755 arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/types.h create mode 100755 arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.c create mode 100755 arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/Firmata.cpp create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/Firmata.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/LICENSE.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/TODO.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/AnalogFirmata/AnalogFirmata.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/AnalogFirmata/Makefile create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/EchoString/EchoString.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/EchoString/Makefile create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/I2CFirmata/I2CFirmata.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/Makefile create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/ServoFirmata.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/Makefile create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/SimpleAnalogFirmata.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/Makefile create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/SimpleDigitalFirmata.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/LICENSE.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/Makefile create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/StandardFirmata.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Firmata/keywords.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/LCD4Bit/LCD4Bit.cpp create mode 100644 arduino-0017-linux-x64/hardware/libraries/LCD4Bit/LCD4Bit.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/LCD4Bit/examples/LCD4BitExample/LCD4BitExample.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LCD4Bit/keywords.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/LCD4Bit/readme.txt create mode 100755 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp create mode 100755 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Autoscroll/Autoscroll.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Blink/Blink.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Cursor/Cursor.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Display/Display.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Scroll/Scroll.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/TextDirection/TextDirection.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/setCursor/setCursor.pde create mode 100755 arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/keywords.txt create mode 100755 arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.cpp create mode 100755 arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Matrix/examples/hello_matrix/hello_matrix.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Matrix/examples/sprite_animation/sprite_animation.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Matrix/keywords.txt create mode 100755 arduino-0017-linux-x64/hardware/libraries/Servo/Servo.cpp create mode 100755 arduino-0017-linux-x64/hardware/libraries/Servo/Servo.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Servo/examples/Knob/Knob.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Servo/examples/Sweep/Sweep.pde create mode 100755 arduino-0017-linux-x64/hardware/libraries/Servo/keywords.txt create mode 100755 arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.cpp create mode 100755 arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/keywords.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.cpp create mode 100644 arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Sprite/binary.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Sprite/keywords.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.cpp create mode 100644 arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.h create mode 100644 arduino-0017-linux-x64/hardware/libraries/Stepper/examples/MotorKnob/MotorKnob.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Stepper/keywords.txt create mode 100755 arduino-0017-linux-x64/hardware/libraries/Wire/Wire.cpp create mode 100755 arduino-0017-linux-x64/hardware/libraries/Wire/Wire.h create mode 100755 arduino-0017-linux-x64/hardware/libraries/Wire/examples/SFRRanger_reader/SFRRanger_reader.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Wire/examples/digital_potentiometer/digital_potentiometer.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_reader/master_reader.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_writer/master_writer.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_receiver/slave_receiver.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_sender/slave_sender.pde create mode 100644 arduino-0017-linux-x64/hardware/libraries/Wire/keywords.txt create mode 100644 arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.c create mode 100755 arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.h create mode 100644 arduino-0017-linux-x64/hardware/programmers.txt create mode 120000 arduino-0017-linux-x64/hardware/tools/avr/bin/avr-ar create mode 120000 arduino-0017-linux-x64/hardware/tools/avr/bin/avr-g++ create mode 120000 arduino-0017-linux-x64/hardware/tools/avr/bin/avr-gcc create mode 100755 arduino-0017-linux-x64/hardware/tools/avrdude create mode 100644 arduino-0017-linux-x64/hardware/tools/avrdude.conf create mode 100644 arduino-0017-linux-x64/lib/RXTXcomm.jar create mode 100755 arduino-0017-linux-x64/lib/about.jpg create mode 100644 arduino-0017-linux-x64/lib/antlr.jar create mode 100644 arduino-0017-linux-x64/lib/core.jar create mode 100644 arduino-0017-linux-x64/lib/ecj.jar create mode 100644 arduino-0017-linux-x64/lib/jna.jar create mode 100644 arduino-0017-linux-x64/lib/keywords.txt create mode 100755 arduino-0017-linux-x64/lib/librxtxSerial.so create mode 100644 arduino-0017-linux-x64/lib/oro.jar create mode 100644 arduino-0017-linux-x64/lib/pde.jar create mode 100755 arduino-0017-linux-x64/lib/preferences.txt create mode 100644 arduino-0017-linux-x64/lib/theme/buttons.gif create mode 100644 arduino-0017-linux-x64/lib/theme/resize.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-sel-left.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-sel-menu.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-sel-mid.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-sel-right.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-unsel-left.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-unsel-menu.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-unsel-mid.gif create mode 100644 arduino-0017-linux-x64/lib/theme/tab-unsel-right.gif create mode 100644 arduino-0017-linux-x64/lib/theme/theme.txt create mode 100644 arduino-0017-linux-x64/libraries/howto.txt create mode 100644 arduino-0017-linux-x64/libraries/javascript/library/export.txt create mode 100644 arduino-0017-linux-x64/libraries/javascript/library/javascript.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/library/jl1.0.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/library/jsminim.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/library/minim-spi.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/library/minim.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/library/mp3spi1.9.4.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/library/tritonus_aos.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/library/tritonus_share.jar create mode 100755 arduino-0017-linux-x64/libraries/minim/license.txt create mode 100755 arduino-0017-linux-x64/libraries/minim/version.txt create mode 100644 arduino-0017-linux-x64/readme.txt create mode 100644 arduino-0017-linux-x64/reference/ASCIIchart.html create mode 100644 arduino-0017-linux-x64/reference/Abs.html create mode 100644 arduino-0017-linux-x64/reference/AnalogRead.html create mode 100644 arduino-0017-linux-x64/reference/AnalogReference.html create mode 100644 arduino-0017-linux-x64/reference/AnalogWrite.html create mode 100644 arduino-0017-linux-x64/reference/Arithmetic.html create mode 100644 arduino-0017-linux-x64/reference/Array.html create mode 100644 arduino-0017-linux-x64/reference/Assignment.html create mode 100644 arduino-0017-linux-x64/reference/AttachInterrupt.html create mode 100644 arduino-0017-linux-x64/reference/BeginSerial.html create mode 100644 arduino-0017-linux-x64/reference/Bit.html create mode 100644 arduino-0017-linux-x64/reference/BitClear.html create mode 100644 arduino-0017-linux-x64/reference/BitRead.html create mode 100644 arduino-0017-linux-x64/reference/BitSet.html create mode 100644 arduino-0017-linux-x64/reference/BitWrite.html create mode 100644 arduino-0017-linux-x64/reference/Bitshift.html create mode 100644 arduino-0017-linux-x64/reference/BitwiseAnd.html create mode 100644 arduino-0017-linux-x64/reference/BitwiseCompound.html create mode 100644 arduino-0017-linux-x64/reference/BitwiseXorNot.html create mode 100644 arduino-0017-linux-x64/reference/Board.html create mode 100644 arduino-0017-linux-x64/reference/Boolean.html create mode 100644 arduino-0017-linux-x64/reference/BooleanVariables.html create mode 100644 arduino-0017-linux-x64/reference/Braces.html create mode 100644 arduino-0017-linux-x64/reference/Break.html create mode 100644 arduino-0017-linux-x64/reference/Byte.html create mode 100644 arduino-0017-linux-x64/reference/ByteCast.html create mode 100644 arduino-0017-linux-x64/reference/Cast.html create mode 100644 arduino-0017-linux-x64/reference/Char.html create mode 100644 arduino-0017-linux-x64/reference/CharCast.html create mode 100644 arduino-0017-linux-x64/reference/ClientAvailable.html create mode 100644 arduino-0017-linux-x64/reference/ClientConnect.html create mode 100644 arduino-0017-linux-x64/reference/ClientConnected.html create mode 100644 arduino-0017-linux-x64/reference/ClientConstructor.html create mode 100644 arduino-0017-linux-x64/reference/ClientFlush.html create mode 100644 arduino-0017-linux-x64/reference/ClientPrint.html create mode 100644 arduino-0017-linux-x64/reference/ClientPrintln.html create mode 100644 arduino-0017-linux-x64/reference/ClientRead.html create mode 100644 arduino-0017-linux-x64/reference/ClientStop.html create mode 100644 arduino-0017-linux-x64/reference/ClientWrite.html create mode 100644 arduino-0017-linux-x64/reference/Comments.html create mode 100644 arduino-0017-linux-x64/reference/Comparison.html create mode 100644 arduino-0017-linux-x64/reference/Const.html create mode 100644 arduino-0017-linux-x64/reference/Constants.html create mode 100644 arduino-0017-linux-x64/reference/Constrain.html create mode 100644 arduino-0017-linux-x64/reference/Continue.html create mode 100644 arduino-0017-linux-x64/reference/Cos.html create mode 100644 arduino-0017-linux-x64/reference/Define.html create mode 100644 arduino-0017-linux-x64/reference/Delay.html create mode 100644 arduino-0017-linux-x64/reference/DelayMicroseconds.html create mode 100644 arduino-0017-linux-x64/reference/DetachInterrupt.html create mode 100644 arduino-0017-linux-x64/reference/DigitalRead.html create mode 100644 arduino-0017-linux-x64/reference/DigitalWrite.html create mode 100644 arduino-0017-linux-x64/reference/DoWhile.html create mode 100644 arduino-0017-linux-x64/reference/Double.html create mode 100644 arduino-0017-linux-x64/reference/EEPROM.html create mode 100644 arduino-0017-linux-x64/reference/EEPROMRead.html create mode 100644 arduino-0017-linux-x64/reference/EEPROMWrite.html create mode 100644 arduino-0017-linux-x64/reference/Else.html create mode 100644 arduino-0017-linux-x64/reference/Ethernet.html create mode 100644 arduino-0017-linux-x64/reference/EthernetBegin.html create mode 100644 arduino-0017-linux-x64/reference/Extended.html create mode 100644 arduino-0017-linux-x64/reference/FAQ.html create mode 100644 arduino-0017-linux-x64/reference/Float.html create mode 100644 arduino-0017-linux-x64/reference/FloatCast.html create mode 100644 arduino-0017-linux-x64/reference/For.html create mode 100644 arduino-0017-linux-x64/reference/Fpconstants.html create mode 100644 arduino-0017-linux-x64/reference/FunctionDeclaration.html create mode 100644 arduino-0017-linux-x64/reference/Goto.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoBT.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoEthernetShield.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoLilyPad.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoMini.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoNano.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoPro.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoProMini.html create mode 100644 arduino-0017-linux-x64/reference/Guide_ArduinoXbeeShield.html create mode 100644 arduino-0017-linux-x64/reference/Guide_Board.html create mode 100644 arduino-0017-linux-x64/reference/Guide_Environment.html create mode 100644 arduino-0017-linux-x64/reference/Guide_Guide.html create mode 100644 arduino-0017-linux-x64/reference/Guide_HomePage.html create mode 100644 arduino-0017-linux-x64/reference/Guide_Introduction.html create mode 100644 arduino-0017-linux-x64/reference/Guide_MacOSX.html create mode 100644 arduino-0017-linux-x64/reference/Guide_RecentChanges.html create mode 100644 arduino-0017-linux-x64/reference/Guide_References.html create mode 100644 arduino-0017-linux-x64/reference/Guide_Troubleshooting.html create mode 100644 arduino-0017-linux-x64/reference/Guide_Windows.html create mode 100644 arduino-0017-linux-x64/reference/Guide_index.html create mode 100644 arduino-0017-linux-x64/reference/HighByte.html create mode 100644 arduino-0017-linux-x64/reference/HomePage.html create mode 100644 arduino-0017-linux-x64/reference/If.html create mode 100644 arduino-0017-linux-x64/reference/Include.html create mode 100644 arduino-0017-linux-x64/reference/Increment.html create mode 100644 arduino-0017-linux-x64/reference/IncrementCompound.html create mode 100644 arduino-0017-linux-x64/reference/Int.html create mode 100644 arduino-0017-linux-x64/reference/IntCast.html create mode 100644 arduino-0017-linux-x64/reference/IntegerConstants.html create mode 100644 arduino-0017-linux-x64/reference/Interrupts.html create mode 100644 arduino-0017-linux-x64/reference/Keywords.html create mode 100644 arduino-0017-linux-x64/reference/Libraries.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystal.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalAutoscroll.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalBegin.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalBlink.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalClear.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalConstructor.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalCreateChar.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalCursor.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalDisplay.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalHome.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalLeftToRight.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalNoAutoscroll.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalNoBlink.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalNoCursor.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalNoDisplay.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalPrint.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalRightToLeft.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalScrollDisplayLeft.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalScrollDisplayRight.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalSetCursor.html create mode 100644 arduino-0017-linux-x64/reference/LiquidCrystalWrite.html create mode 100644 arduino-0017-linux-x64/reference/Long.html create mode 100644 arduino-0017-linux-x64/reference/LongCast.html create mode 100644 arduino-0017-linux-x64/reference/Loop.html create mode 100644 arduino-0017-linux-x64/reference/LowByte.html create mode 100644 arduino-0017-linux-x64/reference/Map.html create mode 100644 arduino-0017-linux-x64/reference/Max.html create mode 100644 arduino-0017-linux-x64/reference/Micros.html create mode 100644 arduino-0017-linux-x64/reference/Millis.html create mode 100644 arduino-0017-linux-x64/reference/Min.html create mode 100644 arduino-0017-linux-x64/reference/Modulo.html create mode 100644 arduino-0017-linux-x64/reference/NoInterrupts.html create mode 100644 arduino-0017-linux-x64/reference/PROGMEM.html create mode 100644 arduino-0017-linux-x64/reference/PinMode.html create mode 100644 arduino-0017-linux-x64/reference/Pointer.html create mode 100644 arduino-0017-linux-x64/reference/PortManipulation.html create mode 100644 arduino-0017-linux-x64/reference/Pow.html create mode 100644 arduino-0017-linux-x64/reference/PrintBinary.html create mode 100644 arduino-0017-linux-x64/reference/PrintByte.html create mode 100644 arduino-0017-linux-x64/reference/PrintHex.html create mode 100644 arduino-0017-linux-x64/reference/PrintInteger.html create mode 100644 arduino-0017-linux-x64/reference/PrintMode.html create mode 100644 arduino-0017-linux-x64/reference/PrintNewline.html create mode 100644 arduino-0017-linux-x64/reference/PrintOctal.html create mode 100644 arduino-0017-linux-x64/reference/PrintString.html create mode 100644 arduino-0017-linux-x64/reference/PulseIn.html create mode 100644 arduino-0017-linux-x64/reference/Random.html create mode 100644 arduino-0017-linux-x64/reference/RandomSeed.html create mode 100644 arduino-0017-linux-x64/reference/RecentChanges.html create mode 100644 arduino-0017-linux-x64/reference/Return.html create mode 100644 arduino-0017-linux-x64/reference/Scope.html create mode 100644 arduino-0017-linux-x64/reference/SemiColon.html create mode 100644 arduino-0017-linux-x64/reference/Serial.html create mode 100644 arduino-0017-linux-x64/reference/SerialAvailable.html create mode 100644 arduino-0017-linux-x64/reference/SerialRead.html create mode 100644 arduino-0017-linux-x64/reference/SerialWrite.html create mode 100644 arduino-0017-linux-x64/reference/Serial_Available.html create mode 100644 arduino-0017-linux-x64/reference/Serial_Begin.html create mode 100644 arduino-0017-linux-x64/reference/Serial_Flush.html create mode 100644 arduino-0017-linux-x64/reference/Serial_Print.html create mode 100644 arduino-0017-linux-x64/reference/Serial_Println.html create mode 100644 arduino-0017-linux-x64/reference/Serial_Read.html create mode 100644 arduino-0017-linux-x64/reference/Serial_Write.html create mode 100644 arduino-0017-linux-x64/reference/ServerAvailable.html create mode 100644 arduino-0017-linux-x64/reference/ServerBegin.html create mode 100644 arduino-0017-linux-x64/reference/ServerConstructor.html create mode 100644 arduino-0017-linux-x64/reference/ServerPrint.html create mode 100644 arduino-0017-linux-x64/reference/ServerPrintln.html create mode 100644 arduino-0017-linux-x64/reference/ServerWrite.html create mode 100644 arduino-0017-linux-x64/reference/Servo.html create mode 100644 arduino-0017-linux-x64/reference/ServoAttach.html create mode 100644 arduino-0017-linux-x64/reference/ServoAttached.html create mode 100644 arduino-0017-linux-x64/reference/ServoDetach.html create mode 100644 arduino-0017-linux-x64/reference/ServoRead.html create mode 100644 arduino-0017-linux-x64/reference/ServoWrite.html create mode 100644 arduino-0017-linux-x64/reference/Setup.html create mode 100644 arduino-0017-linux-x64/reference/ShiftOut.html create mode 100644 arduino-0017-linux-x64/reference/Sin.html create mode 100644 arduino-0017-linux-x64/reference/Sizeof.html create mode 100644 arduino-0017-linux-x64/reference/SoftwareSerial.html create mode 100644 arduino-0017-linux-x64/reference/SoftwareSerialBegin.html create mode 100644 arduino-0017-linux-x64/reference/SoftwareSerialConstructor.html create mode 100644 arduino-0017-linux-x64/reference/SoftwareSerialExample.html create mode 100644 arduino-0017-linux-x64/reference/SoftwareSerialPrint.html create mode 100644 arduino-0017-linux-x64/reference/SoftwareSerialPrintln.html create mode 100644 arduino-0017-linux-x64/reference/SoftwareSerialRead.html create mode 100644 arduino-0017-linux-x64/reference/Sq.html create mode 100644 arduino-0017-linux-x64/reference/Sqrt.html create mode 100644 arduino-0017-linux-x64/reference/Static.html create mode 100644 arduino-0017-linux-x64/reference/Stepper.html create mode 100644 arduino-0017-linux-x64/reference/StepperBipolarCircuit.html create mode 100644 arduino-0017-linux-x64/reference/StepperConstructor.html create mode 100644 arduino-0017-linux-x64/reference/StepperExample.html create mode 100644 arduino-0017-linux-x64/reference/StepperSetSpeed.html create mode 100644 arduino-0017-linux-x64/reference/StepperStep.html create mode 100644 arduino-0017-linux-x64/reference/StepperUnipolarCircuit.html create mode 100644 arduino-0017-linux-x64/reference/String.html create mode 100644 arduino-0017-linux-x64/reference/StyleGuide.html create mode 100644 arduino-0017-linux-x64/reference/SwitchCase.html create mode 100644 arduino-0017-linux-x64/reference/Tan.html create mode 100644 arduino-0017-linux-x64/reference/UnsignedChar.html create mode 100644 arduino-0017-linux-x64/reference/UnsignedInt.html create mode 100644 arduino-0017-linux-x64/reference/UnsignedLong.html create mode 100644 arduino-0017-linux-x64/reference/VariableDeclaration.html create mode 100644 arduino-0017-linux-x64/reference/Void.html create mode 100644 arduino-0017-linux-x64/reference/Volatile.html create mode 100644 arduino-0017-linux-x64/reference/While.html create mode 100644 arduino-0017-linux-x64/reference/Wire.html create mode 100644 arduino-0017-linux-x64/reference/WireAvailable.html create mode 100644 arduino-0017-linux-x64/reference/WireBegin.html create mode 100644 arduino-0017-linux-x64/reference/WireBeginTransmission.html create mode 100644 arduino-0017-linux-x64/reference/WireEndTransmission.html create mode 100644 arduino-0017-linux-x64/reference/WireOnReceive.html create mode 100644 arduino-0017-linux-x64/reference/WireOnRequest.html create mode 100644 arduino-0017-linux-x64/reference/WireReceive.html create mode 100644 arduino-0017-linux-x64/reference/WireRequestFrom.html create mode 100644 arduino-0017-linux-x64/reference/WireSend.html create mode 100644 arduino-0017-linux-x64/reference/Word.html create mode 100644 arduino-0017-linux-x64/reference/WordCast.html create mode 100644 arduino-0017-linux-x64/reference/arduino.css create mode 100644 arduino-0017-linux-x64/reference/environment.html create mode 100644 arduino-0017-linux-x64/reference/index.html create mode 100755 arduino-0017-linux-x64/tools/Mangler/make.sh create mode 100644 arduino-0017-linux-x64/tools/Mangler/src/Mangler.java create mode 100644 arduino-0017-linux-x64/tools/howto.txt diff --git a/arduino-0017-linux-x64/arduino b/arduino-0017-linux-x64/arduino new file mode 100755 index 0000000..b689b52 --- /dev/null +++ b/arduino-0017-linux-x64/arduino @@ -0,0 +1,20 @@ + #!/bin/sh + +APPDIR="$(dirname -- "${0}")" + +for LIB in \ + java/lib/rt.jar \ + java/lib/tools.jar \ + lib/*.jar \ + ; +do + CLASSPATH="${CLASSPATH}:${APPDIR}/${LIB}" +done +export CLASSPATH + +LD_LIBRARY_PATH=`pwd`/lib:${LD_LIBRARY_PATH} +export LD_LIBRARY_PATH + +export PATH="${APPDIR}/java/bin:${PATH}" + +java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel processing.app.Base diff --git a/arduino-0017-linux-x64/examples/Analog/AnalogInOutSerial/AnalogInOutSerial.pde b/arduino-0017-linux-x64/examples/Analog/AnalogInOutSerial/AnalogInOutSerial.pde new file mode 100644 index 0000000..81c8e81 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Analog/AnalogInOutSerial/AnalogInOutSerial.pde @@ -0,0 +1,50 @@ +/* + Analog input, analog output, serial output + + Reads an analog input pin, maps the result to a range from 0 to 255 + and uses the result to set the pulsewidth modulation (PWM) of an output pin. + Also prints the results to the serial monitor. + + The circuit: + * potentiometer connected to analog pin 0. + Center pin of the potentiometer goes to the analog pin. + side pins of the potentiometer go to +5V and ground + * LED connected from digital pin 9 to ground + + created 29 Dec. 2008 + by Tom Igoe + + */ + +// These constants won't change. They're used to give names +// to the pins used: +const int analogInPin = 0; // Analog input pin that the potentiometer is attached to +const int analogOutPin = 9; // Analog output pin that the LED is attached to + +int sensorValue = 0; // value read from the pot +int outputValue = 0; // value output to the PWM (analog out) + +void setup() { + // initialize serial communications at 9600 bps: + Serial.begin(9600); +} + +void loop() { + // read the analog in value: + sensorValue = analogRead(analogInPin); + // map it to the range of the analog out: + outputValue = map(sensorValue, 0, 1023, 0, 255); + // change the analog out value: + analogWrite(analogOutPin, outputValue); + + // print the results to the serial monitor: + Serial.print("sensor = " ); + Serial.print(sensorValue); + Serial.print("\t output = "); + Serial.println(outputValue); + + // wait 10 milliseconds before the next loop + // for the analog-to-digital converter to settle + // after the last reading: + delay(10); +} diff --git a/arduino-0017-linux-x64/examples/Analog/AnalogInSerial/AnalogInSerial.pde b/arduino-0017-linux-x64/examples/Analog/AnalogInSerial/AnalogInSerial.pde new file mode 100644 index 0000000..c8fa158 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Analog/AnalogInSerial/AnalogInSerial.pde @@ -0,0 +1,29 @@ +/* + Analog input, serial output + + Reads an analog input pin, prints the results to the serial monitor. + + The circuit: + + * potentiometer connected to analog pin 0. + Center pin of the potentiometer goes to the analog pin. + side pins of the potentiometer go to +5V and ground + + created over and over again + by Tom Igoe and everyone who's ever used Arduino + + */ + + void setup() { + Serial.begin(9600); + } + + void loop() { + // read the analog input into a variable: + int analogValue = analogRead(0); + // print the result: + Serial.println(analogValue); + // wait 10 milliseconds for the analog-to-digital converter + // to settle after the last reading: + delay(10); + } diff --git a/arduino-0017-linux-x64/examples/Analog/AnalogInput/AnalogInput.pde b/arduino-0017-linux-x64/examples/Analog/AnalogInput/AnalogInput.pde new file mode 100644 index 0000000..1ee8ee3 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Analog/AnalogInput/AnalogInput.pde @@ -0,0 +1,48 @@ +/* + Analog Input + Demonstrates analog input by reading an analog sensor on analog pin 0 and + turning on and off a light emitting diode(LED) connected to digital pin 13. + The amount of time the LED will be on and off depends on + the value obtained by analogRead(). + + The circuit: + * Potentiometer attached to analog input 0 + * center pin of the potentiometer to the analog pin + * one side pin (either one) to ground + * the other side pin to +5V + * LED anode (long leg) attached to digital output 13 + * LED cathode (short leg) attached to ground + + * Note: because most Arduinos have a built-in LED attached + to pin 13 on the board, the LED is optional. + + + Created by David Cuartielles + Modified 16 Jun 2009 + By Tom Igoe + + http://arduino.cc/en/Tutorial/AnalogInput + + */ + +int sensorPin = 0; // select the input pin for the potentiometer +int ledPin = 13; // select the pin for the LED +int sensorValue = 0; // variable to store the value coming from the sensor + +void setup() { + // declare the ledPin as an OUTPUT: + pinMode(ledPin, OUTPUT); +} + +void loop() { + // read the value from the sensor: + sensorValue = analogRead(sensorPin); + // turn the ledPin on + digitalWrite(ledPin, HIGH); + // stop the program for milliseconds: + delay(sensorValue); + // turn the ledPin off: + digitalWrite(ledPin, LOW); + // stop the program for for milliseconds: + delay(sensorValue); +} \ No newline at end of file diff --git a/arduino-0017-linux-x64/examples/Analog/AnalogWriteMega/AnalogWriteMega.pde b/arduino-0017-linux-x64/examples/Analog/AnalogWriteMega/AnalogWriteMega.pde new file mode 100644 index 0000000..3166952 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Analog/AnalogWriteMega/AnalogWriteMega.pde @@ -0,0 +1,42 @@ +/* + Mega analogWrite() test + + This sketch fades LEDs up and down one at a time on digital pins 2 through 13. + This sketch was written for the Arduino Mega, and will not work on previous boards. + + The circuit: + * LEDs attached from pins 2 through 13 to ground. + + created 8 Feb 2009 + by Tom Igoe + */ +// These constants won't change. They're used to give names +// to the pins used: +const int lowestPin = 2; +const int highestPin = 13; + + +void setup() { + // set pins 2 through 13 as outputs: + for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) { + pinMode(thisPin, OUTPUT); + } +} + +void loop() { + // iterate over the pins: + for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) { + // fade the LED on thisPin from off to brightest: + for (int brightness = 0; brightness < 255; brightness++) { + analogWrite(thisPin, brightness); + delay(2); + } + // fade the LED on thisPin from brithstest to off: + for (int brightness = 255; brightness >= 0; brightness--) { + analogWrite(thisPin, brightness); + delay(2); + } + // pause between LEDs: + delay(100); + } +} diff --git a/arduino-0017-linux-x64/examples/Analog/Calibration/Calibration.pde b/arduino-0017-linux-x64/examples/Analog/Calibration/Calibration.pde new file mode 100644 index 0000000..52c8d8d --- /dev/null +++ b/arduino-0017-linux-x64/examples/Analog/Calibration/Calibration.pde @@ -0,0 +1,73 @@ +/* + Calibration + + Demonstrates one techinque for calibrating sensor input. The + sensor readings during the first five seconds of the sketch + execution define the minimum and maximum of expected values + attached to the sensor pin. + + The sensor minumum and maximum initial values may seem backwards. + Initially, you set the minimum high and listen for anything + lower, saving it as the new minumum. Likewise, you set the + maximum low and listen for anything higher as the new maximum. + + The circuit: + * Analog sensor (potentiometer will do) attached to analog input 0 + * LED attached from digital pin 9 to ground + + created 29 Oct 2008 + By David A Mellis + Modified 17 Jun 2009 + By Tom Igoe + + http://arduino.cc/en/Tutorial/Calibration + + */ + +// These constants won't change: +const int sensorPin = 2; // pin that the sensor is attached to +const int ledPin = 9; // pin that the LED is attached to + +// variables: +int sensorValue = 0; // the sensor value +int sensorMin = 1023; // minimum sensor value +int sensorMax = 0; // maximum sensor value + + +void setup() { + // turn on LED to signal the start of the calibration period: + pinMode(13, OUTPUT); + digitalWrite(13, HIGH); + + // calibrate during the first five seconds + while (millis() < 5000) { + sensorValue = analogRead(sensorPin); + + // record the maximum sensor value + if (sensorValue > sensorMax) { + sensorMax = sensorValue; + } + + // record the minimum sensor value + if (sensorValue < sensorMin) { + sensorMin = sensorValue; + } + } + + // signal the end of the calibration period + digitalWrite(13, LOW); +} + +void loop() { + // read the sensor: + sensorValue = analogRead(sensorPin); + + // apply the calibration to the sensor reading + sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255); + + // in case the sensor value is outside the range seen during calibration + sensorValue = constrain(sensorValue, 0, 255); + + // fade the LED using the calibrated value: + analogWrite(ledPin, sensorValue); +} \ No newline at end of file diff --git a/arduino-0017-linux-x64/examples/Analog/Fading/Fading.pde b/arduino-0017-linux-x64/examples/Analog/Fading/Fading.pde new file mode 100644 index 0000000..1205078 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Analog/Fading/Fading.pde @@ -0,0 +1,43 @@ +/* + Fading + + This example shows how to fade an LED using the analogWrite() function. + + The circuit: + * LED attached from digital pin 9 to ground. + + Created 1 Nov 2008 + By David A. Mellis + Modified 17 June 2009 + By Tom Igoe + + http://arduino.cc/en/Tutorial/Fading + + */ + + +int ledPin = 9; // LED connected to digital pin 9 + +void setup() { + // nothing happens in setup +} + +void loop() { + // fade in from min to max in increments of 5 points: + for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { + // sets the value (range from 0 to 255): + analogWrite(ledPin, fadeValue); + // wait for 30 milliseconds to see the dimming effect + delay(30); + } + + // fade out from max to min in increments of 5 points: + for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { + // sets the value (range from 0 to 255): + analogWrite(ledPin, fadeValue); + // wait for 30 milliseconds to see the dimming effect + delay(30); + } +} + + diff --git a/arduino-0017-linux-x64/examples/Analog/Smoothing/Smoothing.pde b/arduino-0017-linux-x64/examples/Analog/Smoothing/Smoothing.pde new file mode 100644 index 0000000..881bb13 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Analog/Smoothing/Smoothing.pde @@ -0,0 +1,64 @@ +/* + + Smoothing + + Reads repeatedly from an analog input, calculating a running average + and printing it to the computer. Keeps ten readings in an array and + continually averages them. + + The circuit: + * Analog sensor (potentiometer will do) attached to analog input 0 + + Created 22 April 2007 + By David A. Mellis + + http://www.arduino.cc/en/Tutorial/Smoothing + + +*/ + + +// Define the number of samples to keep track of. The higher the number, +// the more the readings will be smoothed, but the slower the output will +// respond to the input. Using a constant rather than a normal variable lets +// use this value to determine the size of the readings array. +const int numReadings = 10; + +int readings[numReadings]; // the readings from the analog input +int index = 0; // the index of the current reading +int total = 0; // the running total +int average = 0; // the average + +int inputPin = 0; + +void setup() +{ + // initialize serial communication with computer: + Serial.begin(9600); + // initialize all the readings to 0: + for (int thisReading = 0; thisReading < numReadings; thisReading++) + readings[thisReading] = 0; +} + +void loop() { + // subtract the last reading: + total= total - readings[index]; + // read from the sensor: + readings[index] = analogRead(inputPin); + // add the reading to the total: + total= total + readings[index]; + // advance to the next position in the array: + index = index + 1; + + // if we're at the end of the array... + if (index >= numReadings) + // ...wrap around to the beginning: + index = 0; + + // calculate the average: + average = total / numReadings; + // send it to the computer (as ASCII digits) + Serial.println(average, DEC); +} + + diff --git a/arduino-0017-linux-x64/examples/Communication/ASCIITable/ASCIITable.pde b/arduino-0017-linux-x64/examples/Communication/ASCIITable/ASCIITable.pde new file mode 100644 index 0000000..3a20603 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/ASCIITable/ASCIITable.pde @@ -0,0 +1,73 @@ +/* + ASCII table + + Prints out byte values in all possible formats: + * as raw binary values + * as ASCII-encoded decimal, hex, octal, and binary values + + For more on ASCII, see http://www.asciitable.com and http://en.wikipedia.org/wiki/ASCII + + The circuit: No external hardware needed. + + created 2006 + by Nicholas Zambetti + modified 18 Jan 2009 + by Tom Igoe + + + */ +void setup() +{ + Serial.begin(9600); + + // prints title with ending line break + Serial.println("ASCII Table ~ Character Map"); +} + +// first visible ASCIIcharacter '!' is number 33: +int thisByte = 33; +// you can also write ASCII characters in single quotes. +// for example. '!' is the same as 33, so you could also use this: +//int thisByte = '!'; + +void loop() +{ + // prints value unaltered, i.e. the raw binary version of the + // byte. The serial monitor interprets all bytes as + // ASCII, so 33, the first number, will show up as '!' + Serial.print(thisByte, BYTE); + + Serial.print(", dec: "); + // prints value as string as an ASCII-encoded decimal (base 10). + // Decimal is the default format for Serial.print() and Serial.println(), + // so no modifier is needed: + Serial.print(thisByte); + // But you can declare the modifier for decimal if you want to. + //this also works if you uncomment it: + + // Serial.print(thisByte, DEC); + + + Serial.print(", hex: "); + // prints value as string in hexadecimal (base 16): + Serial.print(thisByte, HEX); + + Serial.print(", oct: "); + // prints value as string in octal (base 8); + Serial.print(thisByte, OCT); + + Serial.print(", bin: "); + // prints value as string in binary (base 2) + // also prints ending line break: + Serial.println(thisByte, BIN); + + // if printed last visible character '~' or 126, stop: + if(thisByte == 126) { // you could also use if (thisByte == '~') { + // This loop loops forever and does nothing + while(true) { + continue; + } + } + // go on to the next character + thisByte++; +} diff --git a/arduino-0017-linux-x64/examples/Communication/Dimmer/Dimmer.pde b/arduino-0017-linux-x64/examples/Communication/Dimmer/Dimmer.pde new file mode 100644 index 0000000..0990fe5 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/Dimmer/Dimmer.pde @@ -0,0 +1,360 @@ +/* + Dimmer + + Demonstrates the sending data from the computer to the Arduino board, + in this case to control the brightness of an LED. The data is sent + in individual bytes, each of which ranges from 0 to 255. Arduino + reads these bytes and uses them to set the brightness of the LED. + + The circuit: + LED attached from digital pin 9 to ground. + Serial connection to Processing, Max/MSP, or another serial application + + created 2006 + by David A. Mellis + modified 14 Apr 2009 + by Tom Igoe and Scott Fitzgerald + + http://www.arduino.cc/en/Tutorial/Dimmer + */ + +const int ledPin = 9; // the pin that the LED is attached to + +void setup() +{ + // initialize the serial communication: + Serial.begin(9600); + // initialize the ledPin as an output: + pinMode(ledPin, OUTPUT); +} + +void loop() { + byte brightness; + + // check if data has been sent from the computer: + if (Serial.available()) { + // read the most recent byte (which will be from 0 to 255): + brightness = Serial.read(); + // set the brightness of the LED: + analogWrite(ledPin, brightness); + } +} + +/* Processing code for this example + // Dimmer - sends bytes over a serial port + // by David A. Mellis + + import processing.serial.*; + Serial port; + + void setup() { + size(256, 150); + + println("Available serial ports:"); + println(Serial.list()); + + // Uses the first port in this list (number 0). Change this to + // select the port corresponding to your Arduino board. The last + // parameter (e.g. 9600) is the speed of the communication. It + // has to correspond to the value passed to Serial.begin() in your + // Arduino sketch. + port = new Serial(this, Serial.list()[0], 9600); + + // If you know the name of the port used by the Arduino board, you + // can specify it directly like this. + //port = new Serial(this, "COM1", 9600); + } + + void draw() { + // draw a gradient from black to white + for (int i = 0; i < 256; i++) { + stroke(i); + line(i, 0, i, 150); + } + + // write the current X-position of the mouse to the serial port as + // a single byte + port.write(mouseX); + } + */ + +/* Max/MSP v5 patch for this example + + { + "boxes" : [ { + "box" : { + "maxclass" : "comment", + "text" : "Dimmer\n\nThis patch sends a binary number from 0 to 255 out the serial port to an Arduino connected to the port. It dims an LED attached to the Arduino.\n\ncreated 2006\nby David A. Mellis\nmodified 14 Apr 2009\nby Scott Fitzgerald and Tom Igoe", + "linecount" : 10, + "patching_rect" : [ 209.0, 55.0, 344.0, 144.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-32", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "change the slider to alter the brightness of the LED", + "linecount" : 3, + "patching_rect" : [ 90.0, 235.0, 117.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-7", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 215.0, 385.0, 50.0, 19.0 ], + "numoutlets" : 2, + "fontsize" : 10.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-6", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "slider", + "patching_rect" : [ 215.0, 235.0, 20.0, 140.0 ], + "numoutlets" : 1, + "outlettype" : [ "" ], + "bgcolor" : [ 0.94902, 0.94902, 0.94902, 0.0 ], + "id" : "obj-1", + "size" : 256.0, + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "select 0 1", + "patching_rect" : [ 342.0, 305.0, 62.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-30", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to close the serial port", + "patching_rect" : [ 390.0, 396.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-26", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to open the serial port", + "patching_rect" : [ 415.0, 370.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-27", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "close", + "patching_rect" : [ 342.0, 396.0, 39.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-21", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "port a", + "patching_rect" : [ 364.0, 370.0, 41.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-19", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click here to get a list of serial ports", + "patching_rect" : [ 435.0, 344.0, 207.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-2", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 342.0, 268.0, 15.0, 15.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-11", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "print", + "patching_rect" : [ 384.0, 344.0, 36.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-13", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "serial a 9600", + "patching_rect" : [ 259.0, 420.0, 84.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-14", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click to start", + "patching_rect" : [ 369.0, 268.0, 117.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-17", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "panel", + "patching_rect" : [ 215.0, 235.0, 21.0, 139.0 ], + "numoutlets" : 0, + "mode" : 1, + "grad1" : [ 1.0, 1.0, 1.0, 1.0 ], + "id" : "obj-8", + "grad2" : [ 0.509804, 0.509804, 0.509804, 1.0 ], + "numinlets" : 1, + "angle" : 270.0 + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-30", 0 ], + "hidden" : 0, + "midpoints" : [ 351.0, 296.0, 351.5, 296.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 1 ], + "destination" : [ "obj-19", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-21", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-21", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 351.5, 416.5, 268.5, 416.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-19", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 373.5, 393.5, 268.5, 393.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-13", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 393.5, 365.5, 268.5, 365.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-1", 0 ], + "destination" : [ "obj-6", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-6", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 224.5, 411.5, 268.5, 411.5 ] + } + + } + ] + } + */ diff --git a/arduino-0017-linux-x64/examples/Communication/Graph/Graph.pde b/arduino-0017-linux-x64/examples/Communication/Graph/Graph.pde new file mode 100644 index 0000000..1f2fadd --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/Graph/Graph.pde @@ -0,0 +1,578 @@ +/* + Graph + + A simple example of communication from the Arduino board to the computer: + the value of analog input 0 is sent out the serial port. We call this "serial" + communication because the connection appears to both the Arduino and the + computer as a serial port, even though it may actually use + a USB cable. Bytes are sent one after another (serially) from the Arduino + to the computer. + + You can use the Arduino serial monitor to view the sent data, or it can + be read by Processing, PD, Max/MSP, or any other program capable of reading + data from a serial port. The Processing code below graphs the data received + so you can see the value of the analog input changing over time. + + The circuit: + Any analog input sensor is attached to analog in pin 0. + + http://www.arduino.cc/en/Tutorial/Graph + + created 2006 + by David A. Mellis + modified 14 Apr 2009 + by Tom Igoe and Scott Fitzgerald + + http://www.arduino.cc/en/Tutorial/Graph + */ + +void setup() { + // initialize the serial communication: + Serial.begin(9600); +} + +void loop() { + // send the value of analog input 0: + Serial.println(analogRead(0)); + // wait a bit for the analog-to-digital converter + // to stabilize after the last reading: + delay(10); +} + +/* Processing code for this example + + // Graphing sketch + + + // This program takes ASCII-encoded strings + // from the serial port at 9600 baud and graphs them. It expects values in the + // range 0 to 1023, followed by a newline, or newline and carriage return + + // Created 20 Apr 2005 + // Updated 18 Jan 2008 + // by Tom Igoe + + import processing.serial.*; + + Serial myPort; // The serial port + int xPos = 1; // horizontal position of the graph + + void setup () { + // set the window size: + size(400, 300); + + // List all the available serial ports + println(Serial.list()); + // I know that the first port in the serial list on my mac + // is always my Arduino, so I open Serial.list()[0]. + // Open whatever port is the one you're using. + myPort = new Serial(this, Serial.list()[0], 9600); + // don't generate a serialEvent() unless you get a newline character: + myPort.bufferUntil('\n'); + // set inital background: + background(0); + } + void draw () { + // everything happens in the serialEvent() + } + + void serialEvent (Serial myPort) { + // get the ASCII string: + String inString = myPort.readStringUntil('\n'); + + if (inString != null) { + // trim off any whitespace: + inString = trim(inString); + // convert to an int and map to the screen height: + float inByte = float(inString); + inByte = map(inByte, 0, 1023, 0, height); + + // draw the line: + stroke(127,34,255); + line(xPos, height, xPos, height - inByte); + + // at the edge of the screen, go back to the beginning: + if (xPos >= width) { + xPos = 0; + background(0); + } + else { + // increment the horizontal position: + xPos++; + } + } + } + + */ + +/* Max/MSP v5 patch for this example + { + "boxes" : [ { + "box" : { + "maxclass" : "comment", + "text" : "Graph\n\nThis patch takes a string, containing ASCII formatted number from 0 to 1023, with a carriage return and linefeed at the end. It converts the string to an integer and graphs it.\n\ncreated 2006\nby David A. Mellis\nmodified 14 Apr 2009\nby Scott Fitzgerald and Tom Igoe", + "linecount" : 10, + "patching_rect" : [ 479.0, 6.0, 344.0, 144.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-32", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "select 0 1", + "patching_rect" : [ 327.0, 80.0, 62.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-30", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to close the serial port", + "patching_rect" : [ 412.0, 231.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-26", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to open the serial port", + "patching_rect" : [ 412.0, 205.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-27", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "close", + "patching_rect" : [ 327.0, 231.0, 39.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-21", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "port a", + "patching_rect" : [ 349.0, 205.0, 41.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-19", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "multislider", + "candicane7" : [ 0.878431, 0.243137, 0.145098, 1.0 ], + "patching_rect" : [ 302.0, 450.0, 246.0, 167.0 ], + "contdata" : 1, + "numoutlets" : 2, + "peakcolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ], + "slidercolor" : [ 0.066667, 0.058824, 0.776471, 1.0 ], + "candicane8" : [ 0.027451, 0.447059, 0.501961, 1.0 ], + "outlettype" : [ "", "" ], + "setminmax" : [ 0.0, 1023.0 ], + "settype" : 0, + "candicane6" : [ 0.733333, 0.035294, 0.788235, 1.0 ], + "setstyle" : 3, + "bgcolor" : [ 0.231373, 0.713726, 1.0, 1.0 ], + "id" : "obj-1", + "candicane4" : [ 0.439216, 0.619608, 0.070588, 1.0 ], + "candicane5" : [ 0.584314, 0.827451, 0.431373, 1.0 ], + "candicane2" : [ 0.145098, 0.203922, 0.356863, 1.0 ], + "candicane3" : [ 0.290196, 0.411765, 0.713726, 1.0 ], + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click here to get a list of serial ports", + "patching_rect" : [ 412.0, 179.0, 207.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-2", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Here's the number from Arduino's analog input", + "linecount" : 2, + "patching_rect" : [ 153.0, 409.0, 138.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-3", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Convert ASCII to symbol", + "patching_rect" : [ 379.0, 378.0, 147.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-4", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Convert integer to ASCII", + "patching_rect" : [ 379.0, 355.0, 147.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-5", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 302.0, 414.0, 37.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "bang" ], + "bgcolor" : [ 0.866667, 0.866667, 0.866667, 1.0 ], + "id" : "obj-6", + "triscale" : 0.9, + "fontname" : "Arial", + "htextcolor" : [ 0.870588, 0.870588, 0.870588, 1.0 ], + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "fromsymbol", + "patching_rect" : [ 302.0, 378.0, 74.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-7", + "fontname" : "Arial", + "color" : [ 1.0, 0.890196, 0.090196, 1.0 ], + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "itoa", + "patching_rect" : [ 302.0, 355.0, 46.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-8", + "fontname" : "Arial", + "color" : [ 1.0, 0.890196, 0.090196, 1.0 ], + "numinlets" : 3 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "zl group 4", + "patching_rect" : [ 302.0, 332.0, 64.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "", "" ], + "id" : "obj-9", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "select 10 13", + "patching_rect" : [ 244.0, 281.0, 77.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-10", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 244.0, 43.0, 15.0, 15.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-11", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "qmetro 10", + "patching_rect" : [ 244.0, 80.0, 65.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "bang" ], + "id" : "obj-12", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "print", + "patching_rect" : [ 369.0, 179.0, 36.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-13", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "serial a 9600", + "patching_rect" : [ 244.0, 255.0, 84.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-14", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Read serial input buffer every 10 milliseconds", + "linecount" : 2, + "patching_rect" : [ 53.0, 72.0, 185.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-15", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "If you get newline (ASCII 10), send the list. If you get return (ASCII 13) do nothing. Any other value, add to the list", + "linecount" : 3, + "patching_rect" : [ 332.0, 269.0, 320.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-16", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click to open/close serial port and start/stop patch", + "linecount" : 2, + "patching_rect" : [ 271.0, 32.0, 199.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-17", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-6", 0 ], + "destination" : [ "obj-1", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-7", 0 ], + "destination" : [ "obj-6", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-8", 0 ], + "destination" : [ "obj-7", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-9", 0 ], + "destination" : [ "obj-8", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-10", 0 ], + "destination" : [ "obj-9", 0 ], + "hidden" : 0, + "midpoints" : [ 253.5, 308.0, 311.5, 308.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-10", 2 ], + "destination" : [ "obj-9", 0 ], + "hidden" : 0, + "midpoints" : [ 311.5, 320.0, 311.5, 320.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-14", 0 ], + "destination" : [ "obj-10", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-12", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-12", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-13", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 378.5, 200.5, 253.5, 200.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-19", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 358.5, 228.5, 253.5, 228.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-21", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 336.5, 251.5, 253.5, 251.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-21", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 1 ], + "destination" : [ "obj-19", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-30", 0 ], + "hidden" : 0, + "midpoints" : [ 253.0, 71.0, 336.5, 71.0 ] + } + + } + ] + } + + */ diff --git a/arduino-0017-linux-x64/examples/Communication/MIDI/Midi.pde b/arduino-0017-linux-x64/examples/Communication/MIDI/Midi.pde new file mode 100644 index 0000000..feb3e82 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/MIDI/Midi.pde @@ -0,0 +1,47 @@ +/* + MIDI note player + + This sketch shows how to use the serial transmit pin (pin 1) to send MIDI note data. + If this circuit is connected to a MIDI synth, it will play + the notes F#-0 (0x1E) to F#-5 (0x5A) in sequence. + + + The circuit: + * digital in 1 connected to MIDI jack pin 5 + * MIDI jack pin 2 connected to ground + * MIDI jack pin 4 connected to +5V through 220-ohm resistor + Attach a MIDI cable to the jack, then to a MIDI synth, and play music. + + created 13 Jun 2006 + modified 2 Jul 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/MIDI + + */ + +void setup() { + // Set MIDI baud rate: + Serial.begin(31250); +} + +void loop() { + // play notes from F#-0 (0x1E) to F#-5 (0x5A): + for (intnote = 0x1E; note < 0x5A; note ++) { + //Note on channel 1 (0x90), some note value (note), middle velocity (0x45): + noteOn(0x90, note, 0x45); + delay(100); + //Note on channel 1 (0x90), some note value (note), silent velocity (0x00): + noteOn(0x90, note, 0x00); + delay(100); + } +} + +// plays a MIDI note. Doesn't check to see that +// cmd is greater than 127, or that data values are less than 127: +void noteOn(int cmd, int pitch, int velocity) { + Serial.print(cmd, BYTE); + Serial.print(pitch, BYTE); + Serial.print(velocity, BYTE); +} + diff --git a/arduino-0017-linux-x64/examples/Communication/MultiSerialMega/MultiSerialMega.pde b/arduino-0017-linux-x64/examples/Communication/MultiSerialMega/MultiSerialMega.pde new file mode 100644 index 0000000..f587c63 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/MultiSerialMega/MultiSerialMega.pde @@ -0,0 +1,31 @@ +/* + Mega multple serial test + + Receives from the main serial port, sends to the others. + Receives from serial port 1, sends to the main serial (Serial 0). + + This example works only on the Arduino Mega + + The circuit: + * Any serial device attached to Serial port 1 + * Serial monitor open on Serial port 0: + + created 30 Dec. 2008 + by Tom Igoe + + */ + + +void setup() { + // initialize both serial ports: + Serial.begin(9600); + Serial1.begin(9600); +} + +void loop() { + // read from port 1, send to port 0: + if (Serial1.available()) { + int inByte = Serial1.read(); + Serial.print(inByte, BYTE); + } +} diff --git a/arduino-0017-linux-x64/examples/Communication/PhysicalPixel/PhysicalPixel.pde b/arduino-0017-linux-x64/examples/Communication/PhysicalPixel/PhysicalPixel.pde new file mode 100644 index 0000000..b5006ec --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/PhysicalPixel/PhysicalPixel.pde @@ -0,0 +1,707 @@ +/* + Physical Pixel + + An example of using the Arduino board to receive data from the + computer. In this case, the Arduino boards turns on an LED when + it receives the character 'H', and turns off the LED when it + receives the character 'L'. + + The data can be sent from the Arduino serial monitor, or another + program like Processing (see code below), Flash (via a serial-net + proxy), PD, or Max/MSP. + + The circuit: + * LED connected from digital pin 13 to ground + + created 2006 + by David A. Mellis + modified 14 Apr 2009 + by Tom Igoe and Scott Fitzgerald + + http://www.arduino.cc/en/Tutorial/PhysicalPixel + */ + +const int ledPin = 13; // the pin that the LED is attached to +int incomingByte; // a variable to read incoming serial data into + +void setup() { + // initialize serial communication: + Serial.begin(9600); + // initialize the LED pin as an output: + pinMode(ledPin, OUTPUT); +} + +void loop() { + // see if there's incoming serial data: + if (Serial.available() > 0) { + // read the oldest byte in the serial buffer: + incomingByte = Serial.read(); + // if it's a capital H (ASCII 72), turn on the LED: + if (incomingByte == 'H') { + digitalWrite(ledPin, HIGH); + } + // if it's an L (ASCII 76) turn off the LED: + if (incomingByte == 'L') { + digitalWrite(ledPin, LOW); + } + } +} + +/* Processing code for this example + + // mouseover serial + + // Demonstrates how to send data to the Arduino I/O board, in order to + // turn ON a light if the mouse is over a square and turn it off + // if the mouse is not. + + // created 2003-4 + // based on examples by Casey Reas and Hernando Barragan + // modified 18 Jan 2009 + // by Tom Igoe + + + import processing.serial.*; + + float boxX; + float boxY; + int boxSize = 20; + boolean mouseOverBox = false; + + Serial port; + + void setup() { + size(200, 200); + boxX = width/2.0; + boxY = height/2.0; + rectMode(RADIUS); + + // List all the available serial ports in the output pane. + // You will need to choose the port that the Arduino board is + // connected to from this list. The first port in the list is + // port #0 and the third port in the list is port #2. + println(Serial.list()); + + // Open the port that the Arduino board is connected to (in this case #0) + // Make sure to open the port at the same speed Arduino is using (9600bps) + port = new Serial(this, Serial.list()[0], 9600); + + } + + void draw() + { + background(0); + + // Test if the cursor is over the box + if (mouseX > boxX-boxSize && mouseX < boxX+boxSize && + mouseY > boxY-boxSize && mouseY < boxY+boxSize) { + mouseOverBox = true; + // draw a line around the box and change its color: + stroke(255); + fill(153); + // send an 'H' to indicate mouse is over square: + port.write('H'); + } + else { + // return the box to it's inactive state: + stroke(153); + fill(153); + // send an 'L' to turn the LED off: + port.write('L'); + mouseOverBox = false; + } + + // Draw the box + rect(boxX, boxY, boxSize, boxSize); + } + + + */ + +/* +{ + "boxes" : [ { + "box" : { + "maxclass" : "comment", + "text" : "Physical Pixel\n\nThis patch sends an ASCII H or an ASCII L out the serial port to turn on an LED attached to an Arduino board. It can also send alternating H and L characters once every second to make the LED blink.\n\ncreated 2006\nby David A. Mellis\nmodified 14 Apr 2009\nby Scott Fitzgerald and Tom Igoe", + "linecount" : 11, + "patching_rect" : [ 14.0, 35.0, 354.0, 158.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-1", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click to blink every second", + "patching_rect" : [ 99.0, 251.0, 161.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-38", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 74.0, 251.0, 21.0, 21.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-39", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "p blink", + "patching_rect" : [ 74.0, 286.0, 45.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-37", + "fontname" : "Arial", + "numinlets" : 2, + "patcher" : { + "fileversion" : 1, + "rect" : [ 54.0, 94.0, 640.0, 480.0 ], + "bglocked" : 0, + "defrect" : [ 54.0, 94.0, 640.0, 480.0 ], + "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], + "openinpresentation" : 0, + "default_fontsize" : 10.0, + "default_fontface" : 0, + "default_fontname" : "Verdana", + "gridonopen" : 0, + "gridsize" : [ 25.0, 25.0 ], + "gridsnaponopen" : 0, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "boxes" : [ { + "box" : { + "maxclass" : "newobj", + "text" : "* 1000", + "patching_rect" : [ 200.0, 150.0, 46.0, 19.0 ], + "numoutlets" : 1, + "fontsize" : 10.0, + "outlettype" : [ "int" ], + "id" : "obj-12", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 200.0, 75.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "" ], + "id" : "obj-11", + "numinlets" : 0, + "comment" : "" + } + + } + , { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 125.0, 250.0, 20.0, 20.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-10", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "metro 1000", + "patching_rect" : [ 115.0, 190.0, 69.0, 19.0 ], + "numoutlets" : 1, + "fontsize" : 10.0, + "outlettype" : [ "bang" ], + "id" : "obj-3", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "outlet", + "patching_rect" : [ 125.0, 400.0, 25.0, 25.0 ], + "numoutlets" : 0, + "id" : "obj-2", + "numinlets" : 1, + "comment" : "" + } + + } + , { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 100.0, 25.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-1", + "numinlets" : 0, + "comment" : "" + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-12", 0 ], + "destination" : [ "obj-3", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-12", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-1", 0 ], + "destination" : [ "obj-3", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-10", 0 ], + "destination" : [ "obj-2", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-3", 0 ], + "destination" : [ "obj-10", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + ] + } + , + "saved_object_attributes" : { + "fontface" : 0, + "fontsize" : 10.0, + "default_fontface" : 0, + "default_fontname" : "Verdana", + "default_fontsize" : 10.0, + "fontname" : "Verdana", + "globalpatchername" : "" + } + + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "convert to int", + "patching_rect" : [ 154.0, 386.0, 104.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-36", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "send L if 0, H if 1", + "patching_rect" : [ 154.0, 361.0, 104.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-35", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "is it on or off?", + "patching_rect" : [ 179.0, 336.0, 95.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-34", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "atoi", + "patching_rect" : [ 279.0, 386.0, 46.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "list" ], + "id" : "obj-33", + "fontname" : "Arial", + "numinlets" : 3 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "H", + "patching_rect" : [ 329.0, 361.0, 32.5, 17.0 ], + "numoutlets" : 1, + "fontsize" : 10.0, + "outlettype" : [ "" ], + "id" : "obj-32", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "L", + "patching_rect" : [ 279.0, 361.0, 32.5, 17.0 ], + "numoutlets" : 1, + "fontsize" : 10.0, + "outlettype" : [ "" ], + "id" : "obj-31", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "select 0 1", + "patching_rect" : [ 279.0, 336.0, 62.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-25", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click to turn the LED on and off", + "linecount" : 2, + "patching_rect" : [ 130.0, 205.0, 143.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-24", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 279.0, 211.0, 24.0, 24.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-23", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "select 0 1", + "patching_rect" : [ 381.0, 331.0, 62.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-30", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to close the serial port", + "patching_rect" : [ 429.0, 422.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-26", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to open the serial port", + "patching_rect" : [ 454.0, 396.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-27", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "close", + "patching_rect" : [ 381.0, 422.0, 39.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-21", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "port a", + "patching_rect" : [ 403.0, 396.0, 41.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-19", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click here to get a list of serial ports", + "patching_rect" : [ 474.0, 370.0, 207.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-2", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 381.0, 181.0, 21.0, 21.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-11", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "print", + "patching_rect" : [ 423.0, 370.0, 36.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-13", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "serial a 9600", + "patching_rect" : [ 279.0, 461.0, 84.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-14", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click to start", + "patching_rect" : [ 408.0, 181.0, 117.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-17", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-39", 0 ], + "destination" : [ "obj-37", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-37", 0 ], + "destination" : [ "obj-25", 0 ], + "hidden" : 0, + "midpoints" : [ 83.5, 320.5, 288.5, 320.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-33", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-32", 0 ], + "destination" : [ "obj-33", 0 ], + "hidden" : 0, + "midpoints" : [ 338.5, 381.5, 288.5, 381.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-31", 0 ], + "destination" : [ "obj-33", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-25", 0 ], + "destination" : [ "obj-31", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-25", 1 ], + "destination" : [ "obj-32", 0 ], + "hidden" : 0, + "midpoints" : [ 310.0, 358.0, 338.5, 358.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-23", 0 ], + "destination" : [ "obj-25", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-13", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 432.5, 389.0, 367.0, 389.0, 367.0, 411.0, 288.5, 411.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-19", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 412.5, 417.0, 288.5, 417.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-21", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 390.5, 450.0, 288.5, 450.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-21", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 1 ], + "destination" : [ "obj-19", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-30", 0 ], + "hidden" : 0, + "midpoints" : [ 390.5, 322.0, 390.5, 322.0 ] + } + + } + ] + } + + */ diff --git a/arduino-0017-linux-x64/examples/Communication/SerialCallResponse/SerialCallResponse.pde b/arduino-0017-linux-x64/examples/Communication/SerialCallResponse/SerialCallResponse.pde new file mode 100644 index 0000000..809bbf8 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/SerialCallResponse/SerialCallResponse.pde @@ -0,0 +1,1193 @@ +/* + Serial Call and Response + Language: Wiring/Arduino + + This program sends an ASCII A (byte of value 65) on startup + and repeats that until it gets some data in. + Then it waits for a byte in the serial port, and + sends three sensor values whenever it gets a byte in. + + Thanks to Greg Shakar and Scott Fitzgerald for the improvements + + The circuit: + * potentiometers attached to analog inputs 0 and 1 + * pushbutton attached to digital I/O 2 + + + http://www.arduino.cc/en/Tutorial/SerialCallResponse + + Created 26 Sept. 2005 + by Tom Igoe + Modified 14 April 2009 + by Tom Igoe and Scott Fitzgerald + */ + +int firstSensor = 0; // first analog sensor +int secondSensor = 0; // second analog sensor +int thirdSensor = 0; // digital sensor +int inByte = 0; // incoming serial byte + +void setup() +{ + // start serial port at 9600 bps: + Serial.begin(9600); + pinMode(2, INPUT); // digital sensor is on digital pin 2 + establishContact(); // send a byte to establish contact until receiver responds +} + +void loop() +{ + // if we get a valid byte, read analog ins: + if (Serial.available() > 0) { + // get incoming byte: + inByte = Serial.read(); + // read first analog input, divide by 4 to make the range 0-255: + firstSensor = analogRead(0)/4; + // delay 10ms to let the ADC recover: + delay(10); + // read second analog input, divide by 4 to make the range 0-255: + secondSensor = analogRead(1)/4; + // read switch, map it to 0 or 255L + thirdSensor = map(digitalRead(2), 0, 1, 0, 255); + // send sensor values: + Serial.print(firstSensor, BYTE); + Serial.print(secondSensor, BYTE); + Serial.print(thirdSensor, BYTE); + } +} + +void establishContact() { + while (Serial.available() <= 0) { + Serial.print('A', BYTE); // send a capital A + delay(300); + } +} + +/* +Processing sketch to run with this example: + +import processing.serial.*; + +int bgcolor; // Background color +int fgcolor; // Fill color +Serial myPort; // The serial port +int[] serialInArray = new int[3]; // Where we'll put what we receive +int serialCount = 0; // A count of how many bytes we receive +int xpos, ypos; // Starting position of the ball +boolean firstContact = false; // Whether we've heard from the microcontroller + +void setup() { + size(256, 256); // Stage size + noStroke(); // No border on the next thing drawn + + // Set the starting position of the ball (middle of the stage) + xpos = width/2; + ypos = height/2; + + // Print a list of the serial ports, for debugging purposes: + println(Serial.list()); + + // I know that the first port in the serial list on my mac + // is always my FTDI adaptor, so I open Serial.list()[0]. + // On Windows machines, this generally opens COM1. + // Open whatever port is the one you're using. + String portName = Serial.list()[0]; + myPort = new Serial(this, portName, 9600); +} + +void draw() { + background(bgcolor); + fill(fgcolor); + // Draw the shape + ellipse(xpos, ypos, 20, 20); +} + +void serialEvent(Serial myPort) { + // read a byte from the serial port: + int inByte = myPort.read(); + // if this is the first byte received, and it's an A, + // clear the serial buffer and note that you've + // had first contact from the microcontroller. + // Otherwise, add the incoming byte to the array: + if (firstContact == false) { + if (inByte == 'A') { + myPort.clear(); // clear the serial port buffer + firstContact = true; // you've had first contact from the microcontroller + myPort.write('A'); // ask for more + } + } + else { + // Add the latest byte from the serial port to array: + serialInArray[serialCount] = inByte; + serialCount++; + + // If we have 3 bytes: + if (serialCount > 2 ) { + xpos = serialInArray[0]; + ypos = serialInArray[1]; + fgcolor = serialInArray[2]; + + // print the values (for debugging purposes only): + println(xpos + "\t" + ypos + "\t" + fgcolor); + + // Send a capital A to request new sensor readings: + myPort.write('A'); + // Reset serialCount: + serialCount = 0; + } + } +} +*/ + +/* +Max/MSP version 5 patch to run with this example: + +{ + "boxes" : [ { + "box" : { + "maxclass" : "message", + "text" : "65", + "patching_rect" : [ 339.0, 466.0, 32.5, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-9", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "sel 1", + "patching_rect" : [ 339.0, 437.0, 36.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "bang", "" ], + "id" : "obj-6", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Serial Call-Response \n\nSends a byte out the serial port, and reads 3 bytes in. Sets foregound color, xpos, and ypos of a circle using the values returned from the serial port. \n\nNote: This patch assumes that the device on the other end of the serial port is going to send a single byte of value 65 (ASCII A) on startup. The sketch waits for that byte, then sends an ASCII A whenever it wants more data. \n\ncreated 14 Apr 2009\nby Scott Fitzgerald and Tom Igoe", + "linecount" : 11, + "patching_rect" : [ 404.0, 52.0, 464.0, 158.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-5", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "trigger (or [t]) forces right-left conventions. All the drawing and processing will happen before Max requests new values. When this trigger fires, it sends an ASCII A to ask Arduino for new values.", + "linecount" : 3, + "patching_rect" : [ 239.0, 505.0, 425.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-65", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "reinitializes the gates when turned on and off", + "linecount" : 2, + "patching_rect" : [ 170.0, 370.0, 135.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-64", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "checks for the ascii value of \"A\" to begin cominucation. After initial communication is made, this block shuts down.", + "linecount" : 3, + "patching_rect" : [ 460.0, 355.0, 233.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-63", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "p \"draw the circle\"", + "patching_rect" : [ 217.0, 645.0, 269.0, 19.0 ], + "numoutlets" : 1, + "fontsize" : 10.0, + "outlettype" : [ "" ], + "id" : "obj-62", + "fontname" : "Verdana", + "numinlets" : 3, + "patcher" : { + "fileversion" : 1, + "rect" : [ 54.0, 94.0, 640.0, 480.0 ], + "bglocked" : 0, + "defrect" : [ 54.0, 94.0, 640.0, 480.0 ], + "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], + "openinpresentation" : 0, + "default_fontsize" : 10.0, + "default_fontface" : 0, + "default_fontname" : "Verdana", + "gridonopen" : 0, + "gridsize" : [ 25.0, 25.0 ], + "gridsnaponopen" : 0, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "boxes" : [ { + "box" : { + "maxclass" : "message", + "text" : "frgb 255 255 255", + "patching_rect" : [ 375.0, 150.0, 98.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 11.595187, + "outlettype" : [ "" ], + "id" : "obj-47", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "frgb 0 0 0", + "patching_rect" : [ 275.0, 125.0, 59.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 11.595187, + "outlettype" : [ "" ], + "id" : "obj-46", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "sel 255 0", + "patching_rect" : [ 300.0, 100.0, 66.0, 21.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-45", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "pack 0 0 0 0", + "patching_rect" : [ 50.0, 125.0, 180.0, 21.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-43", + "fontname" : "Verdana", + "numinlets" : 4 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "+ 10", + "patching_rect" : [ 200.0, 100.0, 40.0, 21.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-42", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "+ 10", + "patching_rect" : [ 75.0, 100.0, 40.0, 21.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-41", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "clear, paintoval $1 $2 $3 $4", + "patching_rect" : [ 50.0, 150.0, 152.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 11.595187, + "outlettype" : [ "" ], + "id" : "obj-40", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 57.5, 40.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-58", + "numinlets" : 0, + "comment" : "" + } + + } +, { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 120.0, 40.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-59", + "numinlets" : 0, + "comment" : "" + } + + } +, { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 300.0, 40.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-60", + "numinlets" : 0, + "comment" : "" + } + + } +, { + "box" : { + "maxclass" : "outlet", + "patching_rect" : [ 228.333344, 228.0, 25.0, 25.0 ], + "numoutlets" : 0, + "id" : "obj-61", + "numinlets" : 1, + "comment" : "" + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-47", 0 ], + "destination" : [ "obj-61", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-46", 0 ], + "destination" : [ "obj-61", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-40", 0 ], + "destination" : [ "obj-61", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-60", 0 ], + "destination" : [ "obj-45", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-59", 0 ], + "destination" : [ "obj-42", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-59", 0 ], + "destination" : [ "obj-43", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-58", 0 ], + "destination" : [ "obj-41", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-58", 0 ], + "destination" : [ "obj-43", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-42", 0 ], + "destination" : [ "obj-43", 3 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-41", 0 ], + "destination" : [ "obj-43", 2 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-45", 1 ], + "destination" : [ "obj-47", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-45", 0 ], + "destination" : [ "obj-46", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-43", 0 ], + "destination" : [ "obj-40", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + ] + } +, + "saved_object_attributes" : { + "fontface" : 0, + "fontsize" : 10.0, + "default_fontface" : 0, + "default_fontname" : "Verdana", + "default_fontsize" : 10.0, + "fontname" : "Verdana", + "globalpatchername" : "" + } + + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "0", + "patching_rect" : [ 310.0, 378.0, 32.5, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-57", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "!- 1", + "patching_rect" : [ 385.0, 436.0, 32.5, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-55", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "gate 1 1", + "patching_rect" : [ 385.0, 355.0, 54.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-54", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 385.0, 405.0, 20.0, 20.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-53", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "gate 1 0", + "patching_rect" : [ 194.0, 455.0, 54.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-50", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "sel 65", + "patching_rect" : [ 385.0, 380.0, 43.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "bang", "" ], + "id" : "obj-48", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "lcd", + "patching_rect" : [ 217.0, 695.0, 256.0, 256.0 ], + "numoutlets" : 4, + "outlettype" : [ "list", "list", "int", "" ], + "id" : "obj-39", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "t 65 l", + "patching_rect" : [ 194.0, 504.0, 42.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-35", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "val3", + "patching_rect" : [ 535.0, 604.0, 37.0, 21.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-1", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 467.0, 604.0, 56.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-3", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "val2", + "patching_rect" : [ 410.0, 605.0, 37.0, 21.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-18", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "val1", + "patching_rect" : [ 282.0, 605.0, 37.0, 21.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-20", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 342.0, 605.0, 56.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-22", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 217.0, 605.0, 55.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-23", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "unpack 0 0 0", + "patching_rect" : [ 217.0, 570.0, 269.0, 21.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "int", "int", "int" ], + "id" : "obj-29", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "zl group 3", + "patching_rect" : [ 194.0, 480.0, 71.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "", "" ], + "id" : "obj-31", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "select 0 1", + "patching_rect" : [ 312.0, 200.0, 62.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-30", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "click here to close the serial port", + "patching_rect" : [ 360.0, 291.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-26", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "click here to open the serial port", + "patching_rect" : [ 385.0, 265.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-27", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "close", + "patching_rect" : [ 312.0, 291.0, 39.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-21", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "port a", + "patching_rect" : [ 334.0, 265.0, 41.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-19", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Click here to get a list of serial ports", + "patching_rect" : [ 405.0, 239.0, 207.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-2", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 229.0, 155.0, 22.0, 22.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-11", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "qmetro 10", + "patching_rect" : [ 229.0, 200.0, 65.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "bang" ], + "id" : "obj-12", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "print", + "patching_rect" : [ 354.0, 239.0, 36.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-13", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "serial a 9600", + "patching_rect" : [ 229.0, 315.0, 84.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-14", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Read serial input buffer every 10 milliseconds", + "linecount" : 2, + "patching_rect" : [ 13.0, 192.0, 210.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-15", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Click to start", + "patching_rect" : [ 256.0, 163.0, 117.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-17", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-12", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-12", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-13", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 363.5, 260.5, 238.5, 260.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-19", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 343.5, 288.5, 238.5, 288.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-21", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 321.5, 311.5, 238.5, 311.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-21", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-30", 1 ], + "destination" : [ "obj-19", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-30", 0 ], + "hidden" : 0, + "midpoints" : [ 238.5, 191.0, 321.5, 191.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-29", 2 ], + "destination" : [ "obj-3", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-29", 0 ], + "destination" : [ "obj-23", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-29", 1 ], + "destination" : [ "obj-22", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-14", 0 ], + "destination" : [ "obj-50", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-50", 0 ], + "destination" : [ "obj-31", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-48", 0 ], + "destination" : [ "obj-53", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-53", 0 ], + "destination" : [ "obj-50", 0 ], + "hidden" : 0, + "midpoints" : [ 394.5, 426.0, 203.5, 426.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-14", 0 ], + "destination" : [ "obj-54", 1 ], + "hidden" : 0, + "midpoints" : [ 238.5, 342.0, 429.5, 342.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-54", 0 ], + "destination" : [ "obj-48", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-62", 0 ], + "destination" : [ "obj-39", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-3", 0 ], + "destination" : [ "obj-62", 2 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-22", 0 ], + "destination" : [ "obj-62", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-23", 0 ], + "destination" : [ "obj-62", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-53", 0 ], + "destination" : [ "obj-55", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-55", 0 ], + "destination" : [ "obj-54", 0 ], + "hidden" : 0, + "midpoints" : [ 394.5, 459.0, 453.0, 459.0, 453.0, 351.0, 394.5, 351.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-57", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-57", 0 ], + "destination" : [ "obj-53", 0 ], + "hidden" : 0, + "midpoints" : [ 319.5, 401.0, 394.5, 401.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-35", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 203.5, 542.0, 167.0, 542.0, 167.0, 300.0, 238.5, 300.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-35", 1 ], + "destination" : [ "obj-29", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-31", 0 ], + "destination" : [ "obj-35", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-6", 0 ], + "destination" : [ "obj-9", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-53", 0 ], + "destination" : [ "obj-6", 0 ], + "hidden" : 0, + "midpoints" : [ 394.5, 431.5, 348.5, 431.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-9", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + ] +} + + +*/ diff --git a/arduino-0017-linux-x64/examples/Communication/SerialCallResponseASCII/SerialCallResponseASCII.pde b/arduino-0017-linux-x64/examples/Communication/SerialCallResponseASCII/SerialCallResponseASCII.pde new file mode 100644 index 0000000..7c2528d --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/SerialCallResponseASCII/SerialCallResponseASCII.pde @@ -0,0 +1,1267 @@ +/* + Serial Call and Response in ASCII + Language: Wiring/Arduino + + This program sends an ASCII A (byte of value 65) on startup + and repeats that until it gets some data in. + Then it waits for a byte in the serial port, and + sends three ASCII-encoded, comma-separated sensor values, + truncated by a linefeed and carriage return, + whenever it gets a byte in. + + Thanks to Greg Shakar and Scott Fitzgerald for the improvements + + The circuit: + * potentiometers attached to analog inputs 0 and 1 + * pushbutton attached to digital I/O 2 + + + http://www.arduino.cc/en/Tutorial/SerialCallResponseASCII + + Created 26 Sept. 2005 + by Tom Igoe + Modified 14 April 2009 + by Tom Igoe and Scott Fitzgerald + */ + +int firstSensor = 0; // first analog sensor +int secondSensor = 0; // second analog sensor +int thirdSensor = 0; // digital sensor +int inByte = 0; // incoming serial byte + +void setup() +{ + // start serial port at 9600 bps: + Serial.begin(9600); + pinMode(2, INPUT); // digital sensor is on digital pin 2 + establishContact(); // send a byte to establish contact until receiver responds +} + +void loop() +{ + // if we get a valid byte, read analog ins: + if (Serial.available() > 0) { + // get incoming byte: + inByte = Serial.read(); + // read first analog input, divide by 4 to make the range 0-255: + firstSensor = analogRead(0)/4; + // delay 10ms to let the ADC recover: + delay(10); + // read second analog input, divide by 4 to make the range 0-255: + secondSensor = analogRead(1)/4; + // read switch, map it to 0 or 255L + thirdSensor = map(digitalRead(2), 0, 1, 0, 255); + // send sensor values: + Serial.print(firstSensor, DEC); + Serial.print(","); + Serial.print(secondSensor, DEC); + Serial.print(","); + Serial.println(thirdSensor, DEC); + } +} + +void establishContact() { + while (Serial.available() <= 0) { + Serial.println("0,0,0"); // send an initial string + delay(300); + } +} + + +/* +Processing code to run with this example: + + +import processing.serial.*; // import the Processing serial library +Serial myPort; // The serial port + +float bgcolor; // Background color +float fgcolor; // Fill color +float xpos, ypos; // Starting position of the ball + +void setup() { + size(640,480); + + // List all the available serial ports + println(Serial.list()); + + // I know that the first port in the serial list on my mac + // is always my Arduino module, so I open Serial.list()[0]. + // Change the 0 to the appropriate number of the serial port + // that your microcontroller is attached to. + myPort = new Serial(this, Serial.list()[0], 9600); + + // read bytes into a buffer until you get a linefeed (ASCII 10): + myPort.bufferUntil('\n'); + + // draw with smooth edges: + smooth(); +} + +void draw() { + background(bgcolor); + fill(fgcolor); + // Draw the shape + ellipse(xpos, ypos, 20, 20); +} + +// serialEvent method is run automatically by the Processing applet +// whenever the buffer reaches the byte value set in the bufferUntil() +// method in the setup(): + +void serialEvent(Serial myPort) { + // read the serial buffer: + String myString = myPort.readStringUntil('\n'); + // if you got any bytes other than the linefeed: + myString = trim(myString); + + // split the string at the commas + // and convert the sections into integers: + int sensors[] = int(split(myString, ',')); + + // print out the values you got: + for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) { + print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t"); + } + // add a linefeed after all the sensor values are printed: + println(); + if (sensors.length > 1) { + xpos = map(sensors[0], 0,1023,0,width); + ypos = map(sensors[1], 0,1023,0,height); + fgcolor = sensors[2]; + } + // send a byte to ask for more data: + myPort.write("A"); + } + +*/ + +/* +{ + "boxes" : [ { + "box" : { + "maxclass" : "newobj", + "text" : "fromsymbol", + "patching_rect" : [ 265.0, 585.0, 74.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-7", + "fontname" : "Arial", + "color" : [ 1.0, 0.890196, 0.090196, 1.0 ], + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "itoa", + "patching_rect" : [ 265.0, 562.0, 46.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-8", + "fontname" : "Arial", + "color" : [ 1.0, 0.890196, 0.090196, 1.0 ], + "numinlets" : 3 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "zl group", + "patching_rect" : [ 265.0, 539.0, 53.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "", "" ], + "id" : "obj-4", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "select 10 13", + "patching_rect" : [ 209.0, 501.0, 75.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-10", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "65", + "patching_rect" : [ 354.0, 481.0, 32.5, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-9", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "sel 1", + "patching_rect" : [ 354.0, 452.0, 36.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "bang", "" ], + "id" : "obj-6", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Serial Call-Response ASCII \n\nSends a byte out the serial port, and reads 3 ASCII enoded, comma separated in, truncated by a linefeed. It then sets foregound color, xpos, and ypos of a circle using the values returned from the serial port. \n\nNote: This patch assumes that the device on the other end of the serial port is going to send a single byte of value 65 (ASCII A) on startup. The sketch waits for that byte, then sends an ASCII A whenever it wants more data. \n\ncreated 14 Apr 2009\nby Scott Fitzgerald and Tom Igoe", + "linecount" : 12, + "patching_rect" : [ 401.0, 67.0, 540.0, 172.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-5", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "trigger (or [t]) forces right-left conventions. All the drawing and processing will happen before Max requests new values. When this trigger fires, it sends an ASCII A to ask Arduino for new values.", + "linecount" : 3, + "patching_rect" : [ 254.0, 625.0, 425.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-65", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "reinitializes the gates when turned on and off", + "linecount" : 2, + "patching_rect" : [ 185.0, 385.0, 135.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-64", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "checks for the ascii value of newline to begin communication. After initial communication is made, this block shuts down.", + "linecount" : 3, + "patching_rect" : [ 475.0, 370.0, 252.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-63", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "p \"draw the circle\"", + "patching_rect" : [ 232.0, 765.0, 269.0, 19.0 ], + "numoutlets" : 1, + "fontsize" : 10.0, + "outlettype" : [ "" ], + "id" : "obj-62", + "fontname" : "Verdana", + "numinlets" : 3, + "patcher" : { + "fileversion" : 1, + "rect" : [ 54.0, 94.0, 640.0, 480.0 ], + "bglocked" : 0, + "defrect" : [ 54.0, 94.0, 640.0, 480.0 ], + "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], + "openinpresentation" : 0, + "default_fontsize" : 10.0, + "default_fontface" : 0, + "default_fontname" : "Verdana", + "gridonopen" : 0, + "gridsize" : [ 25.0, 25.0 ], + "gridsnaponopen" : 0, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "boxes" : [ { + "box" : { + "maxclass" : "message", + "text" : "frgb 255 255 255", + "patching_rect" : [ 375.0, 150.0, 98.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 11.595187, + "outlettype" : [ "" ], + "id" : "obj-47", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "frgb 0 0 0", + "patching_rect" : [ 275.0, 125.0, 59.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 11.595187, + "outlettype" : [ "" ], + "id" : "obj-46", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "sel 255 0", + "patching_rect" : [ 300.0, 100.0, 66.0, 21.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-45", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "pack 0 0 0 0", + "patching_rect" : [ 50.0, 125.0, 180.0, 21.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-43", + "fontname" : "Verdana", + "numinlets" : 4 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "+ 10", + "patching_rect" : [ 200.0, 100.0, 40.0, 21.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-42", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "+ 10", + "patching_rect" : [ 75.0, 100.0, 40.0, 21.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-41", + "fontname" : "Verdana", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "clear, paintoval $1 $2 $3 $4", + "patching_rect" : [ 50.0, 150.0, 152.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 11.595187, + "outlettype" : [ "" ], + "id" : "obj-40", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 57.5, 40.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-58", + "numinlets" : 0, + "comment" : "" + } + + } +, { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 120.0, 40.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-59", + "numinlets" : 0, + "comment" : "" + } + + } +, { + "box" : { + "maxclass" : "inlet", + "patching_rect" : [ 300.0, 40.0, 25.0, 25.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-60", + "numinlets" : 0, + "comment" : "" + } + + } +, { + "box" : { + "maxclass" : "outlet", + "patching_rect" : [ 228.333344, 228.0, 25.0, 25.0 ], + "numoutlets" : 0, + "id" : "obj-61", + "numinlets" : 1, + "comment" : "" + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-43", 0 ], + "destination" : [ "obj-40", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-45", 0 ], + "destination" : [ "obj-46", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-45", 1 ], + "destination" : [ "obj-47", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-41", 0 ], + "destination" : [ "obj-43", 2 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-42", 0 ], + "destination" : [ "obj-43", 3 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-58", 0 ], + "destination" : [ "obj-43", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-58", 0 ], + "destination" : [ "obj-41", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-59", 0 ], + "destination" : [ "obj-43", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-59", 0 ], + "destination" : [ "obj-42", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-60", 0 ], + "destination" : [ "obj-45", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-40", 0 ], + "destination" : [ "obj-61", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-46", 0 ], + "destination" : [ "obj-61", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-47", 0 ], + "destination" : [ "obj-61", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + ] + } +, + "saved_object_attributes" : { + "fontface" : 0, + "fontsize" : 10.0, + "default_fontface" : 0, + "default_fontname" : "Verdana", + "default_fontsize" : 10.0, + "fontname" : "Verdana", + "globalpatchername" : "" + } + + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "0", + "patching_rect" : [ 325.0, 393.0, 32.5, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-57", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "!- 1", + "patching_rect" : [ 400.0, 451.0, 32.5, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-55", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "gate 1 1", + "patching_rect" : [ 400.0, 370.0, 54.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-54", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 400.0, 420.0, 20.0, 20.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-53", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "gate 1 0", + "patching_rect" : [ 209.0, 470.0, 54.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-50", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "sel 10", + "patching_rect" : [ 400.0, 393.0, 43.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "bang", "" ], + "id" : "obj-48", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "lcd", + "patching_rect" : [ 232.0, 815.0, 256.0, 256.0 ], + "numoutlets" : 4, + "outlettype" : [ "list", "list", "int", "" ], + "id" : "obj-39", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "t 65 l", + "patching_rect" : [ 209.0, 624.0, 42.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-35", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "val3", + "patching_rect" : [ 553.0, 725.0, 37.0, 21.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-1", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 482.0, 725.0, 56.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-3", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "val2", + "patching_rect" : [ 425.0, 725.0, 37.0, 21.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-18", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "val1", + "patching_rect" : [ 297.0, 725.0, 37.0, 21.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-20", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 357.0, 725.0, 56.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-22", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 232.0, 725.0, 55.0, 21.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-23", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "unpack 0 0 0 0 0", + "patching_rect" : [ 232.0, 690.0, 269.0, 21.0 ], + "numoutlets" : 5, + "fontsize" : 12.0, + "outlettype" : [ "int", "int", "int", "int", "int" ], + "id" : "obj-29", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "select 0 1", + "patching_rect" : [ 327.0, 215.0, 62.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-30", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "click here to close the serial port", + "patching_rect" : [ 375.0, 306.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-26", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "click here to open the serial port", + "patching_rect" : [ 400.0, 280.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-27", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "close", + "patching_rect" : [ 327.0, 306.0, 39.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-21", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "port a", + "patching_rect" : [ 349.0, 280.0, 41.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-19", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Click here to get a list of serial ports", + "patching_rect" : [ 420.0, 254.0, 207.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-2", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 244.0, 170.0, 22.0, 22.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-11", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "qmetro 10", + "patching_rect" : [ 244.0, 215.0, 65.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "bang" ], + "id" : "obj-12", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "message", + "text" : "print", + "patching_rect" : [ 369.0, 254.0, 36.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-13", + "fontname" : "Arial", + "numinlets" : 2 + } + + } +, { + "box" : { + "maxclass" : "newobj", + "text" : "serial a 9600", + "patching_rect" : [ 244.0, 330.0, 84.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-14", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Read serial input buffer every 10 milliseconds", + "linecount" : 2, + "patching_rect" : [ 28.0, 207.0, 210.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-15", + "fontname" : "Arial", + "numinlets" : 1 + } + + } +, { + "box" : { + "maxclass" : "comment", + "text" : "Click to start", + "patching_rect" : [ 271.0, 178.0, 117.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-17", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-54", 0 ], + "destination" : [ "obj-48", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-48", 0 ], + "destination" : [ "obj-53", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-9", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-53", 0 ], + "destination" : [ "obj-6", 0 ], + "hidden" : 0, + "midpoints" : [ 409.5, 446.5, 363.5, 446.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-6", 0 ], + "destination" : [ "obj-9", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-35", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 218.5, 656.0, 182.0, 656.0, 182.0, 315.0, 253.5, 315.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-57", 0 ], + "destination" : [ "obj-53", 0 ], + "hidden" : 0, + "midpoints" : [ 334.5, 416.0, 409.5, 416.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-57", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-55", 0 ], + "destination" : [ "obj-54", 0 ], + "hidden" : 0, + "midpoints" : [ 409.5, 474.0, 468.0, 474.0, 468.0, 366.0, 409.5, 366.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-53", 0 ], + "destination" : [ "obj-55", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-23", 0 ], + "destination" : [ "obj-62", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-22", 0 ], + "destination" : [ "obj-62", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-3", 0 ], + "destination" : [ "obj-62", 2 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-62", 0 ], + "destination" : [ "obj-39", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-14", 0 ], + "destination" : [ "obj-54", 1 ], + "hidden" : 0, + "midpoints" : [ 253.5, 357.0, 444.5, 357.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-53", 0 ], + "destination" : [ "obj-50", 0 ], + "hidden" : 0, + "midpoints" : [ 409.5, 441.0, 218.5, 441.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-14", 0 ], + "destination" : [ "obj-50", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-30", 0 ], + "hidden" : 0, + "midpoints" : [ 253.5, 206.0, 336.5, 206.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-30", 1 ], + "destination" : [ "obj-19", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-21", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-21", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 336.5, 326.5, 253.5, 326.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-19", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 358.5, 303.5, 253.5, 303.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-13", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 378.5, 275.5, 253.5, 275.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-12", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-12", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-10", 2 ], + "destination" : [ "obj-4", 0 ], + "hidden" : 0, + "midpoints" : [ 274.5, 542.0, 274.5, 542.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-10", 0 ], + "destination" : [ "obj-4", 0 ], + "hidden" : 0, + "midpoints" : [ 218.5, 529.5, 274.5, 529.5 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-4", 0 ], + "destination" : [ "obj-8", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-8", 0 ], + "destination" : [ "obj-7", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-7", 0 ], + "destination" : [ "obj-35", 0 ], + "hidden" : 0, + "midpoints" : [ 274.5, 614.0, 218.5, 614.0 ] + } + + } +, { + "patchline" : { + "source" : [ "obj-50", 0 ], + "destination" : [ "obj-10", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-29", 0 ], + "destination" : [ "obj-23", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-35", 1 ], + "destination" : [ "obj-29", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-29", 4 ], + "destination" : [ "obj-3", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } +, { + "patchline" : { + "source" : [ "obj-29", 2 ], + "destination" : [ "obj-22", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + ] +} + +*/ diff --git a/arduino-0017-linux-x64/examples/Communication/VirtualColorMixer/VirtualColorMixer.pde b/arduino-0017-linux-x64/examples/Communication/VirtualColorMixer/VirtualColorMixer.pde new file mode 100644 index 0000000..f23f147 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Communication/VirtualColorMixer/VirtualColorMixer.pde @@ -0,0 +1,697 @@ +/* + This example reads three analog sensors (potentiometers are easiest) + and sends their values serially. The Processing and Max/MSP programs at the bottom + take those three values and use them to change the background color of the screen. + + The circuit: + * potentiometers attached to analog inputs 0, 1, and 2 + + http://www.arduino.cc/en/Tutorial/VirtualColorMixer + + created 2 Dec 2006 + by David A. Mellis + modified 14 Apr 2009 + by Tom Igoe and Scott Fitzgerald + + */ + +const int redPin = 0; // sensor to control red color +const int greenPin = 1; // sensor to control green color +const int bluePin = 2; // sensor to control blue color + +void setup() +{ + Serial.begin(9600); +} + +void loop() +{ + Serial.print(analogRead(redPin)); + Serial.print(","); + Serial.print(analogRead(greenPin)); + Serial.print(","); + Serial.println(analogRead(bluePin)); +} + +/* Processing code for this example + + + import processing.serial.*; + + float redValue = 0; // red value + float greenValue = 0; // green value + float blueValue = 0; // blue value + + Serial myPort; + + void setup() { + size(200, 200); + + // List all the available serial ports + println(Serial.list()); + // I know that the first port in the serial list on my mac + // is always my Arduino, so I open Serial.list()[0]. + // Open whatever port is the one you're using. + myPort = new Serial(this, Serial.list()[0], 9600); + // don't generate a serialEvent() unless you get a newline character: + myPort.bufferUntil('\n'); + } + + void draw() { + // set the background color with the color values: + background(redValue, greenValue, blueValue); + } + + void serialEvent(Serial myPort) { + // get the ASCII string: + String inString = myPort.readStringUntil('\n'); + + if (inString != null) { + // trim off any whitespace: + inString = trim(inString); + // split the string on the commas and convert the + // resulting substrings into an integer array: + float[] colors = float(split(inString, ",")); + // if the array has at least three elements, you know + // you got the whole thing. Put the numbers in the + // color variables: + if (colors.length >=3) { + // map them to the range 0-255: + redValue = map(colors[0], 0, 1023, 0, 255); + greenValue = map(colors[1], 0, 1023, 0, 255); + blueValue = map(colors[2], 0, 1023, 0, 255); + } + } + } + */ + +/* Max/MSP patch for this example + { + "boxes" : [ { + "box" : { + "maxclass" : "newobj", + "text" : "/ 4", + "patching_rect" : [ 448.0, 502.0, 32.5, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-25", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "/ 4", + "patching_rect" : [ 398.0, 502.0, 32.5, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-24", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "/ 4", + "patching_rect" : [ 348.0, 502.0, 32.5, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-23", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Virtual color mixer\n\nThis patch takes a string, containing three comma-separated ASCII formatted numbers from 0 to 1023, with a carriage return and linefeed at the end. It converts the string to three integers and uses them to set the background color.\n\n created 2 Dec 2006\n by David A. Mellis\nmodified 14 Apr 2009\nby Scott Fitzgerald and Tom Igoe", + "linecount" : 11, + "patching_rect" : [ 524.0, 51.0, 398.0, 158.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-32", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "select 0 1", + "patching_rect" : [ 372.0, 125.0, 62.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-30", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to close the serial port", + "patching_rect" : [ 457.0, 276.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-26", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "click here to open the serial port", + "patching_rect" : [ 457.0, 250.0, 206.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-27", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "close", + "patching_rect" : [ 372.0, 276.0, 39.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-21", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "port a", + "patching_rect" : [ 394.0, 250.0, 41.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-19", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click here to get a list of serial ports", + "patching_rect" : [ 457.0, 224.0, 207.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-2", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Convert ASCII to symbol", + "patching_rect" : [ 424.0, 423.0, 147.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-4", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Convert integer to ASCII", + "patching_rect" : [ 424.0, 400.0, 147.0, 20.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-5", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "fromsymbol", + "patching_rect" : [ 347.0, 423.0, 74.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-7", + "fontname" : "Arial", + "color" : [ 1.0, 0.890196, 0.090196, 1.0 ], + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "itoa", + "patching_rect" : [ 347.0, 400.0, 46.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "int" ], + "id" : "obj-8", + "fontname" : "Arial", + "color" : [ 1.0, 0.890196, 0.090196, 1.0 ], + "numinlets" : 3 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "zl group", + "patching_rect" : [ 347.0, 377.0, 53.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "", "" ], + "id" : "obj-9", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "select 10 13", + "patching_rect" : [ 289.0, 326.0, 77.0, 20.0 ], + "numoutlets" : 3, + "fontsize" : 12.0, + "outlettype" : [ "bang", "bang", "" ], + "id" : "obj-10", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "toggle", + "patching_rect" : [ 289.0, 88.0, 15.0, 15.0 ], + "numoutlets" : 1, + "outlettype" : [ "int" ], + "id" : "obj-11", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "qmetro 10", + "patching_rect" : [ 289.0, 125.0, 65.0, 20.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "bang" ], + "id" : "obj-12", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "message", + "text" : "print", + "patching_rect" : [ 414.0, 224.0, 36.0, 18.0 ], + "numoutlets" : 1, + "fontsize" : 12.0, + "outlettype" : [ "" ], + "id" : "obj-13", + "fontname" : "Arial", + "numinlets" : 2 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "serial a 9600", + "patching_rect" : [ 289.0, 300.0, 84.0, 20.0 ], + "numoutlets" : 2, + "fontsize" : 12.0, + "outlettype" : [ "int", "" ], + "id" : "obj-14", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Read serial input buffer every 10 milliseconds", + "linecount" : 2, + "patching_rect" : [ 98.0, 117.0, 185.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-15", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "If you get newline (ASCII 10), send the list. If you get return (ASCII 13) do nothing. Any other value, add to the list", + "linecount" : 3, + "patching_rect" : [ 377.0, 314.0, 320.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-16", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Click to open/close serial port and start/stop patch", + "linecount" : 2, + "patching_rect" : [ 316.0, 77.0, 199.0, 34.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-17", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "bgcolor 0 0 0", + "patching_rect" : [ 348.0, 585.0, 169.0, 19.0 ], + "numoutlets" : 0, + "fontsize" : 10.0, + "id" : "obj-6", + "fontname" : "Verdana", + "numinlets" : 4 + } + + } + , { + "box" : { + "maxclass" : "newobj", + "text" : "unpack 0 0 0 0 0", + "patching_rect" : [ 347.0, 470.0, 119.0, 19.0 ], + "numoutlets" : 5, + "fontsize" : 10.0, + "outlettype" : [ "int", "int", "int", "int", "int" ], + "id" : "obj-20", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 448.0, 535.0, 50.0, 19.0 ], + "numoutlets" : 2, + "fontsize" : 10.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-18", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 398.0, 535.0, 50.0, 19.0 ], + "numoutlets" : 2, + "fontsize" : 10.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-1", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "number", + "patching_rect" : [ 348.0, 535.0, 50.0, 19.0 ], + "numoutlets" : 2, + "fontsize" : 10.0, + "outlettype" : [ "int", "bang" ], + "id" : "obj-22", + "fontname" : "Verdana", + "numinlets" : 1 + } + + } + , { + "box" : { + "maxclass" : "comment", + "text" : "Here's the numbers from Arduino's analog input", + "linecount" : 3, + "patching_rect" : [ 198.0, 484.0, 138.0, 48.0 ], + "numoutlets" : 0, + "fontsize" : 12.0, + "id" : "obj-3", + "fontname" : "Arial", + "numinlets" : 1 + } + + } + ], + "lines" : [ { + "patchline" : { + "source" : [ "obj-18", 0 ], + "destination" : [ "obj-6", 2 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-1", 0 ], + "destination" : [ "obj-6", 1 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-22", 0 ], + "destination" : [ "obj-6", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-25", 0 ], + "destination" : [ "obj-18", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-20", 4 ], + "destination" : [ "obj-25", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-20", 2 ], + "destination" : [ "obj-24", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-24", 0 ], + "destination" : [ "obj-1", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-23", 0 ], + "destination" : [ "obj-22", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-20", 0 ], + "destination" : [ "obj-23", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-8", 0 ], + "destination" : [ "obj-7", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-14", 0 ], + "destination" : [ "obj-10", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-12", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-12", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-13", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 423.5, 245.5, 298.5, 245.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-19", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 403.5, 273.5, 298.5, 273.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-21", 0 ], + "destination" : [ "obj-14", 0 ], + "hidden" : 0, + "midpoints" : [ 381.5, 296.5, 298.5, 296.5 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 0 ], + "destination" : [ "obj-21", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-30", 1 ], + "destination" : [ "obj-19", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-11", 0 ], + "destination" : [ "obj-30", 0 ], + "hidden" : 0, + "midpoints" : [ 298.0, 116.0, 381.5, 116.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-7", 0 ], + "destination" : [ "obj-20", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-9", 0 ], + "destination" : [ "obj-8", 0 ], + "hidden" : 0, + "midpoints" : [ ] + } + + } + , { + "patchline" : { + "source" : [ "obj-10", 0 ], + "destination" : [ "obj-9", 0 ], + "hidden" : 0, + "midpoints" : [ 298.5, 353.0, 356.5, 353.0 ] + } + + } + , { + "patchline" : { + "source" : [ "obj-10", 2 ], + "destination" : [ "obj-9", 0 ], + "hidden" : 0, + "midpoints" : [ 356.5, 365.0, 356.5, 365.0 ] + } + + } + ] + } + + */ diff --git a/arduino-0017-linux-x64/examples/Control/Arrays/Arrays.pde b/arduino-0017-linux-x64/examples/Control/Arrays/Arrays.pde new file mode 100644 index 0000000..d9d9837 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Control/Arrays/Arrays.pde @@ -0,0 +1,55 @@ +/* + Arrays + + Demonstrates the use of an array to hold pin numbers + in order to iterate over the pins in a sequence. + Lights multiple LEDs in sequence, then in reverse. + + Unlike the For Loop tutorial, where the pins have to be + contiguous, here the pins can be in any random order. + + The circuit: + * LEDs from pins 2 through 7 to ground + + created 2006 + by David A. Mellis + modified 5 Jul 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/Array + */ + +int timer = 100; // The higher the number, the slower the timing. +int ledPins[] = { + 2, 7, 4, 6, 5, 3 }; // an array of pin numbers to which LEDs are attached +int pinCount = 6; // the number of pins (i.e. the length of the array) + +void setup() { + int thisPin; + // the array elements are numbered from 0 to (pinCount - 1). + // use a for loop to initialize each pin as an output: + for (int thisPin = 0; thisPin < pinCount; thisPin++) { + pinMode(ledPins[thisPin], OUTPUT); + } +} + +void loop() { + // loop from the lowest pin to the highest: + for (int thisPin = 0; thisPin < pinCount; thisPin++) { + // turn the pin on: + digitalWrite(ledPins[thisPin], HIGH); + delay(timer); + // turn the pin off: + digitalWrite(ledPins[thisPin], LOW); + + } + + // loop from the highest pin to the lowest: + for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { + // turn the pin on: + digitalWrite(ledPins[thisPin], HIGH); + delay(timer); + // turn the pin off: + digitalWrite(ledPins[thisPin], LOW); + } +} diff --git a/arduino-0017-linux-x64/examples/Control/ForLoopIteration/ForLoopIteration.pde b/arduino-0017-linux-x64/examples/Control/ForLoopIteration/ForLoopIteration.pde new file mode 100644 index 0000000..ea7ed0f --- /dev/null +++ b/arduino-0017-linux-x64/examples/Control/ForLoopIteration/ForLoopIteration.pde @@ -0,0 +1,45 @@ +/* + For Loop Iteration + + Demonstrates the use of a for() loop. + Lights multiple LEDs in sequence, then in reverse. + + The circuit: + * LEDs from pins 2 through 7 to ground + + created 2006 + by David A. Mellis + modified 5 Jul 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/ForLoop + */ + +int timer = 100; // The higher the number, the slower the timing. + +void setup() { + // use a for loop to initialize each pin as an output: + for (int thisPin = 2; thisPin < 8; thisPin++) { + pinMode(thisPin, OUTPUT); + } +} + +void loop() { + // loop from the lowest pin to the highest: + for (int thisPin = 0; thisPin < 8; thisPin++) { + // turn the pin on: + digitalWrite(thisPin, HIGH); + delay(timer); + // turn the pin off: + digitalWrite(thisPin, LOW); + } + + // loop from the highest pin to the lowest: + for (int thisPin = 7; thisPin >= 2; thisPin--) { + // turn the pin on: + digitalWrite(thisPin, HIGH); + delay(timer); + // turn the pin off: + digitalWrite(thisPin, LOW); + } +} diff --git a/arduino-0017-linux-x64/examples/Control/IfStatementConditional/IfStatementConditional.pde b/arduino-0017-linux-x64/examples/Control/IfStatementConditional/IfStatementConditional.pde new file mode 100644 index 0000000..068b4fe --- /dev/null +++ b/arduino-0017-linux-x64/examples/Control/IfStatementConditional/IfStatementConditional.pde @@ -0,0 +1,53 @@ +/* + Conditionals - If statement + + This example demonstrates the use of if() statements. + It reads the state of a potentiometer (an analog input) and turns on an LED + only if the LED goes above a certain threshold level. It prints the analog value + regardless of the level. + + The circuit: + * potentiometer connected to analog pin 0. + Center pin of the potentiometer goes to the analog pin. + side pins of the potentiometer go to +5V and ground + * LED connected from digital pin 13 to ground + + * Note: On most Arduino boards, there is already an LED on the board + connected to pin 13, so you don't need any extra components for this example. + + created 17 Jan 2009 + by Tom Igoe + + http://arduino.cc/en/Tutorial/ + + */ + +// These constants won't change: +const int analogPin = 0; // pin that the sensor is attached to +const int ledPin = 13; // pin that the LED is attached to +const int threshold = 400; // an arbitrary threshold level that's in the range of the analog input + +void setup() { + // initialize the LED pin as an output: + pinMode(LED, OUTPUT); + // initialize serial communications: + Serial.begin(9600); +} + +void loop() { + // read the value of the potentiometer: + int analogValue = analogRead(analogPin); + + // if the analog value is high enough, turn on the LED: + if (analogValue > threshold) { + digitalWrite(ledPin, HIGH); + } + else { + digitalWrite(ledPin,LOW); + } + + // print the analog value: + Serial.println(analogValue, DEC); + +} + diff --git a/arduino-0017-linux-x64/examples/Control/WhileStatementConditional/WhileStatementConditional.pde b/arduino-0017-linux-x64/examples/Control/WhileStatementConditional/WhileStatementConditional.pde new file mode 100644 index 0000000..0500479 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Control/WhileStatementConditional/WhileStatementConditional.pde @@ -0,0 +1,86 @@ +/* + Conditionals - while statement + + This example demonstrates the use of while() statements. + + While the pushbutton is pressed, the sketch runs the calibration routine. + The sensor readings during the while loop define the minimum and maximum + of expected values from the photo resistor. + + This is a variation on the calibrate example. + + The circuit: + * photo resistor connected from +5V to analog in pin 0 + * 10K resistor connected from ground to analog in pin 0 + * LED connected from digital pin 9 to ground through 220 ohm resistor + * pushbutton attached from pin 2 to +5V + * 10K resistor attached from pin 2 to ground + + created 17 Jan 2009 + modified 25 Jun 2009 + by Tom Igoe + + http://arduino.cc/en/Tutorial/WhileLoop + + */ + + +// These constants won't change: +const int sensorPin = 2; // pin that the sensor is attached to +const int ledPin = 9; // pin that the LED is attached to +const int indicatorLedPin = 13; // pin that the built-in LED is attached to +const int buttonPin = 2; // pin that the button is attached to + + +// These variables will change: +int sensorMin = 1023; // minimum sensor value +int sensorMax = 0; // maximum sensor value +int sensorValue = 0; // the sensor value + + +void setup() { + // set the LED pins as outputs and the switch pin as input: + pinMode(indicatorLedPin, OUTPUT); + pinMode (ledPin, OUTPUT); + pinMode (buttonPin, INPUT); +} + +void loop() { + // while the button is pressed, take calibration readings: + while (digitalRead(buttonPin) == HIGH) { + calibrate(); + } + // signal the end of the calibration period + digitalWrite(indicatorLedPin, LOW); + + // read the sensor: + sensorValue = analogRead(sensorPin); + + // apply the calibration to the sensor reading + sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255); + + // in case the sensor value is outside the range seen during calibration + sensorValue = constrain(sensorValue, 0, 255); + + // fade the LED using the calibrated value: + analogWrite(ledPin, sensorValue); +} + +void calibrate() { + // turn on the indicator LED to indicate that calibration is happening: + digitalWrite(indicatorLedPin, HIGH); + // read the sensor: + sensorValue = analogRead(sensorPin); + + // record the maximum sensor value + if (sensorValue > sensorMax) { + sensorMax = sensorValue; + } + + // record the minimum sensor value + if (sensorValue < sensorMin) { + sensorMin = sensorValue; + } +} + + diff --git a/arduino-0017-linux-x64/examples/Control/switchCase/switchCase.pde b/arduino-0017-linux-x64/examples/Control/switchCase/switchCase.pde new file mode 100644 index 0000000..10a2be1 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Control/switchCase/switchCase.pde @@ -0,0 +1,59 @@ +/* + Switch statement + + Demonstrates the use of a switch statement. The switch + statement allows you to choose from among a set of discrete values + of a variable. It's like a series of if statements. + + To see this sketch in action, but the board and sensor in a well-lit + room, open the serial monitor, and and move your hand gradually + down over the sensor. + + The circuit: + * photoresistor from analog in 0 to +5V + * 10K resistor from analog in 0 to ground + + created 1 Jul 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/SwitchCase + */ + +// these constants won't change: +const int sensorMin = 0; // sensor minimum, discovered through experiment +const int sensorMax = 600; // sensor maximum, discovered through experiment + +void setup() { + // initialize serial communication: + Serial.begin(9600); +} + +void loop() { + // read the sensor: + int sensorReading = analogRead(0); + // map the sensor range to a range of four options: + int range = map(sensorReading, sensorMin, sensorMax, 0, 3); + + // do something different depending on the + // range value: + switch (range) { + case 0: // your hand is on the sensor + Serial.println("dark"); + break; + case 1: // your hand is close to the sensor + Serial.println("dim"); + break; + case 2: // your hand is a few inches from the sensor + Serial.println("medium"); + break; + case 3: // your hand is nowhere near the sensor + Serial.println("bright"); + break; + } + +} + + + + + diff --git a/arduino-0017-linux-x64/examples/Control/switchCase2/switchCase2.pde b/arduino-0017-linux-x64/examples/Control/switchCase2/switchCase2.pde new file mode 100644 index 0000000..94a1b6c --- /dev/null +++ b/arduino-0017-linux-x64/examples/Control/switchCase2/switchCase2.pde @@ -0,0 +1,64 @@ +/* + Switch statement with serial input + + Demonstrates the use of a switch statement. The switch + statement allows you to choose from among a set of discrete values + of a variable. It's like a series of if statements. + + To see this sketch in action, open the Serial monitor and send any character. + The characters a, b, c, d, and e, will turn on LEDs. Any other character will turn + the LEDs off. + + The circuit: + * 5 LEDs attached to digital pins 2 through 6 through 220-ohm resistors + + created 1 Jul 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/SwitchCase2 + */ + +void setup() { + // initialize serial communication: + Serial.begin(9600); + // initialize the LED pins: + for (int thisPin = 2; thisPin < 7; thisPin++) { + pinMode(thisPin, OUTPUT); + } +} + +void loop() { + // read the sensor: + if (Serial.available() > 0) { + int inByte = Serial.read(); + // do something different depending on the character received. + // The switch statement expects single number values for each case; + // in this exmaple, though, you're using single quotes to tell + // the controller to get the ASCII value for the character. For + // example 'a' = 97, 'b' = 98, and so forth: + + switch (inByte) { + case 'a': + digitalWrite(2, HIGH); + break; + case 'b': + digitalWrite(3, HIGH); + break; + case 'c': + digitalWrite(4, HIGH); + break; + case 'd': + digitalWrite(5, HIGH); + break; + case 'e': + digitalWrite(6, HIGH); + break; + default: + // turn all the LEDs off: + for (int thisPin = 2; thisPin < 7; thisPin++) { + digitalWrite(thisPin, LOW); + } + } + } +} + diff --git a/arduino-0017-linux-x64/examples/Digital/Blink/Blink.pde b/arduino-0017-linux-x64/examples/Digital/Blink/Blink.pde new file mode 100644 index 0000000..5d27483 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Digital/Blink/Blink.pde @@ -0,0 +1,40 @@ +/* + Blink + + Turns on an LED on for one second, then off for one second, repeatedly. + + The circuit: + * LED connected from digital pin 13 to ground. + + * Note: On most Arduino boards, there is already an LED on the board + connected to pin 13, so you don't need any extra components for this example. + + + Created 1 June 2005 + By David Cuartielles + + http://arduino.cc/en/Tutorial/Blink + + based on an orginal by H. Barragan for the Wiring i/o board + + */ + +int ledPin = 13; // LED connected to digital pin 13 + +// The setup() method runs once, when the sketch starts + +void setup() { + // initialize the digital pin as an output: + pinMode(ledPin, OUTPUT); +} + +// the loop() method runs over and over again, +// as long as the Arduino has power + +void loop() +{ + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + delay(1000); // wait for a second +} diff --git a/arduino-0017-linux-x64/examples/Digital/BlinkWithoutDelay/BlinkWithoutDelay.pde b/arduino-0017-linux-x64/examples/Digital/BlinkWithoutDelay/BlinkWithoutDelay.pde new file mode 100644 index 0000000..f1d6984 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Digital/BlinkWithoutDelay/BlinkWithoutDelay.pde @@ -0,0 +1,58 @@ +/* Blink without Delay + + Turns on and off a light emitting diode(LED) connected to a digital + pin, without using the delay() function. This means that other code + can run at the same time without being interrupted by the LED code. + + The circuit: + * LED attached from pin 13 to ground. + * Note: on most Arduinos, there is already an LED on the board + that's attached to pin 13, so no hardware is needed for this example. + + + created 2005 + by David A. Mellis + modified 17 Jun 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay + */ + +// constants won't change. Used here to +// set pin numbers: +const int ledPin = 13; // the number of the LED pin + +// Variables will change: +int ledState = LOW; // ledState used to set the LED +long previousMillis = 0; // will store last time LED was updated + +// the follow variables is a long because the time, measured in miliseconds, +// will quickly become a bigger number than can be stored in an int. +long interval = 1000; // interval at which to blink (milliseconds) + +void setup() { + // set the digital pin as output: + pinMode(ledPin, OUTPUT); +} + +void loop() +{ + // here is where you'd put code that needs to be running all the time. + + // check to see if it's time to blink the LED; that is, is the difference + // between the current time and last time we blinked the LED bigger than + // the interval at which we want to blink the LED. + if (millis() - previousMillis > interval) { + // save the last time you blinked the LED + previousMillis = millis(); + + // if the LED is off turn it on and vice-versa: + if (ledState == LOW) + ledState = HIGH; + else + ledState = LOW; + + // set the LED with the ledState of the variable: + digitalWrite(ledPin, ledState); + } +} \ No newline at end of file diff --git a/arduino-0017-linux-x64/examples/Digital/Button/Button.pde b/arduino-0017-linux-x64/examples/Digital/Button/Button.pde new file mode 100644 index 0000000..8df98ec --- /dev/null +++ b/arduino-0017-linux-x64/examples/Digital/Button/Button.pde @@ -0,0 +1,54 @@ +/* + Button + + Turns on and off a light emitting diode(LED) connected to digital + pin 13, when pressing a pushbutton attached to pin 7. + + + The circuit: + * LED attached from pin 13 to ground + * pushbutton attached to pin 2 from +5V + * 10K resistor attached to pin 2 from ground + + * Note: on most Arduinos there is already an LED on the board + attached to pin 13. + + + created 2005 + by DojoDave + modified 17 Jun 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/Button + */ + +// constants won't change. They're used here to +// set pin numbers: +const int buttonPin = 2; // the number of the pushbutton pin +const int ledPin = 13; // the number of the LED pin + +// variables will change: +int buttonState = 0; // variable for reading the pushbutton status + +void setup() { + // initialize the LED pin as an output: + pinMode(ledPin, OUTPUT); + // initialize the pushbutton pin as an input: + pinMode(buttonPin, INPUT); +} + +void loop(){ + // read the state of the pushbutton value: + buttonState = digitalRead(buttonPin); + + // check if the pushbutton is pressed. + // if it is, the buttonState is HIGH: + if (buttonState == HIGH) { + // turn LED on: + digitalWrite(ledPin, HIGH); + } + else { + // turn LED off: + digitalWrite(ledPin, LOW); + } +} \ No newline at end of file diff --git a/arduino-0017-linux-x64/examples/Digital/Debounce/Debounce.pde b/arduino-0017-linux-x64/examples/Digital/Debounce/Debounce.pde new file mode 100644 index 0000000..568100f --- /dev/null +++ b/arduino-0017-linux-x64/examples/Digital/Debounce/Debounce.pde @@ -0,0 +1,74 @@ +/* + Debounce + + Each time the input pin goes from LOW to HIGH (e.g. because of a push-button + press), the output pin is toggled from LOW to HIGH or HIGH to LOW. There's + a minimum delay between toggles to debounce the circuit (i.e. to ignore + noise). + + The circuit: + * LED attached from pin 13 to ground + * pushbutton attached from pin 2 to +5V + * 10K resistor attached from pin 2 to ground + + * Note: On most Arduino boards, there is already an LED on the board + connected to pin 13, so you don't need any extra components for this example. + + + created 21 November 2006 + by David A. Mellis + modified 3 Jul 2009 + by Limor Fried + + + http://www.arduino.cc/en/Tutorial/Debounce + */ + +// constants won't change. They're used here to +// set pin numbers: +const int buttonPin = 2; // the number of the pushbutton pin +const int ledPin = 13; // the number of the LED pin + +// Variables will change: +int ledState = HIGH; // the current state of the output pin +int buttonState; // the current reading from the input pin +int lastButtonState = LOW; // the previous reading from the input pin + +// the following variables are long's because the time, measured in miliseconds, +// will quickly become a bigger number than can be stored in an int. +long lastDebounceTime = 0; // the last time the output pin was toggled +long debounceDelay = 50; // the debounce time; increase if the output flickers + +void setup() { + pinMode(buttonPin, INPUT); + pinMode(ledPin, OUTPUT); +} + +void loop() { + // read the state of the switch into a local variable: + int reading = digitalRead(buttonPin); + + // check to see if you just pressed the button + // (i.e. the input went from LOW to HIGH), and you've waited + // long enough since the last press to ignore any noise: + + // If the switch changed, due to noise or pressing: + if (reading != lastButtonState) { + // reset the debouncing timer + lastDebounceTime = millis(); + } + + if ((millis() - lastDebounceTime) > debounceDelay) { + // whatever the reading is at, it's been there for longer + // than the debounce delay, so take it as the actual current state: + buttonState = reading; + } + + // set the LED using the state of the button: + digitalWrite(ledPin, buttonState); + + // save the reading. Next time through the loop, + // it'll be the lastButtonState: + lastButtonState = reading; +} + diff --git a/arduino-0017-linux-x64/examples/Digital/Melody/Melody.pde b/arduino-0017-linux-x64/examples/Digital/Melody/Melody.pde new file mode 100644 index 0000000..e195d69 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Digital/Melody/Melody.pde @@ -0,0 +1,71 @@ +/* Melody + * (cleft) 2005 D. Cuartielles for K3 + * + * This example uses a piezo speaker to play melodies. It sends + * a square wave of the appropriate frequency to the piezo, generating + * the corresponding tone. + * + * The calculation of the tones is made following the mathematical + * operation: + * + * timeHigh = period / 2 = 1 / (2 * toneFrequency) + * + * where the different tones are described as in the table: + * + * note frequency period timeHigh + * c 261 Hz 3830 1915 + * d 294 Hz 3400 1700 + * e 329 Hz 3038 1519 + * f 349 Hz 2864 1432 + * g 392 Hz 2550 1275 + * a 440 Hz 2272 1136 + * b 493 Hz 2028 1014 + * C 523 Hz 1912 956 + * + * http://www.arduino.cc/en/Tutorial/Melody + */ + +int speakerPin = 9; + +int length = 15; // the number of notes +char notes[] = "ccggaagffeeddc "; // a space represents a rest +int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; +int tempo = 300; + +void playTone(int tone, int duration) { + for (long i = 0; i < duration * 1000L; i += tone * 2) { + digitalWrite(speakerPin, HIGH); + delayMicroseconds(tone); + digitalWrite(speakerPin, LOW); + delayMicroseconds(tone); + } +} + +void playNote(char note, int duration) { + char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; + int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; + + // play the tone corresponding to the note name + for (int i = 0; i < 8; i++) { + if (names[i] == note) { + playTone(tones[i], duration); + } + } +} + +void setup() { + pinMode(speakerPin, OUTPUT); +} + +void loop() { + for (int i = 0; i < length; i++) { + if (notes[i] == ' ') { + delay(beats[i] * tempo); // rest + } else { + playNote(notes[i], beats[i] * tempo); + } + + // pause between notes + delay(tempo / 2); + } +} diff --git a/arduino-0017-linux-x64/examples/Digital/StateChangeDetection/StateChangeDetection.pde b/arduino-0017-linux-x64/examples/Digital/StateChangeDetection/StateChangeDetection.pde new file mode 100644 index 0000000..af52f8b --- /dev/null +++ b/arduino-0017-linux-x64/examples/Digital/StateChangeDetection/StateChangeDetection.pde @@ -0,0 +1,88 @@ +/* + State change detection (edge detection) + + Often, you don't need to know the state of a digital input all the time, + but you just need to know when the input changes from one state to another. + For example, you want to know when a button goes from OFF to ON. This is called + state change detection, or edge detection. + + This example shows how to detect when a button or button changes from off to on + and on to off. + + The circuit: + * pushbutton attached to pin 2 from +5V + * 10K resistor attached to pin 2 from ground + * LED attached from pin 13 to ground (or use the built-in LED on + most Arduino boards) + + created 27 Sep 2005 + modified 17 Jun 2009 + by Tom Igoe + + http://arduino.cc/en/Tutorial/ButtonStateChange + + */ + +// this constant won't change: +const int buttonPin = 2; // the pin that the pushbutton is attached to +const int ledPin = 13; // the pin that the LED is attached to + +// Variables will change: +int buttonPushCounter = 0; // counter for the number of button presses +int buttonState = 0; // current state of the button +int lastButtonState = 0; // previous state of the button + +void setup() { + // initialize the button pin as a input: + pinMode(buttonPin, INPUT); + // initialize serial communication: + Serial.begin(9600); +} + + +void loop() { + // read the pushbutton input pin: + buttonState = digitalRead(buttonPin); + + // compare the buttonState to its previous state + if (buttonState != lastButtonState) { + // if the state has changed, increment the counter + if (buttonState == HIGH) { + // if the current state is HIGH then the button + // wend from off to on: + buttonPushCounter++; + Serial.println("on"); + Serial.print("number of button pushes: "); + Serial.println(buttonPushCounter, DEC); + } + else { + // if the current state is LOW then the button + // wend from on to off: + Serial.println("off"); + } + + // save the current state as the last state, + //for next time through the loop + lastButtonState = buttonState; + } + + // turns on the LED every four button pushes by + // checking the modulo of the button push counter. + // the modulo function gives you the remainder of + // the division of two numbers: + if (buttonPushCounter % 4 == 0) { + digitalWrite(ledPin, HIGH); + } else { + digitalWrite(ledPin, LOW); + } + +} + + + + + + + + + diff --git a/arduino-0017-linux-x64/examples/Display/RowColumnScanning/RowColumnScanning.pde b/arduino-0017-linux-x64/examples/Display/RowColumnScanning/RowColumnScanning.pde new file mode 100644 index 0000000..8c01783 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Display/RowColumnScanning/RowColumnScanning.pde @@ -0,0 +1,112 @@ +/* + Row-Column Scanning an 8x8 LED matrix with X-Y input + + This example controls an 8x8 LED matrix using two analog inputs + + created 27 May 2009 + modified 29 Jun 2009 + by Tom Igoe + + This example works for the Lumex LDM-24488NI Matrix. See + http://sigma.octopart.com/140413/datasheet/Lumex-LDM-24488NI.pdf + for the pin connections + + For other LED cathode column matrixes, you should only need to change + the pin numbers in the row[] and column[] arrays + + rows are the anodes + cols are the cathodes + --------- + + Pin numbers: + Matrix: + * Digital pins 2 through 13, + * analog pins 2 through 5 used as digital 16 through 19 + Potentiometers: + * center pins are attached to analog pins 0 and 1, respectively + * side pins attached to +5V and ground, respectively. + + http://www.arduino.cc/en/Tutorial/RowColumnScanning + + see also http://www.tigoe.net/pcomp/code/category/arduinowiring/514 for more + */ + + +// 2-dimensional array of row pin numbers: +const int row[8] = { + 2,7,19,5,18,12,16 }; + +// 2-dimensional array of column pin numbers: +const int col[8] = { + 6,11,10,3,17,4,8,9 }; + +// 2-dimensional array of pixels: +int pixels[8][8]; + +// cursor position: +int x = 5; +int y = 5; + +void setup() { + Serial.begin(9600); + // initialize the I/O pins as outputs: + + // iterate over the pins: + for (int thisPin = 0; thisPin < 8; thisPin++) { + // initialize the output pins: + pinMode(col[thisPin], OUTPUT); + pinMode(row[thisPin], OUTPUT); + // take the col pins (i.e. the cathodes) high to ensure that + // the LEDS are off: + digitalWrite(col[thisPin], HIGH); + } + + // initialize the pixel matrix: + for (int x = 0; x < 8; x++) { + for (int y = 0; y < 8; y++) { + pixels[x][y] = HIGH; + } + } +} + +void loop() { + // read input: + readSensors(); + + // draw the screen: + refreshScreen(); +} + +void readSensors() { + // turn off the last position: + pixels[x][y] = HIGH; + // read the sensors for X and Y values: + x = 7 - map(analogRead(0), 0, 1023, 0, 7); + y = map(analogRead(1), 0, 1023, 0, 7); + // set the new pixel position low so that the LED will turn on + // in the next screen refresh: + pixels[x][y] = LOW; + +} + +void refreshScreen() { + // iterate over the rows (anodes): + for (int thisRow = 0; thisRow < 8; thisRow++) { + // take the row pin (anode) high: + digitalWrite(row[thisRow], HIGH); + // iterate over the cols (cathodes): + for (int thisCol = 0; thisCol < 8; thisCol++) { + // get the state of the current pixel; + int thisPixel = pixels[thisRow][thisCol]; + // when the row is HIGH and the col is LOW, + // the LED where they meet turns on: + digitalWrite(col[thisCol], thisPixel); + // turn the pixel off: + if (thisPixel == LOW) { + digitalWrite(col[thisCol], HIGH); + } + } + // take the row pin low to turn off the whole row: + digitalWrite(row[thisRow], LOW); + } +} diff --git a/arduino-0017-linux-x64/examples/Display/barGraph/barGraph.pde b/arduino-0017-linux-x64/examples/Display/barGraph/barGraph.pde new file mode 100644 index 0000000..3e6664a --- /dev/null +++ b/arduino-0017-linux-x64/examples/Display/barGraph/barGraph.pde @@ -0,0 +1,58 @@ +/* + LED bar graph + + Turns on a series of LEDs based on the value of an analog sensor. + This is a simple way to make a bar graph display. Though this graph + uses 10 LEDs, you can use any number by changing the LED count + and the pins in the array. + + This method can be used to control any series of digital outputs that + depends on an analog input. + + The circuit: + * LEDs from pins 2 through 11 to ground + + created 26 Jun 2009 + by Tom Igoe + + http://www.arduino.cc/en/Tutorial/BarGraph + */ + + +// these constants won't change: +const int analogPin = 0; // the pin that the potentiometer is attached to +const int ledCount = 10; // the number of LEDs in the bar graph + +int ledPins[] = { + 2, 3, 4, 5, 6, 7,8,9,10,11 }; // an array of pin numbers to which LEDs are attached + + +void setup() { + // loop over the pin array and set them all to output: + for (int thisLed = 0; thisLed < ledCount; thisLed++) { + pinMode(ledPins[thisLed], OUTPUT); + } +} + +void loop() { + // read the potentiometer: + int sensorReading = analogRead(analogPin); + // map the result to a range from 0 to the number of LEDs: + int ledLevel = map(sensorReading, 0, 1023, 0, ledCount); + + // loop over the LED array: + for (int thisLed = 0; thisLed < ledCount; thisLed++) { + // if the array element's index is less than ledLevel, + // turn the pin for this element on: + if (thisLed < ledLevel) { + digitalWrite(ledPins[thisLed], HIGH); + } + // turn off all pins higher than the ledLevel: + else { + digitalWrite(ledPins[thisLed], LOW); + } + } +} + + + diff --git a/arduino-0017-linux-x64/examples/Sensors/ADXL3xx/ADXL3xx.pde b/arduino-0017-linux-x64/examples/Sensors/ADXL3xx/ADXL3xx.pde new file mode 100644 index 0000000..0d9e15a --- /dev/null +++ b/arduino-0017-linux-x64/examples/Sensors/ADXL3xx/ADXL3xx.pde @@ -0,0 +1,62 @@ + +/* + ADXL3xx + + Reads an Analog Devices ADXL3xx accelerometer and communicates the + acceleration to the computer. The pins used are designed to be easily + compatible with the breakout boards from Sparkfun, available from: + http://www.sparkfun.com/commerce/categories.php?c=80 + + http://www.arduino.cc/en/Tutorial/ADXL3xx + + The circuit: + analog 0: accelerometer self test + analog 1: z-axis + analog 2: y-axis + analog 3: x-axis + analog 4: ground + analog 5: vcc + + created 2 Jul 2008 + by David A. Mellis + modified 26 Jun 2009 + by Tom Igoe + +*/ + +// these constants describe the pins. They won't change: +const int groundPin = 18; // analog input pin 4 -- ground +const int powerPin = 19; // analog input pin 5 -- voltage +const int xPin = 3; // x-axis of the accelerometer +const int yPin = 2; // y-axis +const int zPin = 1; // z-axis (only on 3-axis models) + +void setup() +{ + // initialize the serial communications: + Serial.begin(9600); + + // Provide ground and power by using the analog inputs as normal + // digital pins. This makes it possible to directly connect the + // breakout board to the Arduino. If you use the normal 5V and + // GND pins on the Arduino, you can remove these lines. + pinMode(groundpin, OUTPUT); + pinMode(powerpin, OUTPUT); + digitalWrite(groundpin, LOW); + digitalWrite(powerpin, HIGH); +} + +void loop() +{ + // print the sensor values: + Serial.print(analogRead(xpin)); + // print a tab between values: + Serial.print("\t"); + Serial.print(analogRead(ypin)); + // print a tab between values: + Serial.print("\t"); + Serial.print(analogRead(zpin)); + Serial.println(); + // delay before next reading: + delay(100); +} diff --git a/arduino-0017-linux-x64/examples/Sensors/Knock/Knock.pde b/arduino-0017-linux-x64/examples/Sensors/Knock/Knock.pde new file mode 100644 index 0000000..05e4632 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Sensors/Knock/Knock.pde @@ -0,0 +1,53 @@ +/* Knock Sensor + + This sketch reads a piezo element to detect a knocking sound. + It reads an analog pin and compares the result to a set threshold. + If the result is greater than the threshold, it writes + "knock" to the serial port, and toggles the LED on pin 13. + + The circuit: + * + connection of the piezo attached to analog in 0 + * - connection of the piezo attached to ground + * 1-megohm resistor attached from analog in 0 to ground + + http://www.arduino.cc/en/Tutorial/Knock + + created 25 Mar 2007 + by David Cuartielles + modified 30 Jun 2009 + by Tom Igoe + + */ + + +// these constants won't change: +const int ledPin = 13; // led connected to digital pin 13 +const int knockSensor = 0; // the piezo is connected to analog pin 0 +const int threshold = 100; // threshold value to decide when the detected sound is a knock or not + + +// these variables will change: +int sensorReading = 0; // variable to store the value read from the sensor pin +int ledState = LOW; // variable used to store the last LED status, to toggle the light + +void setup() { + pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT + Serial.begin(9600); // use the serial port +} + +void loop() { + // read the sensor and store it in the variable sensorReading: + sensorReading = analogRead(knockSensor); + + // if the sensor reading is greater than the threshold: + if (sensorReading >= threshold) { + // toggle the status of the ledPin: + ledState = !ledState; + // update the LED pin itself: + digitalWrite(ledPin, ledState); + // send the string "Knock!" back to the computer, followed by newline + Serial.println("Knock!"); + } + delay(100); // delay to avoid overloading the serial port buffer +} + diff --git a/arduino-0017-linux-x64/examples/Sensors/Memsic2125/Memsic2125.pde b/arduino-0017-linux-x64/examples/Sensors/Memsic2125/Memsic2125.pde new file mode 100644 index 0000000..a69e31d --- /dev/null +++ b/arduino-0017-linux-x64/examples/Sensors/Memsic2125/Memsic2125.pde @@ -0,0 +1,61 @@ +/* + Memsic2125 + + Read the Memsic 2125 two-axis accelerometer. Converts the + pulses output by the 2125 into milli-g's (1/1000 of earth's + gravity) and prints them over the serial connection to the + computer. + + The circuit: + * X output of accelerometer to digital pin 2 + * Y output of accelerometer to digital pin 3 + * +V of accelerometer to +5V + * GND of accelerometer to ground + + http://www.arduino.cc/en/Tutorial/Memsic2125 + + created 6 Nov 2008 + by David A. Mellis + modified 30 Jun 2009 + by Tom Igoe + + */ + +// these constants won't change: +const int xPin = 2; // X output of the accelerometer +const int yPin = 3; // Y output of the accelerometer + +void setup() { + // initialize serial communications: + Serial.begin(9600); + // initialize the pins connected to the accelerometer + // as inputs: + pinMode(xPin, INPUT); + pinMode(yPin, INPUT); +} + +void loop() { + // variables to read the pulse widths: + int pulseX, pulseY; + // variables to contain the resulting accelerations + int accelerationX, accelerationY; + + // read pulse from x- and y-axes: + pulseX = pulseIn(xPin,HIGH); + pulseY = pulseIn(yPin,HIGH); + + // convert the pulse width into acceleration + // accelerationX and accelerationY are in milli-g's: + // earth's gravity is 1000 milli-g's, or 1g. + accelerationX = ((pulseX / 10) - 500) * 8; + accelerationY = ((pulseY / 10) - 500) * 8; + + // print the acceleration + Serial.print(accelerationX); + // print a tab character: + Serial.print("\t"); + Serial.print(accelerationY); + Serial.println(); + + delay(100); +} diff --git a/arduino-0017-linux-x64/examples/Sensors/Ping/Ping.pde b/arduino-0017-linux-x64/examples/Sensors/Ping/Ping.pde new file mode 100644 index 0000000..3e89744 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Sensors/Ping/Ping.pde @@ -0,0 +1,82 @@ +/* Ping))) Sensor + + This sketch reads a PING))) ultrasonic rangefinder and returns the + distance to the closest object in range. To do this, it sends a pulse + to the sensor to initiate a reading, then listens for a pulse + to return. The length of the returning pulse is proportional to + the distance of the object from the sensor. + + The circuit: + * +V connection of the PING))) attached to +5V + * GND connection of the PING))) attached to ground + * SIG connection of the PING))) attached to digital pin 7 + + http://www.arduino.cc/en/Tutorial/Ping + + created 3 Nov 2008 + by David A. Mellis + modified 30 Jun 2009 + by Tom Igoe + + */ + +// this constant won't change. It's the pin number +// of the sensor's output: +const int pingPin = 7; + +void setup() { + // initialize serial communication: + Serial.begin(9600); +} + +void loop() +{ + // establish variables for duration of the ping, + // and the distance result in inches and centimeters: + long duration, inches, cm; + + // The PING))) is triggered by a HIGH pulse of 2 or more microseconds. + // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: + pinMode(pingPin, OUTPUT); + digitalWrite(pingPin, LOW); + delayMicroseconds(2); + digitalWrite(pingPin, HIGH); + delayMicroseconds(5); + digitalWrite(pingPin, LOW); + + // The same pin is used to read the signal from the PING))): a HIGH + // pulse whose duration is the time (in microseconds) from the sending + // of the ping to the reception of its echo off of an object. + pinMode(pingPin, INPUT); + duration = pulseIn(pingPin, HIGH); + + // convert the time into a distance + inches = microsecondsToInches(duration); + cm = microsecondsToCentimeters(duration); + + Serial.print(inches); + Serial.print("in, "); + Serial.print(cm); + Serial.print("cm"); + Serial.println(); + + delay(100); +} + +long microsecondsToInches(long microseconds) +{ + // According to Parallax's datasheet for the PING))), there are + // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per + // second). This gives the distance travelled by the ping, outbound + // and return, so we divide by 2 to get the distance of the obstacle. + // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf + return microseconds / 74 / 2; +} + +long microsecondsToCentimeters(long microseconds) +{ + // The speed of sound is 340 m/s or 29 microseconds per centimeter. + // The ping travels out and back, so to find the distance of the + // object we take half of the distance travelled. + return microseconds / 29 / 2; +} diff --git a/arduino-0017-linux-x64/examples/Stubs/AnalogReadSerial/AnalogReadSerial.pde b/arduino-0017-linux-x64/examples/Stubs/AnalogReadSerial/AnalogReadSerial.pde new file mode 100644 index 0000000..f0ce8f4 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Stubs/AnalogReadSerial/AnalogReadSerial.pde @@ -0,0 +1,12 @@ + +void setup() { + Serial.begin(9600); +} + +void loop() { + int sensorValue = analogRead(0); + Serial.println(sensorValue, DEC); +} + + + diff --git a/arduino-0017-linux-x64/examples/Stubs/AnalogReadWrite/AnalogReadWrite.pde b/arduino-0017-linux-x64/examples/Stubs/AnalogReadWrite/AnalogReadWrite.pde new file mode 100644 index 0000000..3dc8052 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Stubs/AnalogReadWrite/AnalogReadWrite.pde @@ -0,0 +1,13 @@ + +void setup() { + pinMode(6, OUTPUT); +} + +void loop() { + int sensorValue = analogRead(2); + int ledFadeValue = map(sensorValue, 0, 1023, 0, 255); + analogWrite(6, ledFadeValue); +} + + + diff --git a/arduino-0017-linux-x64/examples/Stubs/BareMinumum/BareMinumum.pde b/arduino-0017-linux-x64/examples/Stubs/BareMinumum/BareMinumum.pde new file mode 100644 index 0000000..b1a29e5 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Stubs/BareMinumum/BareMinumum.pde @@ -0,0 +1,9 @@ +void setup() { + +} + +void loop() { + +} + + diff --git a/arduino-0017-linux-x64/examples/Stubs/DigitalReadSerial/DigitalReadSerial.pde b/arduino-0017-linux-x64/examples/Stubs/DigitalReadSerial/DigitalReadSerial.pde new file mode 100644 index 0000000..369b9a4 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Stubs/DigitalReadSerial/DigitalReadSerial.pde @@ -0,0 +1,13 @@ + +void setup() { + Serial.begin(9600); + pinMode(2, INPUT); +} + +void loop() { + int sensorValue = digitalRead(2); + Serial.println(sensorValue, DEC); +} + + + diff --git a/arduino-0017-linux-x64/examples/Stubs/DigitalReadWrite/DigitalReadWrite.pde b/arduino-0017-linux-x64/examples/Stubs/DigitalReadWrite/DigitalReadWrite.pde new file mode 100644 index 0000000..f4ca3c5 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Stubs/DigitalReadWrite/DigitalReadWrite.pde @@ -0,0 +1,12 @@ + +void setup() { + pinMode(13, OUTPUT); +} + +void loop() { + int switchValue = digitalRead(2); + digitalWrite(13, switchValue); +} + + + diff --git a/arduino-0017-linux-x64/examples/Stubs/HelloWorld/HelloWorld.pde b/arduino-0017-linux-x64/examples/Stubs/HelloWorld/HelloWorld.pde new file mode 100644 index 0000000..628a9f3 --- /dev/null +++ b/arduino-0017-linux-x64/examples/Stubs/HelloWorld/HelloWorld.pde @@ -0,0 +1,9 @@ +void setup() { + Serial.begin(9600); +} + +void loop() { + Serial.println("Hello World!"); +} + + diff --git a/arduino-0017-linux-x64/hardware/boards.txt b/arduino-0017-linux-x64/hardware/boards.txt new file mode 100644 index 0000000..4ae4ac9 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/boards.txt @@ -0,0 +1,220 @@ +############################################################## + +atmega328.name=Arduino Duemilanove or Nano w/ ATmega328 + +atmega328.upload.protocol=stk500 +atmega328.upload.maximum_size=30720 +atmega328.upload.speed=57600 + +atmega328.bootloader.low_fuses=0xFF +atmega328.bootloader.high_fuses=0xDA +atmega328.bootloader.extended_fuses=0x05 +atmega328.bootloader.path=atmega +atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex +atmega328.bootloader.unlock_bits=0x3F +atmega328.bootloader.lock_bits=0x0F + +atmega328.build.mcu=atmega328p +atmega328.build.f_cpu=16000000L +atmega328.build.core=arduino + +############################################################## + +diecimila.name=Arduino Diecimila, Duemilanove, or Nano w/ ATmega168 + +diecimila.upload.protocol=stk500 +diecimila.upload.maximum_size=14336 +diecimila.upload.speed=19200 + +diecimila.bootloader.low_fuses=0xff +diecimila.bootloader.high_fuses=0xdd +diecimila.bootloader.extended_fuses=0x00 +diecimila.bootloader.path=atmega +diecimila.bootloader.file=ATmegaBOOT_168_diecimila.hex +diecimila.bootloader.unlock_bits=0x3F +diecimila.bootloader.lock_bits=0x0F + +diecimila.build.mcu=atmega168 +diecimila.build.f_cpu=16000000L +diecimila.build.core=arduino + +############################################################## + +mega.name=Arduino Mega + +mega.upload.protocol=stk500 +mega.upload.maximum_size=126976 +mega.upload.speed=57600 + +mega.bootloader.low_fuses=0xFF +mega.bootloader.high_fuses=0xDA +mega.bootloader.extended_fuses=0xF5 +mega.bootloader.path=atmega +mega.bootloader.file=ATmegaBOOT_168_atmega1280.hex +mega.bootloader.unlock_bits=0x3F +mega.bootloader.lock_bits=0x0F + +mega.build.mcu=atmega1280 +mega.build.f_cpu=16000000L +mega.build.core=arduino + +############################################################## + +mini.name=Arduino Mini + +mini.upload.protocol=stk500 +mini.upload.maximum_size=14336 +mini.upload.speed=19200 + +mini.bootloader.low_fuses=0xff +mini.bootloader.high_fuses=0xdd +mini.bootloader.extended_fuses=0x00 +mini.bootloader.path=atmega +mini.bootloader.file=ATmegaBOOT_168_ng.hex +mini.bootloader.unlock_bits=0x3F +mini.bootloader.lock_bits=0x0F + +mini.build.mcu=atmega168 +mini.build.f_cpu=16000000L +mini.build.core=arduino + +############################################################## + +bt.name=Arduino BT + +bt.upload.protocol=stk500 +bt.upload.maximum_size=14336 +bt.upload.speed=19200 +bt.upload.disable_flushing=true + +bt.bootloader.low_fuses=0xff +bt.bootloader.high_fuses=0xdd +bt.bootloader.extended_fuses=0x00 +bt.bootloader.path=bt +bt.bootloader.file=ATmegaBOOT_168.hex +bt.bootloader.unlock_bits=0x3F +bt.bootloader.lock_bits=0x0F + +bt.build.mcu=atmega168 +bt.build.f_cpu=16000000L +bt.build.core=arduino + +############################################################## + +lilypad328.name=LilyPad Arduino w/ ATmega328 + +lilypad328.upload.protocol=stk500 +lilypad328.upload.maximum_size=30720 +lilypad328.upload.speed=57600 + +lilypad328.bootloader.low_fuses=0xFF +lilypad328.bootloader.high_fuses=0xDA +lilypad328.bootloader.extended_fuses=0x05 +lilypad328.bootloader.path=atmega +lilypad328.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex +lilypad328.bootloader.unlock_bits=0x3F +lilypad328.bootloader.lock_bits=0x0F + +lilypad328.build.mcu=atmega328p +lilypad328.build.f_cpu=8000000L +lilypad328.build.core=arduino + +############################################################## + +lilypad.name=LilyPad Arduino w/ ATmega168 + +lilypad.upload.protocol=stk500 +lilypad.upload.maximum_size=14336 +lilypad.upload.speed=19200 + +lilypad.bootloader.low_fuses=0xe2 +lilypad.bootloader.high_fuses=0xdd +lilypad.bootloader.extended_fuses=0x00 +lilypad.bootloader.path=lilypad +lilypad.bootloader.file=LilyPadBOOT_168.hex +lilypad.bootloader.unlock_bits=0x3F +lilypad.bootloader.lock_bits=0x0F + +lilypad.build.mcu=atmega168 +lilypad.build.f_cpu=8000000L +lilypad.build.core=arduino + +############################################################## + +pro328.name=Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328 + +pro328.upload.protocol=stk500 +pro328.upload.maximum_size=30720 +pro328.upload.speed=57600 + +pro328.bootloader.low_fuses=0xFF +pro328.bootloader.high_fuses=0xDA +pro328.bootloader.extended_fuses=0x05 +pro328.bootloader.path=atmega +pro328.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex +pro328.bootloader.unlock_bits=0x3F +pro328.bootloader.lock_bits=0x0F + +pro328.build.mcu=atmega328p +pro328.build.f_cpu=8000000L +pro328.build.core=arduino + +############################################################## + +pro.name=Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168 + +pro.upload.protocol=stk500 +pro.upload.maximum_size=14336 +pro.upload.speed=19200 + +pro.bootloader.low_fuses=0xc6 +pro.bootloader.high_fuses=0xdd +pro.bootloader.extended_fuses=0x00 +pro.bootloader.path=atmega +pro.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex +pro.bootloader.unlock_bits=0x3F +pro.bootloader.lock_bits=0x0F + +pro.build.mcu=atmega168 +pro.build.f_cpu=8000000L +pro.build.core=arduino + +############################################################## + +atmega168.name=Arduino NG or older w/ ATmega168 + +atmega168.upload.protocol=stk500 +atmega168.upload.maximum_size=14336 +atmega168.upload.speed=19200 + +atmega168.bootloader.low_fuses=0xff +atmega168.bootloader.high_fuses=0xdd +atmega168.bootloader.extended_fuses=0x00 +atmega168.bootloader.path=atmega +atmega168.bootloader.file=ATmegaBOOT_168_ng.hex +atmega168.bootloader.unlock_bits=0x3F +atmega168.bootloader.lock_bits=0x0F + +atmega168.build.mcu=atmega168 +atmega168.build.f_cpu=16000000L +atmega168.build.core=arduino + +############################################################## + +atmega8.name=Arduino NG or older w/ ATmega8 + +atmega8.upload.protocol=stk500 +atmega8.upload.maximum_size=7168 +atmega8.upload.speed=19200 + +atmega8.bootloader.low_fuses=0xdf +atmega8.bootloader.high_fuses=0xca +atmega8.bootloader.path=atmega8 +atmega8.bootloader.file=ATmegaBOOT.hex +atmega8.bootloader.unlock_bits=0x3F +atmega8.bootloader.lock_bits=0x0F + +atmega8.build.mcu=atmega8 +atmega8.build.f_cpu=16000000L +atmega8.build.core=arduino + diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168.c b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168.c new file mode 100755 index 0000000..2b9fefa --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168.c @@ -0,0 +1,1054 @@ +/**********************************************************/ +/* Serial Bootloader for Atmel megaAVR Controllers */ +/* */ +/* tested with ATmega8, ATmega128 and ATmega168 */ +/* should work with other mega's, see code for details */ +/* */ +/* ATmegaBOOT.c */ +/* */ +/* */ +/* 20090308: integrated Mega changes into main bootloader */ +/* source by D. Mellis */ +/* 20080930: hacked for Arduino Mega (with the 1280 */ +/* processor, backwards compatible) */ +/* by D. Cuartielles */ +/* 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 +#include +#include +#include +#include +#include + +/* the current avr-libc eeprom functions do not support the ATmega168 */ +/* own eeprom write/read functions are used instead */ +#if !defined(__AVR_ATmega168__) || !defined(__AVR_ATmega328P__) +#include +#endif + +/* Use the F_CPU defined in Makefile */ + +/* 20060803: hacked by DojoCorp */ +/* 20070626: hacked by David A. Mellis to decrease waiting time for auto-reset */ +/* set the waiting time for the bootloader */ +/* get this from the Makefile instead */ +/* #define MAX_TIME_COUNT (F_CPU>>4) */ + +/* 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 */ +/* 20060803: hacked by DojoCorp */ +//#define BAUD_RATE 115200 +#ifndef BAUD_RATE +#define BAUD_RATE 19200 +#endif + + +/* 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 + + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */ +/* ATmega1280 has four UARTS, but for Arduino Mega, we will only use RXD0 to get code */ +/* BL0... means UART0, BL1... means UART1 */ +#ifdef __AVR_ATmega128__ +#define BL_DDR DDRF +#define BL_PORT PORTF +#define BL_PIN PINF +#define BL0 PINF7 +#define BL1 PINF6 +#elif defined __AVR_ATmega1280__ +/* we just don't do anything for the MEGA and enter bootloader on reset anyway*/ +#else +/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ +#define BL_DDR DDRD +#define BL_PORT PORTD +#define BL_PIN PIND +#define BL PIND6 +#endif + + +/* 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 */ +#if defined __AVR_ATmega128__ || defined __AVR_ATmega1280__ +/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128, Arduino Mega) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB7 +#else +/* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duomilanuove */ +/* other boards like e.g. Crumb8, Crumb168 are using PB2 */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB5 +#endif + + +/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) +#define MONITOR 1 +#endif + + +/* 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_ATmega1280__ +#define SIG2 0x97 +#define SIG3 0x03 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega1281__ +#define SIG2 0x97 +#define SIG3 0x04 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega128__ +#define SIG2 0x97 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega64__ +#define SIG2 0x96 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega32__ +#define SIG2 0x95 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega16__ +#define SIG2 0x94 +#define SIG3 0x03 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8__ +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega88__ +#define SIG2 0x93 +#define SIG3 0x0a +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega168__ +#define SIG2 0x94 +#define SIG3 0x06 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega328P__ +#define SIG2 0x95 +#define SIG3 0x0F +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega162__ +#define SIG2 0x94 +#define SIG3 0x04 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega163__ +#define SIG2 0x94 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega169__ +#define SIG2 0x94 +#define SIG3 0x05 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8515__ +#define SIG2 0x93 +#define SIG3 0x06 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega8535__ +#define SIG2 0x93 +#define SIG3 0x08 +#define PAGE_SIZE 0x20U //32 words +#endif + + +/* 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 address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +uint8_t bootuart = 0; + +uint8_t error_count = 0; + +void (*app_start)(void) = 0x0000; + + +/* main program starts here */ +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + +#ifdef WATCHDOG_MODS + 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 +#else + asm volatile("nop\n\t"); +#endif + + /* set pin direction for bootloader pin and enable pullup */ + /* for ATmega128, two pins need to be initialized */ +#ifdef __AVR_ATmega128__ + BL_DDR &= ~_BV(BL0); + BL_DDR &= ~_BV(BL1); + BL_PORT |= _BV(BL0); + BL_PORT |= _BV(BL1); +#else + /* We run the bootloader regardless of the state of this pin. Thus, don't + put it in a different state than the other pins. --DAM, 070709 + This also applies to Arduino Mega -- DC, 080930 + BL_DDR &= ~_BV(BL); + BL_PORT |= _BV(BL); + */ +#endif + + +#ifdef __AVR_ATmega128__ + /* check which UART should be used for booting */ + if(bit_is_clear(BL_PIN, BL0)) { + bootuart = 1; + } + else if(bit_is_clear(BL_PIN, BL1)) { + bootuart = 2; + } +#endif + +#if defined __AVR_ATmega1280__ + /* the mega1280 chip has four serial ports ... we could eventually use any of them, or not? */ + /* however, we don't wanna confuse people, to avoid making a mess, we will stick to RXD0, TXD0 */ + bootuart = 1; +#endif + + /* check if flash is programmed already, if not start bootloader anyway */ + if(pgm_read_byte_near(0x0000) != 0xFF) { + +#ifdef __AVR_ATmega128__ + /* no UART was selected, start application */ + if(!bootuart) { + app_start(); + } +#else + /* check if bootloader pin is set low */ + /* we don't start this part neither for the m8, nor m168 */ + //if(bit_is_set(BL_PIN, BL)) { + // app_start(); + // } +#endif + } + +#ifdef __AVR_ATmega128__ + /* no bootuart was selected, default to uart 0 */ + if(!bootuart) { + bootuart = 1; + } +#endif + + + /* initialize UART(s) depending on CPU defined */ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if(bootuart == 1) { + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0A = 0x00; + UCSR0C = 0x06; + UCSR0B = _BV(TXEN0)|_BV(RXEN0); + } + if(bootuart == 2) { + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); + } +#elif defined __AVR_ATmega163__ + UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSRA = 0x00; + UCSRB = _BV(TXEN)|_BV(RXEN); +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + +#ifdef DOUBLE_SPEED + UCSR0A = (1<> 8; +#else + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; +#endif + + UCSR0B = (1<>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + UCSRA = 0x00; + UCSRC = 0x06; + UCSRB = _BV(TXEN)|_BV(RXEN); +#endif + +#if defined __AVR_ATmega1280__ + /* Enable internal pull-up resistor on pin D0 (RX), in order + to supress line noise that prevents the bootloader from + timing out (DAM: 20070509) */ + /* feature added to the Arduino Mega --DC: 080930 */ + DDRE &= ~_BV(PINE0); + PORTE |= _BV(PINE0); +#endif + + + /* set LED pin as output */ + LED_DDR |= _BV(LED); + + + /* flash onboard LED to signal entering of bootloader */ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + // 4x for UART0, 5x for UART1 + flash_led(NUM_LED_FLASHES + bootuart); +#else + flash_led(NUM_LED_FLASHES); +#endif + + /* 20050803: by DojoCorp, this is one of the parts provoking the + system to stop listening, cancelled from the original */ + //putch('\0'); + + /* 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(); + } + + + /* P: Enter programming mode */ + /* R: Erase device, don't care as we will erase one page at a time anyway. */ + else if(ch=='P' || ch=='R') { + nothing_response(); + } + + + /* Leave programming mode */ + else if(ch=='Q') { + nothing_response(); +#ifdef WATCHDOG_MODS + // autoreset via watchdog (sneaky!) + WDTCSR = _BV(WDE); + while (1); // 16 ms +#endif + } + + + /* 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') { + if (getch() == 0x30) { + getch(); + ch = getch(); + getch(); + if (ch == 0) { + byte_response(SIG1); + } else if (ch == 1) { + byte_response(SIG2); + } else { + byte_response(SIG3); + } + } else { + getNch(3); + 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 (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + else address_high = 0x00; +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) + RAMPZ = address_high; +#endif + address.word = address.word << 1; //address * 2 -> byte location + /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ + if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) + while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete +#else + while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete +#endif + 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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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" +#ifdef __AVR_ATmega163__ + "andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write +#endif + "ldi r16,0x05 \n\t" //Write page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" + "ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write) +#endif + "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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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 +#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ || __AVR_ATmega128__ || __AVR_ATmega1280__ || __AVR_ATmega1281__ + : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#else + : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#endif + ); + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + 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 defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME + else flags.rampz = 0; +#endif + address.word = address.word << 1; // address * 2 -> byte location + if (getch() == 'E') flags.eeprom = 1; + else flags.eeprom = 0; + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + while(EECR & (1<= 'a') { + return (a - 'a' + 0x0a); + } else if(a >= '0') { + return(a - '0'); + } + return a; +} + + +char gethex(void) { + return (gethexnib() << 4) + gethexnib(); +} + + +void puthex(char ch) { + char ah; + + ah = ch >> 4; + if(ah >= 0x0a) { + ah = ah - 0x0a + 'a'; + } else { + ah += '0'; + } + + ch &= 0x0f; + if(ch >= 0x0a) { + ch = ch - 0x0a + 'a'; + } else { + ch += '0'; + } + + putch(ah); + putch(ch); +} + + +void putch(char ch) +{ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if(bootuart == 1) { + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; + } + else if (bootuart == 2) { + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; + } +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; +#else + /* m8,16,32,169,8515,8535,163 */ + while (!(UCSRA & _BV(UDRE))); + UDR = ch; +#endif +} + + +char getch(void) +{ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + uint32_t count = 0; + if(bootuart == 1) { + 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(); + } + + return UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))) { + /* 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(); + } + + return UDR1; + } + return 0; +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + uint32_t count = 0; + 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(); + } + return UDR0; +#else + /* m8,16,32,169,8515,8535,163 */ + uint32_t count = 0; + while(!(UCSRA & _BV(RXC))){ + /* 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(); + } + return UDR; +#endif +} + + +void getNch(uint8_t count) +{ + while(count--) { +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if(bootuart == 1) { + while(!(UCSR0A & _BV(RXC0))); + UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))); + UDR1; + } +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + getch(); +#else + /* m8,16,32,169,8515,8535,163 */ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + //while(!(UCSRA & _BV(RXC))); + //UDR; + getch(); // need to handle time out +#endif + } +} + + +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(); + } +} + +void flash_led(uint8_t count) +{ + while (count--) { + LED_PORT |= _BV(LED); + _delay_ms(100); + LED_PORT &= ~_BV(LED); + _delay_ms(100); + } +} + + +/* end of file ATmegaBOOT.c */ diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega1280.hex b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega1280.hex new file mode 100644 index 0000000..f16e877 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega1280.hex @@ -0,0 +1,245 @@ +:020000021000EC +:10F000000C9472F80C9492F80C9492F80C9492F878 +:10F010000C9492F80C9492F80C9492F80C9492F848 +:10F020000C9492F80C9492F80C9492F80C9492F838 +:10F030000C9492F80C9492F80C9492F80C9492F828 +:10F040000C9492F80C9492F80C9492F80C9492F818 +:10F050000C9492F80C9492F80C9492F80C9492F808 +:10F060000C9492F80C9492F80C9492F80C9492F8F8 +:10F070000C9492F80C9492F80C9492F80C9492F8E8 +:10F080000C9492F80C9492F80C9492F80C9492F8D8 +:10F090000C9492F80C9492F80C9492F80C9492F8C8 +:10F0A0000C9492F80C9492F80C9492F80C9492F8B8 +:10F0B0000C9492F80C9492F80C9492F80C9492F8A8 +:10F0C0000C9492F80C9492F80C9492F80C9492F898 +:10F0D0000C9492F80C9492F80C9492F80C9492F888 +:10F0E0000C9492F811241FBECFEFD1E2DEBFCDBF4A +:10F0F00012E0A0E0B2E0EEEDFEEF01E00BBF02C0D7 +:10F1000007900D92A833B107D9F71BBE13E0A8E30F +:10F11000B2E001C01D92A334B107E1F70E9412FAD8 +:10F120000C946DFF0C9400F8982F959595959595F6 +:10F130009595905D8F708A301CF1282F295A809107 +:10F140003802813019F0823071F008958091C0004A +:10F1500085FFFCCF9093C6008091C00085FFFCCF57 +:10F160002093C60008958091C80085FFFCCF90933E +:10F17000CE008091C80085FFFCCF2093CE0008957B +:10F18000282F205DDCCF982F80913802813019F034 +:10F19000823041F008958091C00085FFFCCF9093AC +:10F1A000C60008958091C80085FFFCCF9093CE00E3 +:10F1B0000895EF92FF920F931F9380913802813050 +:10F1C00069F1823031F080E01F910F91FF90EF9054 +:10F1D0000895EE24FF2487018091C80087FD17C0A1 +:10F1E0000894E11CF11C011D111D81E4E81682E464 +:10F1F000F8068FE0080780E0180770F3E0913A0204 +:10F20000F0913B0209958091C80087FFE9CF80917A +:10F21000CE001F910F91FF90EF900895EE24FF24F0 +:10F2200087018091C00087FD17C00894E11CF11C84 +:10F23000011D111D81E4E81682E4F8068FE008073D +:10F2400080E0180770F3E0913A02F0913B020995D3 +:10F250008091C00087FFE9CF8091C6001F910F9178 +:10F26000FF90EF9008950E94D9F8982F809138026E +:10F27000813049F0823091F091366CF490330CF08B +:10F280009053892F08958091C00085FFFCCF909303 +:10F29000C60091369CF39755892F08958091C80038 +:10F2A00085FFFCCF9093CE00E7CF1F930E9433F9E8 +:10F2B000182F0E9433F91295107F810F1F91089526 +:10F2C000982F20913802992339F0213031F02230E3 +:10F2D00061F091509923C9F708958091C00087FF8C +:10F2E000FCCF8091C6009150F5CF8091C80087FF78 +:10F2F000FCCF8091CE009150EDCF1F93182F0E942C +:10F30000D9F8803249F0809139028F5F80933902B9 +:10F31000853091F11F910895809138028130B9F0C4 +:10F320008230C1F78091C80085FFFCCF84E18093D3 +:10F33000CE008091C80085FFFCCF1093CE00809155 +:10F34000C80085FFFCCF80E18093CE00E3CF8091A1 +:10F35000C00085FFFCCF84E18093C6008091C0008F +:10F3600085FFFCCF1093C6008091C00085FFFCCFC5 +:10F3700080E18093C600CECFE0913A02F0913B024B +:10F3800009951F9108950E94D9F8803241F080912B +:10F3900039028F5F80933902853029F10895809179 +:10F3A0003802813089F08230C9F78091C80085FF2A +:10F3B000FCCF84E18093CE008091C80085FFFCCF14 +:10F3C00080E18093CE0008958091C00085FFFCCF3E +:10F3D00084E18093C6008091C00085FFFCCF80E16E +:10F3E0008093C6000895E0913A02F0913B0209959E +:10F3F000089540E951E08823A1F02F9A28EE33E0E8 +:10F40000FA013197F1F721503040D1F72F9828EECB +:10F4100033E0FA013197F1F721503040D1F78150B4 +:10F4200061F708952F923F924F925F926F927F9271 +:10F430008F929F92AF92BF92CF92DF92EF92FF9204 +:10F440000F931F93CF93DF93000081E080933802E6 +:10F4500080E18093C4001092C5001092C00086E045 +:10F460008093C20088E18093C1006898709A279ABF +:10F4700081E00E94F9F9E4E1EE2E7EE1D72E67E902 +:10F48000C62E53E0B52E40E1A42E9924939431E486 +:10F49000832E26E5722E92E5692E80E2582E09E42D +:10F4A000402E13E5312EB0E52B2E0E94D9F8803383 +:10F4B000C9F1813309F452C0803409F4C8C08134E1 +:10F4C00009F4EAC0823489F1853409F4CAC0803570 +:10F4D00049F1823539F1813529F1853509F4ECC0DE +:10F4E000863509F409C1843609F428C1843709F442 +:10F4F000ABC1853709F473C2863709F4D9C08132AC +:10F5000009F4B7C2809139028F5F80933902853048 +:10F5100061F6E0913A02F0913B0209950E94D9F818 +:10F52000803339F60E94C3F9C0CF2091380293E1AD +:10F5300005C0223061F09923A9F391502130C9F719 +:10F540008091C00087FFFCCF8091C600F4CF8091EE +:10F55000C80087FFFCCF8091CE00EDCF0E94D9F884 +:10F56000803281F6809138028130D1F1823009F009 +:10F570009CCF8091C80085FFFCCFE092CE008091A7 +:10F58000C80085FFFCCF8092CE008091C80085FF27 +:10F59000FCCF7092CE008091C80085FFFCCF6092B6 +:10F5A000CE008091C80085FFFCCF5092CE008091A4 +:10F5B000C80085FFFCCF4092CE008091C80085FF37 +:10F5C000FCCF3092CE008091C80085FFFCCF209206 +:10F5D000CE008091C80085FFFCCFA092CE0065CF01 +:10F5E0008091C00085FFFCCFE092C6008091C000F2 +:10F5F00085FFFCCF8092C6008091C00085FFFCCFC4 +:10F600007092C6008091C00085FFFCCF6092C6005A +:10F610008091C00085FFFCCF5092C6008091C00051 +:10F6200085FFFCCF4092C6008091C00085FFFCCFD3 +:10F630003092C6008091C00085FFFCCF2092C600AA +:10F640008091C00085FFFCCFA092C6002ECF0E9403 +:10F65000D9F8863808F466CF0E94D9F80E94C3F919 +:10F6600024CF2091380294E0213041F0223069F01B +:10F67000992309F457CF91502130C1F78091C000F0 +:10F6800087FFFCCF8091C600F3CF8091C80087FF31 +:10F69000FCCF8091CE00ECCF0E94D9F8803841F1A8 +:10F6A000813809F447C0823809F4CAC08839E1F0CA +:10F6B00080E00E947DF9F9CE0E94D9F880933C0247 +:10F6C0000E94D9F880933D020E94C3F9EECE0E94B9 +:10F6D000D9F80E94D9F8182F0E94D9F8112309F4FB +:10F6E0007EC2113009F40AC283E00E947DF9DDCEAA +:10F6F00082E00E947DF9D9CE0E94D9F8803339F397 +:10F700002091380292E0213039F0223061F09923C3 +:10F7100079F291502130C9F78091C00087FFFCCF6A +:10F720008091C600F4CF8091C80087FFFCCF809104 +:10F73000CE00EDCF81E00E947DF9B7CE0E94D9F8CE +:10F7400080933F030E94D9F880933E038091420347 +:10F750008E7F809342030E94D9F8853409F4B3C1A7 +:10F7600080913E0390913F03892B89F000E010E0E7 +:10F770000E94D9F8F801E25CFD4F80830F5F1F4FB4 +:10F7800080913E0390913F030817190788F30E9468 +:10F79000D9F8803209F0B6CE8091420380FFB2C121 +:10F7A00040913C0250913D02440F551F50933D0241 +:10F7B00040933C0260913E0370913F0361157105D7 +:10F7C000F1F080E090E09A01280F391FFC01E25C23 +:10F7D000FD4FE081F999FECF1FBA32BD21BDE0BDDA +:10F7E0000FB6F894FA9AF99A0FBE01968617970702 +:10F7F00050F3460F571F50933D0240933C028091B7 +:10F800003802813081F0823009F04FCE8091C800FB +:10F8100085FFFCCFE092CE008091C80085FFFCCF31 +:10F82000A092CE0042CE8091C00085FFFCCFE09236 +:10F83000C6008091C00085FFFCCFA092C60035CEE7 +:10F8400080E10E947DF931CE0E94D9F880933F0378 +:10F850000E94D9F880933E0320913C0230913D02F2 +:10F8600037FD46C1809142038D7F80934203220F72 +:10F87000331F30933D0220933C020E94D9F8853417 +:10F8800009F430C1809142038E7F809342030E942D +:10F89000D9F8803209F009CE60913802613009F45C +:10F8A0006FC0623009F473C000913E0310913F03B2 +:10F8B0000115110509F440C080914203782F717041 +:10F8C000F82EF69481E0F82240913C0250913D02DE +:10F8D00020E030E013C0FF2009F060C0FA019491ED +:10F8E000613009F43BC0623009F441C0CA0101969D +:10F8F0002F5F3F4FAC0120173107D0F4772359F326 +:10F90000F999FECF52BD41BDF89A90B56130F9F03A +:10F91000623061F78091C80085FFFCCF9093CE00E4 +:10F92000CA0101962F5F3F4FAC012017310730F31A +:10F9300090933D0280933C02613009F4CAC062306A +:10F9400009F0B3CD8091C80085FFFCCF46CE8091F1 +:10F95000C00085FFFCCF9093C600C8CF8091C00047 +:10F9600085FDF9CF8091C00085FFF8CFF4CF80915D +:10F97000C80085FDD3CF8091C80085FFF8CFCECFDA +:10F980008091C00085FFFCCFE092C6008DCF8091B2 +:10F99000C80085FFFCCFE092CE0086CFCA01A0E070 +:10F9A000B0E080509040AF4FBF4FABBFFC0197918C +:10F9B000613061F0623009F099CF8091C80085FD17 +:10F9C000ADCF8091C80085FFF8CFA8CF8091C0004F +:10F9D00085FDC1CF8091C00085FFF8CFBCCF0E94CC +:10F9E000D9F8803209F08ECD80913802813011F142 +:10F9F000823009F05ACD8091C80085FFFCCFE0929B +:10FA0000CE008091C80085FFFCCFD092CE008091BF +:10FA1000C80085FFFCCFC092CE008091C80085FF52 +:10FA2000FCCFB092CE008091C80085FFFCCFA092A1 +:10FA3000CE003BCD8091C00085FFFCCFE092C60098 +:10FA40008091C00085FFFCCFD092C6008091C0009D +:10FA500085FFFCCFC092C6008091C00085FFFCCF1F +:10FA6000B092C6008091C00085FFFCCFA092C60076 +:10FA70001CCD0E94D9F8813209F017CD0E94D9F827 +:10FA8000813209F012CD279A2F98109240032091CD +:10FA90003802E1E491E00EC0223009F4A4C0909352 +:10FAA0004003E92FF0E0E050FE4FE0819F5FEE233E +:10FAB00009F4A0C0213081F78091C00085FFFCCF00 +:10FAC000E093C600ECCF80914203816080934203B3 +:10FAD00047CE8091C00085FDB7CD8091C00085FFE5 +:10FAE000F8CFB2CD80914203816080934203CFCEA4 +:10FAF00080914203826080934203B9CE87E90E94DD +:10FB00007DF9D3CC80913D028823880F880B892111 +:10FB1000809341038BBF80913C0290913D02880FFE +:10FB2000991F90933D0280933C0280913E0380FF99 +:10FB300009C080913E0390913F03019690933F034B +:10FB400080933E03F894F999FECF1127E0913C028F +:10FB5000F0913D02CEE3D2E080913E0390913F03CD +:10FB6000103091F40091570001700130D9F303E097 +:10FB700000935700E8950091570001700130D9F3C8 +:10FB800001E100935700E895099019900091570002 +:10FB900001700130D9F301E000935700E895139507 +:10FBA000103898F011270091570001700130D9F3F7 +:10FBB00005E000935700E89500915700017001306F +:10FBC000D9F301E100935700E8953296029709F0C6 +:10FBD000C7CF103011F00296E5CF112410CE8EE180 +:10FBE0000E947DF962CC8091C80085FFFCCFE09334 +:10FBF000CE0055CF7AE0B72E6DE0A62E5AE3952EB3 +:10FC000040E2842E3DE3732E90E3692E81E3582E6B +:10FC1000213009F442C0223009F45FC00E94D9F8B3 +:10FC2000982F20913802213089F1223009F44EC0FA +:10FC3000943709F46BC0923709F405C1973709F47A +:10FC40007BC0953799F0923609F4BDC09A3601F71A +:10FC5000E0913A02F0913B02099520913802D8CF09 +:10FC60008091C00085FFFCCF9093C6000E94D9F818 +:10FC7000982F80913802813099F38230B9F78091C2 +:10FC8000C80085FFFCCF9093CE00F0CF8091C000DC +:10FC900085FFFCCF9093C600CBCF8091C00085FF3D +:10FCA000FCCFB092C6008091C00085FFFCCFA0922F +:10FCB000C6008091C00085FFFCCF9092C600809165 +:10FCC000C00085FFFCCF8092C600A8CF8091C800FD +:10FCD00085FFFCCF9093CE00ABCF8091C80085FF0D +:10FCE000FCCFB092CE008091C80085FFFCCFA092DF +:10FCF000CE008091C80085FFFCCF9092CE0080910D +:10FD0000C80085FFFCCF8092CE0088CF1F9947C0E6 +:10FD10002F9A213051F0223009F07ACF8091C8001B +:10FD200085FFFCCF6092CE0073CF8091C00085FF2D +:10FD3000FCCF6092C6006CCF0E94D9F8982F8091BA +:10FD400038028130F1F0823009F4ABC00E9455F9DD +:10FD5000082F0E9455F9182F0E94D9F8982F8091EA +:10FD600038028130A9F0823009F4A2C00E9455F90E +:10FD7000D02ECC24F601E10FF11D808320913802B2 +:10FD800047CF8091C00085FFFCCF9093C600DECFA7 +:10FD90008091C00085FFFCCF9093C600E7CF2F98DD +:10FDA000213051F0223009F033CF8091C80085FF17 +:10FDB000FCCF5092CE002CCF8091C00085FFFCCFAD +:10FDC0005092C60025CF213041F1223081F080E8E9 +:10FDD00085BF109274001092750080E091E1FC01E3 +:10FDE000819180E091E13097D1F3CF01F8CF8091FC +:10FDF000C80085FFFCCF82E68093CE008091C800CA +:10FE000085FFFCCF85E78093CE008091C80085FFF9 +:10FE1000FCCF83E78093CE00DACF8091C00085FFCE +:10FE2000FCCF82E68093C6008091C00085FFFCCFA6 +:10FE300085E78093C6008091C00085FFFCCF83E7F3 +:10FE40008093C600C4CF0E94D9F8982F80913802C1 +:10FE50008130C9F08230D1F10E9455F9182F0E94EB +:10FE600055F9982F809138028130A1F0823039F114 +:10FE7000F12EEE24F701E90FF11D80810E9494F824 +:10FE800020913802C5CE8091C00085FFFCCF9093B1 +:10FE9000C600E2CF8091C00085FFFCCF7092C60003 +:10FEA000E7CF8091C80085FFFCCF9093CE004ECF66 +:10FEB0008091C80085FFFCCF9093CE0057CF8091F2 +:10FEC000C80085FFFCCF7092CE00D2CF8091C800D1 +:0EFED00085FFFCCF9093CE00BFCFF894FFCFFC +:10FEDE0041546D656761424F4F54202F204172642B +:10FEEE0075696E6F204D656761202D20284329208E +:10FEFE0041726475696E6F204C4C43202D20303951 +:08FF0E00303933300A0D008088 +:040000031000F000F9 +:00000001FF diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex new file mode 100644 index 0000000..43a8b30 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex @@ -0,0 +1,125 @@ +:107800000C94343C0C94513C0C94513C0C94513CE1 +:107810000C94513C0C94513C0C94513C0C94513CB4 +:107820000C94513C0C94513C0C94513C0C94513CA4 +:107830000C94513C0C94513C0C94513C0C94513C94 +:107840000C94513C0C94513C0C94513C0C94513C84 +:107850000C94513C0C94513C0C94513C0C94513C74 +:107860000C94513C0C94513C11241FBECFEFD8E036 +:10787000DEBFCDBF11E0A0E0B1E0ECE9FFE702C060 +:1078800005900D92A230B107D9F712E0A2E0B1E065 +:1078900001C01D92AD30B107E1F70E942D3D0C945F +:1078A000CC3F0C94003C982F959595959595959582 +:1078B000905D8F708A307CF0282F295A8091C0000B +:1078C00085FFFCCF9093C6008091C00085FFFCCF60 +:1078D0002093C6000895282F205DF0CF982F809127 +:1078E000C00085FFFCCF9093C6000895EF92FF92F1 +:1078F0000F931F93EE24FF2487018091C00087FD22 +:1079000017C00894E11CF11C011D111D81E4E8164B +:1079100082E4F8068FE0080780E0180770F3E09132 +:107920000401F091050109958091C00087FFE9CF1E +:107930008091C6001F910F91FF90EF9008950E94D3 +:10794000763C982F8091C00085FFFCCF9093C600B5 +:1079500091362CF490330CF09053892F089597555D +:10796000892F08951F930E949F3C182F0E949F3CCF +:107970001295107F810F1F9108951F93182F882350 +:1079800021F00E94763C1150E1F71F9108951F935A +:10799000182F0E94763C803249F0809103018F5F5E +:1079A000809303018530C1F01F9108958091C0003C +:1079B00085FFFCCF84E18093C6008091C00085FFE5 +:1079C000FCCF1093C6008091C00085FFFCCF80E102 +:1079D0008093C6001F910895E0910401F091050184 +:1079E00009951F9108950E94763C803241F0809164 +:1079F00003018F5F80930301853081F008958091AA +:107A0000C00085FFFCCF84E18093C6008091C00058 +:107A100085FFFCCF80E18093C6000895E0910401CA +:107A2000F09105010995089540E951E08823A1F0FE +:107A30002D9A28EE33E0FA013197F1F721503040CA +:107A4000D1F72D9828EE33E0FA013197F1F7215064 +:107A50003040D1F7815061F708953F924F925F9285 +:107A60006F927F928F929F92AF92BF92CF92DF924E +:107A7000EF92FF920F931F93CF93DF93000080E16B +:107A80008093C4001092C50088E18093C10086E015 +:107A90008093C2005098589A259A81E00E94143D24 +:107AA00024E1F22E9EE1E92E85E9D82E0FE0C02ECA +:107AB00010E1B12EAA24A394B1E49B2EA6E58A2E50 +:107AC000F2E57F2EE0E26E2E79E4572E63E5462E36 +:107AD00050E5352E0E94763C8033B1F18133B9F107 +:107AE000803409F46FC0813409F476C0823409F41B +:107AF00085C0853409F488C0803531F1823521F1A3 +:107B0000813511F1853509F485C0863509F48DC0BC +:107B1000843609F496C0843709F403C1853709F423 +:107B200072C1863709F466C0809103018F5F80932C +:107B30000301853079F6E0910401F0910501099582 +:107B40000E94763C803351F60E94F33CC3CF0E94E2 +:107B5000763C803249F78091C00085FFFCCFF092DF +:107B6000C6008091C00085FFFCCF9092C600809136 +:107B7000C00085FFFCCF8092C6008091C00085FFC9 +:107B8000FCCF7092C6008091C00085FFFCCF609250 +:107B9000C6008091C00085FFFCCF5092C600809146 +:107BA000C00085FFFCCF4092C6008091C00085FFD9 +:107BB000FCCF3092C6008091C00085FFFCCFB09210 +:107BC000C60088CF0E94763C863808F4BDCF0E945C +:107BD000763C0E94F33C7ECF0E94763C803809F4CC +:107BE0009CC0813809F40BC1823809F43CC1883942 +:107BF00009F48FC080E00E94C73C6CCF84E10E94F2 +:107C0000BD3C0E94F33C66CF85E00E94BD3C0E94D3 +:107C1000F33C60CF0E94763C809306010E94763C44 +:107C2000809307010E94F33C55CF0E94763C80333D +:107C300009F41DC183E00E94BD3C80E00E94C73C66 +:107C400049CF0E94763C809309020E94763C809343 +:107C5000080280910C028E7F80930C020E94763C79 +:107C6000853409F415C18091080290910902892B8D +:107C700089F000E010E00E94763CF801E85FFE4FDA +:107C800080830F5F1F4F80910802909109020817AF +:107C9000190788F30E94763C803209F045CF809125 +:107CA0000C0280FF01C16091060170910701660F0F +:107CB000771F7093070160930601A0910802B091AD +:107CC00009021097C9F0E8E0F1E09B01AD014E0F09 +:107CD0005F1FF999FECF32BD21BD819180BDFA9A17 +:107CE000F99A2F5F3F4FE417F50799F76A0F7B1F4B +:107CF00070930701609306018091C00085FFFCCF5F +:107D0000F092C6008091C00085FFFCCFB092C60003 +:107D1000E1CE83E00E94C73CDDCE82E00E94C73CFA +:107D2000D9CE0E94763C809309020E94763C8093D3 +:107D300008028091060190910701880F991F909386 +:107D40000701809306010E94763C853409F4A6C0A1 +:107D500080910C028E7F80930C020E94763C8032D0 +:107D600009F0B8CE8091C00085FFFCCFF092C6002C +:107D7000609108027091090261157105B9F140E046 +:107D800050E080910C02A82FA170B82FB27011C0E2 +:107D9000BB2309F45CC0E0910601F0910701319624 +:107DA000F0930701E09306014F5F5F4F46175707B7 +:107DB000E8F4AA2369F3F999FECF209106013091E6 +:107DC000070132BD21BDF89A90B58091C00085FFB2 +:107DD000FCCF9093C6002F5F3F4F30930701209355 +:107DE00006014F5F5F4F4617570718F38091C00099 +:107DF00085FDE5CE8091C00085FFF8CFE0CE81E023 +:107E00000E94C73C67CE0E94763C803209F08CCE3F +:107E10008091C00085FFFCCFF092C6008091C00029 +:107E200085FFFCCFE092C6008091C00085FFFCCFAB +:107E3000D092C6008091C00085FFFCCFC092C600E2 +:107E40008091C00085FFFCCFB092C60043CEE09188 +:107E50000601F091070194918091C00085FFFCCF4D +:107E60009093C6009CCF80E10E94C73C33CE0E9415 +:107E7000763C0E94763C182F0E94763C112309F430 +:107E800083C0113009F484C08FE00E94C73C22CE29 +:107E900080910C02816080930C02E5CE80910C02EF +:107EA000816080930C0259CF809107018823880F4D +:107EB000880B8A2180930B02809106019091070123 +:107EC000880F991F90930701809306018091080203 +:107ED00080FF09C080910802909109020196909359 +:107EE000090280930802F894F999FECF1127E091D6 +:107EF0000601F0910701C8E0D1E08091080290915D +:107F00000902103091F40091570001700130D9F34B +:107F100003E000935700E89500915700017001308D +:107F2000D9F301E100935700E89509901990009169 +:107F3000570001700130D9F301E000935700E89534 +:107F40001395103498F011270091570001700130FB +:107F5000D9F305E000935700E895009157000170B0 +:107F60000130D9F301E100935700E895329602976A +:107F700009F0C7CF103011F00296E5CF112480919F +:107F8000C00085FFB9CEBCCE8EE10E94C73CA2CD19 +:0C7F900085E90E94C73C9ECDF894FFCF0D +:027F9C00800063 +:040000030000780081 +:00000001FF diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex new file mode 100644 index 0000000..9753e2e --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex @@ -0,0 +1,124 @@ +:107800000C94343C0C94513C0C94513C0C94513CE1 +:107810000C94513C0C94513C0C94513C0C94513CB4 +:107820000C94513C0C94513C0C94513C0C94513CA4 +:107830000C94513C0C94513C0C94513C0C94513C94 +:107840000C94513C0C94513C0C94513C0C94513C84 +:107850000C94513C0C94513C0C94513C0C94513C74 +:107860000C94513C0C94513C11241FBECFEFD8E036 +:10787000DEBFCDBF11E0A0E0B1E0EAE8FFE702C063 +:1078800005900D92A230B107D9F712E0A2E0B1E065 +:1078900001C01D92AD30B107E1F70E942D3D0C945F +:1078A000C33F0C94003C982F95959595959595958B +:1078B000905D8F708A307CF0282F295A8091C0000B +:1078C00085FFFCCF9093C6008091C00085FFFCCF60 +:1078D0002093C6000895282F205DF0CF982F809127 +:1078E000C00085FFFCCF9093C6000895EF92FF92F1 +:1078F0000F931F93EE24FF2487018091C00087FD22 +:1079000017C00894E11CF11C011D111D81E2E8164D +:1079100081EAF80687E0080780E0180770F3E09135 +:107920000401F091050109958091C00087FFE9CF1E +:107930008091C6001F910F91FF90EF9008950E94D3 +:10794000763C982F8091C00085FFFCCF9093C600B5 +:1079500091362CF490330CF09053892F089597555D +:10796000892F08951F930E949F3C182F0E949F3CCF +:107970001295107F810F1F9108951F93182F882350 +:1079800021F00E94763C1150E1F71F9108951F935A +:10799000182F0E94763C803249F0809103018F5F5E +:1079A000809303018530C1F01F9108958091C0003C +:1079B00085FFFCCF84E18093C6008091C00085FFE5 +:1079C000FCCF1093C6008091C00085FFFCCF80E102 +:1079D0008093C6001F910895E0910401F091050184 +:1079E00009951F9108950E94763C803241F0809164 +:1079F00003018F5F80930301853081F008958091AA +:107A0000C00085FFFCCF84E18093C6008091C00058 +:107A100085FFFCCF80E18093C6000895E0910401CA +:107A2000F09105010995089548EC50E08823A1F0F4 +:107A30002D9A28EE33E0FA013197F1F721503040CA +:107A4000D1F72D9828EE33E0FA013197F1F7215064 +:107A50003040D1F7815061F708953F924F925F9285 +:107A60006F927F928F929F92AF92BF92CF92DF924E +:107A7000EF92FF920F931F93CF93DF93000082E06A +:107A80008093C00080E18093C4001092C50088E11B +:107A90008093C10086E08093C2005098589A259A3E +:107AA00081E00E94143D24E1F22E9EE1E92E85E959 +:107AB000D82E0FE0C02E10E1B12EAA24A394B1E479 +:107AC0009B2EA6E58A2EF2E57F2EE0E26E2E79E46B +:107AD000572E63E5462E50E5352E0E94763C8033C6 +:107AE000B1F18133B9F1803409F46FC0813409F404 +:107AF00076C0823409F485C0853409F488C08035A5 +:107B000031F1823521F1813511F1853509F485C0D6 +:107B1000863509F48DC0843609F496C0843709F49B +:107B200003C1853709F472C1863709F466C08091B4 +:107B300003018F5F80930301853079F6E0910401A2 +:107B4000F091050109950E94763C803351F60E9420 +:107B5000F33CC3CF0E94763C803249F78091C0004D +:107B600085FFFCCFF092C6008091C00085FFFCCF5E +:107B70009092C6008091C00085FFFCCF8092C60025 +:107B80008091C00085FFFCCF7092C6008091C0003C +:107B900085FFFCCF6092C6008091C00085FFFCCFBE +:107BA0005092C6008091C00085FFFCCF4092C60075 +:107BB0008091C00085FFFCCF3092C6008091C0004C +:107BC00085FFFCCFB092C60088CF0E94763C8638F5 +:107BD00008F4BDCF0E94763C0E94F33C7ECF0E9409 +:107BE000763C803809F49CC0813809F40BC1823896 +:107BF00009F430C1883909F48FC080E00E94C73C85 +:107C00006CCF84E10E94BD3C0E94F33C66CF85E0CE +:107C10000E94BD3C0E94F33C60CF0E94763C809362 +:107C200006010E94763C809307010E94F33C55CFE9 +:107C30000E94763C803309F411C183E00E94BD3C70 +:107C400080E00E94C73C49CF0E94763C80930902A5 +:107C50000E94763C8093080280910C028E7F809374 +:107C60000C020E94763C853409F409C18091080217 +:107C700090910902892B89F000E010E00E94763C87 +:107C8000F801E85FFE4F80830F5F1F4F809108026D +:107C9000909109020817190788F30E94763C8032F8 +:107CA00009F045CF80910C0280FFF5C0609106017C +:107CB00070910701660F771F7093070160930601AB +:107CC000A0910802B09109021097C9F0E8E0F1E034 +:107CD0009B01AD014E0F5F1FF999FECF32BD21BD53 +:107CE000819180BDFA9AF99A2F5F3F4FE417F5070B +:107CF00099F76A0F7B1F70930701609306018091CB +:107D0000C00085FFFCCFF092C6008091C00085FFC7 +:107D1000FCCFB092C600E1CE83E00E94C73CDDCE2E +:107D200082E00E94C73CD9CE0E94763C8093090233 +:107D30000E94763C80930802809106019091070191 +:107D4000880F991F90930701809306010E94763C4B +:107D5000853409F49AC080910C028E7F80930C02C6 +:107D60000E94763C803209F0B8CE8091C00085FF39 +:107D7000FCCFF092C600A0910802B09109021097C2 +:107D8000C1F180910C02082F0170182F1695117007 +:107D9000E0910601F0910701AF014F5F5F4FBA011B +:107DA00020E030E00023B1F4112339F49491809164 +:107DB000C00085FFFCCF9093C6002F5F3F4FCB01E3 +:107DC0000196FA012A173B0780F4BC014F5F5F4F11 +:107DD000002351F3F999FECFF2BDE1BDF89A90B5B9 +:107DE0008091C00085FFFCCFE6CF709307016093C0 +:107DF00006018091C00085FDE5CE8091C00085FF21 +:107E0000F8CFE0CE81E00E94C73C67CE0E94763C6E +:107E1000803209F08CCE8091C00085FFFCCFF092BB +:107E2000C6008091C00085FFFCCFE092C600809123 +:107E3000C00085FFFCCFD092C6008091C00085FFB6 +:107E4000FCCFC092C6008091C00085FFFCCFB092ED +:107E5000C60043CE80E10E94C73C3FCE0E94763CE4 +:107E60000E94763C182F0E94763C112309F483C0AF +:107E7000113009F484C08FE00E94C73C2ECE80915F +:107E80000C02816080930C02F1CE80910C02816023 +:107E900080930C0265CF809107018823880F880B9F +:107EA0008A2180930B028091060190910701880F2F +:107EB000991F90930701809306018091080280FF2B +:107EC00009C08091080290910902019690930902DD +:107ED00080930802F894F999FECF1127E0910601EA +:107EE000F0910701C8E0D1E0809108029091090269 +:107EF000103091F40091570001700130D9F303E084 +:107F000000935700E8950091570001700130D9F3B4 +:107F100001E100935700E8950990199000915700EE +:107F200001700130D9F301E000935700E8951395F3 +:107F3000103498F011270091570001700130D9F3E7 +:107F400005E000935700E89500915700017001305B +:107F5000D9F301E100935700E8953296029709F0B2 +:107F6000C7CF103011F00296E5CF11248091C000E8 +:107F700085FFC5CEC8CE8EE10E94C73CAECD85E957 +:0A7F80000E94C73CAACDF894FFCF81 +:027F8A00800075 +:040000030000780081 +:00000001FF diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_diecimila.hex b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_diecimila.hex new file mode 100644 index 0000000..feac9d2 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_diecimila.hex @@ -0,0 +1,126 @@ +:103800000C94341C0C94511C0C94511C0C94511CA1 +:103810000C94511C0C94511C0C94511C0C94511C74 +:103820000C94511C0C94511C0C94511C0C94511C64 +:103830000C94511C0C94511C0C94511C0C94511C54 +:103840000C94511C0C94511C0C94511C0C94511C44 +:103850000C94511C0C94511C0C94511C0C94511C34 +:103860000C94511C0C94511C11241FBECFEFD4E0BA +:10387000DEBFCDBF11E0A0E0B1E0E4EAFFE302C0AB +:1038800005900D92A230B107D9F712E0A2E0B1E0A5 +:1038900001C01D92AD30B107E1F70E94361D0C94B6 +:1038A000D01F0C94001C982F9595959595959595FE +:1038B000905D8F708A307CF0282F295A8091C0004B +:1038C00085FFFCCF9093C6008091C00085FFFCCFA0 +:1038D0002093C6000895282F205DF0CF982F809167 +:1038E000C00085FFFCCF9093C6000895EF92FF9231 +:1038F0000F931F93EE24FF2487018091C00087FD62 +:1039000017C00894E11CF11C011D111D81E4E8168B +:1039100082E4F8068FE0080780E0180770F3E09172 +:103920000401F091050109958091C00087FFE9CF5E +:103930008091C6001F910F91FF90EF9008950E9413 +:10394000761C982F8091C00085FFFCCF9093C60015 +:1039500091362CF490330CF09053892F089597559D +:10396000892F08951F930E949F1C182F0E949F1C4F +:103970001295107F810F1F910895882351F0982F81 +:1039800091508091C00087FFFCCF8091C6009923A1 +:10399000B9F708951F93182F0E94761C803249F0C2 +:1039A000809103018F5F809303018530C1F01F91E7 +:1039B00008958091C00085FFFCCF84E18093C6000C +:1039C0008091C00085FFFCCF1093C6008091C0009D +:1039D00085FFFCCF80E18093C6001F910895E091A0 +:1039E0000401F091050109951F9108950E94761C2C +:1039F000803241F0809103018F5F80930301853015 +:103A000081F008958091C00085FFFCCF84E1809310 +:103A1000C6008091C00085FFFCCF80E18093C60086 +:103A20000895E0910401F09105010995089510921F +:103A30000A028823D1F090E040E951E02D9A28EE67 +:103A400033E0FA013197F1F721503040D1F72D984A +:103A500028EE33E0FA013197F1F721503040D1F7E9 +:103A60009F5F981758F380930A0208953F924F92F0 +:103A70005F926F927F928F929F92AF92BF92CF92FE +:103A8000DF92EF92FF920F931F93CF93DF9300008B +:103A900083E38093C4001092C50088E18093C10045 +:103AA00086E08093C2005098589A259A81E00E943F +:103AB000171D44E1F42E3EE1E32E24E9D22E96E0D8 +:103AC000C92E80E1B82EAA24A39401E4902E16E515 +:103AD000812EB2E57B2EA0E26A2EF9E45F2EE3E5AB +:103AE0004E2E70E5372E0E94761C8033B1F1813363 +:103AF00009F441C0803409F479C0813409F48CC0E0 +:103B0000823471F1853409F47BC0803531F182351E +:103B100021F1813511F1853509F48DC0863509F41F +:103B20009DC0843609F4AEC0843709F41BC18537C3 +:103B300009F485C1863709F47AC0809103018F5F4B +:103B400080930301853079F6E0910401F09105013D +:103B500009950E94761C803351F60E94F61CC3CF53 +:103B600093E18091C00087FFFCCF8091C60099232C +:103B7000A1F39150F6CF0E94761C8032F1F680912D +:103B8000C00085FFFCCFF092C6008091C00085FF89 +:103B9000FCCF9092C6008091C00085FFFCCF809240 +:103BA000C6008091C00085FFFCCF7092C600809156 +:103BB000C00085FFFCCF6092C6008091C00085FFE9 +:103BC000FCCF5092C6008091C00085FFFCCF409290 +:103BD000C6008091C00085FFFCCF3092C600809166 +:103BE000C00085FFFCCFB092C6007DCF0E94761C3E +:103BF000863808F4B2CF0E94761C0E94F61C73CF60 +:103C000094E08091C00087FFFCCF8091C60099238B +:103C100009F4A3CF9150F5CF0E94761C8038D1F0E3 +:103C2000813861F1823809F499C0883979F080E0EF +:103C30000E94CA1C58CF0E94761C809306010E94E5 +:103C4000761C809307010E94F61C4DCF83E00E94F2 +:103C5000CA1C49CF82E00E94CA1C45CF0E94761C34 +:103C6000803309F486C192E08091C00087FFFCCFC9 +:103C70008091C6009923D9F29150F6CF81E00E943D +:103C8000CA1C31CF0E94761C809309020E94761CC8 +:103C90008093080280910C028E7F80930C020E9418 +:103CA000761C853429F480910C02816080930C028B +:103CB0008091080290910902892B89F000E010E0C0 +:103CC0000E94761CF801E85FFE4F80830F5F1F4F54 +:103CD00080910802909109020817190788F30E9441 +:103CE000761C803209F029CF80910C0280FFD1C070 +:103CF0004091060150910701440F551F5093070151 +:103D000040930601A0910802B09109021097C9F0F2 +:103D1000E8E0F1E09A01BD016E0F7F1FF999FECF37 +:103D200032BD21BD819180BDFA9AF99A2F5F3F4F34 +:103D3000E617F70799F74A0F5B1F50930701409367 +:103D400006018091C00085FFFCCFF092C6008091F3 +:103D5000C00085FFFCCFB092C600C5CE80E10E94B6 +:103D6000CA1CC1CE0E94761C809309020E94761C58 +:103D7000809308028091060190910701880F991F96 +:103D800090930701809306010E94761C853409F404 +:103D90007AC080910C028E7F80930C020E94761C68 +:103DA000803209F0A0CE8091C00085FFFCCFF09258 +:103DB000C600A0910802B09109021097B9F1809154 +:103DC0000C02182F1170082F0270E0910601F0917B +:103DD00007019F012F5F3F4FB90140E050E01123E1 +:103DE000B1F4002339F494918091C00085FFFCCF99 +:103DF0009093C6004F5F5F4FCB010196F9014A17C0 +:103E00005B0780F4BC012F5F3F4F112351F3F999F9 +:103E1000FECFF2BDE1BDF89A90B58091C00085FF5C +:103E2000FCCFE6CF70930701609306018091C0003C +:103E300085FDD9CE8091C00085FFF8CFD4CE0E94F9 +:103E4000761C803209F079CE8091C00085FFFCCFCE +:103E5000F092C6008091C00085FFFCCFE092C600C2 +:103E60008091C00085FFFCCFD092C6008091C00039 +:103E700085FFFCCFC092C6008091C00085FFFCCFBB +:103E8000B092C60030CE80910C02816080930C020B +:103E900085CF809107018823880F880B8A21809322 +:103EA0000B028091060190910701880F991F909352 +:103EB0000701809306018091080280FF09C080916C +:103EC00008029091090201969093090280930802DA +:103ED000F894F999FECF1127E0910601F0910701BE +:103EE000C8E0D1E08091080290910902103091F46D +:103EF0000091570001700130D9F303E0009357009F +:103F0000E8950091570001700130D9F301E1009369 +:103F10005700E89509901990009157000170013001 +:103F2000D9F301E000935700E8951395103498F009 +:103F300011270091570001700130D9F305E000937B +:103F40005700E8950091570001700130D9F301E165 +:103F500000935700E8953296029709F0C7CF1030CA +:103F600011F00296E5CF11248091C00085FFE9CEC3 +:103F7000ECCE0E94761C0E94761C182F0E94761CA4 +:103F8000112351F0113021F086E00E94CA1CABCD04 +:103F900084E90E94CA1CA7CD8EE10E94CA1CA3CD51 +:043FA000F894FFCFC3 +:023FA40080009B +:0400000300003800C1 +:00000001FF diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_ng.hex b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_ng.hex new file mode 100644 index 0000000..387091e --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_ng.hex @@ -0,0 +1,110 @@ +:103800000C94341C0C94511C0C94511C0C94511CA1 +:103810000C94511C0C94511C0C94511C0C94511C74 +:103820000C94511C0C94511C0C94511C0C94511C64 +:103830000C94511C0C94511C0C94511C0C94511C54 +:103840000C94511C0C94511C0C94511C0C94511C44 +:103850000C94511C0C94511C0C94511C0C94511C34 +:103860000C94511C0C94511C11241FBECFEFD4E0BA +:10387000DEBFCDBF11E0A0E0B1E0E4EAFEE302C0AC +:1038800005900D92A230B107D9F712E0A2E0B1E0A5 +:1038900001C01D92AD30B107E1F70E94ED1C0C9400 +:1038A000511F0C94001C482F10920A0280E08417CC +:1038B000E0F4582F2D9A28EE33E080E991E001974B +:1038C000F1F721503040C9F72D9828EE33E080E918 +:1038D00091E00197F1F721503040C9F7852F8F5FB4 +:1038E000582F841738F380930A020895EF92FF92BD +:1038F0000F931F93EE24FF2487018091C00087FD62 +:1039000017C00894E11CF11C011D111D81E0E8168F +:1039100082E1F8068AE7080780E0180770F3E09173 +:103920000201F091030109958091C00087FFE9CF62 +:103930008091C600992787FD90951F910F91FF9068 +:10394000EF900895982F8091C00085FFFCCF909351 +:10395000C60008950E94761C803271F080910401A7 +:103960008F5F80930401853009F00895E091020192 +:10397000F09103010995089584E10E94A21C80E161 +:103980000E94A21C0895CF93C82F0E94761C8032FB +:1039900041F0809104018F5F80930401853081F4B0 +:1039A0000AC084E10E94A21C8C2F0E94A21C80E10C +:1039B0000E94A21C05C0E0910201F091030109954B +:1039C000CF910895CF93C82FC150CF3F21F00E94CF +:1039D000761CC150E0F7CF910895CFEFD4E0DEBF61 +:1039E000CDBF000083E38093C4001092C50088E13E +:1039F0008093C10086E08093C2005098589A259A1F +:103A000083E00E94531C0E94761C8033B1F1813305 +:103A1000B9F1803409F455C0813409F45BC08234B3 +:103A200009F46DC0853409F470C0803531F18235F8 +:103A300021F1813511F1853509F46BC0863509F422 +:103A400073C0843609F47AC0843709F4CEC0853750 +:103A500009F429C1863709F44AC0809104018F5FB7 +:103A600080930401853079F6E0910201F091030121 +:103A700009950E94761C803351F60E94AA1CC3CF80 +:103A80000E94761CC82F803241F784E10E94A21C5C +:103A900081E40E94A21C86E50E94A21C82E50E948D +:103AA000A21C8C2F0E94A21C89E40E94A21C83E508 +:103AB0000E94A21C80E50E94A21C80E10E94A21C20 +:103AC000A2CF0E94761C8638C0F20E94761C0E940B +:103AD000AA1C99CF0E94761C803809F486C18138CF +:103AE00009F487C1823809F488C1883921F080E05F +:103AF0000E94C31C88CF83E00E94C31C84CF84E152 +:103B00000E94E21C0E94AA1C7ECF85E00E94E21C5B +:103B1000F9CF0E94761C809306010E94761C809348 +:103B200007010E94AA1C6FCF0E94761C803309F403 +:103B3000CAC083E00E94E21C80E0DACF0E94761CBB +:103B4000809309020E94761C8093080280910C02E7 +:103B50008E7F80930C020E94761C853409F4C4C0C9 +:103B600000E010E0809108029091090218161906F1 +:103B700070F4C8E0D1E00E94761C89930F5F1F4F5C +:103B8000809108029091090208171907A0F30E947A +:103B9000761C803209F061CF80910C0280FFAEC0AC +:103BA000E0910601F0910701EE0FFF1F00E010E029 +:103BB00020910802309109021216130680F4A8E041 +:103BC000B1E0F999FECFF2BDE1BD8D9180BDFA9AC9 +:103BD000F99A31960F5F1F4F0217130790F3F09376 +:103BE0000701E093060184E166CF0E94761C809372 +:103BF00009020E94761C8093080280910601909130 +:103C00000701880F991F90930701809306010E9476 +:103C1000761C853409F46EC080910C028E7F8093EF +:103C20000C020E94761C803209F0EDCE84E10E94E5 +:103C3000A21C00E010E02091080230910902121647 +:103C4000130608F03ACFE0910601F0910701809148 +:103C50000C0280FF1FC0F999FECFF2BDE1BDF89ABA +:103C600080B50E94A21CE0910601F09107013196F7 +:103C7000F0930701E09306012091080230910902B8 +:103C80000F5F1F4F0217130708F017CF80910C0228 +:103C900080FDE1CF869580FFB4C03196F093070197 +:103CA000E0930601EDCF0E94761C803209F0D5CE5C +:103CB00084E10E94A21C8EE10E94A21C84E90E9461 +:103CC000A21C86E0F8CE0E94761C0E94761CC82FAB +:103CD0000E94761CCC2309F47CC0C13009F47DC05D +:103CE00086E00E94C31C8FCE80910C02816080937D +:103CF0000C0236CF80910C02816091CF8091070138 +:103D000087FD6FC010920B02809106019091070110 +:103D1000880F991F909307018093060180910802F4 +:103D200080FF09C08091080290910902019690934A +:103D3000090280930802F894F999FECF1127E091C7 +:103D40000601F0910701C8E0D1E08091080290914E +:103D50000902103091F40091570001700130D9F33D +:103D600003E000935700E89500915700017001307F +:103D7000D9F301E100935700E8950990199000915B +:103D8000570001700130D9F301E000935700E89526 +:103D90001395103498F011270091570001700130ED +:103DA000D9F305E000935700E895009157000170A2 +:103DB0000130D9F301E100935700E895329602975C +:103DC00009F0C7CF103011F00296E5CF112484E13D +:103DD00072CE8EE10E94C31C16CE84E90E94C31CE1 +:103DE00012CE81E080930B028FCF82E00E94C31C31 +:103DF0000ACE81E00E94C31C06CE80E10E94C31C53 +:103E000002CE84910E94A21C2091080230910902E6 +:103E1000E0910601F091070140CFCF930E94761CFC +:103E2000C82F0E94A21CC13614F0C75503C0C0336E +:103E30000CF0C0538C2F992787FD9095CF91089552 +:103E40000F931F930E940D1F082F112707FD109538 +:103E500002951295107F1027007F10270E940D1FDA +:103E6000800F992787FD90951F910F910895CF930B +:103E7000C82F85958595859585958A3034F0895A22 +:103E8000CF70CA3034F0C95A05C0805DCF70CA30D7 +:103E9000D4F7C05D0E94A21C8C2F0E94A21CCF915F +:043EA0000895FFCFB3 +:023EA40080009C +:0400000300003800C1 +:00000001FF diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_pro_8MHz.hex b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_pro_8MHz.hex new file mode 100644 index 0000000..994e478 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/ATmegaBOOT_168_pro_8MHz.hex @@ -0,0 +1,126 @@ +:103800000C94341C0C94511C0C94511C0C94511CA1 +:103810000C94511C0C94511C0C94511C0C94511C74 +:103820000C94511C0C94511C0C94511C0C94511C64 +:103830000C94511C0C94511C0C94511C0C94511C54 +:103840000C94511C0C94511C0C94511C0C94511C44 +:103850000C94511C0C94511C0C94511C0C94511C34 +:103860000C94511C0C94511C11241FBECFEFD4E0BA +:10387000DEBFCDBF11E0A0E0B1E0EEEAFFE302C0A1 +:1038800005900D92A230B107D9F712E0A2E0B1E0A5 +:1038900001C01D92AD30B107E1F70E94331D0C94B9 +:1038A000D51F0C94001C982F9595959595959595F9 +:1038B000905D8F708A307CF0282F295A8091C0004B +:1038C00085FFFCCF9093C6008091C00085FFFCCFA0 +:1038D0002093C6000895282F205DF0CF982F809167 +:1038E000C00085FFFCCF9093C6000895EF92FF9231 +:1038F0000F931F93EE24FF2487018091C00087FD62 +:1039000017C00894E11CF11C011D111D81E2E8168D +:1039100081EAF80687E0080780E0180770F3E09175 +:103920000401F091050109958091C00087FFE9CF5E +:103930008091C6001F910F91FF90EF9008950E9413 +:10394000761C982F8091C00085FFFCCF9093C60015 +:1039500091362CF490330CF09053892F089597559D +:10396000892F08951F930E949F1C182F0E949F1C4F +:103970001295107F810F1F9108951F93182F882390 +:1039800021F00E94761C1150E1F71F9108951F93BA +:10399000182F0E94761C803249F0809103018F5FBE +:1039A000809303018530C1F01F9108958091C0007C +:1039B00085FFFCCF84E18093C6008091C00085FF25 +:1039C000FCCF1093C6008091C00085FFFCCF80E142 +:1039D0008093C6001F910895E0910401F0910501C4 +:1039E00009951F9108950E94761C803241F08091C4 +:1039F00003018F5F80930301853081F008958091EA +:103A0000C00085FFFCCF84E18093C6008091C00098 +:103A100085FFFCCF80E18093C6000895E09104010A +:103A2000F09105010995089510920A028823D1F0BA +:103A300090E048EC50E02D9A28EE33E0FA013197FF +:103A4000F1F721503040D1F72D9828EE33E0FA01FC +:103A50003197F1F721503040D1F79F5F981758F315 +:103A600080930A0208953F924F925F926F927F92E5 +:103A70008F929F92AF92BF92CF92DF92EF92FF927E +:103A80000F931F93CF93DF9394B714BE8091600080 +:103A90008861809360001092600091FF0CC289E100 +:103AA0008093C4001092C50088E18093C10086E035 +:103AB0008093C2005098589A259A81E00E94141D64 +:103AC00044E1F42E3EE1E32E24E9D22E96E0C92E05 +:103AD00080E1B82EAA24A39401E4902E16E5812E4D +:103AE000B2E57B2EA0E26A2EF9E45F2EE3E54E2ECE +:103AF00070E5372E0E94761C8033B9F18133C1F115 +:103B0000803409F470C0813409F477C0823409F438 +:103B100086C0853409F489C0803539F1823529F1B0 +:103B2000813509F4AFC1853509F485C0863509F4BE +:103B30008DC0843609F435C1843709F4C1C0853796 +:103B400009F490C0863709F466C0809103018F5F45 +:103B500080930301853071F6E0910401F091050135 +:103B600009950E94761C803349F60E94F31CC2CF4F +:103B70000E94761C803249F78091C00085FFFCCFFF +:103B8000F092C6008091C00085FFFCCF9092C600E5 +:103B90008091C00085FFFCCF8092C6008091C0005C +:103BA00085FFFCCF7092C6008091C00085FFFCCFDE +:103BB0006092C6008091C00085FFFCCF5092C60085 +:103BC0008091C00085FFFCCF4092C6008091C0006C +:103BD00085FFFCCF3092C6008091C00085FFFCCFEE +:103BE000B092C60087CF0E94761C863808F4BDCFFD +:103BF0000E94761C0E94F31C7DCF0E94761C8038A8 +:103C000009F45AC0813809F453C0823809F440C11C +:103C1000883909F449C080E00E94C71C6BCF84E159 +:103C20000E94BD1C0E94F31C65CF85E00E94BD1C54 +:103C30000E94F31C5FCF0E94761C809306010E94B5 +:103C4000761C809307010E94F31C54CF0E94761CBF +:103C5000803309F421C183E00E94BD1C80E00E94F2 +:103C6000C71C48CF0E94761C803209F06ECF80912D +:103C7000C00085FFFCCFF092C6008091C00085FF98 +:103C8000FCCFE092C6008091C00085FFFCCFD092AF +:103C9000C6008091C00085FFFCCFC092C600809115 +:103CA000C00085FFFCCF9CCF83E00E94C71C22CFC1 +:103CB00081E00E94C71C1ECF82E00E94C71C1ACF61 +:103CC0000E94761C809309020E94761C8093080251 +:103CD0008091060190910701880F991F9093070129 +:103CE000809306010E94761C853409F4C5C080913A +:103CF0000C028E7F80930C020E94761C803209F0A9 +:103D0000F9CE8091C00085FFFCCFF092C600609193 +:103D10000802709109026115710591F140E050E0CF +:103D200080910C02A82FA170B82FB27010C0BB23D5 +:103D300061F1E0910601F09107013196F0930701DE +:103D4000E09306014F5F5F4F46175707C8F4AA2359 +:103D500071F3F999FECF209106013091070132BD30 +:103D600021BDF89A90B58091C00085FFFCCF90935B +:103D7000C6002F5F3F4F3093070120930601E2CF2B +:103D80008091C00085FFFCCF2BCFE0910601F09120 +:103D9000070194918091C00085FFFCCF9093C600ED +:103DA000CCCF0E94761C809309020E94761C8093DF +:103DB000080280910C028E7F80930C020E94761C78 +:103DC000853429F480910C02816080930C028091EB +:103DD000080290910902892B89F000E010E00E940E +:103DE000761CF801E85FFE4F80830F5F1F4F8091C4 +:103DF0000802909109020817190788F30E94761C9F +:103E0000803209F0A2CE80910C0280FF62C0409106 +:103E1000060150910701440F551F5093070140932D +:103E20000601609108027091090261157105C9F0DF +:103E3000E8E0F1E09A01DB01AE0FBF1FF999FECF78 +:103E400032BD21BD819180BDFA9AF99A2F5F3F4F13 +:103E5000EA17FB0799F7460F571F50930701409346 +:103E600006018091C00085FFFCCFF092C6008091D2 +:103E7000C00085FFFCCFB4CE80910C02816080939E +:103E80000C023ACF0E94F31C88E080936000FFCFC1 +:103E900080E10E94C71C2ECE0E94761C0E94761CD8 +:103EA000182F0E94761C112381F0113051F086E00A +:103EB0000E94C71C1FCEE0910401F09105010995F5 +:103EC000EECD84E90E94C71C15CE8EE10E94C71C6E +:103ED00011CE809107018823880F880B8A21809357 +:103EE0000B028091060190910701880F991F909312 +:103EF0000701809306018091080280FF09C080912C +:103F00000802909109020196909309028093080299 +:103F1000F894F999FECF1127E0910601F09107017D +:103F2000C8E0D1E08091080290910902103091F42C +:103F30000091570001700130D9F303E0009357005E +:103F4000E8950091570001700130D9F301E1009329 +:103F50005700E895099019900091570001700130C1 +:103F6000D9F301E000935700E8951395103498F0C9 +:103F700011270091570001700130D9F305E000933B +:103F80005700E8950091570001700130D9F301E125 +:103F900000935700E8953296029709F0C7CF10308A +:0E3FA00011F00296E5CF11245CCFF894FFCF0C +:023FAE00800091 +:0400000300003800C1 +:00000001FF diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega/Makefile b/arduino-0017-linux-x64/hardware/bootloaders/atmega/Makefile new file mode 100755 index 0000000..0fd54db --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega/Makefile @@ -0,0 +1,224 @@ +# 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 + +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 $< $@ + diff --git a/arduino-0017-linux-x64/hardware/bootloaders/atmega8/ATmegaBOOT.c b/arduino-0017-linux-x64/hardware/bootloaders/atmega8/ATmegaBOOT.c new file mode 100755 index 0000000..17977e6 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/atmega8/ATmegaBOOT.c @@ -0,0 +1,507 @@ +/**********************************************************/ +/* Serial Bootloader for Atmel mega8 AVR Controller */ +/* */ +/* ATmegaBOOT.c */ +/* */ +/* Copyright (c) 2003, Jason P. Kyle */ +/* */ +/* Hacked by DojoCorp - ZGZ - MMX - IVR */ +/* Hacked by David A. Mellis */ +/* */ +/* 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 m8 */ +/**********************************************************/ + +#include +#include +#include +#include +#include +#include + +//#define F_CPU 16000000 + +/* We, Malmoitians, like slow interaction + * therefore the slow baud rate ;-) + */ +//#define BAUD_RATE 9600 + +/* 6.000.000 is more or less 8 seconds at the + * speed configured here + */ +//#define MAX_TIME_COUNT 6000000 +#define MAX_TIME_COUNT (F_CPU>>1) +///#define MAX_TIME_COUNT_MORATORY 1600000 + +/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */ +#define HW_VER 0x02 +#define SW_MAJOR 0x01 +#define SW_MINOR 0x12 + +// AVR-GCC compiler compatibility +// avr-gcc compiler v3.1.x and older doesn't support outb() and inb() +// if necessary, convert outb and inb to outp and inp +#ifndef outb + #define outb(sfr,val) (_SFR_BYTE(sfr) = (val)) +#endif +#ifndef inb + #define inb(sfr) _SFR_BYTE(sfr) +#endif + +/* defines for future compatibility */ +#ifndef cbi + #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#endif +#ifndef sbi + #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#endif + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +#define eeprom_rb(addr) eeprom_read_byte ((uint8_t *)(addr)) +#define eeprom_rw(addr) eeprom_read_word ((uint16_t *)(addr)) +#define eeprom_wb(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val)) + +/* Onboard LED is connected to pin PB5 */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB5 + + +#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :( +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + + +void putch(char); +char getch(void); +void getNch(uint8_t); +void byte_response(uint8_t); +void nothing_response(void); + +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 address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +//uint8_t bootuart0=0,bootuart1=0; + + +void (*app_start)(void) = 0x0000; + +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + + //cbi(BL_DDR,BL); + //sbi(BL_PORT,BL); + + asm volatile("nop\n\t"); + + /* check if flash is programmed already, if not start bootloader anyway */ + //if(pgm_read_byte_near(0x0000) != 0xFF) { + + /* check if bootloader pin is set low */ + //if(bit_is_set(BL_PIN,BL)) app_start(); + //} + + /* initialize UART(s) depending on CPU defined */ + /* m8 */ + UBRRH = (((F_CPU/BAUD_RATE)/16)-1)>>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + //UCSRA = 0x00; + //UCSRC = 0x86; + //UCSRB = _BV(TXEN)|_BV(RXEN); + + + /* this was giving uisp problems, so I removed it; without it, the boot + works on with uisp and avrdude on the mac (at least). */ + //putch('\0'); + + //uint32_t l; + //uint32_t time_count; + //time_count=0; + + /* set LED pin as output */ + sbi(LED_DDR,LED); + for (i = 0; i < 16; i++) { + outb(LED_PORT, inb(LED_PORT) ^ _BV(LED)); + _delay_loop_2(0); + } + + //for (l=0; l<40000000; l++) + //outb(LED_PORT, inb(LED_PORT) ^= _BV(LED)); + + /* flash onboard LED three times to signal entering of bootloader */ + //for(i=0; i<3; ++i) { + //for(l=0; l<40000000; ++l); + //sbi(LED_PORT,LED); + //for(l=0; l<40000000; ++l); + //cbi(LED_PORT,LED); + //} + + /* see comment at previous call to putch() */ + //putch('\0'); // this line is needed for the synchronization of the programmer + + /* forever */ + for (;;) { + //if((inb(UCSRA) & _BV(RXC))){ + /* 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); + } + } + + /* 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(); + // FIXME: modified only here by DojoCorp, Mumbai, India, 20050626 + //time_count=0; // exted the delay once entered prog.mode + } + + /* Leave programming mode */ + else if(ch=='Q') { + nothing_response(); + //time_count=MAX_TIME_COUNT_MORATORY; // once the programming is done, + // we should start the application + // but uisp has problems with this, + // therefore we just change the times + // and give the programmer 1 sec to react + } + + /* 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 (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + //else address_high = 0x00; + + //address.word = address.word << 1; //address * 2 -> byte location + //if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure + while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete + asm volatile( + "clr r17 \n\t" //page_word_count + "lds r30,address \n\t" //Address of FLASH location (in words) + "lds r31,address+1 \n\t" + "lsl r30 \n\t" //address * 2 -> byte location + "rol r31 \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" + "sbrs r24,0 \n\t" //Even up an odd number of bytes + "rjmp length_loop \n\t" + "adiw r24,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" + "rcall wait_spm \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" + "rcall wait_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" + + "rcall wait_spm \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 + "rcall wait_spm \n\t" +// "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" + "rcall wait_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" + + "wait_spm: \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_spm \n\t" + "ret \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" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31"); + + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + putch(0x14); + putch(0x10); + } + } + + /* 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 + } + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read + putch(eeprom_rb(address.word)); + 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); + } + } + + /* Read oscillator calibration byte */ + else if(ch=='v') { + byte_response(0x00); + } +// } else { +// time_count++; +// if (time_count>=MAX_TIME_COUNT) { +// app_start(); +// } +// } + } /* end of forever loop */ +} + +void putch(char ch) +{ + /* m8 */ + while (!(inb(UCSRA) & _BV(UDRE))); + outb(UDR,ch); +} + +char getch(void) +{ + /* m8 */ + uint32_t count = 0; + while(!(inb(UCSRA) & _BV(RXC))) { + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return (inb(UDR)); +} + +void getNch(uint8_t count) +{ + uint8_t i; + for(i=0;i $@ + +size: $(PROGRAM).hex + $(SIZE) $^ + +# Rules for building the .text rom images + +text: hex bin srec + +hex: $(PROGRAM).hex +bin: $(PROGRAM).bin +srec: $(PROGRAM).srec + +%.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 $< $@ diff --git a/arduino-0017-linux-x64/hardware/bootloaders/bt/ATmegaBOOT_168.c b/arduino-0017-linux-x64/hardware/bootloaders/bt/ATmegaBOOT_168.c new file mode 100644 index 0000000..a85dc9a --- /dev/null +++ b/arduino-0017-linux-x64/hardware/bootloaders/bt/ATmegaBOOT_168.c @@ -0,0 +1,1032 @@ +/**********************************************************/ +/* Serial Bootloader for Atmel megaAVR Controllers */ +/* */ +/* tested with ATmega8, ATmega128 and ATmega168 */ +/* should work with other mega's, see code for details */ +/* */ +/* ATmegaBOOT.c */ +/* */ +/* build: 050815 */ +/* date : 15.08.2005 */ +/* */ +/* 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 m128,m8,m163 - feel free to let me know */ +/* how/if it works for you. */ +/* */ +/**********************************************************/ + + +/* some includes */ +#include +#include +#include +#include +#include + + +#define set_output(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#define set_input(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) + + +#define high(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#define low(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) + + + + +/* the current avr-libc eeprom functions do not support the ATmega168 */ +/* own eeprom write/read functions are used instead */ +#ifndef __AVR_ATmega168__ +#include +#endif + +/* define F_CPU according to AVR_FREQ set in Makefile */ +/* Is there a better way to pass such a parameter from Makefile to source code ? */ + +#define F_CPU 16000000L + +#include + + +/* 20060803: hacked by DojoCorp */ +/* set the waiting time for the bootloader */ +#define MAX_TIME_COUNT (F_CPU>>1) + +/* set the UART baud rate */ +/* 20060803: hacked by DojoCorp */ +#define BAUD_RATE 115200 + + +/* 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 0x0f + + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */ +/* BL0... means UART0, BL1... means UART1 */ +#ifdef __AVR_ATmega128__ +#define BL_DDR DDRF +#define BL_PORT PORTF +#define BL_PIN PINF +#define BL0 PINF7 +#define BL1 PINF6 +#else +/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ +#define BL_DDR DDRD +#define BL_PORT PORTD +#define BL_PIN PIND +#define BL PIND6 +#endif + + +/* 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 */ +#ifdef __AVR_ATmega128__ +/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB7 +#else +/* Onboard LED is connected to pin PB2 (e.g. Crumb8, Crumb168) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +/* 20060803: hacked by DojoCorp, LED pin is B5 in Arduino */ +/* #define LED PINB2 */ +#define LED PINB5 +#endif + + +/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */ +#ifdef __AVR_ATmega128__ +#define MONITOR +#endif + + +/* 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_ATmega128__ +#define SIG2 0x97 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega64__ +#define SIG2 0x96 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega32__ +#define SIG2 0x95 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega16__ +#define SIG2 0x94 +#define SIG3 0x03 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8__ +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega88__ +#define SIG2 0x93 +#define SIG3 0x0a +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega168__ +#define SIG2 0x94 +#define SIG3 0x06 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega162__ +#define SIG2 0x94 +#define SIG3 0x04 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega163__ +#define SIG2 0x94 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega169__ +#define SIG2 0x94 +#define SIG3 0x05 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8515__ +#define SIG2 0x93 +#define SIG3 0x06 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega8535__ +#define SIG2 0x93 +#define SIG3 0x08 +#define PAGE_SIZE 0x20U //32 words +#endif + + +/* 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 address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +uint8_t bootuart = 0; + +void (*app_start)(void) = 0x0000; + + +/* main program starts here */ +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + + asm volatile("nop\n\t"); + + /* set pin direction for bootloader pin and enable pullup */ + /* for ATmega128, two pins need to be initialized */ +#ifdef __AVR_ATmega128__ + BL_DDR &= ~_BV(BL0); + BL_DDR &= ~_BV(BL1); + BL_PORT |= _BV(BL0); + BL_PORT |= _BV(BL1); +#else + BL_DDR &= ~_BV(BL); + BL_PORT |= _BV(BL); +#endif + + +#ifdef __AVR_ATmega128__ + /* check which UART should be used for booting */ + if(bit_is_clear(BL_PIN, BL0)) { + bootuart = 1; + } + else if(bit_is_clear(BL_PIN, BL1)) { + bootuart = 2; + } +#endif + + /* check if flash is programmed already, if not start bootloader anyway */ + if(pgm_read_byte_near(0x0000) != 0xFF) { + +#ifdef __AVR_ATmega128__ + /* no UART was selected, start application */ + if(!bootuart) { + app_start(); + } +#else + /* check if bootloader pin is set low */ + /* we don't start this part neither for the m8, nor m168 */ + //if(bit_is_set(BL_PIN, BL)) { + // app_start(); + // } +#endif + } + +#ifdef __AVR_ATmega128__ + /* no bootuart was selected, default to uart 0 */ + if(!bootuart) { + bootuart = 1; + } +#endif + + + /* initialize UART(s) depending on CPU defined */ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0A = 0x00; + UCSR0C = 0x06; + UCSR0B = _BV(TXEN0)|_BV(RXEN0); + } + if(bootuart == 2) { + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); + } +#elif defined __AVR_ATmega163__ + UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSRA = 0x00; + UCSRB = _BV(TXEN)|_BV(RXEN); +#elif defined __AVR_ATmega168__ + UBRR0H = ((F_CPU / 16 + BAUD_RATE / 2) / BAUD_RATE - 1) >> 8; + UBRR0L = ((F_CPU / 16 + BAUD_RATE / 2) / BAUD_RATE - 1); + + + //UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + //UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0B = (1<>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + UCSRA = 0x00; + UCSRC = 0x06; + UCSRB = _BV(TXEN)|_BV(RXEN); +#endif + + /* set LED pin as output */ + LED_DDR |= _BV(LED); + + + + set_output(DDRD,PIND7); + high(PORTD,PD7); + for (i = 0; i < 16; i++) { + + _delay_loop_2(0); + } + + + low(PORTD,PD7); + + + /* flash onboard LED to signal entering of bootloader */ +#ifdef __AVR_ATmega128__ + // 4x for UART0, 5x for UART1 + flash_led(3 + bootuart); +#else + flash_led(3); +#endif + + /* 20050803: by DojoCorp, this is one of the parts provoking the + system to stop listening, cancelled from the original */ + //putch('\0'); + + + //message("SET BT PAGEMODE 3 2000 1"); +putch('S'); +putch('E'); +putch('T'); +putch(' '); +putch('B'); +putch('T'); +putch(' '); +putch('P'); +putch('A'); +putch('G'); +putch('E'); +putch('M'); +putch('O'); +putch('D'); +putch('E'); +putch(' '); +putch('3'); +putch(' '); +putch('2'); +putch('0'); +putch('0'); +putch('0'); +putch(' '); +putch('1'); +putch(0x0D); + + + //put_s("SET BT ROLE 0 f 7d00"); + putch('S'); + putch('E'); + putch('T'); + putch(' '); + putch('B'); + putch('T'); + putch(' '); + putch('R'); + putch('O'); + putch('L'); + putch('E'); + putch(' '); + putch('0'); + putch(' '); + putch('f'); + putch(' '); + putch('7'); + putch('d'); + putch('0'); + putch('0'); + putch(0x0D); + + + + + + + /* 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); + } + } + + + /* 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(); + } + + + /* 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 (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + else address_high = 0x00; +#ifdef __AVR_ATmega128__ + RAMPZ = address_high; +#endif + address.word = address.word << 1; //address * 2 -> byte location + /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ + if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure + // HACKME: EEPE used to be EEWE + while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete + 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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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" +#ifdef __AVR_ATmega163__ + "andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write +#endif + "ldi r16,0x05 \n\t" //Write page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" + "ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write) +#endif + "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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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 +#if defined __AVR_ATmega168__ + : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#else + : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#endif + ); + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + putch(0x14); + putch(0x10); + } + } + + + /* Read memory block mode, length is big endian. */ + else if(ch=='t') { + length.byte[1] = getch(); + length.byte[0] = getch(); +#if defined __AVR_ATmega128__ + if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME + else flags.rampz = 0; +#endif + if (getch() == 'E') flags.eeprom = 1; + else { + flags.eeprom = 0; + address.word = address.word << 1; // address * 2 -> byte location + } + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read +#ifdef __AVR_ATmega168__ + while(EECR & (1<= '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) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; + } + else if (bootuart == 2) { + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; + } +#elif defined __AVR_ATmega168__ + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; +#else + /* m8,16,32,169,8515,8535,163 */ + while (!(UCSRA & _BV(UDRE))); + UDR = ch; +#endif +} + + +char getch(void) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while(!(UCSR0A & _BV(RXC0))); + return UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))); + return UDR1; + } + return 0; +#elif defined __AVR_ATmega168__ + uint32_t count = 0; + 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(); + } + return UDR0; +#else + /* m8,16,32,169,8515,8535,163 */ + uint32_t count = 0; + while(!(UCSRA & _BV(RXC))){ + /* 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(); + } + return UDR; +#endif +} + + +void getNch(uint8_t count) +{ + uint8_t i; + for(i=0;i +#include +#include +#include +#include + + +/* the current avr-libc eeprom functions do not support the ATmega168 */ +/* own eeprom write/read functions are used instead */ +#ifndef __AVR_ATmega168__ +#include +#endif + +/* Use the F_CPU defined in Makefile */ + +/* 20060803: hacked by DojoCorp */ +/* 20070626: hacked by David A. Mellis to decrease waiting time for auto-reset */ +/* set the waiting time for the bootloader */ +/* get this from the Makefile instead */ +/* #define MAX_TIME_COUNT (F_CPU>>4) */ + +/* 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 */ +/* 20060803: hacked by DojoCorp */ +//#define BAUD_RATE 115200 +#define BAUD_RATE 19200 + + +/* 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 + + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */ +/* BL0... means UART0, BL1... means UART1 */ +#ifdef __AVR_ATmega128__ +#define BL_DDR DDRF +#define BL_PORT PORTF +#define BL_PIN PINF +#define BL0 PINF7 +#define BL1 PINF6 +#else +/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ +#define BL_DDR DDRD +#define BL_PORT PORTD +#define BL_PIN PIND +#define BL PIND6 +#endif + + +/* 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 */ +#ifdef __AVR_ATmega128__ +/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB7 +#else +/* Onboard LED is connected to pin PB2 (e.g. Crumb8, Crumb168) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +/* 20060803: hacked by DojoCorp, LED pin is B5 in Arduino */ +/* #define LED PINB2 */ +#define LED PINB5 +#endif + + +/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */ +#ifdef __AVR_ATmega128__ +#define MONITOR +#endif + + +/* 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_ATmega128__ +#define SIG2 0x97 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega64__ +#define SIG2 0x96 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega32__ +#define SIG2 0x95 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega16__ +#define SIG2 0x94 +#define SIG3 0x03 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8__ +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega88__ +#define SIG2 0x93 +#define SIG3 0x0a +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega168__ +#define SIG2 0x94 +#define SIG3 0x06 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega162__ +#define SIG2 0x94 +#define SIG3 0x04 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega163__ +#define SIG2 0x94 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega169__ +#define SIG2 0x94 +#define SIG3 0x05 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8515__ +#define SIG2 0x93 +#define SIG3 0x06 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega8535__ +#define SIG2 0x93 +#define SIG3 0x08 +#define PAGE_SIZE 0x20U //32 words +#endif + + +/* 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 address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +uint8_t bootuart = 0; + +uint8_t error_count = 0; + +void (*app_start)(void) = 0x0000; + + +/* main program starts here */ +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + + asm volatile("nop\n\t"); + + /* set pin direction for bootloader pin and enable pullup */ + /* for ATmega128, two pins need to be initialized */ +#ifdef __AVR_ATmega128__ + BL_DDR &= ~_BV(BL0); + BL_DDR &= ~_BV(BL1); + BL_PORT |= _BV(BL0); + BL_PORT |= _BV(BL1); +#else + /* We run the bootloader regardless of the state of this pin. Thus, don't + put it in a different state than the other pins. --DAM, 070709 + BL_DDR &= ~_BV(BL); + BL_PORT |= _BV(BL); + */ +#endif + + +#ifdef __AVR_ATmega128__ + /* check which UART should be used for booting */ + if(bit_is_clear(BL_PIN, BL0)) { + bootuart = 1; + } + else if(bit_is_clear(BL_PIN, BL1)) { + bootuart = 2; + } +#endif + + /* check if flash is programmed already, if not start bootloader anyway */ + if(pgm_read_byte_near(0x0000) != 0xFF) { + +#ifdef __AVR_ATmega128__ + /* no UART was selected, start application */ + if(!bootuart) { + app_start(); + } +#else + /* check if bootloader pin is set low */ + /* we don't start this part neither for the m8, nor m168 */ + //if(bit_is_set(BL_PIN, BL)) { + // app_start(); + // } +#endif + } + +#ifdef __AVR_ATmega128__ + /* no bootuart was selected, default to uart 0 */ + if(!bootuart) { + bootuart = 1; + } +#endif + + + /* initialize UART(s) depending on CPU defined */ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0A = 0x00; + UCSR0C = 0x06; + UCSR0B = _BV(TXEN0)|_BV(RXEN0); + } + if(bootuart == 2) { + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); + } +#elif defined __AVR_ATmega163__ + UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSRA = 0x00; + UCSRB = _BV(TXEN)|_BV(RXEN); +#elif defined __AVR_ATmega168__ + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0B = (1<>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + UCSRA = 0x00; + UCSRC = 0x06; + UCSRB = _BV(TXEN)|_BV(RXEN); +#endif + + /* set LED pin as output */ + LED_DDR |= _BV(LED); + + + /* flash onboard LED to signal entering of bootloader */ +#ifdef __AVR_ATmega128__ + // 4x for UART0, 5x for UART1 + flash_led(NUM_LED_FLASHES + bootuart); +#else + flash_led(NUM_LED_FLASHES); +#endif + + /* 20050803: by DojoCorp, this is one of the parts provoking the + system to stop listening, cancelled from the original */ + //putch('\0'); + + + /* 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(); + } + + + /* 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 (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + else address_high = 0x00; +#ifdef __AVR_ATmega128__ + RAMPZ = address_high; +#endif + address.word = address.word << 1; //address * 2 -> byte location + /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ + if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure + // HACKME: EEPE used to be EEWE + while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete + 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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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" +#ifdef __AVR_ATmega163__ + "andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write +#endif + "ldi r16,0x05 \n\t" //Write page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" + "ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write) +#endif + "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" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "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 +#if defined __AVR_ATmega168__ + : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#else + : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#endif + ); + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + 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 defined __AVR_ATmega128__ + if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME + else flags.rampz = 0; +#endif + if (getch() == 'E') flags.eeprom = 1; + else { + flags.eeprom = 0; + address.word = address.word << 1; // address * 2 -> byte location + } + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read +#ifdef __AVR_ATmega168__ + while(EECR & (1<= '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) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; + } + else if (bootuart == 2) { + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; + } +#elif defined __AVR_ATmega168__ + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; +#else + /* m8,16,32,169,8515,8535,163 */ + while (!(UCSRA & _BV(UDRE))); + UDR = ch; +#endif +} + + +char getch(void) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while(!(UCSR0A & _BV(RXC0))); + return UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))); + return UDR1; + } + return 0; +#elif defined __AVR_ATmega168__ + uint32_t count = 0; + 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(); + } + return UDR0; +#else + /* m8,16,32,169,8515,8535,163 */ + uint32_t count = 0; + while(!(UCSRA & _BV(RXC))){ + /* 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(); + } + return UDR; +#endif +} + + +void getNch(uint8_t count) +{ + uint8_t i; + for(i=0;i $@ + +%.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 + +install: + avrdude -p m168 -c stk500v2 -P /dev/cu.USA19H1b1P1.1 -e -u -U lock:w:0x3f:m -U efuse:w:0x00:m -U hfuse:w:0xdd:m -U lfuse:w:0xe2:m + avrdude -p m168 -c stk500v2 -P /dev/cu.USA19H1b1P1.1 -e -u -U flash:w:ATmegaBOOT_168.hex -U lock:w:0x0f:m diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.cpp b/arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.cpp new file mode 100755 index 0000000..1af6a66 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.cpp @@ -0,0 +1,219 @@ +/* + 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 +*/ + +#include +#include +#include +#include "wiring.h" +#include "wiring_private.h" + +#include "HardwareSerial.h" + +// Define constants and variables for buffering incoming serial data. We're +// using a ring buffer (I think), in which rx_buffer_head is the index of the +// location to which to write the next incoming character and rx_buffer_tail +// is the index of the location from which to read. +#define RX_BUFFER_SIZE 128 + +struct ring_buffer { + unsigned char buffer[RX_BUFFER_SIZE]; + int head; + int tail; +}; + +ring_buffer rx_buffer = { { 0 }, 0, 0 }; + +#if defined(__AVR_ATmega1280__) +ring_buffer rx_buffer1 = { { 0 }, 0, 0 }; +ring_buffer rx_buffer2 = { { 0 }, 0, 0 }; +ring_buffer rx_buffer3 = { { 0 }, 0, 0 }; +#endif + +inline void store_char(unsigned char c, ring_buffer *rx_buffer) +{ + int i = (rx_buffer->head + 1) % RX_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 != rx_buffer->tail) { + rx_buffer->buffer[rx_buffer->head] = c; + rx_buffer->head = i; + } +} + +#if defined(__AVR_ATmega1280__) + +SIGNAL(SIG_USART0_RECV) +{ + unsigned char c = UDR0; + store_char(c, &rx_buffer); +} + +SIGNAL(SIG_USART1_RECV) +{ + unsigned char c = UDR1; + store_char(c, &rx_buffer1); +} + +SIGNAL(SIG_USART2_RECV) +{ + unsigned char c = UDR2; + store_char(c, &rx_buffer2); +} + +SIGNAL(SIG_USART3_RECV) +{ + unsigned char c = UDR3; + store_char(c, &rx_buffer3); +} + +#else + +#if defined(__AVR_ATmega8__) +SIGNAL(SIG_UART_RECV) +#else +SIGNAL(USART_RX_vect) +#endif +{ +#if defined(__AVR_ATmega8__) + unsigned char c = UDR; +#else + unsigned char c = UDR0; +#endif + store_char(c, &rx_buffer); +} + +#endif + +// Constructors //////////////////////////////////////////////////////////////// + +HardwareSerial::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 udre, uint8_t u2x) +{ + _rx_buffer = rx_buffer; + _ubrrh = ubrrh; + _ubrrl = ubrrl; + _ucsra = ucsra; + _ucsrb = ucsrb; + _udr = udr; + _rxen = rxen; + _txen = txen; + _rxcie = rxcie; + _udre = udre; + _u2x = u2x; +} + +// Public Methods ////////////////////////////////////////////////////////////// + +void HardwareSerial::begin(long baud) +{ + uint16_t baud_setting; + bool use_u2x; + + // U2X mode is needed for baud rates higher than (CPU Hz / 16) + if (baud > F_CPU / 16) { + use_u2x = true; + } else { + // figure out if U2X mode would allow for a better connection + + // calculate the percent difference between the baud-rate specified and + // the real baud rate for both U2X and non-U2X mode (0-255 error percent) + uint8_t nonu2x_baud_error = abs((int)(255-((F_CPU/(16*(((F_CPU/8/baud-1)/2)+1))*255)/baud))); + uint8_t u2x_baud_error = abs((int)(255-((F_CPU/(8*(((F_CPU/4/baud-1)/2)+1))*255)/baud))); + + // prefer non-U2X mode because it handles clock skew better + use_u2x = (nonu2x_baud_error > u2x_baud_error); + } + + 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; + } + + // assign the baud_setting, a.k.a. ubbr (USART Baud Rate Register) + *_ubrrh = baud_setting >> 8; + *_ubrrl = baud_setting; + + sbi(*_ucsrb, _rxen); + sbi(*_ucsrb, _txen); + sbi(*_ucsrb, _rxcie); +} + +uint8_t HardwareSerial::available(void) +{ + return (RX_BUFFER_SIZE + _rx_buffer->head - _rx_buffer->tail) % RX_BUFFER_SIZE; +} + +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 = (_rx_buffer->tail + 1) % RX_BUFFER_SIZE; + return c; + } +} + +void HardwareSerial::flush() +{ + // don't reverse this or there may be problems if the RX interrupt + // occurs after reading the value of rx_buffer_head but before writing + // the value to rx_buffer_tail; the previous value of rx_buffer_head + // may be written to rx_buffer_tail, making it appear as if the buffer + // don't reverse this or there may be problems if the RX interrupt + // occurs after reading the value of rx_buffer_head but before writing + // the value to rx_buffer_tail; the previous value of rx_buffer_head + // may be written to rx_buffer_tail, making it appear as if the buffer + // were full, not empty. + _rx_buffer->head = _rx_buffer->tail; +} + +void HardwareSerial::write(uint8_t c) +{ + while (!((*_ucsra) & (1 << _udre))) + ; + + *_udr = c; +} + +// Preinstantiate Objects ////////////////////////////////////////////////////// + +#if defined(__AVR_ATmega8__) +HardwareSerial Serial(&rx_buffer, &UBRRH, &UBRRL, &UCSRA, &UCSRB, &UDR, RXEN, TXEN, RXCIE, UDRE, U2X); +#else +HardwareSerial Serial(&rx_buffer, &UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UDR0, RXEN0, TXEN0, RXCIE0, UDRE0, U2X0); +#endif + +#if defined(__AVR_ATmega1280__) +HardwareSerial Serial1(&rx_buffer1, &UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UDR1, RXEN1, TXEN1, RXCIE1, UDRE1, U2X1); +HardwareSerial Serial2(&rx_buffer2, &UBRR2H, &UBRR2L, &UCSR2A, &UCSR2B, &UDR2, RXEN2, TXEN2, RXCIE2, UDRE2, U2X2); +HardwareSerial Serial3(&rx_buffer3, &UBRR3H, &UBRR3L, &UCSR3A, &UCSR3B, &UDR3, RXEN3, TXEN3, RXCIE3, UDRE3, U2X3); +#endif diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.h b/arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.h new file mode 100755 index 0000000..f975ccd --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/HardwareSerial.h @@ -0,0 +1,65 @@ +/* + 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 +*/ + +#ifndef HardwareSerial_h +#define HardwareSerial_h + +#include + +#include "Print.h" + +struct ring_buffer; + +class HardwareSerial : public Print +{ + private: + 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 _udre; + uint8_t _u2x; + public: + 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 udre, uint8_t u2x); + void begin(long); + uint8_t available(void); + int read(void); + void flush(void); + virtual void write(uint8_t); + using Print::write; // pull in write(str) and write(buf, size) from Print +}; + +extern HardwareSerial Serial; + +#if defined(__AVR_ATmega1280__) +extern HardwareSerial Serial1; +extern HardwareSerial Serial2; +extern HardwareSerial Serial3; +#endif + +#endif diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/Makefile b/arduino-0017-linux-x64/hardware/cores/arduino/Makefile new file mode 100755 index 0000000..4989972 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/Makefile @@ -0,0 +1,244 @@ +# Arduino 0015 Makefile +# Arduino adaptation by mellis, eighthave, oli.keller +# +# This makefile allows you to build sketches from the command line +# without the Arduino environment (or Java). +# +# Detailed instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. There should be a +# file with the same name as the folder and with the extension .pde +# (e.g. foo.pde in the foo/ folder). +# +# 2. Modify the line containg "INSTALL_DIR" to point to the directory that +# contains the Arduino installation (for example, under Mac OS X, this +# might be /Applications/arduino-0012). +# +# 3. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.usb*). +# +# 4. Set the line containing "MCU" to match your board's processor. +# Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth +# or Diecimila have the atmega168. If you're using a LilyPad Arduino, +# change F_CPU to 8000000. +# +# 5. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 6. Type "make" and press enter to compile/verify your program. +# +# 7. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id$ + +TARGET = $(notdir $(CURDIR)) +#INSTALL_DIR = ../../.. +INSTALL_DIR = /home/orange/arduinisten/arduino-0017 +PORT = /dev/ttyUSB0 +UPLOAD_RATE = 19200 +AVRDUDE_PROGRAMMER = stk500v1 +MCU = atmega168 +F_CPU = 16000000 + +############################################################################ +# Below here nothing should be changed... + +ARDUINO = $(INSTALL_DIR)/hardware/cores/arduino +AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin +SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \ +$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \ +$(ARDUINO)/wiring_pulse.c \ +$(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c +CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.cpp \ +$(ARDUINO)/Print.cpp +FORMAT = ihex + + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) + +# Place -I options here +CINCS = -I$(ARDUINO) +CXXINCS = -I$(ARDUINO) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) + +CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = -lm + + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex +AVRDUDE_FLAGS = -V -F -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf \ +-p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ +-b $(UPLOAD_RATE) + +# Program settings +CC = $(AVR_TOOLS_PATH)/avr-gcc +CXX = $(AVR_TOOLS_PATH)/avr-g++ +OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy +OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump +AR = $(AVR_TOOLS_PATH)/avr-ar +SIZE = $(AVR_TOOLS_PATH)/avr-size +NM = $(AVR_TOOLS_PATH)/avr-nm +AVRDUDE = $(AVR_TOOLS_PATH)/avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: applet_files build sizeafter + +build: elf hex + +applet_files: $(TARGET).pde + # Here is the "preprocessing". + # It creates a .cpp file based with the same name as the .pde file. + # On top of the new .cpp file comes the WProgram.h header. + # At the end there is a generic main() function attached. + # Then the .cpp file will be compiled. Errors during compile will + # refer to this new, automatically generated, file. + # Not the original .pde file you actually edit... + test -d applet || mkdir applet + echo '#include "WProgram.h"' > applet/$(TARGET).cpp + cat $(TARGET).pde >> applet/$(TARGET).cpp + cat $(ARDUINO)/main.cxx >> applet/$(TARGET).cpp + +elf: applet/$(TARGET).elf +hex: applet/$(TARGET).hex +eep: applet/$(TARGET).eep +lss: applet/$(TARGET).lss +sym: applet/$(TARGET).sym + +# Program the device. +upload: applet/$(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + + + # Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex +ELFSIZE = $(SIZE) applet/$(TARGET).elf +sizebefore: + @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi + +sizeafter: + @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + # Link: create ELF output file from library. +applet/$(TARGET).elf: $(TARGET).pde applet/core.a + $(CC) $(ALL_CFLAGS) -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS) + +applet/core.a: $(OBJ) + @for i in $(OBJ); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done + + + +# Compile: create object files from C++ source files. +.cpp.o: + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + +# Automatic dependencies +%.d: %.c + $(CC) -M $(ALL_CFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@ + +%.d: %.cpp + $(CXX) -M $(ALL_CXXFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@ + + +# Target: clean project. +clean: + $(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ + applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean applet_files sizebefore sizeafter + +include $(SRC:.c=.d) +include $(CXXSRC:.cpp=.d) diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/Print.cpp b/arduino-0017-linux-x64/hardware/cores/arduino/Print.cpp new file mode 100755 index 0000000..74d0e5b --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/Print.cpp @@ -0,0 +1,215 @@ +/* + 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 +#include +#include +#include "wiring.h" + +#include "Print.h" + +// Public Methods ////////////////////////////////////////////////////////////// + +/* default implementation: may be overridden */ +void Print::write(const char *str) +{ + while (*str) + write(*str++); +} + +/* default implementation: may be overridden */ +void Print::write(const uint8_t *buffer, size_t size) +{ + while (size--) + write(*buffer++); +} + +void Print::print(uint8_t b) +{ + this->write(b); +} + +void Print::print(char c) +{ + print((byte) c); +} + +void Print::print(const char str[]) +{ + write(str); +} + +void Print::print(int n) +{ + print((long) n); +} + +void Print::print(unsigned int n) +{ + print((unsigned long) n); +} + +void Print::print(long n) +{ + if (n < 0) { + print('-'); + n = -n; + } + printNumber(n, 10); +} + +void Print::print(unsigned long n) +{ + printNumber(n, 10); +} + +void Print::print(long n, int base) +{ + if (base == 0) + print((char) n); + else if (base == 10) + print(n); + else + printNumber(n, base); +} + +void Print::print(double n) +{ + printFloat(n, 2); +} + +void Print::println(void) +{ + print('\r'); + print('\n'); +} + +void Print::println(char c) +{ + print(c); + println(); +} + +void Print::println(const char c[]) +{ + print(c); + println(); +} + +void Print::println(uint8_t b) +{ + print(b); + println(); +} + +void Print::println(int n) +{ + print(n); + println(); +} + +void Print::println(unsigned int n) +{ + print(n); + println(); +} + +void Print::println(long n) +{ + print(n); + println(); +} + +void Print::println(unsigned long n) +{ + print(n); + println(); +} + +void Print::println(long n, int base) +{ + print(n, base); + println(); +} + +void Print::println(double n) +{ + print(n); + println(); +} + +// Private Methods ///////////////////////////////////////////////////////////// + +void Print::printNumber(unsigned long n, uint8_t base) +{ + unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. + unsigned long i = 0; + + if (n == 0) { + print('0'); + return; + } + + while (n > 0) { + buf[i++] = n % base; + n /= base; + } + + for (; i > 0; i--) + print((char) (buf[i - 1] < 10 ? + '0' + buf[i - 1] : + 'A' + buf[i - 1] - 10)); +} + +void Print::printFloat(double number, uint8_t digits) +{ + // Handle negative numbers + if (number < 0.0) + { + 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 0) + print("."); + + // Extract digits from the remainder one at a time + while (digits-- > 0) + { + remainder *= 10.0; + int toPrint = int(remainder); + print(toPrint); + remainder -= toPrint; + } +} diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/Print.h b/arduino-0017-linux-x64/hardware/cores/arduino/Print.h new file mode 100755 index 0000000..a69e85d --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/Print.h @@ -0,0 +1,62 @@ +/* + 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 +#include // for size_t + +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 +#define BYTE 0 + +class Print +{ + private: + void printNumber(unsigned long, uint8_t); + void printFloat(double, uint8_t); + public: + virtual void write(uint8_t) = 0; + virtual void write(const char *str); + virtual void write(const uint8_t *buffer, size_t size); + void print(char); + void print(const char[]); + void print(uint8_t); + void print(int); + void print(unsigned int); + void print(long); + void print(unsigned long); + void print(long, int); + void print(double); + void println(void); + void println(char); + void println(const char[]); + void println(uint8_t); + void println(int); + void println(unsigned int); + void println(long); + void println(unsigned long); + void println(long, int); + void println(double); +}; + +#endif diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/WConstants.h b/arduino-0017-linux-x64/hardware/cores/arduino/WConstants.h new file mode 100644 index 0000000..3e19ac4 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/WConstants.h @@ -0,0 +1 @@ +#include "wiring.h" diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/WInterrupts.c b/arduino-0017-linux-x64/hardware/cores/arduino/WInterrupts.c new file mode 100755 index 0000000..69a78b0 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/WInterrupts.c @@ -0,0 +1,215 @@ +/* -*- 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 +*/ + +#include +#include +#include +#include +#include + +#include "WConstants.h" +#include "wiring_private.h" + +volatile static voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS]; +// volatile static voidFuncPtr twiIntFunc; + +#if defined(__AVR_ATmega8__) +#define EICRA MCUCR +#define EIMSK GICR +#endif + +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_ATmega1280__) + 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: + 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; +#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_ATmega1280__) + 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: + EIMSK &= ~(1 << INT0); + break; + case 1: + EIMSK &= ~(1 << INT1); + break; +#endif + } + + intFunc[interruptNum] = 0; + } +} + +/* +void attachInterruptTwi(void (*userFunc)(void) ) { + twiIntFunc = userFunc; +} +*/ + +#if defined(__AVR_ATmega1280__) + +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](); +} + +#endif + +/* +SIGNAL(SIG_2WIRE_SERIAL) { + if(twiIntFunc) + twiIntFunc(); +} +*/ + diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/WMath.cpp b/arduino-0017-linux-x64/hardware/cores/arduino/WMath.cpp new file mode 100644 index 0000000..2120c4c --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/WMath.cpp @@ -0,0 +1,60 @@ +/* -*- 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; } \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/WProgram.h b/arduino-0017-linux-x64/hardware/cores/arduino/WProgram.h new file mode 100755 index 0000000..fc14923 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/WProgram.h @@ -0,0 +1,29 @@ +#ifndef WProgram_h +#define WProgram_h + +#include +#include +#include + +#include + +#include "wiring.h" + +#ifdef __cplusplus +#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); + +// WMath prototypes +long random(long); +long random(long, long); +void randomSeed(unsigned int); +long map(long, long, long, long, long); +#endif + +#endif \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/binary.h b/arduino-0017-linux-x64/hardware/cores/arduino/binary.h new file mode 100644 index 0000000..af14980 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/binary.h @@ -0,0 +1,515 @@ +#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 diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/main.cxx b/arduino-0017-linux-x64/hardware/cores/arduino/main.cxx new file mode 100755 index 0000000..52351e4 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/main.cxx @@ -0,0 +1,12 @@ +int main(void) +{ + init(); + + setup(); + + for (;;) + loop(); + + return 0; +} + diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.c b/arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.c new file mode 100755 index 0000000..79c956c --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.c @@ -0,0 +1,469 @@ +/* + pins_arduino.c - pin definitions for the Arduino board + Part of Arduino / Wiring Lite + + 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 + 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: pins_arduino.c 565 2009-03-25 10:50:00Z dmellis $ +*/ + +#include +#include "wiring_private.h" +#include "pins_arduino.h" + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// 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.) + +// 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 + +#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 + +#define REPEAT8(x) x, x, x, x, x, x, x, x +#define BV0TO7 _BV(0), _BV(1), _BV(2), _BV(3), _BV(4), _BV(5), _BV(6), _BV(7) +#define BV7TO0 _BV(7), _BV(6), _BV(5), _BV(4), _BV(3), _BV(2), _BV(1), _BV(0) + + +#if defined(__AVR_ATmega1280__) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + &DDRA, + &DDRB, + &DDRC, + &DDRD, + &DDRE, + &DDRF, + &DDRG, + &DDRH, + NOT_A_PORT, + &DDRJ, + &DDRK, + &DDRL, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + &PORTA, + &PORTB, + &PORTC, + &PORTD, + &PORTE, + &PORTF, + &PORTG, + &PORTH, + NOT_A_PORT, + &PORTJ, + &PORTK, + &PORTL, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PIN, + &PINA, + &PINB, + &PINC, + &PIND, + &PINE, + &PINF, + &PING, + &PINH, + NOT_A_PIN, + &PINJ, + &PINK, + &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 +}; + +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 +}; + +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 +}; +#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, + &DDRB, + &DDRC, + &DDRD, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + &PORTB, + &PORTC, + &PORTD, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + &PINB, + &PINC, + &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 diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.h b/arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.h new file mode 100644 index 0000000..c7e40fd --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/pins_arduino.h @@ -0,0 +1,76 @@ +/* + 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 + +#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 + +// 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))) ) + +#endif diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/wiring.c b/arduino-0017-linux-x64/hardware/cores/arduino/wiring.c new file mode 100755 index 0000000..5daf74b --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/wiring.c @@ -0,0 +1,250 @@ +/* + 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: wiring.c 585 2009-05-12 10:55:26Z dmellis $ +*/ + +#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; + +SIGNAL(TIMER0_OVF_vect) +{ + // 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, t; + uint8_t oldSREG = SREG; + + cli(); + t = TCNT0; + +#ifdef TIFR0 + if ((TIFR0 & _BV(TOV0)) && (t == 0)) + t = 256; +#else + if ((TIFR & _BV(TOV0)) && (t == 0)) + t = 256; +#endif + + m = timer0_overflow_count; + SREG = oldSREG; + + return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond()); +} + +void delay(unsigned long ms) +{ + unsigned long start = millis(); + + while (millis() - start <= ms) + ; +} + +/* Delay for the given number of microseconds. Assumes a 8 or 16 MHz clock. + * Disables interrupts, which will disrupt the millis() function if used + * too frequently. */ +void delayMicroseconds(unsigned int us) +{ + uint8_t oldSREG; + + // 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 >= 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 + + // disable interrupts, otherwise the timer 0 overflow interrupt that + // tracks milliseconds will make us delay longer than we want. + oldSREG = SREG; + cli(); + + // busy wait + __asm__ __volatile__ ( + "1: sbiw %0,1" "\n\t" // 2 cycles + "brne 1b" : "=w" (us) : "0" (us) // 2 cycles + ); + + // reenable interrupts. + SREG = oldSREG; +} + +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(__AVR_ATmega8__) + sbi(TCCR0A, WGM01); + sbi(TCCR0A, WGM00); +#endif + // set timer 0 prescale factor to 64 +#if defined(__AVR_ATmega8__) + sbi(TCCR0, CS01); + sbi(TCCR0, CS00); +#else + sbi(TCCR0B, CS01); + sbi(TCCR0B, CS00); +#endif + // enable timer 0 overflow interrupt +#if defined(__AVR_ATmega8__) + sbi(TIMSK, TOIE0); +#else + sbi(TIMSK0, TOIE0); +#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 + + // set timer 1 prescale factor to 64 + sbi(TCCR1B, CS11); + sbi(TCCR1B, CS10); + // put timer 1 in 8-bit phase correct pwm mode + sbi(TCCR1A, WGM10); + + // set timer 2 prescale factor to 64 +#if defined(__AVR_ATmega8__) + sbi(TCCR2, CS22); +#else + sbi(TCCR2B, CS22); +#endif + // configure timer 2 for phase correct pwm (8-bit) +#if defined(__AVR_ATmega8__) + sbi(TCCR2, WGM20); +#else + sbi(TCCR2A, WGM20); +#endif + +#if defined(__AVR_ATmega1280__) + // set timer 3, 4, 5 prescale factor to 64 + sbi(TCCR3B, CS31); sbi(TCCR3B, CS30); + sbi(TCCR4B, CS41); sbi(TCCR4B, CS40); + sbi(TCCR5B, CS51); sbi(TCCR5B, CS50); + // put timer 3, 4, 5 in 8-bit phase correct pwm mode + sbi(TCCR3A, WGM30); + sbi(TCCR4A, WGM40); + sbi(TCCR5A, WGM50); +#endif + + // 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); + + // 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(__AVR_ATmega8__) + UCSRB = 0; +#else + UCSR0B = 0; +#endif +} \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/wiring.h b/arduino-0017-linux-x64/hardware/cores/arduino/wiring.h new file mode 100755 index 0000000..9148614 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/wiring.h @@ -0,0 +1,137 @@ +/* + wiring.h - 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: wiring.h 602 2009-06-01 08:32:11Z dmellis $ +*/ + +#ifndef Wiring_h +#define Wiring_h + +#include +#include "binary.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +#ifndef ARDUINO +#define ARDUINO 16 +#endif + +#define HIGH 0x1 +#define LOW 0x0 + +#define INPUT 0x0 +#define OUTPUT 0x1 + +#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 + +#define INTERNAL 3 +#define DEFAULT 1 +#define EXTERNAL 0 + +// 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); + +void beginSerial(long); +void serialWrite(unsigned char); +int serialAvailable(void); +int serialRead(void); +void serialFlush(void); + +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, byte val); + +void attachInterrupt(uint8_t, void (*)(void), int mode); +void detachInterrupt(uint8_t); + +void setup(void); +void loop(void); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/wiring_analog.c b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_analog.c new file mode 100755 index 0000000..782a0bd --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_analog.c @@ -0,0 +1,179 @@ +/* + 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 + + $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; + + // 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). + ADMUX = (analog_reference << 6) | (pin & 0x0f); + +#if defined(__AVR_ATmega1280__) + // 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 + + // without a delay, we seem to read from the wrong channel + //delay(1); + + // 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; + + // 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 (digitalPinToTimer(pin) == TIMER1A) { + // connect pwm to pin on timer 1, channel A + sbi(TCCR1A, COM1A1); + // set pwm duty + OCR1A = val; + } else if (digitalPinToTimer(pin) == TIMER1B) { + // connect pwm to pin on timer 1, channel B + sbi(TCCR1A, COM1B1); + // set pwm duty + OCR1B = val; +#if defined(__AVR_ATmega8__) + } else if (digitalPinToTimer(pin) == TIMER2) { + // connect pwm to pin on timer 2, channel B + sbi(TCCR2, COM21); + // set pwm duty + OCR2 = val; +#else + } else if (digitalPinToTimer(pin) == TIMER0A) { + if (val == 0) { + digitalWrite(pin, LOW); + } else { + // connect pwm to pin on timer 0, channel A + sbi(TCCR0A, COM0A1); + // set pwm duty + OCR0A = val; + } + } else if (digitalPinToTimer(pin) == TIMER0B) { + if (val == 0) { + digitalWrite(pin, LOW); + } else { + // connect pwm to pin on timer 0, channel B + sbi(TCCR0A, COM0B1); + // set pwm duty + OCR0B = val; + } + } else if (digitalPinToTimer(pin) == TIMER2A) { + // connect pwm to pin on timer 2, channel A + sbi(TCCR2A, COM2A1); + // set pwm duty + OCR2A = val; + } else if (digitalPinToTimer(pin) == TIMER2B) { + // connect pwm to pin on timer 2, channel B + sbi(TCCR2A, COM2B1); + // set pwm duty + OCR2B = val; +#endif +#if defined(__AVR_ATmega1280__) + // XXX: need to handle other timers here + } else if (digitalPinToTimer(pin) == TIMER3A) { + // connect pwm to pin on timer 3, channel A + sbi(TCCR3A, COM3A1); + // set pwm duty + OCR3A = val; + } else if (digitalPinToTimer(pin) == TIMER3B) { + // connect pwm to pin on timer 3, channel B + sbi(TCCR3A, COM3B1); + // set pwm duty + OCR3B = val; + } else if (digitalPinToTimer(pin) == TIMER3C) { + // connect pwm to pin on timer 3, channel C + sbi(TCCR3A, COM3C1); + // set pwm duty + OCR3C = val; + } else if (digitalPinToTimer(pin) == TIMER4A) { + // connect pwm to pin on timer 4, channel A + sbi(TCCR4A, COM4A1); + // set pwm duty + OCR4A = val; + } else if (digitalPinToTimer(pin) == TIMER4B) { + // connect pwm to pin on timer 4, channel B + sbi(TCCR4A, COM4B1); + // set pwm duty + OCR4B = val; + } else if (digitalPinToTimer(pin) == TIMER4C) { + // connect pwm to pin on timer 4, channel C + sbi(TCCR4A, COM4C1); + // set pwm duty + OCR4C = val; + } else if (digitalPinToTimer(pin) == TIMER5A) { + // connect pwm to pin on timer 5, channel A + sbi(TCCR5A, COM5A1); + // set pwm duty + OCR5A = val; + } else if (digitalPinToTimer(pin) == TIMER5B) { + // connect pwm to pin on timer 5, channel B + sbi(TCCR5A, COM5B1); + // set pwm duty + OCR5B = val; +#endif + } else if (val < 128) + digitalWrite(pin, LOW); + else + digitalWrite(pin, HIGH); +} diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/wiring_digital.c b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_digital.c new file mode 100755 index 0000000..1cdbf6c --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_digital.c @@ -0,0 +1,111 @@ +/* + 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 + + $Id: wiring.c 248 2007-02-03 15:36:30Z mellis $ +*/ + +#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; + + if (port == NOT_A_PIN) return; + + // JWS: can I let the optimizer do this? + reg = portModeRegister(port); + + if (mode == INPUT) *reg &= ~bit; + else *reg |= bit; +} + +// 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. +// +static inline void turnOffPWM(uint8_t timer) __attribute__ ((always_inline)); +static inline void turnOffPWM(uint8_t timer) +{ + if (timer == TIMER1A) cbi(TCCR1A, COM1A1); + if (timer == TIMER1B) cbi(TCCR1A, COM1B1); + +#if defined(__AVR_ATmega8__) + if (timer == TIMER2) cbi(TCCR2, COM21); +#else + if (timer == TIMER0A) cbi(TCCR0A, COM0A1); + if (timer == TIMER0B) cbi(TCCR0A, COM0B1); + if (timer == TIMER2A) cbi(TCCR2A, COM2A1); + if (timer == TIMER2B) cbi(TCCR2A, COM2B1); +#endif + +#if defined(__AVR_ATmega1280__) + if (timer == TIMER3A) cbi(TCCR3A, COM3A1); + if (timer == TIMER3B) cbi(TCCR3A, COM3B1); + if (timer == TIMER3C) cbi(TCCR3A, COM3C1); + if (timer == TIMER4A) cbi(TCCR4A, COM4A1); + if (timer == TIMER4B) cbi(TCCR4A, COM4B1); + if (timer == TIMER4C) cbi(TCCR4A, COM4C1); + if (timer == TIMER5A) cbi(TCCR5A, COM5A1); + if (timer == TIMER5B) cbi(TCCR5A, COM5B1); + if (timer == TIMER5C) cbi(TCCR5A, COM5C1); +#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); + + if (val == LOW) *out &= ~bit; + else *out |= bit; +} + +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; +} diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/wiring_private.h b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_private.h new file mode 100755 index 0000000..2dfe552 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_private.h @@ -0,0 +1,68 @@ +/* + 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 +#include +#include +#include +#include + +#include "wiring.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__) +#define EXTERNAL_NUM_INTERRUPTS 8 +#else +#define EXTERNAL_NUM_INTERRUPTS 2 +#endif + +typedef void (*voidFuncPtr)(void); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/wiring_pulse.c b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_pulse.c new file mode 100755 index 0000000..8f232f1 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_pulse.c @@ -0,0 +1,66 @@ +/* + 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) + width++; + + // convert the reading to microseconds. The loop has been determined + // to be 10 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 * 10 + 16); +} diff --git a/arduino-0017-linux-x64/hardware/cores/arduino/wiring_shift.c b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_shift.c new file mode 100755 index 0000000..956f864 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/arduino/wiring_shift.c @@ -0,0 +1,40 @@ +/* + 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" + +void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val) +{ + int 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); + } +} diff --git a/arduino-0017-linux-x64/hardware/cores/atmega8/pins_atmega8.c b/arduino-0017-linux-x64/hardware/cores/atmega8/pins_atmega8.c new file mode 100755 index 0000000..05aa719 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/cores/atmega8/pins_atmega8.c @@ -0,0 +1,119 @@ +/* + pin_atmega8.c - pin definitions for the atmega8 + Part of Arduino / Wiring Lite + + 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 + 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: pins_atmega8.c 85 2006-01-12 23:24:12Z mellis $ +*/ + +#include +#include "wiring.h" + +// We map the pin numbers passed to digitalRead() or +// analogRead() directly to the corresponding pin +// numbers on the Atmega8. No distinction is made +// between analog and digital pins. + +// ATMEL ATMEGA8 +// +// +-\/-+ +// PC6 1| |28 PC5 +// PD0 2| |27 PC4 +// PD1 3| |26 PC3 +// PD2 4| |25 PC2 +// PD3 5| |24 PC1 +// PD4 6| |23 PC0 +// VCC 7| |22 GND +// GND 8| |21 AREF +// PB6 9| |20 AVCC +// PB7 10| |19 PB5 +// PD5 11| |18 PB4 +// PD6 12| |17 PB3 +// PD7 13| |16 PB2 +// PB0 14| |15 PB1 +// +----+ + +#define NUM_PINS 28 +#define NUM_PORTS 4 + +#define PB 2 +#define PC 3 +#define PD 4 + +int port_to_mode[NUM_PORTS + 1] = { + NOT_A_PORT, + NOT_A_PORT, + _SFR_IO_ADDR(DDRB), + _SFR_IO_ADDR(DDRC), + _SFR_IO_ADDR(DDRD), +}; + +int port_to_output[NUM_PORTS + 1] = { + NOT_A_PORT, + NOT_A_PORT, + _SFR_IO_ADDR(PORTB), + _SFR_IO_ADDR(PORTC), + _SFR_IO_ADDR(PORTD), +}; + +int port_to_input[NUM_PORTS + 1] = { + NOT_A_PORT, + NOT_A_PORT, + _SFR_IO_ADDR(PINB), + _SFR_IO_ADDR(PINC), + _SFR_IO_ADDR(PIND), +}; + +pin_t digital_pin_to_port_array[] = { + { NOT_A_PIN, NOT_A_PIN }, + + { PC, 6 }, + { PD, 0 }, + { PD, 1 }, + { PD, 2 }, + { PD, 3 }, + { PD, 4 }, + { NOT_A_PIN, NOT_A_PIN }, + { NOT_A_PIN, NOT_A_PIN }, + { PB, 6 }, + { PB, 7 }, + { PD, 5 }, + { PD, 6 }, + { PD, 7 }, + { PB, 0 }, + + { PB, 1 }, + { PB, 2 }, + { PB, 3 }, + { PB, 4 }, + { PB, 5 }, + { NOT_A_PIN, NOT_A_PIN }, + { NOT_A_PIN, NOT_A_PIN }, + { NOT_A_PIN, NOT_A_PIN }, + { PC, 0 }, + { PC, 1 }, + { PC, 2 }, + { PC, 3 }, + { PC, 4 }, + { PC, 5 }, +}; + +pin_t *digital_pin_to_port = digital_pin_to_port_array; +pin_t *analog_in_pin_to_port = digital_pin_to_port_array; +pin_t *analog_out_pin_to_port = digital_pin_to_port_array; diff --git a/arduino-0017-linux-x64/hardware/cores/blank/WProgram.h b/arduino-0017-linux-x64/hardware/cores/blank/WProgram.h new file mode 100755 index 0000000..e69de29 diff --git a/arduino-0017-linux-x64/hardware/cores/blank/main.cxx b/arduino-0017-linux-x64/hardware/cores/blank/main.cxx new file mode 100644 index 0000000..e69de29 diff --git a/arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.cpp b/arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.cpp new file mode 100755 index 0000000..3a361e7 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.cpp @@ -0,0 +1,50 @@ +/* + EEPROM.cpp - EEPROM library + Copyright (c) 2006 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 +*/ + +/****************************************************************************** + * Includes + ******************************************************************************/ + +#include +#include "WConstants.h" +#include "EEPROM.h" + +/****************************************************************************** + * Definitions + ******************************************************************************/ + +/****************************************************************************** + * Constructors + ******************************************************************************/ + +/****************************************************************************** + * User API + ******************************************************************************/ + +uint8_t EEPROMClass::read(int address) +{ + return eeprom_read_byte((unsigned char *) address); +} + +void EEPROMClass::write(int address, uint8_t value) +{ + eeprom_write_byte((unsigned char *) address, value); +} + +EEPROMClass EEPROM; diff --git a/arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.h b/arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.h new file mode 100755 index 0000000..aa2b577 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/EEPROM/EEPROM.h @@ -0,0 +1,35 @@ +/* + EEPROM.h - EEPROM library + Copyright (c) 2006 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 EEPROM_h +#define EEPROM_h + +#include + +class EEPROMClass +{ + public: + uint8_t read(int); + void write(int, uint8_t); +}; + +extern EEPROMClass EEPROM; + +#endif + diff --git a/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.pde b/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.pde new file mode 100644 index 0000000..36af68e --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.pde @@ -0,0 +1,21 @@ +/* + * EEPROM Clear + * + * Sets all of the bytes of the EEPROM to 0. + */ + +#include + +void setup() +{ + // write a 0 to all 512 bytes of the EEPROM + for (int i = 0; i < 512; i++) + EEPROM.write(i, 0); + + // turn the LED on when we're done + digitalWrite(13, HIGH); +} + +void loop() +{ +} diff --git a/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_read/eeprom_read.pde b/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_read/eeprom_read.pde new file mode 100644 index 0000000..2e30708 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_read/eeprom_read.pde @@ -0,0 +1,38 @@ +/* + * EEPROM Read + * + * Reads the value of each byte of the EEPROM and prints it + * to the computer. + */ + +#include + +// start reading from the first byte (address 0) of the EEPROM +int address = 0; +byte value; + +void setup() +{ + Serial.begin(9600); +} + +void loop() +{ + // read a byte from the current address of the EEPROM + value = EEPROM.read(address); + + Serial.print(address); + Serial.print("\t"); + Serial.print(value, DEC); + Serial.println(); + + // advance to the next address of the EEPROM + address = address + 1; + + // there are only 512 bytes of EEPROM, from 0 to 511, so if we're + // on address 512, wrap around to address 0 + if (address == 512) + address = 0; + + delay(500); +} diff --git a/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_write/eeprom_write.pde b/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_write/eeprom_write.pde new file mode 100644 index 0000000..ae7c57e --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/EEPROM/examples/eeprom_write/eeprom_write.pde @@ -0,0 +1,38 @@ +/* + * EEPROM Write + * + * Stores values read from analog input 0 into the EEPROM. + * These values will stay in the EEPROM when the board is + * turned off and may be retrieved later by another sketch. + */ + +#include + +// the current address in the EEPROM (i.e. which byte +// we're going to write to next) +int addr = 0; + +void setup() +{ +} + +void loop() +{ + // need to divide by 4 because analog inputs range from + // 0 to 1023 and each byte of the EEPROM can only hold a + // value from 0 to 255. + int val = analogRead(0) / 4; + + // write the value to the appropriate byte of the EEPROM. + // these values will remain there when the board is + // turned off. + EEPROM.write(addr, val); + + // advance to the next address. there are 512 bytes in + // the EEPROM, so go back to 0 when we hit 512. + addr = addr + 1; + if (addr == 512) + addr = 0; + + delay(100); +} diff --git a/arduino-0017-linux-x64/hardware/libraries/EEPROM/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/EEPROM/keywords.txt new file mode 100644 index 0000000..d3218fe --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/EEPROM/keywords.txt @@ -0,0 +1,18 @@ +####################################### +# Syntax Coloring Map For Ultrasound +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +EEPROM KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.cpp b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.cpp new file mode 100644 index 0000000..0511c7b --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.cpp @@ -0,0 +1,148 @@ +extern "C" { + #include "types.h" + #include "w5100.h" + #include "socket.h" + #include "string.h" +} + +#include "WProgram.h" + +#include "Ethernet.h" +#include "Client.h" +#include "Server.h" + +uint16_t Client::_srcport = 0; + +Client::Client(uint8_t sock) { + _sock = sock; +} + +Client::Client(uint8_t *ip, uint16_t port) { + _ip = ip; + _port = port; + _sock = 255; +} + +uint8_t Client::connect() { + if (_sock != 255) + return 0; + + for (int i = 0; i < MAX_SOCK_NUM; i++) { + uint8_t s = getSn_SR(i); + if (s == SOCK_CLOSED || s == SOCK_FIN_WAIT) { + _sock = i; + break; + } + } + + if (_sock == 255) + return 0; + + _srcport++; + if (_srcport + 1024 == 0) _srcport = 0; + socket(_sock, Sn_MR_TCP, _srcport + 1024, 0); + + if (!::connect(_sock, _ip, _port)) { + _sock = 255; + return 0; + } + + while (status() != SOCK_ESTABLISHED) { + delay(1); + if (status() == SOCK_CLOSED) { + _sock = 255; + return 0; + } + } + + return 1; +} + +void Client::write(uint8_t b) { + if (_sock != 255) + send(_sock, &b, 1); +} + +void Client::write(const char *str) { + if (_sock != 255) + send(_sock, (const uint8_t *)str, strlen(str)); +} + +void Client::write(const uint8_t *buf, size_t size) { + if (_sock != 255) + send(_sock, buf, size); +} + +int Client::available() { + if (_sock != 255) + return getSn_RX_RSR(_sock); + return 0; +} + +int Client::read() { + uint8_t b; + if (!available()) + return -1; + recv(_sock, &b, 1); + return b; +} + +void Client::flush() { + while (available()) + read(); +} + +void Client::stop() { + if (_sock == 255) + return; + + // attempt to close the connection gracefully (send a FIN to other side) + disconnect(_sock); + unsigned long start = millis(); + + // wait a second for the connection to close + while (status() != SOCK_CLOSED && millis() - start < 1000) + delay(1); + + // if it hasn't closed, close it forcefully + if (status() != SOCK_CLOSED) + close(_sock); + + EthernetClass::_server_port[_sock] = 0; + _sock = 255; +} + +uint8_t Client::connected() { + if (_sock == 255) { + return 0; + } else { + uint8_t s = status(); + return !(s == SOCK_LISTEN || s == SOCK_CLOSED || s == SOCK_FIN_WAIT || + (s == SOCK_CLOSE_WAIT && !available())); + } +} + +uint8_t Client::status() { + if (_sock == 255) { + return SOCK_CLOSED; + } else { + return getSn_SR(_sock); + } +} + +// the next three functions are a hack so we can compare the client returned +// by Server::available() to null, or use it as the condition in an +// if-statement. this lets us stay compatible with the Processing network +// library. + +uint8_t Client::operator==(int p) { + return _sock == 255; +} + +uint8_t Client::operator!=(int p) { + return _sock != 255; +} + +Client::operator bool() { + return _sock != 255; +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.h b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.h new file mode 100644 index 0000000..7c0ccdf --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Client.h @@ -0,0 +1,31 @@ +#ifndef Client_h +#define Client_h + +#include "Print.h" + +class Client : public Print { +private: + static uint16_t _srcport; + uint8_t _sock; + uint8_t *_ip; + uint16_t _port; +public: + Client(uint8_t); + Client(uint8_t *, uint16_t); + uint8_t status(); + uint8_t connect(); + virtual void write(uint8_t); + virtual void write(const char *str); + virtual void write(const uint8_t *buf, size_t size); + int available(); + int read(); + void flush(); + void stop(); + uint8_t connected(); + uint8_t operator==(int); + uint8_t operator!=(int); + operator bool(); + friend class Server; +}; + +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.cpp b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.cpp new file mode 100644 index 0000000..cb74876 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.cpp @@ -0,0 +1,38 @@ +extern "C" { + #include "types.h" + #include "w5100.h" +} + +#include "Ethernet.h" + +// XXX: don't make assumptions about the value of MAX_SOCK_NUM. +uint8_t EthernetClass::_state[MAX_SOCK_NUM] = { 0, 0, 0, 0 }; +uint16_t EthernetClass::_server_port[MAX_SOCK_NUM] = { 0, 0, 0, 0 }; + +void EthernetClass::begin(uint8_t *mac, uint8_t *ip) +{ + uint8_t gateway[4]; + gateway[0] = ip[0]; + gateway[1] = ip[1]; + gateway[2] = ip[2]; + gateway[3] = 1; + begin(mac, ip, gateway); +} + +void EthernetClass::begin(uint8_t *mac, uint8_t *ip, uint8_t *gateway) +{ + uint8_t subnet[] = { 255, 255, 255, 0 }; + begin(mac, ip, gateway, subnet); +} + +void EthernetClass::begin(uint8_t *mac, uint8_t *ip, uint8_t *gateway, uint8_t *subnet) +{ + iinchip_init(); + sysinit(0x55, 0x55); + setSHAR(mac); + setSIPR(ip); + setGAR(gateway); + setSUBR(subnet); +} + +EthernetClass Ethernet; diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.h b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.h new file mode 100644 index 0000000..bdfc4dd --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Ethernet.h @@ -0,0 +1,22 @@ +#ifndef Ethernet_h +#define Ethernet_h + +#include +#include "Client.h" +#include "Server.h" + +class EthernetClass { +private: +public: + static uint8_t _state[MAX_SOCK_NUM]; + static uint16_t _server_port[MAX_SOCK_NUM]; + void begin(uint8_t *, uint8_t *); + void begin(uint8_t *, uint8_t *, uint8_t *); + void begin(uint8_t *, uint8_t *, uint8_t *, uint8_t *); + friend class Client; + friend class Server; +}; + +extern EthernetClass Ethernet; + +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.cpp b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.cpp new file mode 100644 index 0000000..d17a5d3 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.cpp @@ -0,0 +1,91 @@ +extern "C" { + #include "types.h" + #include "w5100.h" + #include "socket.h" + #include "string.h" +} + +#include "Ethernet.h" +#include "Client.h" +#include "Server.h" + +Server::Server(uint16_t port) +{ + _port = port; +} + +void Server::begin() +{ + for (int sock = 0; sock < MAX_SOCK_NUM; sock++) { + Client client(sock); + if (client.status() == SOCK_CLOSED) { + socket(sock, Sn_MR_TCP, _port, 0); + listen(sock); + EthernetClass::_server_port[sock] = _port; + break; + } + } +} + +void Server::accept() +{ + int listening = 0; + + for (int sock = 0; sock < MAX_SOCK_NUM; sock++) { + Client client(sock); + + if (EthernetClass::_server_port[sock] == _port) { + if (client.status() == SOCK_LISTEN) { + listening = 1; + } else if (client.status() == SOCK_CLOSE_WAIT && !client.available()) { + client.stop(); + } + } + } + + if (!listening) { + begin(); + } +} + +Client Server::available() +{ + accept(); + + for (int sock = 0; sock < MAX_SOCK_NUM; sock++) { + Client client(sock); + if (EthernetClass::_server_port[sock] == _port && + client.status() == SOCK_ESTABLISHED) { + if (client.available()) { + // XXX: don't always pick the lowest numbered socket. + return client; + } + } + } + + return Client(255); +} + +void Server::write(uint8_t b) +{ + write(&b, 1); +} + +void Server::write(const char *str) +{ + write((const uint8_t *)str, strlen(str)); +} + +void Server::write(const uint8_t *buffer, size_t size) +{ + accept(); + + for (int sock = 0; sock < MAX_SOCK_NUM; sock++) { + Client client(sock); + + if (EthernetClass::_server_port[sock] == _port && + client.status() == SOCK_ESTABLISHED) { + client.write(buffer, size); + } + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.h b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.h new file mode 100644 index 0000000..73d6a5e --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/Server.h @@ -0,0 +1,25 @@ +#ifndef Server_h +#define Server_h + +extern "C" { + #include "utility/types.h" +} + +#include "Print.h" + +class Client; + +class Server : public Print { +private: + uint16_t _port; + void accept(); +public: + Server(uint16_t); + Client available(); + void begin(); + virtual void write(uint8_t); + virtual void write(const char *str); + virtual void write(const uint8_t *buf, size_t size); +}; + +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/ChatServer/ChatServer.pde b/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/ChatServer/ChatServer.pde new file mode 100644 index 0000000..825d2f8 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/ChatServer/ChatServer.pde @@ -0,0 +1,34 @@ +/* + * Chat Server + * + * A simple server that distributes any incoming messages to all + * connected clients. To use telnet to 10.0.0.177 and type! + */ + +#include + +// network configuration. gateway and subnet are optional. +byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; +byte ip[] = { 10, 0, 0, 177 }; +byte gateway[] = { 10, 0, 0, 1 }; +byte subnet[] = { 255, 255, 0, 0 }; + +// telnet defaults to port 23 +Server server(23); + +void setup() +{ + // initialize the ethernet device + Ethernet.begin(mac, ip, gateway, subnet); + + // start listening for clients + server.begin(); +} + +void loop() +{ + Client client = server.available(); + if (client) { + server.write(client.read()); + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebClient/WebClient.pde b/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebClient/WebClient.pde new file mode 100644 index 0000000..74a6094 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebClient/WebClient.pde @@ -0,0 +1,41 @@ +#include + +byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; +byte ip[] = { 10, 0, 0, 177 }; +byte server[] = { 64, 233, 187, 99 }; // Google + +Client client(server, 80); + +void setup() +{ + Ethernet.begin(mac, ip); + Serial.begin(9600); + + delay(1000); + + Serial.println("connecting..."); + + if (client.connect()) { + Serial.println("connected"); + client.println("GET /search?q=arduino HTTP/1.0"); + client.println(); + } else { + Serial.println("connection failed"); + } +} + +void loop() +{ + if (client.available()) { + char c = client.read(); + Serial.print(c); + } + + if (!client.connected()) { + Serial.println(); + Serial.println("disconnecting."); + client.stop(); + for(;;) + ; + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebServer/WebServer.pde b/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebServer/WebServer.pde new file mode 100644 index 0000000..b337a8e --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/examples/WebServer/WebServer.pde @@ -0,0 +1,61 @@ +/* + * Web Server + * + * A simple web server that shows the value of the analog input pins. + */ + +#include + +byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; +byte ip[] = { 10, 0, 0, 177 }; + +Server server(80); + +void setup() +{ + Ethernet.begin(mac, ip); + server.begin(); +} + +void loop() +{ + Client client = server.available(); + if (client) { + // an http request ends with a blank line + boolean current_line_is_blank = true; + while (client.connected()) { + if (client.available()) { + char c = client.read(); + // if we've gotten to the end of the line (received a newline + // character) and the line is blank, the http request has ended, + // so we can send a reply + if (c == '\n' && current_line_is_blank) { + // send a standard http response header + client.println("HTTP/1.1 200 OK"); + client.println("Content-Type: text/html"); + client.println(); + + // output the value of each analog input pin + for (int i = 0; i < 6; i++) { + client.print("analog input "); + client.print(i); + client.print(" is "); + client.print(analogRead(i)); + client.println("
"); + } + break; + } + if (c == '\n') { + // we're starting a new line + current_line_is_blank = true; + } else if (c != '\r') { + // we've gotten a character on the current line + current_line_is_blank = false; + } + } + } + // give the web browser time to receive the data + delay(1); + client.stop(); + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/Ethernet/keywords.txt new file mode 100644 index 0000000..ebc5793 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/keywords.txt @@ -0,0 +1,30 @@ +####################################### +# Syntax Coloring Map For Ethernet +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +Ethernet KEYWORD1 +Client KEYWORD1 +Server KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +status KEYWORD2 +connect KEYWORD2 +write KEYWORD2 +available KEYWORD2 +read KEYWORD2 +flush KEYWORD2 +stop KEYWORD2 +connected KEYWORD2 +begin KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.c b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.c new file mode 100755 index 0000000..88c81a8 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.c @@ -0,0 +1,558 @@ +/* +* +@file socket.c +@brief setting chip register for socket + last update : 2008. Jan +* +*/ + +#include "types.h" +#include "w5100.h" +#include "socket.h" + +static uint16 local_port; + + +/** +@brief This Socket function initialize the channel in perticular mode, and set the port and wait for W5100 done it. +@return 1 for sucess else 0. +*/ +uint8 socket( + SOCKET s, /**< for socket number */ + uint8 protocol, /**< for socket protocol */ + uint16 port, /**< the source port for the socket */ + uint8 flag /**< the option for the socket */ + ) +{ + uint8 ret; +#ifdef __DEF_IINCHIP_DBG__ + printf("socket()\r\n"); +#endif + if ((protocol == Sn_MR_TCP) || (protocol == Sn_MR_UDP) || (protocol == Sn_MR_IPRAW) || (protocol == Sn_MR_MACRAW) || (protocol == Sn_MR_PPPOE)) + { + close(s); + IINCHIP_WRITE(Sn_MR(s),protocol | flag); + if (port != 0) { + IINCHIP_WRITE(Sn_PORT0(s),(uint8)((port & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_PORT0(s) + 1),(uint8)(port & 0x00ff)); + } else { + local_port++; // if don't set the source port, set local_port number. + IINCHIP_WRITE(Sn_PORT0(s),(uint8)((local_port & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_PORT0(s) + 1),(uint8)(local_port & 0x00ff)); + } + IINCHIP_WRITE(Sn_CR(s),Sn_CR_OPEN); // run sockinit Sn_CR + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ + ret = 1; + } + else + { + ret = 0; + } +#ifdef __DEF_IINCHIP_DBG__ + printf("Sn_SR = %.2x , Protocol = %.2x\r\n", IINCHIP_READ(Sn_SR(s)), IINCHIP_READ(Sn_MR(s))); +#endif + return ret; +} + + +/** +@brief This function close the socket and parameter is "s" which represent the socket number +*/ +void close(SOCKET s) +{ +#ifdef __DEF_IINCHIP_DBG__ + printf("close()\r\n"); +#endif + + IINCHIP_WRITE(Sn_CR(s),Sn_CR_CLOSE); + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ + + /* +2008.01 [hwkim]: clear interrupt */ + #ifdef __DEF_IINCHIP_INT__ + /* m2008.01 [bj] : all clear */ + putISR(s, 0x00); + #else + /* m2008.01 [bj] : all clear */ + IINCHIP_WRITE(Sn_IR(s), 0xFF); + #endif +} + + +/** +@brief This function established the connection for the channel in passive (server) mode. This function waits for the request from the peer. +@return 1 for success else 0. +*/ +uint8 listen( + SOCKET s /**< the socket number */ + ) +{ + uint8 ret; +#ifdef __DEF_IINCHIP_DBG__ + printf("listen()\r\n"); +#endif + if (IINCHIP_READ(Sn_SR(s)) == SOCK_INIT) + { + IINCHIP_WRITE(Sn_CR(s),Sn_CR_LISTEN); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ + ret = 1; + } + else + { + ret = 0; +#ifdef __DEF_IINCHIP_DBG__ + printf("Fail[invalid ip,port]\r\n"); +#endif + } + return ret; +} + + +/** +@brief This function established the connection for the channel in Active (client) mode. + This function waits for the untill the connection is established. + +@return 1 for success else 0. +*/ +uint8 connect(SOCKET s, uint8 * addr, uint16 port) +{ + uint8 ret; +#ifdef __DEF_IINCHIP_DBG__ + printf("connect()\r\n"); +#endif + if + ( + ((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) || + ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) || + (port == 0x00) + ) + { + ret = 0; +#ifdef __DEF_IINCHIP_DBG__ + printf("Fail[invalid ip,port]\r\n"); +#endif + } + else + { + ret = 1; + // set destination IP + IINCHIP_WRITE(Sn_DIPR0(s),addr[0]); + IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]); + IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]); + IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]); + IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff)); + IINCHIP_WRITE(Sn_CR(s),Sn_CR_CONNECT); + /* m2008.01 [bj] : wait for completion */ + while ( IINCHIP_READ(Sn_CR(s)) ) ; + + } + + return ret; +} + + + +/** +@brief This function used for disconnect the socket and parameter is "s" which represent the socket number +@return 1 for success else 0. +*/ +void disconnect(SOCKET s) +{ +#ifdef __DEF_IINCHIP_DBG__ + printf("disconnect()\r\n"); +#endif + IINCHIP_WRITE(Sn_CR(s),Sn_CR_DISCON); + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ +} + + +/** +@brief This function used to send the data in TCP mode +@return 1 for success else 0. +*/ +uint16 send( + SOCKET s, /**< the socket index */ + const uint8 * buf, /**< a pointer to data */ + uint16 len /**< the data size to be send */ + ) +{ + uint8 status=0; + uint16 ret=0; + uint16 freesize=0; +#ifdef __DEF_IINCHIP_DBG__ + printf("send()\r\n"); +#endif + + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size. + else ret = len; + + // if freebuf is available, start. + do + { + freesize = getSn_TX_FSR(s); + status = IINCHIP_READ(Sn_SR(s)); + if ((status != SOCK_ESTABLISHED) && (status != SOCK_CLOSE_WAIT)) + { + ret = 0; + break; + } +#ifdef __DEF_IINCHIP_DBG__ + printf("socket %d freesize(%d) empty or error\r\n", s, freesize); +#endif + } while (freesize < ret); + + // copy data + send_data_processing(s, (uint8 *)buf, ret); + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND); + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ + +/* +2008.01 bj */ +#ifdef __DEF_IINCHIP_INT__ + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) +#else + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) +#endif + { + /* m2008.01 [bj] : reduce code */ + if ( IINCHIP_READ(Sn_SR(s)) == SOCK_CLOSED ) + { +#ifdef __DEF_IINCHIP_DBG__ + printf("SOCK_CLOSED.\r\n"); +#endif + close(s); + return 0; + } + } +/* +2008.01 bj */ +#ifdef __DEF_IINCHIP_INT__ + putISR(s, getISR(s) & (~Sn_IR_SEND_OK)); +#else + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK); +#endif + return ret; +} + + +/** +@brief This function is an application I/F function which is used to receive the data in TCP mode. + It continues to wait for data as much as the application wants to receive. + +@return received data size for success else -1. +*/ +uint16 recv( + SOCKET s, /**< socket index */ + uint8 * buf, /**< a pointer to copy the data to be received */ + uint16 len /**< the data size to be read */ + ) +{ + uint16 ret=0; +#ifdef __DEF_IINCHIP_DBG__ + printf("recv()\r\n"); +#endif + + + if ( len > 0 ) + { + recv_data_processing(s, buf, len); + IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV); + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ + ret = len; + } + return ret; +} + + +/** +@brief This function is an application I/F function which is used to send the data for other then TCP mode. + Unlike TCP transmission, The peer's destination address and the port is needed. + +@return This function return send data size for success else -1. +*/ +uint16 sendto( + SOCKET s, /**< socket index */ + const uint8 * buf, /**< a pointer to the data */ + uint16 len, /**< the data size to send */ + uint8 * addr, /**< the peer's Destination IP address */ + uint16 port /**< the peer's destination port number */ + ) +{ +// uint8 status=0; +// uint8 isr=0; + uint16 ret=0; + +#ifdef __DEF_IINCHIP_DBG__ + printf("sendto()\r\n"); +#endif + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size. + else ret = len; + + if + ( + ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) || + ((port == 0x00)) ||(ret == 0) + ) + { + /* +2008.01 [bj] : added return value */ + ret = 0; +#ifdef __DEF_IINCHIP_DBG__ + printf("%d Fail[%.2x.%.2x.%.2x.%.2x, %.d, %d]\r\n",s, addr[0], addr[1], addr[2], addr[3] , port, len); + printf("Fail[invalid ip,port]\r\n"); +#endif + } + else + { + IINCHIP_WRITE(Sn_DIPR0(s),addr[0]); + IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]); + IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]); + IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]); + IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff)); + + // copy data + send_data_processing(s, (uint8 *)buf, ret); + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND); + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ + +/* +2008.01 bj */ +#ifdef __DEF_IINCHIP_INT__ + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) +#else + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) +#endif + { +#ifdef __DEF_IINCHIP_INT__ + if (getISR(s) & Sn_IR_TIMEOUT) +#else + if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT) +#endif + { +#ifdef __DEF_IINCHIP_DBG__ + printf("send fail.\r\n"); +#endif +/* +2008.01 [bj]: clear interrupt */ +#ifdef __DEF_IINCHIP_INT__ + putISR(s, getISR(s) & ~(Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */ +#else + IINCHIP_WRITE(Sn_IR(s), (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */ +#endif + return 0; + } + } + +/* +2008.01 bj */ +#ifdef __DEF_IINCHIP_INT__ + putISR(s, getISR(s) & (~Sn_IR_SEND_OK)); +#else + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK); +#endif + + } + return ret; +} + + +/** +@brief This function is an application I/F function which is used to receive the data in other then + TCP mode. This function is used to receive UDP, IP_RAW and MAC_RAW mode, and handle the header as well. + +@return This function return received data size for success else -1. +*/ +uint16 recvfrom( + SOCKET s, /**< the socket number */ + uint8 * buf, /**< a pointer to copy the data to be received */ + uint16 len, /**< the data size to read */ + uint8 * addr, /**< a pointer to store the peer's IP address */ + uint16 *port /**< a pointer to store the peer's port number. */ + ) +{ + uint8 head[8]; + uint16 data_len=0; + uint16 ptr=0; +#ifdef __DEF_IINCHIP_DBG__ + printf("recvfrom()\r\n"); +#endif + + if ( len > 0 ) + { + ptr = IINCHIP_READ(Sn_RX_RD0(s)); + ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_RX_RD0(s) + 1); +#ifdef __DEF_IINCHIP_DBG__ + printf("ISR_RX: rd_ptr : %.4x\r\n", ptr); +#endif + switch (IINCHIP_READ(Sn_MR(s)) & 0x07) + { + case Sn_MR_UDP : + read_data(s, (uint8 *)ptr, head, 0x08); + ptr += 8; + // read peer's IP address, port number. + addr[0] = head[0]; + addr[1] = head[1]; + addr[2] = head[2]; + addr[3] = head[3]; + *port = head[4]; + *port = (*port << 8) + head[5]; + data_len = head[6]; + data_len = (data_len << 8) + head[7]; + +#ifdef __DEF_IINCHIP_DBG__ + printf("UDP msg arrived\r\n"); + printf("source Port : %d\r\n", *port); + printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]); +#endif + + read_data(s, (uint8 *)ptr, buf, data_len); // data copy. + ptr += data_len; + + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff)); + break; + + case Sn_MR_IPRAW : + read_data(s, (uint8 *)ptr, head, 0x06); + ptr += 6; + + addr[0] = head[0]; + addr[1] = head[1]; + addr[2] = head[2]; + addr[3] = head[3]; + data_len = head[4]; + data_len = (data_len << 8) + head[5]; + +#ifdef __DEF_IINCHIP_DBG__ + printf("IP RAW msg arrived\r\n"); + printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]); +#endif + read_data(s, (uint8 *)ptr, buf, data_len); // data copy. + ptr += data_len; + + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff)); + break; + case Sn_MR_MACRAW : + read_data(s,(uint8*)ptr,head,2); + ptr+=2; + data_len = head[0]; + data_len = (data_len<<8) + head[1] - 2; + + read_data(s,(uint8*) ptr,buf,data_len); + ptr += data_len; + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff)); + +#ifdef __DEF_IINCHIP_DGB__ + printf("MAC RAW msg arrived\r\n"); + printf("dest mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]); + printf("src mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[6],buf[7],buf[8],buf[9],buf[10],buf[11]); + printf("type =%.2X%.2X\r\n",buf[12],buf[13]); +#endif + break; + + default : + break; + } + IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV); + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; + /* ------- */ + } +#ifdef __DEF_IINCHIP_DBG__ + printf("recvfrom() end ..\r\n"); +#endif + return data_len; +} + + +uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len) +{ + uint8 status=0; +// uint8 isr=0; + uint16 ret=0; + +#ifdef __DEF_IINCHIP_DBG__ + printf("igmpsend()\r\n"); +#endif + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size. + else ret = len; + + if (ret == 0) + { + ; +#ifdef __DEF_IINCHIP_DBG__ + printf("%d Fail[%d]\r\n",len); +#endif + } + else + { + // copy data + send_data_processing(s, (uint8 *)buf, ret); + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND); +/* +2008.01 bj */ + while( IINCHIP_READ(Sn_CR(s)) ) + ; +/* ------- */ + +/* +2008.01 bj */ +#ifdef __DEF_IINCHIP_INT__ + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) +#else + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) +#endif + { + status = IINCHIP_READ(Sn_SR(s)); +#ifdef __DEF_IINCHIP_INT__ + if (getISR(s) & Sn_IR_TIMEOUT) +#else + if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT) +#endif + { +#ifdef __DEF_IINCHIP_DBG__ + printf("igmpsend fail.\r\n"); +#endif + /* in case of igmp, if send fails, then socket closed */ + /* if you want change, remove this code. */ + close(s); + /* ----- */ + + return 0; + } + } + +/* +2008.01 bj */ +#ifdef __DEF_IINCHIP_INT__ + putISR(s, getISR(s) & (~Sn_IR_SEND_OK)); +#else + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK); +#endif + } + return ret; +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.h b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.h new file mode 100755 index 0000000..a5cce42 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/socket.h @@ -0,0 +1,23 @@ +/* +* +@file socket.h +@brief define function of socket API +* +*/ + +#ifndef _SOCKET_H_ +#define _SOCKET_H_ + +extern uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag); // Opens a socket(TCP or UDP or IP_RAW mode) +extern void close(SOCKET s); // Close socket +extern uint8 connect(SOCKET s, uint8 * addr, uint16 port); // Establish TCP connection (Active connection) +extern void disconnect(SOCKET s); // disconnect the connection +extern uint8 listen(SOCKET s); // Establish TCP connection (Passive connection) +extern uint16 send(SOCKET s, const uint8 * buf, uint16 len); // Send data (TCP) +extern uint16 recv(SOCKET s, uint8 * buf, uint16 len); // Receive data (TCP) +extern uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port); // Send data (UDP/IP RAW) +extern uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port); // Receive data (UDP/IP RAW) + +extern uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len); +#endif +/* _SOCKET_H_ */ diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/spi.h b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/spi.h new file mode 100755 index 0000000..000705d --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/spi.h @@ -0,0 +1,58 @@ +//----------------------------------------------------------------------------- +//AVR Mega168 SPI HAL +#define BIT0 0x01 +#define BIT1 0x02 +#define BIT2 0x04 +#define BIT3 0x08 +#define BIT4 0x10 +#define BIT5 0x20 +#define BIT6 0x40 +#define BIT7 0x80 + +#define SPI0_SS_BIT BIT2 +#define SPI0_SS_DDR DDRB +#define SPI0_SS_PORT PORTB + +#define SPI0_SCLK_BIT BIT5 +#define SPI0_SCLK_DDR DDRB +#define SPI0_SCLK_PORT PORTB + +#define SPI0_MOSI_BIT BIT3 +#define SPI0_MOSI_DDR DDRB +#define SPI0_MOSI_PORT PORTB + +#define SPI0_MISO_BIT BIT4 +#define SPI0_MISO_DDR DDRB +#define SPI0_MISO_PORT PORTB + + +#define SPI0_WaitForReceive() +#define SPI0_RxData() (SPDR) + +#define SPI0_TxData(Data) (SPDR = Data) +#define SPI0_WaitForSend() while( (SPSR & 0x80)==0x00 ) + +#define SPI0_SendByte(Data) SPI0_TxData(Data);SPI0_WaitForSend() +#define SPI0_RecvBute() SPI0_RxData() + +// PB4(MISO), PB3(MOSI), PB5(SCK), PB2(/SS) // CS=1, waiting for SPI start // SPI mode 0, 4MHz +#define SPI0_Init() DDRB |= SPI0_SS_BIT|SPI0_SCLK_BIT|SPI0_MOSI_BIT;\ + PORTB |= SPI0_SS_BIT; PORTB &= ~(SPI0_SCLK_BIT|SPI0_MOSI_BIT);\ + SPCR = 0x50 +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +//IInChip SPI HAL +#define IINCHIP_SpiInit SPI0_Init +#define IINCHIP_SpiSendData SPI0_SendByte +#define IINCHIP_SpiRecvData SPI0_RxData + + +#define IINCHIP_CS_BIT BIT2 +#define IINCHIP_CS_DDR DDRB +#define IINCHIP_CS_PORT PORTB + +#define IINCHIP_CSInit() (IINCHIP_CS_DDR |= IINCHIP_CS_BIT) +#define IINCHIP_CSon() (IINCHIP_CS_PORT |= IINCHIP_CS_BIT) +#define IINCHIP_CSoff() (IINCHIP_CS_PORT &= ~IINCHIP_CS_BIT) +//----------------------------------------------------------------------------- diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/types.h b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/types.h new file mode 100755 index 0000000..6c350da --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/types.h @@ -0,0 +1,165 @@ +/* +* +@file type.h +* +*/ + +#ifndef _TYPE_H_ +#define _TYPE_H_ + + +/*************************************************** + * attribute for mcu ( types, ... ) + ***************************************************/ +//#include "mcu_define.h" +#define __MCU_AVR__ 1 +#define __MCU_TYPE__ __MCU_AVR__ + +//---- Refer "Rom File Maker Manual Vx.x.pdf" +#include + +#define _ENDIAN_LITTLE_ 0 /**< This must be defined if system is little-endian alignment */ +#define _ENDIAN_BIG_ 1 +#define SYSTEM_ENDIAN _ENDIAN_LITTLE_ + +#define MAX_SOCK_NUM 4 /**< Maxmium number of socket */ +#define CLK_CPU F_CPU /**< 8Mhz(for serial) */ + +/* ## __DEF_IINCHIP_xxx__ : define option for iinchip driver *****************/ +//#define __DEF_IINCHIP_DBG__ /* involve debug code in driver (socket.c) */ +//#define __DEF_IINCHIP_INT__ /**< involve interrupt service routine (socket.c) */ +//#define __DEF_IINCHIP_PPP__ /* involve pppoe routine (socket.c) */ + /* If it is defined, the source files(md5.h,md5.c) must be included in your project. + Otherwize, the source files must be removed in your project. */ + +#define __DEF_IINCHIP_DIRECT_MODE__ 1 +#define __DEF_IINCHIP_INDIRECT_MODE__ 2 +#define __DEF_IINCHIP_SPI_MODE__ 3 + +//#define __DEF_IINCHIP_BUS__ __DEF_IINCHIP_DIRECT_MODE__ +//#define __DEF_IINCHIP_BUS__ __DEF_IINCHIP_INDIRECT_MODE__ +#define __DEF_IINCHIP_BUS__ __DEF_IINCHIP_SPI_MODE__ /*Enable SPI_mode*/ + + +/** +@brief __DEF_IINCHIP_MAP_xxx__ : define memory map for iinchip +*/ +#define __DEF_IINCHIP_MAP_BASE__ 0x8000 +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_DIRECT_MODE__) + #define COMMON_BASE __DEF_IINCHIP_MAP_BASE__ +#else + #define COMMON_BASE 0x0000 +#endif +#define __DEF_IINCHIP_MAP_TXBUF__ (COMMON_BASE + 0x4000) /* Internal Tx buffer address of the iinchip */ +#define __DEF_IINCHIP_MAP_RXBUF__ (COMMON_BASE + 0x6000) /* Internal Rx buffer address of the iinchip */ + + +#if (__MCU_TYPE__ == __MCU_AVR__) + #ifdef __DEF_IINCHIP_INT__ + // iinchip use external interrupt 4 + #define IINCHIP_ISR_DISABLE() (EIMSK &= ~(0x10)) + #define IINCHIP_ISR_ENABLE() (EIMSK |= 0x10) + #define IINCHIP_ISR_GET(X) (X = EIMSK) + #define IINCHIP_ISR_SET(X) (EIMSK = X) + #else + #define IINCHIP_ISR_DISABLE() + #define IINCHIP_ISR_ENABLE() + #define IINCHIP_ISR_GET(X) + #define IINCHIP_ISR_SET(X) + #endif +#else +#error "unknown MCU type" +#endif + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +//typedef enum { false, true } bool; + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +/** + * The 8-bit signed data type. + */ +typedef char int8; +/** + * The volatile 8-bit signed data type. + */ +typedef volatile char vint8; +/** + * The 8-bit unsigned data type. + */ +typedef unsigned char uint8; +/** + * The volatile 8-bit unsigned data type. + */ +typedef volatile unsigned char vuint8; + +/** + * The 16-bit signed data type. + */ +typedef int int16; +/** + * The volatile 16-bit signed data type. + */ +typedef volatile int vint16; +/** + * The 16-bit unsigned data type. + */ +typedef unsigned int uint16; +/** + * The volatile 16-bit unsigned data type. + */ +typedef volatile unsigned int vuint16; +/** + * The 32-bit signed data type. + */ +typedef long int32; +/** + * The volatile 32-bit signed data type. + */ +typedef volatile long vint32; +/** + * The 32-bit unsigned data type. + */ +typedef unsigned long uint32; +/** + * The volatile 32-bit unsigned data type. + */ +typedef volatile unsigned long vuint32; + +/* bsd */ +typedef uint8 u_char; /**< 8-bit value */ +typedef uint8 SOCKET; +typedef uint16 u_short; /**< 16-bit value */ +typedef uint16 u_int; /**< 16-bit value */ +typedef uint32 u_long; /**< 32-bit value */ + +typedef union _un_l2cval { + u_long lVal; + u_char cVal[4]; +}un_l2cval; + +typedef union _un_i2cval { + u_int iVal; + u_char cVal[2]; +}un_i2cval; + + +/** global define */ +#define FW_VERSION 0x01010000 /* System F/W Version : 1.1.0.0 */ +#define HW_VERSION 0x01000000 + + +#define TX_RX_MAX_BUF_SIZE 2048 +#define TX_BUF 0x1100 +#define RX_BUF (TX_BUF+TX_RX_MAX_BUF_SIZE) + +#define UART_DEVICE_CNT 1 /**< UART device number */ +/* #define SUPPORT_UART_ONE */ + +#endif /* _TYPE_H_ */ diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.c b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.c new file mode 100755 index 0000000..7d0f55a --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.c @@ -0,0 +1,1302 @@ +/* + * (c)COPYRIGHT + * ALL RIGHT RESERVED + * + * FileName : w5100.c + * Revision History : + * ---------- ------- ------------------------------------------------ + * Date version Description + * ---------- ------- ------------------------------------------------ + * 01/25/2007 1.1 Bug is Fixed in the Indirect Mode + * : Memory mapping error + * ---------- ------- ------------------------------------------------ + * 01/08/2008 1.2 Modification of Socket Command Part + * : Check if the appropriately performed after writing Sn_CR + * + * Modification of SPI Part + * : SPI code changed by adding 'spi.h'. + * : Change control type for SPI port from byte to bit. + * ---------- ------- ------------------------------------------------ + * 01/15/2008 1.3 Bug is Fixed in the pppinit() fuction. + * : do not clear interrupt value, so fixed. + * + * Modification of ISR + * : Do not exit ISR, if there is interrupt. + * ---------- ------- ------------------------------------------------ + * 03/21/2008 1.4 Modification of SetMR() function + * : Use IINCHIP_WRITE() function in Direct or SPI mode. + * ---------- ------- ------------------------------------------------ + */ +#include +#include + +#include +// #include + +#include "types.h" +#include "socket.h" +#include "w5100.h" + + + +#ifdef __DEF_IINCHIP_PPP__ + #include "md5.h" +#endif + + +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_SPI_MODE__) +#include "spi.h" //+2007113[jhpark] +#endif + +static uint8 I_STATUS[MAX_SOCK_NUM]; +static uint16 SMASK[MAX_SOCK_NUM]; /**< Variable for Tx buffer MASK in each channel */ +static uint16 RMASK[MAX_SOCK_NUM]; /**< Variable for Rx buffer MASK in each channel */ +static uint16 SSIZE[MAX_SOCK_NUM]; /**< Max Tx buffer size by each channel */ +static uint16 RSIZE[MAX_SOCK_NUM]; /**< Max Rx buffer size by each channel */ +static uint16 SBUFBASEADDRESS[MAX_SOCK_NUM]; /**< Tx buffer base address by each channel */ +static uint16 RBUFBASEADDRESS[MAX_SOCK_NUM]; /**< Rx buffer base address by each channel */ + +uint8 getISR(uint8 s) +{ + return I_STATUS[s]; +} + +void putISR(uint8 s, uint8 val) +{ + I_STATUS[s] = val; +} + +uint16 getIINCHIP_RxMAX(uint8 s) +{ + return RSIZE[s]; +} +uint16 getIINCHIP_TxMAX(uint8 s) +{ + return SSIZE[s]; +} +uint16 getIINCHIP_RxMASK(uint8 s) +{ + return RMASK[s]; +} +uint16 getIINCHIP_TxMASK(uint8 s) +{ + return SMASK[s]; +} +uint16 getIINCHIP_RxBASE(uint8 s) +{ + return RBUFBASEADDRESS[s]; +} +uint16 getIINCHIP_TxBASE(uint8 s) +{ + return SBUFBASEADDRESS[s]; +} + + /** +@brief This function writes the data into W5100 registers. +*/ +uint8 IINCHIP_WRITE(uint16 addr,uint8 data) +{ +// DIRECT MODE I/F +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_DIRECT_MODE__) + IINCHIP_ISR_DISABLE(); + *((vuint8*)(addr)) = data; + IINCHIP_ISR_ENABLE(); +#elif(__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_INDIRECT_MODE__) /* INDIRECT MODE I/F */ + IINCHIP_ISR_DISABLE(); + *((vuint8*)IDM_AR0) = (uint8)((addr & 0xFF00) >> 8); + *((vuint8*)IDM_AR1) = (uint8)(addr & 0x00FF); + *((vuint8*)IDM_DR) = data; + IINCHIP_ISR_ENABLE(); +#elif (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_SPI_MODE__) + IINCHIP_ISR_DISABLE(); + IINCHIP_SpiInit(); + + //SPI MODE I/F + IINCHIP_CSoff(); // CS=0, SPI start + + IINCHIP_SpiSendData(0xF0); + IINCHIP_SpiSendData((addr & 0xFF00) >> 8); + IINCHIP_SpiSendData(addr & 0x00FF); + IINCHIP_SpiSendData(data); + + IINCHIP_CSon(); + + IINCHIP_ISR_ENABLE(); +#else + #error "unknown bus type" +#endif + return 1; +} + + +/** +@brief This function reads the value from W5100 registers. +*/ +uint8 IINCHIP_READ(uint16 addr) +{ + uint8 data; + +// DIRECT MODE I/F + +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_DIRECT_MODE__) + IINCHIP_ISR_DISABLE(); + data = *((vuint8*)(addr)); + IINCHIP_ISR_ENABLE(); +#elif(__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_INDIRECT_MODE__) + IINCHIP_ISR_DISABLE(); + *((vuint8*)IDM_AR0) = (uint8)((addr & 0xFF00) >> 8); + *((vuint8*)IDM_AR1) = (uint8)(addr & 0x00FF); + data = *((vuint8*)IDM_DR); + IINCHIP_ISR_ENABLE(); + +#elif (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_SPI_MODE__) + IINCHIP_ISR_DISABLE(); + IINCHIP_SpiInit(); + IINCHIP_CSoff(); // CS=0, SPI start + + IINCHIP_SpiSendData(0x0F); + IINCHIP_SpiSendData((addr & 0xFF00) >> 8); + IINCHIP_SpiSendData(addr & 0x00FF); + + + IINCHIP_SpiSendData(0); + data = IINCHIP_SpiRecvData(); + + IINCHIP_CSon(); // SPI end + IINCHIP_ISR_ENABLE(); +#else + #error "unknown bus type" +#endif + return data; +} + + +/** +@brief This function writes into W5100 memory(Buffer) +*/ +uint16 wiz_write_buf(uint16 addr,uint8* buf,uint16 len) +{ +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_DIRECT_MODE__) + IINCHIP_ISR_DISABLE(); + memcpy((uint8 *)addr, buf, len); + IINCHIP_ISR_ENABLE(); +#elif (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_INDIRECT_MODE__) + uint16 idx = 0; + IINCHIP_ISR_DISABLE(); + *((vuint8*)IDM_AR0) = (uint8)((addr & 0xFF00) >> 8); + *((vuint8*)IDM_AR1) = (uint8)(addr & 0x00FF); + for (idx = 0; idx < len ; idx++) *((vuint8*)IDM_DR) = buf[idx]; + IINCHIP_ISR_ENABLE(); +#elif (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_SPI_MODE__) + uint16 idx = 0; + + IINCHIP_ISR_DISABLE(); + IINCHIP_SpiInit(); + + //SPI MODE I/F + for(idx=0;idx> 8); + IINCHIP_SpiSendData((addr+idx) & 0x00FF); + IINCHIP_SpiSendData(buf[idx]); + + IINCHIP_CSon(); // CS=0, SPI end + } + + IINCHIP_ISR_ENABLE(); +#else + #error "unknown bus type" +#endif + return len; +} + + +/** +@brief This function reads into W5100 memory(Buffer) +*/ +uint16 wiz_read_buf(uint16 addr, uint8* buf,uint16 len) +{ +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_DIRECT_MODE__) + IINCHIP_ISR_DISABLE(); + memcpy(buf, (uint8 *)addr, len); + IINCHIP_ISR_ENABLE(); +#elif(__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_INDIRECT_MODE__) + uint16 idx = 0; + IINCHIP_ISR_DISABLE(); + *((vuint8*)IDM_AR0) = (uint8)((addr & 0xFF00) >> 8); + *((vuint8*)IDM_AR1) = (uint8)(addr & 0x00FF); + for (idx = 0; idx < len ; idx++) buf[idx] = *((vuint8*)IDM_DR); + IINCHIP_ISR_ENABLE(); +#elif (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_SPI_MODE__) + uint16 idx = 0; + IINCHIP_ISR_DISABLE(); + + IINCHIP_SpiInit(); + + for (idx=0; idx> 8); + IINCHIP_SpiSendData((addr+idx) & 0x00FF); + + + IINCHIP_SpiSendData(0); + buf[idx] = IINCHIP_SpiRecvData(); + + IINCHIP_CSon(); // CS=0, SPI end + } + + IINCHIP_ISR_ENABLE(); +#else + #error "unknown bus type" +#endif + return len; +} + + +/** +@brief Socket interrupt routine +*/ +#ifdef __DEF_IINCHIP_INT__ +ISR(INT4_vect) +{ + uint8 int_val; + IINCHIP_ISR_DISABLE(); + int_val = IINCHIP_READ(IR); + + /* +200801[bj] process all of interupt */ + do { + /*---*/ + + if (int_val & IR_CONFLICT) + { + printf("IP conflict : %.2x\r\n", int_val); + } + if (int_val & IR_UNREACH) + { + printf("INT Port Unreachable : %.2x\r\n", int_val); + printf("UIPR0 : %d.%d.%d.%d\r\n", IINCHIP_READ(UIPR0), IINCHIP_READ(UIPR0+1), IINCHIP_READ(UIPR0+2), IINCHIP_READ(UIPR0+3)); + printf("UPORT0 : %.2x %.2x\r\n", IINCHIP_READ(UPORT0), IINCHIP_READ(UPORT0+1)); + } + + /* +200801[bj] interrupt clear */ + IINCHIP_WRITE(IR, 0xf0); + /*---*/ + + if (int_val & IR_SOCK(0)) + { + /* +-200801[bj] save interrupt value*/ + I_STATUS[0] |= IINCHIP_READ(Sn_IR(0)); // can be come to over two times. + IINCHIP_WRITE(Sn_IR(0), I_STATUS[0]); + /*---*/ + } + if (int_val & IR_SOCK(1)) + { + /* +-200801[bj] save interrupt value*/ + I_STATUS[1] |= IINCHIP_READ(Sn_IR(1)); + IINCHIP_WRITE(Sn_IR(1), I_STATUS[1]); + /*---*/ + } + if (int_val & IR_SOCK(2)) + { + /* +-200801[bj] save interrupt value*/ + I_STATUS[2] |= IINCHIP_READ(Sn_IR(2)); + IINCHIP_WRITE(Sn_IR(2), I_STATUS[2]); + /*---*/ + } + if (int_val & IR_SOCK(3)) + { + /* +-200801[bj] save interrupt value*/ + I_STATUS[3] |= IINCHIP_READ(Sn_IR(3)); + IINCHIP_WRITE(Sn_IR(3), I_STATUS[3]); + /*---*/ + } + + /* +-200801[bj] re-read interrupt value*/ + int_val = IINCHIP_READ(IR); + + /* +200801[bj] if exist, contiue to process */ + } while (int_val != 0x00); + /*---*/ + + IINCHIP_ISR_ENABLE(); +} +#endif + +/** +@brief This function is for resetting of the iinchip. Initializes the iinchip to work in whether DIRECT or INDIRECT mode +*/ +void iinchip_init(void) +{ + setMR( MR_RST ); +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_INDIRECT_MODE__) + setMR( MR_IND | MR_AI ); +#ifdef __DEF_IINCHIP_DBG__ + printf("MR value is %d \r\n",IINCHIP_READ(MR)); +#endif +#endif +} + + +/** +@brief This function set the transmit & receive buffer size as per the channels is used + +Note for TMSR and RMSR bits are as follows\n +bit 1-0 : memory size of channel #0 \n +bit 3-2 : memory size of channel #1 \n +bit 5-4 : memory size of channel #2 \n +bit 7-6 : memory size of channel #3 \n\n +Maximum memory size for Tx, Rx in the W5100 is 8K Bytes,\n +In the range of 8KBytes, the memory size could be allocated dynamically by each channel.\n +Be attentive to sum of memory size shouldn't exceed 8Kbytes\n +and to data transmission and receiption from non-allocated channel may cause some problems.\n +If the 8KBytes memory is already assigned to centain channel, \n +other 3 channels couldn't be used, for there's no available memory.\n +If two 4KBytes memory are assigned to two each channels, \n +other 2 channels couldn't be used, for there's no available memory.\n +*/ +void sysinit( + uint8 tx_size, /**< tx_size Tx memory size (00 - 1KByte, 01- 2KBtye, 10 - 4KByte, 11 - 8KByte) */ + uint8 rx_size /**< rx_size Rx memory size (00 - 1KByte, 01- 2KBtye, 10 - 4KByte, 11 - 8KByte) */ + ) +{ + int16 i; + int16 ssum,rsum; + +#ifdef __DEF_IINCHIP_DBG__ + printf("sysinit()\r\n"); +#endif + + ssum = 0; + rsum = 0; + + IINCHIP_WRITE(TMSR,tx_size); /* Set Tx memory size for each channel */ + IINCHIP_WRITE(RMSR,rx_size); /* Set Rx memory size for each channel */ + + SBUFBASEADDRESS[0] = (uint16)(__DEF_IINCHIP_MAP_TXBUF__); /* Set base address of Tx memory for channel #0 */ + RBUFBASEADDRESS[0] = (uint16)(__DEF_IINCHIP_MAP_RXBUF__); /* Set base address of Rx memory for channel #0 */ + +#ifdef __DEF_IINCHIP_DBG__ + printf("Channel : SEND MEM SIZE : RECV MEM SIZE\r\n"); +#endif + + for (i = 0 ; i < MAX_SOCK_NUM; i++) // Set the size, masking and base address of Tx & Rx memory by each channel + { + SSIZE[i] = (int16)(0); + RSIZE[i] = (int16)(0); + if (ssum < 8192) + { + switch((tx_size >> i*2) & 0x03) // Set Tx memory size + { + case 0: + SSIZE[i] = (int16)(1024); + SMASK[i] = (uint16)(0x03FF); + break; + case 1: + SSIZE[i] = (int16)(2048); + SMASK[i] = (uint16)(0x07FF); + break; + case 2: + SSIZE[i] = (int16)(4096); + SMASK[i] = (uint16)(0x0FFF); + break; + case 3: + SSIZE[i] = (int16)(8192); + SMASK[i] = (uint16)(0x1FFF); + break; + } + } + if (rsum < 8192) + { + switch((rx_size >> i*2) & 0x03) // Set Rx memory size + { + case 0: + RSIZE[i] = (int16)(1024); + RMASK[i] = (uint16)(0x03FF); + break; + case 1: + RSIZE[i] = (int16)(2048); + RMASK[i] = (uint16)(0x07FF); + break; + case 2: + RSIZE[i] = (int16)(4096); + RMASK[i] = (uint16)(0x0FFF); + break; + case 3: + RSIZE[i] = (int16)(8192); + RMASK[i] = (uint16)(0x1FFF); + break; + } + } + ssum += SSIZE[i]; + rsum += RSIZE[i]; + + if (i != 0) // Sets base address of Tx and Rx memory for channel #1,#2,#3 + { + SBUFBASEADDRESS[i] = SBUFBASEADDRESS[i-1] + SSIZE[i-1]; + RBUFBASEADDRESS[i] = RBUFBASEADDRESS[i-1] + RSIZE[i-1]; + } +#ifdef __DEF_IINCHIP_DBG__ + printf("%d : %.4x : %.4x : %.4x : %.4x\r\n", i, (uint16)SBUFBASEADDRESS[i], (uint16)RBUFBASEADDRESS[i], SSIZE[i], RSIZE[i]); +#endif + } +} + + +void setMR(uint8 val) +{ + +#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_INDIRECT_MODE__) + *((volatile uint8*)(MR)) = val; +#else + /* DIRECT ACCESS */ + IINCHIP_WRITE(MR,val); +#endif +} + + +/** +@brief This function sets up gateway IP address. +*/ +void setGAR( + uint8 * addr /**< a pointer to a 4 -byte array responsible to set the Gateway IP address. */ + ) +{ + IINCHIP_WRITE((GAR0 + 0),addr[0]); + IINCHIP_WRITE((GAR0 + 1),addr[1]); + IINCHIP_WRITE((GAR0 + 2),addr[2]); + IINCHIP_WRITE((GAR0 + 3),addr[3]); +} +void getGWIP(uint8 * addr) +{ + addr[0] = IINCHIP_READ((GAR0 + 0)); + addr[1] = IINCHIP_READ((GAR0 + 1)); + addr[2] = IINCHIP_READ((GAR0 + 2)); + addr[3] = IINCHIP_READ((GAR0 + 3)); +} + + +/** +@brief It sets up SubnetMask address +*/ +void setSUBR( + uint8 * addr /**< a pointer to a 4 -byte array responsible to set the SubnetMask address */ + ) +{ + IINCHIP_WRITE((SUBR0 + 0),addr[0]); + IINCHIP_WRITE((SUBR0 + 1),addr[1]); + IINCHIP_WRITE((SUBR0 + 2),addr[2]); + IINCHIP_WRITE((SUBR0 + 3),addr[3]); +} + + +/** +@brief This function sets up MAC address. +*/ +void setSHAR( + uint8 * addr /**< a pointer to a 6 -byte array responsible to set the MAC address. */ + ) +{ + IINCHIP_WRITE((SHAR0 + 0),addr[0]); + IINCHIP_WRITE((SHAR0 + 1),addr[1]); + IINCHIP_WRITE((SHAR0 + 2),addr[2]); + IINCHIP_WRITE((SHAR0 + 3),addr[3]); + IINCHIP_WRITE((SHAR0 + 4),addr[4]); + IINCHIP_WRITE((SHAR0 + 5),addr[5]); +} + + +/** +@brief This function sets up Source IP address. +*/ +void setSIPR( + uint8 * addr /**< a pointer to a 4 -byte array responsible to set the Source IP address. */ + ) +{ + IINCHIP_WRITE((SIPR0 + 0),addr[0]); + IINCHIP_WRITE((SIPR0 + 1),addr[1]); + IINCHIP_WRITE((SIPR0 + 2),addr[2]); + IINCHIP_WRITE((SIPR0 + 3),addr[3]); +} + + +/** +@brief This function gets Interrupt register in common register. + */ +uint8 getIR( void ) +{ + return IINCHIP_READ(IR); +} + + + +/** +@brief This function sets up Retransmission time. + +If there is no response from the peer or delay in response then retransmission +will be there as per RTR (Retry Time-value Register)setting +*/ +void setRTR(uint16 timeout) +{ + IINCHIP_WRITE(RTR0,(uint8)((timeout & 0xff00) >> 8)); + IINCHIP_WRITE((RTR0 + 1),(uint8)(timeout & 0x00ff)); +} + + +/** +@brief This function set the number of Retransmission. + +If there is no response from the peer or delay in response then recorded time +as per RTR & RCR register seeting then time out will occur. +*/ +void setRCR(uint8 retry) +{ + IINCHIP_WRITE(RCR,retry); +} + + +/** +@brief This function set the interrupt mask Enable/Disable appropriate Interrupt. ('1' : interrupt enable) + +If any bit in IMR is set as '0' then there is not interrupt signal though the bit is +set in IR register. +*/ +void setIMR(uint8 mask) +{ + IINCHIP_WRITE(IMR,mask); // must be setted 0x10. +} + + +/** +@brief These below functions are used to get the Gateway, SubnetMask + and Source Hardware Address (MAC Address) and Source IP address +*/ +void getGAR(uint8 * addr) +{ + addr[0] = IINCHIP_READ(GAR0); + addr[1] = IINCHIP_READ(GAR0+1); + addr[2] = IINCHIP_READ(GAR0+2); + addr[3] = IINCHIP_READ(GAR0+3); +} +void getSUBR(uint8 * addr) +{ + addr[0] = IINCHIP_READ(SUBR0); + addr[1] = IINCHIP_READ(SUBR0+1); + addr[2] = IINCHIP_READ(SUBR0+2); + addr[3] = IINCHIP_READ(SUBR0+3); +} +void getSHAR(uint8 * addr) +{ + addr[0] = IINCHIP_READ(SHAR0); + addr[1] = IINCHIP_READ(SHAR0+1); + addr[2] = IINCHIP_READ(SHAR0+2); + addr[3] = IINCHIP_READ(SHAR0+3); + addr[4] = IINCHIP_READ(SHAR0+4); + addr[5] = IINCHIP_READ(SHAR0+5); +} +void getSIPR(uint8 * addr) +{ + addr[0] = IINCHIP_READ(SIPR0); + addr[1] = IINCHIP_READ(SIPR0+1); + addr[2] = IINCHIP_READ(SIPR0+2); + addr[3] = IINCHIP_READ(SIPR0+3); +} + + +/** +@brief These below functions are used to get the Destination Hardware Address (MAC Address), Destination IP address and Destination Port. +*/ +void getSn_DHAR(SOCKET s, uint8 * addr) +{ + addr[0] = IINCHIP_READ(Sn_DHAR0(s)); + addr[1] = IINCHIP_READ(Sn_DHAR0(s)+1); + addr[2] = IINCHIP_READ(Sn_DHAR0(s)+2); + addr[3] = IINCHIP_READ(Sn_DHAR0(s)+3); + addr[4] = IINCHIP_READ(Sn_DHAR0(s)+4); + addr[5] = IINCHIP_READ(Sn_DHAR0(s)+5); +} +void setSn_DHAR(SOCKET s, uint8 * addr) +{ + IINCHIP_WRITE((Sn_DHAR0(s) + 0),addr[0]); + IINCHIP_WRITE((Sn_DHAR0(s) + 1),addr[1]); + IINCHIP_WRITE((Sn_DHAR0(s) + 2),addr[2]); + IINCHIP_WRITE((Sn_DHAR0(s) + 3),addr[3]); + IINCHIP_WRITE((Sn_DHAR0(s) + 4),addr[4]); + IINCHIP_WRITE((Sn_DHAR0(s) + 5),addr[5]); +} +void getSn_DIPR(SOCKET s, uint8 * addr) +{ + addr[0] = IINCHIP_READ(Sn_DIPR0(s)); + addr[1] = IINCHIP_READ(Sn_DIPR0(s)+1); + addr[2] = IINCHIP_READ(Sn_DIPR0(s)+2); + addr[3] = IINCHIP_READ(Sn_DIPR0(s)+3); +} +void setSn_DIPR(SOCKET s, uint8 * addr) +{ + IINCHIP_WRITE((Sn_DIPR0(s) + 0),addr[0]); + IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]); + IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]); + IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]); +} +void getSn_DPORT(SOCKET s, uint8 * addr) +{ + addr[0] = IINCHIP_READ(Sn_DPORT0(s)); + addr[1] = IINCHIP_READ(Sn_DPORT0(s)+1); +} +void setSn_DPORT(SOCKET s, uint8 * addr) +{ + IINCHIP_WRITE((Sn_DPORT0(s) + 0),addr[0]); + IINCHIP_WRITE((Sn_DPORT0(s) + 1),addr[1]); +} + + +/** +@brief This sets the maximum segment size of TCP in Active Mode), while in Passive Mode this is set by peer +*/ +void setSn_MSS(SOCKET s, uint16 Sn_MSSR0) +{ + IINCHIP_WRITE(Sn_MSSR0(s),(uint8)((Sn_MSSR0 & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_MSSR0(s) + 1),(uint8)(Sn_MSSR0 & 0x00ff)); +} + +void setSn_TTL(SOCKET s, uint8 ttl) +{ + IINCHIP_WRITE(Sn_TTL(s), ttl); +} + + +/** +@brief These below function is used to setup the Protocol Field of IP Header when + executing the IP Layer RAW mode. +*/ +void setSn_PROTO(SOCKET s, uint8 proto) +{ + IINCHIP_WRITE(Sn_PROTO(s),proto); +} + + +/** +@brief get socket interrupt status + +These below functions are used to read the Interrupt & Soket Status register +*/ +uint8 getSn_IR(SOCKET s) +{ + return IINCHIP_READ(Sn_IR(s)); +} + + +/** +@brief get socket status +*/ +uint8 getSn_SR(SOCKET s) +{ + return IINCHIP_READ(Sn_SR(s)); +} + + +/** +@brief get socket TX free buf size + +This gives free buffer size of transmit buffer. This is the data size that user can transmit. +User shuold check this value first and control the size of transmitting data +*/ +uint16 getSn_TX_FSR(SOCKET s) +{ + uint16 val=0,val1=0; + do + { + val1 = IINCHIP_READ(Sn_TX_FSR0(s)); + val1 = (val1 << 8) + IINCHIP_READ(Sn_TX_FSR0(s) + 1); + if (val1 != 0) + { + val = IINCHIP_READ(Sn_TX_FSR0(s)); + val = (val << 8) + IINCHIP_READ(Sn_TX_FSR0(s) + 1); + } + } while (val != val1); + return val; +} + + +/** +@brief get socket RX recv buf size + +This gives size of received data in receive buffer. +*/ +uint16 getSn_RX_RSR(SOCKET s) +{ + uint16 val=0,val1=0; + do + { + val1 = IINCHIP_READ(Sn_RX_RSR0(s)); + val1 = (val1 << 8) + IINCHIP_READ(Sn_RX_RSR0(s) + 1); + if(val1 != 0) + { + val = IINCHIP_READ(Sn_RX_RSR0(s)); + val = (val << 8) + IINCHIP_READ(Sn_RX_RSR0(s) + 1); + } + } while (val != val1); + return val; +} + + +/** +@brief This function is being called by send() and sendto() function also. + +This function read the Tx write pointer register and after copy the data in buffer update the Tx write pointer +register. User should read upper byte first and lower byte later to get proper value. +*/ +void send_data_processing(SOCKET s, uint8 *data, uint16 len) +{ + uint16 ptr; + ptr = IINCHIP_READ(Sn_TX_WR0(s)); + ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_TX_WR0(s) + 1); + write_data(s, data, (uint8 *)(ptr), len); + ptr += len; + IINCHIP_WRITE(Sn_TX_WR0(s),(uint8)((ptr & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_TX_WR0(s) + 1),(uint8)(ptr & 0x00ff)); +} + + +/** +@brief This function is being called by recv() also. + +This function read the Rx read pointer register +and after copy the data from receive buffer update the Rx write pointer register. +User should read upper byte first and lower byte later to get proper value. +*/ +void recv_data_processing(SOCKET s, uint8 *data, uint16 len) +{ + uint16 ptr; + ptr = IINCHIP_READ(Sn_RX_RD0(s)); + ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_RX_RD0(s) + 1); +#ifdef __DEF_IINCHIP_DBG__ + printf("ISR_RX: rd_ptr : %.4x\r\n", ptr); +#endif + read_data(s, (uint8 *)ptr, data, len); // read data + ptr += len; + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8)); + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff)); +} + + +/** +@brief for copy the data form application buffer to Transmite buffer of the chip. + +This function is being used for copy the data form application buffer to Transmite +buffer of the chip. It calculate the actual physical address where one has to write +the data in transmite buffer. Here also take care of the condition while it exceed +the Tx memory uper-bound of socket. +*/ +void write_data(SOCKET s, vuint8 * src, vuint8 * dst, uint16 len) +{ + uint16 size; + uint16 dst_mask; + uint8 * dst_ptr; + + dst_mask = (uint16)dst & getIINCHIP_TxMASK(s); + dst_ptr = (uint8 *)(getIINCHIP_TxBASE(s) + dst_mask); + + if (dst_mask + len > getIINCHIP_TxMAX(s)) + { + size = getIINCHIP_TxMAX(s) - dst_mask; + wiz_write_buf((uint16)dst_ptr, (uint8*)src, size); + src += size; + size = len - size; + dst_ptr = (uint8 *)(getIINCHIP_TxBASE(s)); + wiz_write_buf((uint16)dst_ptr, (uint8*)src, size); + } + else + { + wiz_write_buf((uint16)dst_ptr, (uint8*)src, len); + } +} + + +/** +@brief This function is being used for copy the data form Receive buffer of the chip to application buffer. + +It calculate the actual physical address where one has to read +the data from Receive buffer. Here also take care of the condition while it exceed +the Rx memory uper-bound of socket. +*/ +void read_data(SOCKET s, vuint8 * src, vuint8 * dst, uint16 len) +{ + uint16 size; + uint16 src_mask; + uint8 * src_ptr; + + src_mask = (uint16)src & getIINCHIP_RxMASK(s); + src_ptr = (uint8 *)(getIINCHIP_RxBASE(s) + src_mask); + + if( (src_mask + len) > getIINCHIP_RxMAX(s) ) + { + size = getIINCHIP_RxMAX(s) - src_mask; + wiz_read_buf((uint16)src_ptr, (uint8*)dst,size); + dst += size; + size = len - size; + src_ptr = (uint8 *)(getIINCHIP_RxBASE(s)); + wiz_read_buf((uint16)src_ptr, (uint8*) dst,size); + } + else + { + wiz_read_buf((uint16)src_ptr, (uint8*) dst,len); + } +} + + +#ifdef __DEF_IINCHIP_PPP__ +#define PPP_OPTION_BUF_LEN 64 + +uint8 pppinit_in(uint8 * id, uint8 idlen, uint8 * passwd, uint8 passwdlen); + + +/** +@brief make PPPoE connection +@return 1 => success to connect, 2 => Auth fail, 3 => timeout, 4 => Auth type not support + +*/ +uint8 pppinit(uint8 * id, uint8 idlen, uint8 * passwd, uint8 passwdlen) +{ + uint8 ret; + uint8 isr; + + // PHASE0. W5100 PPPoE(ADSL) setup + // enable pppoe mode + printf("-- PHASE 0. W5100 PPPoE(ADSL) setup process --\r\n"); + printf("\r\n"); + IINCHIP_WRITE(MR,IINCHIP_READ(MR) | MR_PPPOE); + + // open socket in pppoe mode + isr = IINCHIP_READ(Sn_IR(0));// first clear isr(0), W5100 at present time + IINCHIP_WRITE(Sn_IR(0),isr); + + IINCHIP_WRITE(PTIMER,200); // 5sec timeout + IINCHIP_WRITE(PMAGIC,0x01); // magic number + IINCHIP_WRITE(Sn_MR(0),Sn_MR_PPPOE); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_OPEN); + + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + + ret = pppinit_in(id, idlen, passwd, passwdlen); + + // close ppp connection socket + /* +200801 (hwkim) */ + close(0); + /* ------- */ + + return ret; +} + + +uint8 pppinit_in(uint8 * id, uint8 idlen, uint8 * passwd, uint8 passwdlen) +{ + uint8 loop_idx = 0; + uint8 isr = 0; + uint8 buf[PPP_OPTION_BUF_LEN]; + uint16 len; + uint8 str[PPP_OPTION_BUF_LEN]; + uint8 str_idx,dst_idx; + + // PHASE1. PPPoE Discovery + // start to connect pppoe connection + printf("-- PHASE 1. PPPoE Discovery process --"); + printf(" ok\r\n"); + printf("\r\n"); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCON); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + + wait_10ms(100); + + loop_idx = 0; + //check whether PPPoE discovery end or not + while (!(IINCHIP_READ(Sn_IR(0)) & Sn_IR_PNEXT)) + { + printf("."); + if (loop_idx++ == 10) // timeout + { + printf("timeout before LCP\r\n"); + return 3; + } + wait_10ms(100); + } + + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), 0xff); + /*---*/ + + // PHASE2. LCP process + printf("-- PHASE 2. LCP process --"); + + // send LCP Request + { + // Magic number option + // option format (type value + length value + data) + // write magic number value + buf[0] = 0x05; // type value + buf[1] = 0x06; // length value + buf[2] = 0x01; buf[3] = 0x01; buf[4] = 0x01; buf[5]= 0x01; // data + // for MRU option, 1492 0x05d4 + // buf[6] = 0x01; buf[7] = 0x04; buf[8] = 0x05; buf[9] = 0xD4; + } + send_data_processing(0, buf, 0x06); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCR); // send request + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + + wait_10ms(100); + + while (!((isr = IINCHIP_READ(Sn_IR(0))) & Sn_IR_PNEXT)) + { + if (isr & Sn_IR_PRECV) // Not support option + { + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), Sn_IR_PRECV); + /*---*/ + len = getSn_RX_RSR(0); + if ( len > 0 ) + { + recv_data_processing(0, str, len); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_RECV); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + + // for debug + //printf("LCP proc\r\n"); for (i = 0; i < len; i++) printf ("%02x ", str[i]); printf("\r\n"); + // get option length + len = str[4]; len = ((len & 0x00ff) << 8) + str[5]; + len += 2; + str_idx = 6; dst_idx = 0; // ppp header is 6 byte, so starts at 6. + do + { + if ((str[str_idx] == 0x01) || (str[str_idx] == 0x02) || (str[str_idx] == 0x03) || (str[str_idx] == 0x05)) + { + // skip as length of support option. str_idx+1 is option's length. + str_idx += str[str_idx+1]; + } + else + { + // not support option , REJECT + memcpy((uint8 *)(buf+dst_idx), (uint8 *)(str+str_idx), str[str_idx+1]); + dst_idx += str[str_idx+1]; str_idx += str[str_idx+1]; + } + } while (str_idx != len); + // for debug + // printf("LCP dst proc\r\n"); for (i = 0; i < dst_idx; i++) printf ("%02x ", dst[i]); printf("\r\n"); + + // send LCP REJECT packet + send_data_processing(0, buf, dst_idx); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCJ); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + } + } + printf("."); + if (loop_idx++ == 10) // timeout + { + printf("timeout after LCP\r\n"); + return 3; + } + wait_10ms(100); + } + printf(" ok\r\n"); + printf("\r\n"); + + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), 0xff); + /*---*/ + + printf("-- PHASE 3. PPPoE(ADSL) Authentication mode --\r\n"); + printf("Authentication protocol : %.2x %.2x, ", IINCHIP_READ(PATR0), IINCHIP_READ(PATR0+1)); + + loop_idx = 0; + if (IINCHIP_READ(PATR0) == 0xc0 && IINCHIP_READ(PATR0+1) == 0x23) + { + printf("PAP\r\n"); // in case of adsl normally supports PAP. + // send authentication data + // copy (idlen + id + passwdlen + passwd) + buf[loop_idx] = idlen; loop_idx++; + memcpy((uint8 *)(buf+loop_idx), (uint8 *)(id), idlen); loop_idx += idlen; + buf[loop_idx] = passwdlen; loop_idx++; + memcpy((uint8 *)(buf+loop_idx), (uint8 *)(passwd), passwdlen); loop_idx += passwdlen; + send_data_processing(0, buf, loop_idx); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCR); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + wait_10ms(100); + } + else if (IINCHIP_READ(PATR0) == 0xc2 && IINCHIP_READ(PATR0+1) == 0x23) + { + uint8 chal_len; + md5_ctx context; + uint8 digest[16]; + + len = getSn_RX_RSR(0); + if ( len > 0 ) + { + recv_data_processing(0, str, len); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_RECV); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ +#ifdef __DEF_IINCHIP_DBG__ + printf("recv CHAP\r\n"); + { + int16 i; + + for (i = 0; i < 32; i++) + printf ("%02x ", str[i]); + } + printf("\r\n"); +#endif +// str is C2 23 xx CHAL_ID xx xx CHAP_LEN CHAP_DATA +// index 0 1 2 3 4 5 6 7 ... + + memset(buf,0x00,64); + buf[loop_idx] = str[3]; loop_idx++; // chal_id + memcpy((uint8 *)(buf+loop_idx), (uint8 *)(passwd), passwdlen); loop_idx += passwdlen; //passwd + chal_len = str[6]; // chal_id + memcpy((uint8 *)(buf+loop_idx), (uint8 *)(str+7), chal_len); loop_idx += chal_len; //challenge + buf[loop_idx] = 0x80; +#ifdef __DEF_IINCHIP_DBG__ + printf("CHAP proc d1\r\n"); + { + int16 i; + for (i = 0; i < 64; i++) + printf ("%02x ", buf[i]); + } + printf("\r\n"); +#endif + + md5_init(&context); + md5_update(&context, buf, loop_idx); + md5_final(digest, &context); + +#ifdef __DEF_IINCHIP_DBG__ + printf("CHAP proc d1\r\n"); + { + int16 i; + for (i = 0; i < 16; i++) + printf ("%02x", digest[i]); + } + printf("\r\n"); +#endif + loop_idx = 0; + buf[loop_idx] = 16; loop_idx++; // hash_len + memcpy((uint8 *)(buf+loop_idx), (uint8 *)(digest), 16); loop_idx += 16; // hashed value + memcpy((uint8 *)(buf+loop_idx), (uint8 *)(id), idlen); loop_idx += idlen; // id + send_data_processing(0, buf, loop_idx); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCR); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + wait_10ms(100); + } + } + else + { + printf("Not support\r\n"); +#ifdef __DEF_IINCHIP_DBG__ + printf("Not support PPP Auth type: %.2x%.2x\r\n",IINCHIP_READ(PATR0), IINCHIP_READ(PATR0+1)); +#endif + return 4; + } + printf("\r\n"); + + printf("-- Waiting for PPPoE server's admission --"); + loop_idx = 0; + while (!((isr = IINCHIP_READ(Sn_IR(0))) & Sn_IR_PNEXT)) + { + if (isr & Sn_IR_PFAIL) + { + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), 0xff); + /*---*/ + printf("failed\r\nReinput id, password..\r\n"); + return 2; + } + printf("."); + if (loop_idx++ == 10) // timeout + { + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), 0xff); + /*---*/ + printf("timeout after PAP\r\n"); + return 3; + } + wait_10ms(100); + } + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), 0xff); + /*---*/ + printf("ok\r\n"); + printf("\r\n"); + printf("-- PHASE 4. IPCP process --"); + // IP Address + buf[0] = 0x03; buf[1] = 0x06; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; + send_data_processing(0, buf, 6); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCR); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + wait_10ms(100); + + loop_idx = 0; + while (1) + { + if (IINCHIP_READ(Sn_IR(0)) & Sn_IR_PRECV) + { + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), 0xff); + /*---*/ + len = getSn_RX_RSR(0); + if ( len > 0 ) + { + recv_data_processing(0, str, len); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_RECV); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + //for debug + //printf("IPCP proc\r\n"); for (i = 0; i < len; i++) printf ("%02x ", str[i]); printf("\r\n"); + str_idx = 6; dst_idx = 0; + if (str[2] == 0x03) // in case of NAK + { + do + { + if (str[str_idx] == 0x03) // request only ip information + { + memcpy((uint8 *)(buf+dst_idx), (uint8 *)(str+str_idx), str[str_idx+1]); + dst_idx += str[str_idx+1]; str_idx += str[str_idx+1]; + } + else + { + // skip byte + str_idx += str[str_idx+1]; + } + // for debug + //printf("s: %d, d: %d, l: %d", str_idx, dst_idx, len); + } while (str_idx != len); + send_data_processing(0, buf, dst_idx); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCR); // send ipcp request + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + wait_10ms(100); + break; + } + } + } + printf("."); + if (loop_idx++ == 10) // timeout + { + printf("timeout after IPCP\r\n"); + return 3; + } + wait_10ms(100); + send_data_processing(0, buf, 6); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCR); //ipcp re-request + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + } + + loop_idx = 0; + while (!(IINCHIP_READ(Sn_IR(0)) & Sn_IR_PNEXT)) + { + printf("."); + if (loop_idx++ == 10) // timeout + { + printf("timeout after IPCP NAK\r\n"); + return 3; + } + wait_10ms(100); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PCR); // send ipcp request + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + } + /* +200801[bj] clear interrupt value*/ + IINCHIP_WRITE(Sn_IR(0), 0xff); + /*---*/ + printf("ok\r\n"); + printf("\r\n"); + return 1; + // after this function, User must save the pppoe server's mac address and pppoe session id in current connection +} + + +/** +@brief terminate PPPoE connection +*/ +uint8 pppterm(uint8 * mac, uint8 * sessionid) +{ + uint16 i; + uint8 isr; +#ifdef __DEF_IINCHIP_DBG__ + printf("pppterm()\r\n"); +#endif + /* Set PPPoE bit in MR(Common Mode Register) : enable socket0 pppoe */ + IINCHIP_WRITE(MR,IINCHIP_READ(MR) | MR_PPPOE); + + // write pppoe server's mac address and session id + // must be setted these value. + for (i = 0; i < 6; i++) IINCHIP_WRITE((Sn_DHAR0(0)+i),mac[i]); + for (i = 0; i < 2; i++) IINCHIP_WRITE((Sn_DPORT0(0)+i),sessionid[i]); + isr = IINCHIP_READ(Sn_IR(0)); + IINCHIP_WRITE(Sn_IR(0),isr); + + //open socket in pppoe mode + IINCHIP_WRITE(Sn_MR(0),Sn_MR_PPPOE); + IINCHIP_WRITE(Sn_CR(0),Sn_CR_OPEN); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + wait_1us(1); + // close pppoe connection + IINCHIP_WRITE(Sn_CR(0),Sn_CR_PDISCON); + /* +20071122[chungs]:wait to process the command... */ + while( IINCHIP_READ(Sn_CR(0)) ) + ; + /* ------- */ + wait_10ms(100); + // close socket + /* +200801 (hwkim) */ + close(0); + /* ------- */ + + +#ifdef __DEF_IINCHIP_DBG__ + printf("pppterm() end ..\r\n"); +#endif + + return 1; +} +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.h b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.h new file mode 100755 index 0000000..6eddf91 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Ethernet/utility/w5100.h @@ -0,0 +1,299 @@ +/* +@file w5100.h +*/ + +#ifndef _W5100_H_ +#define _W5100_H_ + + +#define MR __DEF_IINCHIP_MAP_BASE__ +#define IDM_OR ((__DEF_IINCHIP_MAP_BASE__ + 0x00)) +#define IDM_AR0 ((__DEF_IINCHIP_MAP_BASE__ + 0x01)) +#define IDM_AR1 ((__DEF_IINCHIP_MAP_BASE__ + 0x02)) +#define IDM_DR ((__DEF_IINCHIP_MAP_BASE__ + 0x03)) + + +/** + @brief Gateway IP Register address + */ +#define GAR0 (COMMON_BASE + 0x0001) +/** + @brief Subnet mask Register address + */ +#define SUBR0 (COMMON_BASE + 0x0005) +/** + @brief Source MAC Register address + */ +#define SHAR0 (COMMON_BASE + 0x0009) +/** + @brief Source IP Register address + */ +#define SIPR0 (COMMON_BASE + 0x000F) +/** + @brief Interrupt Register + */ +#define IR (COMMON_BASE + 0x0015) +/** + @brief Interrupt mask register + */ +#define IMR (COMMON_BASE + 0x0016) +/** + @brief Timeout register address( 1 is 100us ) + */ +#define RTR0 (COMMON_BASE + 0x0017) +/** + @brief Retry count reigster + */ +#define RCR (COMMON_BASE + 0x0019) +/** + @brief Receive memory size reigster + */ +#define RMSR (COMMON_BASE + 0x001A) +/** + @brief Transmit memory size reigster + */ +#define TMSR (COMMON_BASE + 0x001B) +/** + @brief Authentication type register address in PPPoE mode + */ +#define PATR0 (COMMON_BASE + 0x001C) +//#define PPPALGO (COMMON_BASE + 0x001D) +#define PTIMER (COMMON_BASE + 0x0028) +#define PMAGIC (COMMON_BASE + 0x0029) + +/** + @brief Unreachable IP register address in UDP mode + */ +#define UIPR0 (COMMON_BASE + 0x002A) +/** + @brief Unreachable Port register address in UDP mode + */ +#define UPORT0 (COMMON_BASE + 0x002E) + +/** + @brief socket register +*/ +#define CH_BASE (COMMON_BASE + 0x0400) +/** + @brief size of each channel register map + */ +#define CH_SIZE 0x0100 +/** + @brief socket Mode register + */ +#define Sn_MR(ch) (CH_BASE + ch * CH_SIZE + 0x0000) +/** + @brief channel Sn_CR register + */ +#define Sn_CR(ch) (CH_BASE + ch * CH_SIZE + 0x0001) +/** + @brief channel interrupt register + */ +#define Sn_IR(ch) (CH_BASE + ch * CH_SIZE + 0x0002) +/** + @brief channel status register + */ +#define Sn_SR(ch) (CH_BASE + ch * CH_SIZE + 0x0003) +/** + @brief source port register + */ +#define Sn_PORT0(ch) (CH_BASE + ch * CH_SIZE + 0x0004) +/** + @brief Peer MAC register address + */ +#define Sn_DHAR0(ch) (CH_BASE + ch * CH_SIZE + 0x0006) +/** + @brief Peer IP register address + */ +#define Sn_DIPR0(ch) (CH_BASE + ch * CH_SIZE + 0x000C) +/** + @brief Peer port register address + */ +#define Sn_DPORT0(ch) (CH_BASE + ch * CH_SIZE + 0x0010) +/** + @brief Maximum Segment Size(Sn_MSSR0) register address + */ +#define Sn_MSSR0(ch) (CH_BASE + ch * CH_SIZE + 0x0012) +/** + @brief Protocol of IP Header field register in IP raw mode + */ +#define Sn_PROTO(ch) (CH_BASE + ch * CH_SIZE + 0x0014) + +/** + @brief IP Type of Service(TOS) Register + */ +#define Sn_TOS(ch) (CH_BASE + ch * CH_SIZE + 0x0015) +/** + @brief IP Time to live(TTL) Register + */ +#define Sn_TTL(ch) (CH_BASE + ch * CH_SIZE + 0x0016) + +/** + @brief Transmit free memory size register + */ +#define Sn_TX_FSR0(ch) (CH_BASE + ch * CH_SIZE + 0x0020) +/** + @brief Transmit memory read pointer register address + */ +#define Sn_TX_RD0(ch) (CH_BASE + ch * CH_SIZE + 0x0022) +/** + @brief Transmit memory write pointer register address + */ +#define Sn_TX_WR0(ch) (CH_BASE + ch * CH_SIZE + 0x0024) +/** + @brief Received data size register + */ +#define Sn_RX_RSR0(ch) (CH_BASE + ch * CH_SIZE + 0x0026) +/** + @brief Read point of Receive memory + */ +#define Sn_RX_RD0(ch) (CH_BASE + ch * CH_SIZE + 0x0028) +/** + @brief Write point of Receive memory + */ +#define Sn_RX_WR0(ch) (CH_BASE + ch * CH_SIZE + 0x002A) + + + +/* MODE register values */ +#define MR_RST 0x80 /**< reset */ +#define MR_PB 0x10 /**< ping block */ +#define MR_PPPOE 0x08 /**< enable pppoe */ +#define MR_LB 0x04 /**< little or big endian selector in indirect mode */ +#define MR_AI 0x02 /**< auto-increment in indirect mode */ +#define MR_IND 0x01 /**< enable indirect mode */ + +/* IR register values */ +#define IR_CONFLICT 0x80 /**< check ip confict */ +#define IR_UNREACH 0x40 /**< get the destination unreachable message in UDP sending */ +#define IR_PPPoE 0x20 /**< get the PPPoE close message */ +#define IR_SOCK(ch) (0x01 << ch) /**< check socket interrupt */ + +/* Sn_MR values */ +#define Sn_MR_CLOSE 0x00 /**< unused socket */ +#define Sn_MR_TCP 0x01 /**< TCP */ +#define Sn_MR_UDP 0x02 /**< UDP */ +#define Sn_MR_IPRAW 0x03 /**< IP LAYER RAW SOCK */ +#define Sn_MR_MACRAW 0x04 /**< MAC LAYER RAW SOCK */ +#define Sn_MR_PPPOE 0x05 /**< PPPoE */ +#define Sn_MR_ND 0x20 /**< No Delayed Ack(TCP) flag */ +#define Sn_MR_MULTI 0x80 /**< support multicating */ + + +/* Sn_CR values */ +#define Sn_CR_OPEN 0x01 /**< initialize or open socket */ +#define Sn_CR_LISTEN 0x02 /**< wait connection request in tcp mode(Server mode) */ +#define Sn_CR_CONNECT 0x04 /**< send connection request in tcp mode(Client mode) */ +#define Sn_CR_DISCON 0x08 /**< send closing reqeuset in tcp mode */ +#define Sn_CR_CLOSE 0x10 /**< close socket */ +#define Sn_CR_SEND 0x20 /**< updata txbuf pointer, send data */ +#define Sn_CR_SEND_MAC 0x21 /**< send data with MAC address, so without ARP process */ +#define Sn_CR_SEND_KEEP 0x22 /**< send keep alive message */ +#define Sn_CR_RECV 0x40 /**< update rxbuf pointer, recv data */ + +#ifdef __DEF_IINCHIP_PPP__ + #define Sn_CR_PCON 0x23 + #define Sn_CR_PDISCON 0x24 + #define Sn_CR_PCR 0x25 + #define Sn_CR_PCN 0x26 + #define Sn_CR_PCJ 0x27 +#endif + +/* Sn_IR values */ +#ifdef __DEF_IINCHIP_PPP__ + #define Sn_IR_PRECV 0x80 + #define Sn_IR_PFAIL 0x40 + #define Sn_IR_PNEXT 0x20 +#endif +#define Sn_IR_SEND_OK 0x10 /**< complete sending */ +#define Sn_IR_TIMEOUT 0x08 /**< assert timeout */ +#define Sn_IR_RECV 0x04 /**< receiving data */ +#define Sn_IR_DISCON 0x02 /**< closed socket */ +#define Sn_IR_CON 0x01 /**< established connection */ + +/* Sn_SR values */ +#define SOCK_CLOSED 0x00 /**< closed */ +#define SOCK_INIT 0x13 /**< init state */ +#define SOCK_LISTEN 0x14 /**< listen state */ +#define SOCK_SYNSENT 0x15 /**< connection state */ +#define SOCK_SYNRECV 0x16 /**< connection state */ +#define SOCK_ESTABLISHED 0x17 /**< success to connect */ +#define SOCK_FIN_WAIT 0x18 /**< closing state */ +#define SOCK_CLOSING 0x1A /**< closing state */ +#define SOCK_TIME_WAIT 0x1B /**< closing state */ +#define SOCK_CLOSE_WAIT 0x1C /**< closing state */ +#define SOCK_LAST_ACK 0x1D /**< closing state */ +#define SOCK_UDP 0x22 /**< udp socket */ +#define SOCK_IPRAW 0x32 /**< ip raw mode socket */ +#define SOCK_MACRAW 0x42 /**< mac raw mode socket */ +#define SOCK_PPPOE 0x5F /**< pppoe socket */ + +/* IP PROTOCOL */ +#define IPPROTO_IP 0 /**< Dummy for IP */ +#define IPPROTO_ICMP 1 /**< Control message protocol */ +#define IPPROTO_IGMP 2 /**< Internet group management protocol */ +#define IPPROTO_GGP 3 /**< Gateway^2 (deprecated) */ +#define IPPROTO_TCP 6 /**< TCP */ +#define IPPROTO_PUP 12 /**< PUP */ +#define IPPROTO_UDP 17 /**< UDP */ +#define IPPROTO_IDP 22 /**< XNS idp */ +#define IPPROTO_ND 77 /**< UNOFFICIAL net disk protocol */ +#define IPPROTO_RAW 255 /**< Raw IP packet */ + + +/********************************************************* +* iinchip access function +*********************************************************/ +extern uint8 IINCHIP_READ(uint16 addr); +extern uint8 IINCHIP_WRITE(uint16 addr,uint8 data); +extern uint16 wiz_read_buf(uint16 addr, uint8* buf,uint16 len); +extern uint16 wiz_write_buf(uint16 addr,uint8* buf,uint16 len); + +extern void iinchip_init(void); // reset iinchip +extern void sysinit(uint8 tx_size, uint8 rx_size); // setting tx/rx buf size +extern uint8 getISR(uint8 s); +extern void putISR(uint8 s, uint8 val); +extern uint16 getIINCHIP_RxMAX(uint8 s); +extern uint16 getIINCHIP_TxMAX(uint8 s); +extern uint16 getIINCHIP_RxMASK(uint8 s); +extern uint16 getIINCHIP_TxMASK(uint8 s); +extern uint16 getIINCHIP_RxBASE(uint8 s); +extern uint16 getIINCHIP_TxBASE(uint8 s); +extern void setGAR(uint8 * addr); // set gateway address +extern void setSUBR(uint8 * addr); // set subnet mask address +extern void setSHAR(uint8 * addr); // set local MAC address +extern void setSIPR(uint8 * addr); // set local IP address +extern void setRTR(uint16 timeout); // set retry duration for data transmission, connection, closing ... +extern void setRCR(uint8 retry); // set retry count (above the value, assert timeout interrupt) +extern void setIMR(uint8 mask); // set interrupt mask. +extern void getGAR(uint8 * addr); +extern void getSUBR(uint8 * addr); +extern void getSHAR(uint8 * addr); +extern void getSIPR(uint8 * addr); +extern uint8 getIR( void ); +extern void setSn_MSS(SOCKET s, uint16 Sn_MSSR0); // set maximum segment size +extern void setSn_PROTO(SOCKET s, uint8 proto); // set IP Protocol value using IP-Raw mode +extern uint8 getSn_IR(SOCKET s); // get socket interrupt status +extern uint8 getSn_SR(SOCKET s); // get socket status +extern uint16 getSn_TX_FSR(SOCKET s); // get socket TX free buf size +extern uint16 getSn_RX_RSR(SOCKET s); // get socket RX recv buf size +extern void setSn_DHAR(SOCKET s, uint8 * addr); +extern void setSn_DIPR(SOCKET s, uint8 * addr); +extern void setSn_DPORT(SOCKET s, uint8 * addr); +extern void getSn_DHAR(SOCKET s, uint8 * addr); +extern void getSn_DIPR(SOCKET s, uint8 * addr); +extern void getSn_DPORT(SOCKET s, uint8 * addr); +extern void setSn_TTL(SOCKET s, uint8 ttl); +extern void setMR(uint8 val); + +#ifdef __DEF_IINCHIP_PPP__ +extern uint8 pppinit(uint8 *id, uint8 idlen, uint8 *passwd, uint8 passwdlen); +extern uint8 pppterm(uint8 *mac,uint8 *sessionid); +#endif + +extern void send_data_processing(SOCKET s, uint8 *data, uint16 len); +extern void recv_data_processing(SOCKET s, uint8 *data, uint16 len); +extern void read_data(SOCKET s, vuint8 * src, vuint8 * dst, uint16 len); +extern void write_data(SOCKET s, vuint8 * src, vuint8 * dst, uint16 len); + +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/Firmata.cpp b/arduino-0017-linux-x64/hardware/libraries/Firmata/Firmata.cpp new file mode 100644 index 0000000..9a18615 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/Firmata.cpp @@ -0,0 +1,445 @@ +/* + Firmata.cpp - Firmata library + Copyright (C) 2006-2008 Hans-Christoph Steiner. All rights 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. + + See file LICENSE.txt for further informations on licensing terms. +*/ + +//****************************************************************************** +//* Includes +//****************************************************************************** + +#include "WProgram.h" +#include "HardwareSerial.h" +#include "Firmata.h" + +extern "C" { +#include +#include +} + +//****************************************************************************** +//* Support Functions +//****************************************************************************** + +void sendValueAsTwo7bitBytes(int value) +{ + Serial.print(value & B01111111, BYTE); // LSB + Serial.print(value >> 7 & B01111111, BYTE); // MSB +} + +void startSysex(void) +{ + Serial.print(START_SYSEX, BYTE); +} + +void endSysex(void) +{ + Serial.print(END_SYSEX, BYTE); +} + +//****************************************************************************** +//* Constructors +//****************************************************************************** + +FirmataClass::FirmataClass(void) +{ + firmwareVersionCount = 0; + systemReset(); +} + +//****************************************************************************** +//* Public Methods +//****************************************************************************** + +/* begin method for overriding default serial bitrate */ +void FirmataClass::begin(void) +{ + Serial.begin(57600); + blinkVersion(); + delay(300); + printVersion(); +} + +/* begin method for overriding default serial bitrate */ +void FirmataClass::begin(long speed) +{ + blinkVersion(); +#if defined(__AVR_ATmega128__) // Wiring + Serial.begin((uint32_t)speed); +#else + Serial.begin(speed); +#endif + delay(300); + printVersion(); + printFirmwareVersion(); +} + +// output the protocol version message to the serial port +void FirmataClass::printVersion(void) { + Serial.print(REPORT_VERSION, BYTE); + Serial.print(FIRMATA_MAJOR_VERSION, BYTE); + Serial.print(FIRMATA_MINOR_VERSION, BYTE); +} + +void FirmataClass::blinkVersion(void) +{ + // flash the pin with the protocol version + pinMode(VERSION_BLINK_PIN,OUTPUT); + pin13strobe(FIRMATA_MAJOR_VERSION, 200, 400); + delay(300); + pin13strobe(2,1,4); // separator, a quick burst + delay(300); + pin13strobe(FIRMATA_MINOR_VERSION, 200, 400); +} + +void FirmataClass::printFirmwareVersion(void) +{ + byte i; + + if(firmwareVersionCount) { // make sure that the name has been set before reporting + startSysex(); + Serial.print(REPORT_FIRMWARE, BYTE); + Serial.print(firmwareVersionVector[0]); // major version number + Serial.print(firmwareVersionVector[1]); // minor version number + for(i=2; i 0) && (inputData < 128) ) { + waitForData--; + storedInputData[waitForData] = inputData; + if( (waitForData==0) && executeMultiByteCommand ) { // got the whole message + switch(executeMultiByteCommand) { + case ANALOG_MESSAGE: + if(currentAnalogCallback) { + (*currentAnalogCallback)(multiByteChannel, + (storedInputData[0] << 7) + + storedInputData[1]); + } + break; + case DIGITAL_MESSAGE: + if(currentDigitalCallback) { + (*currentDigitalCallback)(multiByteChannel, + (storedInputData[0] << 7) + + storedInputData[1]); + } + break; + case SET_PIN_MODE: + if(currentPinModeCallback) + (*currentPinModeCallback)(storedInputData[1], storedInputData[0]); + break; + case REPORT_ANALOG: + if(currentReportAnalogCallback) + (*currentReportAnalogCallback)(multiByteChannel,storedInputData[0]); + break; + case REPORT_DIGITAL: + if(currentReportDigitalCallback) + (*currentReportDigitalCallback)(multiByteChannel,storedInputData[0]); + break; + } + executeMultiByteCommand = 0; + } + } else { + // remove channel info from command byte if less than 0xF0 + if(inputData < 0xF0) { + command = inputData & 0xF0; + multiByteChannel = inputData & 0x0F; + } else { + command = inputData; + // commands in the 0xF* range don't use channel data + } + switch (command) { + case ANALOG_MESSAGE: + case DIGITAL_MESSAGE: + case SET_PIN_MODE: + waitForData = 2; // two data bytes needed + executeMultiByteCommand = command; + break; + case REPORT_ANALOG: + case REPORT_DIGITAL: + waitForData = 1; // two data bytes needed + executeMultiByteCommand = command; + break; + case START_SYSEX: + parsingSysex = true; + sysexBytesRead = 0; + break; + case SYSTEM_RESET: + systemReset(); + break; + case REPORT_VERSION: + Firmata.printVersion(); + break; + } + } +} + +//------------------------------------------------------------------------------ +// Serial Send Handling + +// send an analog message +void FirmataClass::sendAnalog(byte pin, int value) +{ + // pin can only be 0-15, so chop higher bits + Serial.print(ANALOG_MESSAGE | (pin & 0xF), BYTE); + sendValueAsTwo7bitBytes(value); +} + +// send a single digital pin in a digital message +void FirmataClass::sendDigital(byte pin, int value) +{ + /* TODO add single pin digital messages to the protocol, this needs to + * track the last digital data sent so that it can be sure to change just + * one bit in the packet. This is complicated by the fact that the + * numbering of the pins will probably differ on Arduino, Wiring, and + * other boards. The DIGITAL_MESSAGE sends 14 bits at a time, but it is + * probably easier to send 8 bit ports for any board with more than 14 + * digital pins. + */ + + // TODO: the digital message should not be sent on the serial port every + // time sendDigital() is called. Instead, it should add it to an int + // which will be sent on a schedule. If a pin changes more than once + // before the digital message is sent on the serial port, it should send a + // digital message for each change. + + // if(value == 0) + // sendDigitalPortPair(); +} + + +// send 14-bits in a single digital message (protocol v1) +// send an 8-bit port in a single digital message (protocol v2) +void FirmataClass::sendDigitalPort(byte portNumber, int portData) +{ + Serial.print(DIGITAL_MESSAGE | (portNumber & 0xF),BYTE); + Serial.print(portData % 128, BYTE); // Tx bits 0-6 + Serial.print(portData >> 7, BYTE); // Tx bits 7-13 +} + + +void FirmataClass::sendSysex(byte command, byte bytec, byte* bytev) +{ + byte i; + startSysex(); + Serial.print(command, BYTE); + for(i=0; i +#include + + +/* Version numbers for the protocol. The protocol is still changing, so these + * version numbers are important. This number can be queried so that host + * software can test whether it will be compatible with the currently + * installed firmware. */ +#define FIRMATA_MAJOR_VERSION 2 // for non-compatible changes +#define FIRMATA_MINOR_VERSION 1 // for backwards compatible changes + +#define MAX_DATA_BYTES 32 // max number of data bytes in non-Sysex messages + +// message command bytes (128-255/0x80-0xFF) +#define DIGITAL_MESSAGE 0x90 // send data for a digital pin +#define ANALOG_MESSAGE 0xE0 // send data for an analog pin (or PWM) +#define REPORT_ANALOG 0xC0 // enable analog input by pin # +#define REPORT_DIGITAL 0xD0 // enable digital input by port pair +// +#define SET_PIN_MODE 0xF4 // set a pin to INPUT/OUTPUT/PWM/etc +// +#define REPORT_VERSION 0xF9 // report protocol version +#define SYSTEM_RESET 0xFF // reset from MIDI +// +#define START_SYSEX 0xF0 // start a MIDI Sysex message +#define END_SYSEX 0xF7 // end a MIDI Sysex message + +// extended command set using sysex (0-127/0x00-0x7F) +/* 0x00-0x0F reserved for user-defined commands */ +#define SERVO_CONFIG 0x70 // set max angle, minPulse, maxPulse, freq +#define STRING_DATA 0x71 // a string message with 14-bits per char +#define SHIFT_DATA 0x75 // a bitstream to/from a shift register +#define I2C_REQUEST 0x76 // send an I2C read/write request +#define I2C_REPLY 0x77 // a reply to an I2C read request +#define I2C_CONFIG 0x78 // config I2C settings such as delay times and power pins +#define REPORT_FIRMWARE 0x79 // report name and version of the firmware +#define SAMPLING_INTERVAL 0x7A // set the poll rate of the main loop +#define SYSEX_NON_REALTIME 0x7E // MIDI Reserved for non-realtime messages +#define SYSEX_REALTIME 0x7F // MIDI Reserved for realtime messages +// these are DEPRECATED to make the naming more consistent +#define FIRMATA_STRING 0x71 // same as STRING_DATA +#define SYSEX_I2C_REQUEST 0x76 // same as I2C_REQUEST +#define SYSEX_I2C_REPLY 0x77 // same as I2C_REPLY +#define SYSEX_SAMPLING_INTERVAL 0x7A // same as SAMPLING_INTERVAL + +// pin modes +//#define INPUT 0x00 // defined in wiring.h +//#define OUTPUT 0x01 // defined in wiring.h +#define ANALOG 0x02 // analog pin in analogInput mode +#define PWM 0x03 // digital pin in PWM output mode +#define SERVO 0x04 // digital pin in Servo output mode +#define SHIFT 0x05 // shiftIn/shiftOut mode +#define I2C 0x06 // pin included in I2C setup + +extern "C" { +// callback function types + typedef void (*callbackFunction)(byte, int); + typedef void (*systemResetCallbackFunction)(void); + typedef void (*stringCallbackFunction)(char*); + typedef void (*sysexCallbackFunction)(byte command, byte argc, byte*argv); +} + + +// TODO make it a subclass of HardwareSerial +class FirmataClass +{ +public: + FirmataClass(); +/* Arduino constructors */ + void begin(); + void begin(long); +/* querying functions */ + void printVersion(void); + void blinkVersion(void); + void printFirmwareVersion(void); +// void setFirmwareVersion(byte major, byte minor); // see macro below + void setFirmwareNameAndVersion(const char *name, byte major, byte minor); +/* serial receive handling */ + int available(void); + void processInput(void); +/* serial send handling */ + void sendAnalog(byte pin, int value); + void sendDigital(byte pin, int value); + void sendDigitalPort(byte portNumber, int portData); + void sendString(const char* string); + void sendString(byte command, const char* string); + void sendSysex(byte command, byte bytec, byte* bytev); +// void print(); // TODO implement so it's compatible to Serial +// void println(); // TODO implement so it's compatible to Serial +/* attach & detach callback functions to messages */ + void attach(byte command, callbackFunction newFunction); + void attach(byte command, systemResetCallbackFunction newFunction); + void attach(byte command, stringCallbackFunction newFunction); + void attach(byte command, sysexCallbackFunction newFunction); + void detach(byte command); +// void flush(); // TODO implement flush, probably by subclassing + +private: +/* firmware name and version */ + byte firmwareVersionCount; + byte *firmwareVersionVector; +/* input message handling */ + byte waitForData; // this flag says the next serial input will be data + byte executeMultiByteCommand; // execute this after getting multi-byte data + byte multiByteChannel; // channel data for multiByteCommands + byte storedInputData[MAX_DATA_BYTES]; // multi-byte data +/* sysex */ + boolean parsingSysex; + int sysexBytesRead; +/* callback functions */ + callbackFunction currentAnalogCallback; + callbackFunction currentDigitalCallback; + callbackFunction currentReportAnalogCallback; + callbackFunction currentReportDigitalCallback; + callbackFunction currentPinModeCallback; + systemResetCallbackFunction currentSystemResetCallback; + stringCallbackFunction currentStringCallback; + sysexCallbackFunction currentSysexCallback; + +/* private methods ------------------------------ */ + void processSysexMessage(void); + void systemReset(void); + void pin13strobe(int count, int onInterval, int offInterval); +}; + +extern FirmataClass Firmata; + +/*============================================================================== + * MACROS + *============================================================================*/ + +/* shortcut for setFirmwareNameAndVersion() that uses __FILE__ to set the + * firmware name. It needs to be a macro so that __FILE__ is included in the + * firmware source file rather than the library source file. + */ +#define setFirmwareVersion(x, y) setFirmwareNameAndVersion(__FILE__, x, y) + +// total number of pins currently supported +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) // Arduino NG and Diecimila +#define TOTAL_ANALOG_PINS 8 +#define TOTAL_DIGITAL_PINS 22 // 14 digital + 8 analog +#define TOTAL_PORTS 3 // total number of ports for the board +#define ANALOG_PORT 2 // port# of analog used as digital +#define FIRST_ANALOG_PIN 14 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 13 // digital pin to blink version on +#elif defined(__AVR_ATmega8__) // old Arduinos +#define TOTAL_ANALOG_PINS 6 +#define TOTAL_DIGITAL_PINS 20 // 14 digital + 6 analog +#define TOTAL_PORTS 3 // total number of ports for the board +#define ANALOG_PORT 2 // port# of analog used as digital +#define FIRST_ANALOG_PIN 14 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 13 // digital pin to blink version on +#elif defined(__AVR_ATmega1280__)// Arduino Mega +#define TOTAL_ANALOG_PINS 16 +#define TOTAL_DIGITAL_PINS 70 // 54 digital + 16 analog +#define TOTAL_PORTS 9 // total number of ports for the board +#define ANALOG_PORT 8 // port# of analog used as digital +#define FIRST_ANALOG_PIN 54 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 13 // digital pin to blink version on +#elif defined(__AVR_ATmega128__)// Wiring +#define TOTAL_ANALOG_PINS 8 +#define TOTAL_DIGITAL_PINS 51 +#define TOTAL_PORTS 7 // total number of ports for the board +#define ANALOG_PORT 5 // port# of analog used as digital +#define FIRST_ANALOG_PIN 40 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 13 // digital pin to blink version on +#elif defined(__AVR_AT90USB162__) // Teensy +#define TOTAL_ANALOG_PINS 0 +#define TOTAL_DIGITAL_PINS 21 // 21 digital + no analog +#define TOTAL_PORTS 4 // total number of ports for the board +#define ANALOG_PORT 3 // port# of analog used as digital +#define FIRST_ANALOG_PIN 21 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 6 // digital pin to blink version on +#elif defined(__AVR_ATmega32U4__) // Teensy +#define TOTAL_ANALOG_PINS 12 +#define TOTAL_DIGITAL_PINS 25 // 11 digital + 12 analog +#define TOTAL_PORTS 4 // total number of ports for the board +#define ANALOG_PORT 3 // port# of analog used as digital +#define FIRST_ANALOG_PIN 11 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 11 // digital pin to blink version on +#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) // Teensy++ +#define TOTAL_ANALOG_PINS 8 +#define TOTAL_DIGITAL_PINS 46 // 38 digital + 8 analog +#define TOTAL_PORTS 6 // total number of ports for the board +#define ANALOG_PORT 5 // port# of analog used as digital +#define FIRST_ANALOG_PIN 38 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 6 // digital pin to blink version on +#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) // Sanguino +#define TOTAL_ANALOG_PINS 8 +#define TOTAL_DIGITAL_PINS 32 // 24 digital + 8 analog +#define TOTAL_PORTS 4 // total number of ports for the board +#define ANALOG_PORT 3 // port# of analog used as digital +#define FIRST_ANALOG_PIN 24 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 0 // digital pin to blink version on +#elif defined(__AVR_ATmega645__) // Illuminato +#define TOTAL_ANALOG_PINS 6 +#define TOTAL_DIGITAL_PINS 42 // 36 digital + 6 analog +#define TOTAL_PORTS 6 // total number of ports for the board +#define ANALOG_PORT 4 // port# of analog used as digital +#define FIRST_ANALOG_PIN 36 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 13 // digital pin to blink version on +#else // anything else +#define TOTAL_ANALOG_PINS 6 +#define TOTAL_DIGITAL_PINS 14 +#define TOTAL_PORTS 3 // total number of ports for the board +#define ANALOG_PORT 2 // port# of analog used as digital +#define FIRST_ANALOG_PIN 14 // pin# corresponding to analog 0 +#define VERSION_BLINK_PIN 13 // digital pin to blink version on +#endif + + + +#endif /* Firmata_h */ + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/LICENSE.txt b/arduino-0017-linux-x64/hardware/libraries/Firmata/LICENSE.txt new file mode 100644 index 0000000..77cec6d --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/LICENSE.txt @@ -0,0 +1,458 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/TODO.txt b/arduino-0017-linux-x64/hardware/libraries/Firmata/TODO.txt new file mode 100644 index 0000000..86c9858 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/TODO.txt @@ -0,0 +1,14 @@ + +- make Firmata a subclass of HardwareSerial + +- per-pin digital callback, since the per-port callback is a bit complicated + for beginners (maybe Firmata is not for beginners...) + +- simplify SimpleDigitalFirmata, take out the code that checks to see if the + data has changed, since it is a bit complicated for this example. Ideally + this example would be based on a call + +- turn current SimpleDigitalFirmata into DigitalPortFirmata for a more complex + example using the code which checks for changes before doing anything + +- test integration with Wiring diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/AnalogFirmata/AnalogFirmata.pde b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/AnalogFirmata/AnalogFirmata.pde new file mode 100644 index 0000000..ab83726 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/AnalogFirmata/AnalogFirmata.pde @@ -0,0 +1,83 @@ +/* This firmware supports as many analog ports as possible, all analog inputs, + * four PWM outputs, and two with servo support. + * + * This example code is in the public domain. + */ +#include +#include + +/*============================================================================== + * GLOBAL VARIABLES + *============================================================================*/ + +/* servos */ +Servo servo9, servo10; // one instance per pin +/* analog inputs */ +int analogInputsToReport = 0; // bitwise array to store pin reporting +int analogPin = 0; // counter for reading analog pins +/* timer variables */ +unsigned long currentMillis; // store the current value from millis() +unsigned long nextExecuteMillis; // for comparison with currentMillis + + +/*============================================================================== + * FUNCTIONS + *============================================================================*/ + +void analogWriteCallback(byte pin, int value) +{ + switch(pin) { + case 9: servo9.write(value); break; + case 10: servo10.write(value); break; + case 3: + case 5: + case 6: + case 11: // PWM pins + analogWrite(pin, value); + break; + } +} +// ----------------------------------------------------------------------------- +// sets bits in a bit array (int) to toggle the reporting of the analogIns +void reportAnalogCallback(byte pin, int value) +{ + if(value == 0) { + analogInputsToReport = analogInputsToReport &~ (1 << pin); + } + else { // everything but 0 enables reporting of that pin + analogInputsToReport = analogInputsToReport | (1 << pin); + } + // TODO: save status to EEPROM here, if changed +} + +/*============================================================================== + * SETUP() + *============================================================================*/ +void setup() +{ + Firmata.setFirmwareVersion(0, 2); + Firmata.attach(ANALOG_MESSAGE, analogWriteCallback); + Firmata.attach(REPORT_ANALOG, reportAnalogCallback); + + servo9.attach(9); + servo10.attach(10); + Firmata.begin(57600); +} + +/*============================================================================== + * LOOP() + *============================================================================*/ +void loop() +{ + while(Firmata.available()) + Firmata.processInput(); + currentMillis = millis(); + if(currentMillis > nextExecuteMillis) { + nextExecuteMillis = currentMillis + 19; // run this every 20ms + for(analogPin=0;analogPin +# +# - Write prototypes for all your functions (or define them before you +# call them). A prototype declares the types of parameters a +# function will take and what type of value it will return. This +# means that you can have a call to a function before the definition +# of the function. A function prototype looks like the first line of +# the function, with a semi-colon at the end. For example: +# int digitalRead(int pin); +# +# Instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. +# +# 2. Below, modify the line containing "TARGET" to refer to the name of +# of your program's file without an extension (e.g. TARGET = foo). +# +# 3. Modify the line containg "ARDUINO" to point the directory that +# contains the Arduino core (for normal Arduino installations, this +# is the hardware/cores/arduino sub-directory). +# +# 4. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.USB*). +# +# 5. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 6. Type "make" and press enter to compile/verify your program. +# +# 7. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id: Makefile,v 1.7 2007/04/13 05:28:23 eighthave Exp $ + +PORT = /dev/tty.usbserial-* +TARGET := $(shell pwd | sed 's|.*/\(.*\)|\1|') +ARDUINO = /Applications/arduino +ARDUINO_SRC = $(ARDUINO)/hardware/cores/arduino +ARDUINO_LIB_SRC = $(ARDUINO)/hardware/libraries +INCLUDE = -I$(ARDUINO_SRC) -I$(ARDUINO)/hardware/tools/avr/avr/include \ + -I$(ARDUINO_LIB_SRC)/EEPROM \ + -I$(ARDUINO_LIB_SRC)/Firmata \ + -I$(ARDUINO_LIB_SRC)/Servo \ + -I$(ARDUINO_LIB_SRC) +SRC = $(wildcard $(ARDUINO_SRC)/*.c) +CXXSRC = applet/$(TARGET).cpp $(ARDUINO_SRC)/HardwareSerial.cpp \ + $(ARDUINO_LIB_SRC)/EEPROM/EEPROM.cpp \ + $(ARDUINO_LIB_SRC)/Firmata/Firmata.cpp \ + $(ARDUINO_LIB_SRC)/Servo/Servo.cpp \ + $(ARDUINO_SRC)/WMath.cpp +HEADERS = $(wildcard $(ARDUINO_SRC)/*.h) $(wildcard $(ARDUINO_LIB_SRC)/*/*.h) + +MCU = atmega168 +#MCU = atmega8 +F_CPU = 16000000 +FORMAT = ihex +UPLOAD_RATE = 19200 + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) + +CFLAGS = $(CDEBUG) $(CDEFS) $(INCLUDE) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEFS) $(INCLUDE) -O$(OPT) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = + + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PROGRAMMER = stk500 +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex +AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ + -b $(UPLOAD_RATE) -q -V + +# Program settings +CC = avr-gcc +CXX = avr-g++ +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: applet/$(TARGET).hex + +eep: applet/$(TARGET).eep +lss: applet/$(TARGET).lss +sym: applet/$(TARGET).sym + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +extcoff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym .pde + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + +# Compile: create object files from C++ source files. +.cpp.o: $(HEADERS) + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: $(HEADERS) + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +applet/$(TARGET).cpp: $(TARGET).pde + test -d applet || mkdir applet + echo '#include "WProgram.h"' > applet/$(TARGET).cpp + echo '#include "avr/interrupt.h"' >> applet/$(TARGET).cpp + sed -n 's|^\(void .*)\).*|\1;|p' $(TARGET).pde | grep -v 'setup()' | \ + grep -v 'loop()' >> applet/$(TARGET).cpp + cat $(TARGET).pde >> applet/$(TARGET).cpp + cat $(ARDUINO_SRC)/main.cxx >> applet/$(TARGET).cpp + +# Link: create ELF output file from object files. +applet/$(TARGET).elf: applet/$(TARGET).cpp $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + +pd_close_serial: + echo 'close;' | /Applications/Pd-extended.app/Contents/Resources/bin/pdsend 34567 || true + +# Program the device. +upload: applet/$(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + + +pd_test: build pd_close_serial upload + +# Target: clean project. +clean: + $(REMOVE) -- applet/$(TARGET).hex applet/$(TARGET).eep \ + applet/$(TARGET).cof applet/$(TARGET).elf $(TARGET).map \ + applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + rmdir -- applet + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(INCLUDE) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build eep lss sym coff extcoff clean depend pd_close_serial pd_test + +# for emacs +etags: + make etags_`uname -s` + etags *.pde \ + $(ARDUINO_SRC)/*.[ch] \ + $(ARDUINO_SRC)/*.cpp \ + $(ARDUINO_LIB_SRC)/*/*.[ch] \ + $(ARDUINO_LIB_SRC)/*/*.cpp \ + $(ARDUINO)/hardware/tools/avr/avr/include/avr/*.[ch] \ + $(ARDUINO)/hardware/tools/avr/avr/include/*.[ch] + +etags_Darwin: +# etags -a + +etags_Linux: +# etags -a /usr/include/*.h linux/input.h /usr/include/sys/*.h + +etags_MINGW: +# etags -a /usr/include/*.h /usr/include/sys/*.h + + + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/EchoString/EchoString.pde b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/EchoString/EchoString.pde new file mode 100644 index 0000000..6559ae1 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/EchoString/EchoString.pde @@ -0,0 +1,40 @@ +/* This sketch accepts strings and raw sysex messages and echos them back. + * + * This example code is in the public domain. + */ +#include + +byte analogPin; + +void stringCallback(char *myString) +{ + Firmata.sendString(myString); +} + + +void sysexCallback(byte command, byte argc, byte*argv) +{ + Serial.print(START_SYSEX, BYTE); + Serial.print(command, BYTE); + for(byte i=0; i +# +# - Write prototypes for all your functions (or define them before you +# call them). A prototype declares the types of parameters a +# function will take and what type of value it will return. This +# means that you can have a call to a function before the definition +# of the function. A function prototype looks like the first line of +# the function, with a semi-colon at the end. For example: +# int digitalRead(int pin); +# +# Instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. +# +# 2. Below, modify the line containing "TARGET" to refer to the name of +# of your program's file without an extension (e.g. TARGET = foo). +# +# 3. Modify the line containg "ARDUINO" to point the directory that +# contains the Arduino core (for normal Arduino installations, this +# is the hardware/cores/arduino sub-directory). +# +# 4. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.USB*). +# +# 5. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 6. Type "make" and press enter to compile/verify your program. +# +# 7. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id: Makefile,v 1.7 2007/04/13 05:28:23 eighthave Exp $ + +PORT = /dev/tty.usbserial-* +TARGET := $(shell pwd | sed 's|.*/\(.*\)|\1|') +ARDUINO = /Applications/arduino +ARDUINO_SRC = $(ARDUINO)/hardware/cores/arduino +ARDUINO_LIB_SRC = $(ARDUINO)/hardware/libraries +INCLUDE = -I$(ARDUINO_SRC) -I$(ARDUINO)/hardware/tools/avr/avr/include \ + -I$(ARDUINO_LIB_SRC)/EEPROM \ + -I$(ARDUINO_LIB_SRC)/Firmata \ + -I$(ARDUINO_LIB_SRC)/Servo \ + -I$(ARDUINO_LIB_SRC) +SRC = $(wildcard $(ARDUINO_SRC)/*.c) +CXXSRC = applet/$(TARGET).cpp $(ARDUINO_SRC)/HardwareSerial.cpp \ + $(ARDUINO_LIB_SRC)/EEPROM/EEPROM.cpp \ + $(ARDUINO_LIB_SRC)/Firmata/Firmata.cpp \ + $(ARDUINO_LIB_SRC)/Servo/Servo.cpp \ + $(ARDUINO_SRC)/WMath.cpp +HEADERS = $(wildcard $(ARDUINO_SRC)/*.h) $(wildcard $(ARDUINO_LIB_SRC)/*/*.h) + +MCU = atmega168 +#MCU = atmega8 +F_CPU = 16000000 +FORMAT = ihex +UPLOAD_RATE = 19200 + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) + +CFLAGS = $(CDEBUG) $(CDEFS) $(INCLUDE) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEFS) $(INCLUDE) -O$(OPT) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = + + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PROGRAMMER = stk500 +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex +AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ + -b $(UPLOAD_RATE) -q -V + +# Program settings +CC = avr-gcc +CXX = avr-g++ +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: applet/$(TARGET).hex + +eep: applet/$(TARGET).eep +lss: applet/$(TARGET).lss +sym: applet/$(TARGET).sym + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +extcoff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym .pde + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + +# Compile: create object files from C++ source files. +.cpp.o: $(HEADERS) + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: $(HEADERS) + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +applet/$(TARGET).cpp: $(TARGET).pde + test -d applet || mkdir applet + echo '#include "WProgram.h"' > applet/$(TARGET).cpp + echo '#include "avr/interrupt.h"' >> applet/$(TARGET).cpp + sed -n 's|^\(void .*)\).*|\1;|p' $(TARGET).pde | grep -v 'setup()' | \ + grep -v 'loop()' >> applet/$(TARGET).cpp + cat $(TARGET).pde >> applet/$(TARGET).cpp + cat $(ARDUINO_SRC)/main.cxx >> applet/$(TARGET).cpp + +# Link: create ELF output file from object files. +applet/$(TARGET).elf: applet/$(TARGET).cpp $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + +pd_close_serial: + echo 'close;' | /Applications/Pd-extended.app/Contents/Resources/bin/pdsend 34567 || true + +# Program the device. +upload: applet/$(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + + +pd_test: build pd_close_serial upload + +# Target: clean project. +clean: + $(REMOVE) -- applet/$(TARGET).hex applet/$(TARGET).eep \ + applet/$(TARGET).cof applet/$(TARGET).elf $(TARGET).map \ + applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + rmdir -- applet + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(INCLUDE) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build eep lss sym coff extcoff clean depend pd_close_serial pd_test + +# for emacs +etags: + make etags_`uname -s` + etags *.pde \ + $(ARDUINO_SRC)/*.[ch] \ + $(ARDUINO_SRC)/*.cpp \ + $(ARDUINO_LIB_SRC)/*/*.[ch] \ + $(ARDUINO_LIB_SRC)/*/*.cpp \ + $(ARDUINO)/hardware/tools/avr/avr/include/avr/*.[ch] \ + $(ARDUINO)/hardware/tools/avr/avr/include/*.[ch] + +etags_Darwin: +# etags -a + +etags_Linux: +# etags -a /usr/include/*.h linux/input.h /usr/include/sys/*.h + +etags_MINGW: +# etags -a /usr/include/*.h /usr/include/sys/*.h + + + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/I2CFirmata/I2CFirmata.pde b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/I2CFirmata/I2CFirmata.pde new file mode 100644 index 0000000..796a8d5 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/I2CFirmata/I2CFirmata.pde @@ -0,0 +1,217 @@ +/* + Copyright (C) 2009 Jeff Hoefs. All rights reserved. + Copyright (C) 2009 Shigeru Kobayashi. All rights 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. + + See file LICENSE.txt for further informations on licensing terms. + */ + +#include +#include + + +#define I2C_WRITE B00000000 +#define I2C_READ B00001000 +#define I2C_READ_CONTINUOUSLY B00010000 +#define I2C_STOP_READING B00011000 +#define I2C_READ_WRITE_MODE_MASK B00011000 + +#define MAX_QUERIES 8 + +unsigned long currentMillis; // store the current value from millis() +unsigned long nextExecuteMillis; // for comparison with currentMillis +unsigned int samplingInterval = 32; // default sampling interval is 33ms +unsigned int i2cReadDelayTime = 0; // default delay time between i2c read request and Wire.requestFrom() +unsigned int powerPinsEnabled = 0; // use as boolean to prevent enablePowerPins from being called more than once + +#define MINIMUM_SAMPLING_INTERVAL 10 + +#define REGISTER_NOT_SPECIFIED -1 + +struct i2c_device_info { + byte addr; + byte reg; + byte bytes; +}; + +i2c_device_info query[MAX_QUERIES]; + +byte i2cRxData[32]; +boolean readingContinuously = false; +byte queryIndex = 0; + +void readAndReportData(byte address, int theRegister, byte numBytes) +{ + if (theRegister != REGISTER_NOT_SPECIFIED) { + Wire.beginTransmission(address); + Wire.send((byte)theRegister); + Wire.endTransmission(); + delayMicroseconds(i2cReadDelayTime); // delay is necessary for some devices such as WiiNunchuck + } + else { + theRegister = 0; // fill the register with a dummy value + } + + Wire.requestFrom(address, numBytes); + + // check to be sure correct number of bytes were returned by slave + if(numBytes == Wire.available()) { + i2cRxData[0] = address; + i2cRxData[1] = theRegister; + for (int i = 0; i < numBytes; i++) { + i2cRxData[2 + i] = Wire.receive(); + } + // send slave address, register and received bytes + Firmata.sendSysex(I2C_REPLY, numBytes + 2, i2cRxData); + } + else { + if(numBytes > Wire.available()) { + Firmata.sendString("I2C Read Error: Too many bytes received"); + } else { + Firmata.sendString("I2C Read Error: Too few bytes received"); + } + } + +} + +void sysexCallback(byte command, byte argc, byte *argv) +{ + byte mode; + byte slaveAddress; + byte slaveRegister; + byte data; + int delayTime; + + if (command == I2C_REQUEST) { + mode = argv[1] & I2C_READ_WRITE_MODE_MASK; + slaveAddress = argv[0]; + + switch(mode) { + case I2C_WRITE: + Wire.beginTransmission(slaveAddress); + for (byte i = 2; i < argc; i += 2) { + data = argv[i] + (argv[i + 1] << 7); + Wire.send(data); + } + Wire.endTransmission(); + delayMicroseconds(70); // TODO is this needed? + break; + case I2C_READ: + if (argc == 6) { + // a slave register is specified + slaveRegister = argv[2] + (argv[3] << 7); + data = argv[4] + (argv[5] << 7); // bytes to read + readAndReportData(slaveAddress, (int)slaveRegister, data); + } + else { + // a slave register is NOT specified + data = argv[2] + (argv[3] << 7); // bytes to read + readAndReportData(slaveAddress, (int)REGISTER_NOT_SPECIFIED, data); + } + break; + case I2C_READ_CONTINUOUSLY: + if ((queryIndex + 1) >= MAX_QUERIES) { + // too many queries, just ignore + Firmata.sendString("too many queries"); + break; + } + query[queryIndex].addr = slaveAddress; + query[queryIndex].reg = argv[2] + (argv[3] << 7); + query[queryIndex].bytes = argv[4] + (argv[5] << 7); + readingContinuously = true; + queryIndex++; + break; + case I2C_STOP_READING: + readingContinuously = false; + queryIndex = 0; + break; + default: + break; + } + } + else if (command == SAMPLING_INTERVAL) { + samplingInterval = argv[0] + (argv[1] << 7); + + if (samplingInterval < MINIMUM_SAMPLING_INTERVAL) { + samplingInterval = MINIMUM_SAMPLING_INTERVAL; + } + + samplingInterval -= 1; + Firmata.sendString("sampling interval"); + } + + else if (command == I2C_CONFIG) { + delayTime = (argv[4] + (argv[5] << 7)); // MSB + delayTime = (delayTime << 8) + (argv[2] + (argv[3] << 7)); // add LSB + + if((argv[0] + (argv[1] << 7)) > 0) { + enablePowerPins(PORTC3, PORTC2); + } + + if(delayTime > 0) { + i2cReadDelayTime = delayTime; + } + + if(argc > 6) { + // If you extend I2C_Config, handle your data here + } + + } +} + +void systemResetCallback() +{ + readingContinuously = false; + queryIndex = 0; +} + +/* reference: BlinkM_funcs.h by Tod E. Kurt, ThingM, http://thingm.com/ */ +// Enables Pins A2 and A3 to be used as GND and Power +// so that I2C devices can be plugged directly +// into Arduino header (pins A2 - A5) +static void enablePowerPins(byte pwrpin, byte gndpin) +{ + if(powerPinsEnabled == 0) { + DDRC |= _BV(pwrpin) | _BV(gndpin); + PORTC &=~ _BV(gndpin); + PORTC |= _BV(pwrpin); + powerPinsEnabled = 1; + Firmata.sendString("Power pins enabled"); + delay(100); + } +} + +void setup() +{ + Firmata.setFirmwareVersion(2, 0); + + Firmata.attach(START_SYSEX, sysexCallback); + Firmata.attach(SYSTEM_RESET, systemResetCallback); + + for (int i = 0; i < TOTAL_DIGITAL_PINS; ++i) { + pinMode(i, OUTPUT); + } + + Firmata.begin(57600); + Wire.begin(); +} + +void loop() +{ + while (Firmata.available()) { + Firmata.processInput(); + } + + currentMillis = millis(); + if (currentMillis > nextExecuteMillis) { + nextExecuteMillis = currentMillis + samplingInterval; + + for (byte i = 0; i < queryIndex; i++) { + readAndReportData(query[i].addr, query[i].reg, query[i].bytes); + } + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/Makefile b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/Makefile new file mode 100644 index 0000000..e968c0a --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/Makefile @@ -0,0 +1,263 @@ +# Arduino makefile +# +# This makefile allows you to build sketches from the command line +# without the Arduino environment (or Java). +# +# The Arduino environment does preliminary processing on a sketch before +# compiling it. If you're using this makefile instead, you'll need to do +# a few things differently: +# +# - Give your program's file a .cpp extension (e.g. foo.cpp). +# +# - Put this line at top of your code: #include +# +# - Write prototypes for all your functions (or define them before you +# call them). A prototype declares the types of parameters a +# function will take and what type of value it will return. This +# means that you can have a call to a function before the definition +# of the function. A function prototype looks like the first line of +# the function, with a semi-colon at the end. For example: +# int digitalRead(int pin); +# +# Instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. +# +# 2. Below, modify the line containing "TARGET" to refer to the name of +# of your program's file without an extension (e.g. TARGET = foo). +# +# 3. Modify the line containg "ARDUINO" to point the directory that +# contains the Arduino core (for normal Arduino installations, this +# is the hardware/cores/arduino sub-directory). +# +# 4. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.USB*). +# +# 5. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 6. Type "make" and press enter to compile/verify your program. +# +# 7. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id: Makefile,v 1.7 2007/04/13 05:28:23 eighthave Exp $ + +PORT = /dev/tty.usbserial-* +TARGET := $(shell pwd | sed 's|.*/\(.*\)|\1|') +ARDUINO = /Applications/arduino +ARDUINO_SRC = $(ARDUINO)/hardware/cores/arduino +ARDUINO_LIB_SRC = $(ARDUINO)/hardware/libraries +INCLUDE = -I$(ARDUINO_SRC) -I$(ARDUINO)/hardware/tools/avr/avr/include \ + -I$(ARDUINO_LIB_SRC)/EEPROM \ + -I$(ARDUINO_LIB_SRC)/Firmata \ + -I$(ARDUINO_LIB_SRC)/Servo \ + -I$(ARDUINO_LIB_SRC) +SRC = $(wildcard $(ARDUINO_SRC)/*.c) +CXXSRC = applet/$(TARGET).cpp $(ARDUINO_SRC)/HardwareSerial.cpp \ + $(ARDUINO_LIB_SRC)/EEPROM/EEPROM.cpp \ + $(ARDUINO_LIB_SRC)/Firmata/Firmata.cpp \ + $(ARDUINO_LIB_SRC)/Servo/Servo.cpp \ + $(ARDUINO_SRC)/WMath.cpp +HEADERS = $(wildcard $(ARDUINO_SRC)/*.h) $(wildcard $(ARDUINO_LIB_SRC)/*/*.h) + +MCU = atmega168 +#MCU = atmega8 +F_CPU = 16000000 +FORMAT = ihex +UPLOAD_RATE = 19200 + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) + +CFLAGS = $(CDEBUG) $(CDEFS) $(INCLUDE) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEFS) $(INCLUDE) -O$(OPT) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = + + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PROGRAMMER = stk500 +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex +AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ + -b $(UPLOAD_RATE) -q -V + +# Program settings +CC = avr-gcc +CXX = avr-g++ +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: applet/$(TARGET).hex + +eep: applet/$(TARGET).eep +lss: applet/$(TARGET).lss +sym: applet/$(TARGET).sym + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +extcoff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym .pde + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + +# Compile: create object files from C++ source files. +.cpp.o: $(HEADERS) + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: $(HEADERS) + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +applet/$(TARGET).cpp: $(TARGET).pde + test -d applet || mkdir applet + echo '#include "WProgram.h"' > applet/$(TARGET).cpp + echo '#include "avr/interrupt.h"' >> applet/$(TARGET).cpp + sed -n 's|^\(void .*)\).*|\1;|p' $(TARGET).pde | grep -v 'setup()' | \ + grep -v 'loop()' >> applet/$(TARGET).cpp + cat $(TARGET).pde >> applet/$(TARGET).cpp + cat $(ARDUINO_SRC)/main.cxx >> applet/$(TARGET).cpp + +# Link: create ELF output file from object files. +applet/$(TARGET).elf: applet/$(TARGET).cpp $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + +pd_close_serial: + echo 'close;' | /Applications/Pd-extended.app/Contents/Resources/bin/pdsend 34567 || true + +# Program the device. +upload: applet/$(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + + +pd_test: build pd_close_serial upload + +# Target: clean project. +clean: + $(REMOVE) -- applet/$(TARGET).hex applet/$(TARGET).eep \ + applet/$(TARGET).cof applet/$(TARGET).elf $(TARGET).map \ + applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + rmdir -- applet + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(INCLUDE) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build eep lss sym coff extcoff clean depend pd_close_serial pd_test + +# for emacs +etags: + make etags_`uname -s` + etags *.pde \ + $(ARDUINO_SRC)/*.[ch] \ + $(ARDUINO_SRC)/*.cpp \ + $(ARDUINO_LIB_SRC)/*/*.[ch] \ + $(ARDUINO_LIB_SRC)/*/*.cpp \ + $(ARDUINO)/hardware/tools/avr/avr/include/avr/*.[ch] \ + $(ARDUINO)/hardware/tools/avr/avr/include/*.[ch] + +etags_Darwin: +# etags -a + +etags_Linux: +# etags -a /usr/include/*.h linux/input.h /usr/include/sys/*.h + +etags_MINGW: +# etags -a /usr/include/*.h /usr/include/sys/*.h + + + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/ServoFirmata.pde b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/ServoFirmata.pde new file mode 100644 index 0000000..fa48e2b --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/ServoFirmata/ServoFirmata.pde @@ -0,0 +1,39 @@ +/* This firmware supports as many servos as possible using the Servo" library + * included in Arduino 0012 + * + * TODO add message to configure minPulse/maxPulse/degrees + * + * This example code is in the public domain. + */ + +#include +#include + +Servo servo9; +Servo servo10; + +void analogWriteCallback(byte pin, int value) +{ + if(pin == 9) + servo9.write(value); + if(pin == 10) + servo10.write(value); +} + +void setup() +{ + Firmata.setFirmwareVersion(0, 2); + Firmata.attach(ANALOG_MESSAGE, analogWriteCallback); + + servo9.attach(9); + servo10.attach(10); + + Firmata.begin(57600); +} + +void loop() +{ + while(Firmata.available()) + Firmata.processInput(); +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/Makefile b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/Makefile new file mode 100644 index 0000000..e968c0a --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/Makefile @@ -0,0 +1,263 @@ +# Arduino makefile +# +# This makefile allows you to build sketches from the command line +# without the Arduino environment (or Java). +# +# The Arduino environment does preliminary processing on a sketch before +# compiling it. If you're using this makefile instead, you'll need to do +# a few things differently: +# +# - Give your program's file a .cpp extension (e.g. foo.cpp). +# +# - Put this line at top of your code: #include +# +# - Write prototypes for all your functions (or define them before you +# call them). A prototype declares the types of parameters a +# function will take and what type of value it will return. This +# means that you can have a call to a function before the definition +# of the function. A function prototype looks like the first line of +# the function, with a semi-colon at the end. For example: +# int digitalRead(int pin); +# +# Instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. +# +# 2. Below, modify the line containing "TARGET" to refer to the name of +# of your program's file without an extension (e.g. TARGET = foo). +# +# 3. Modify the line containg "ARDUINO" to point the directory that +# contains the Arduino core (for normal Arduino installations, this +# is the hardware/cores/arduino sub-directory). +# +# 4. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.USB*). +# +# 5. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 6. Type "make" and press enter to compile/verify your program. +# +# 7. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id: Makefile,v 1.7 2007/04/13 05:28:23 eighthave Exp $ + +PORT = /dev/tty.usbserial-* +TARGET := $(shell pwd | sed 's|.*/\(.*\)|\1|') +ARDUINO = /Applications/arduino +ARDUINO_SRC = $(ARDUINO)/hardware/cores/arduino +ARDUINO_LIB_SRC = $(ARDUINO)/hardware/libraries +INCLUDE = -I$(ARDUINO_SRC) -I$(ARDUINO)/hardware/tools/avr/avr/include \ + -I$(ARDUINO_LIB_SRC)/EEPROM \ + -I$(ARDUINO_LIB_SRC)/Firmata \ + -I$(ARDUINO_LIB_SRC)/Servo \ + -I$(ARDUINO_LIB_SRC) +SRC = $(wildcard $(ARDUINO_SRC)/*.c) +CXXSRC = applet/$(TARGET).cpp $(ARDUINO_SRC)/HardwareSerial.cpp \ + $(ARDUINO_LIB_SRC)/EEPROM/EEPROM.cpp \ + $(ARDUINO_LIB_SRC)/Firmata/Firmata.cpp \ + $(ARDUINO_LIB_SRC)/Servo/Servo.cpp \ + $(ARDUINO_SRC)/WMath.cpp +HEADERS = $(wildcard $(ARDUINO_SRC)/*.h) $(wildcard $(ARDUINO_LIB_SRC)/*/*.h) + +MCU = atmega168 +#MCU = atmega8 +F_CPU = 16000000 +FORMAT = ihex +UPLOAD_RATE = 19200 + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) + +CFLAGS = $(CDEBUG) $(CDEFS) $(INCLUDE) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEFS) $(INCLUDE) -O$(OPT) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = + + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PROGRAMMER = stk500 +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex +AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ + -b $(UPLOAD_RATE) -q -V + +# Program settings +CC = avr-gcc +CXX = avr-g++ +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: applet/$(TARGET).hex + +eep: applet/$(TARGET).eep +lss: applet/$(TARGET).lss +sym: applet/$(TARGET).sym + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +extcoff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym .pde + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + +# Compile: create object files from C++ source files. +.cpp.o: $(HEADERS) + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: $(HEADERS) + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +applet/$(TARGET).cpp: $(TARGET).pde + test -d applet || mkdir applet + echo '#include "WProgram.h"' > applet/$(TARGET).cpp + echo '#include "avr/interrupt.h"' >> applet/$(TARGET).cpp + sed -n 's|^\(void .*)\).*|\1;|p' $(TARGET).pde | grep -v 'setup()' | \ + grep -v 'loop()' >> applet/$(TARGET).cpp + cat $(TARGET).pde >> applet/$(TARGET).cpp + cat $(ARDUINO_SRC)/main.cxx >> applet/$(TARGET).cpp + +# Link: create ELF output file from object files. +applet/$(TARGET).elf: applet/$(TARGET).cpp $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + +pd_close_serial: + echo 'close;' | /Applications/Pd-extended.app/Contents/Resources/bin/pdsend 34567 || true + +# Program the device. +upload: applet/$(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + + +pd_test: build pd_close_serial upload + +# Target: clean project. +clean: + $(REMOVE) -- applet/$(TARGET).hex applet/$(TARGET).eep \ + applet/$(TARGET).cof applet/$(TARGET).elf $(TARGET).map \ + applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + rmdir -- applet + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(INCLUDE) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build eep lss sym coff extcoff clean depend pd_close_serial pd_test + +# for emacs +etags: + make etags_`uname -s` + etags *.pde \ + $(ARDUINO_SRC)/*.[ch] \ + $(ARDUINO_SRC)/*.cpp \ + $(ARDUINO_LIB_SRC)/*/*.[ch] \ + $(ARDUINO_LIB_SRC)/*/*.cpp \ + $(ARDUINO)/hardware/tools/avr/avr/include/avr/*.[ch] \ + $(ARDUINO)/hardware/tools/avr/avr/include/*.[ch] + +etags_Darwin: +# etags -a + +etags_Linux: +# etags -a /usr/include/*.h linux/input.h /usr/include/sys/*.h + +etags_MINGW: +# etags -a /usr/include/*.h /usr/include/sys/*.h + + + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/SimpleAnalogFirmata.pde b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/SimpleAnalogFirmata.pde new file mode 100644 index 0000000..430d0d0 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleAnalogFirmata/SimpleAnalogFirmata.pde @@ -0,0 +1,32 @@ +/* Supports as many analog inputs and analog PWM outputs as possible. + * + * This example code is in the public domain. + */ +#include + +byte analogPin; + +void analogWriteCallback(byte pin, int value) +{ + pinMode(pin,OUTPUT); + analogWrite(pin, value); +} + +void setup() +{ + Firmata.setFirmwareVersion(0, 1); + Firmata.attach(ANALOG_MESSAGE, analogWriteCallback); + Firmata.begin(57600); +} + +void loop() +{ + while(Firmata.available()) { + Firmata.processInput(); + } + for(analogPin = 0; analogPin < TOTAL_ANALOG_PINS; analogPin++) { + Firmata.sendAnalog(analogPin, analogRead(analogPin)); + } +} + + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/Makefile b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/Makefile new file mode 100644 index 0000000..e968c0a --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/Makefile @@ -0,0 +1,263 @@ +# Arduino makefile +# +# This makefile allows you to build sketches from the command line +# without the Arduino environment (or Java). +# +# The Arduino environment does preliminary processing on a sketch before +# compiling it. If you're using this makefile instead, you'll need to do +# a few things differently: +# +# - Give your program's file a .cpp extension (e.g. foo.cpp). +# +# - Put this line at top of your code: #include +# +# - Write prototypes for all your functions (or define them before you +# call them). A prototype declares the types of parameters a +# function will take and what type of value it will return. This +# means that you can have a call to a function before the definition +# of the function. A function prototype looks like the first line of +# the function, with a semi-colon at the end. For example: +# int digitalRead(int pin); +# +# Instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. +# +# 2. Below, modify the line containing "TARGET" to refer to the name of +# of your program's file without an extension (e.g. TARGET = foo). +# +# 3. Modify the line containg "ARDUINO" to point the directory that +# contains the Arduino core (for normal Arduino installations, this +# is the hardware/cores/arduino sub-directory). +# +# 4. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.USB*). +# +# 5. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 6. Type "make" and press enter to compile/verify your program. +# +# 7. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id: Makefile,v 1.7 2007/04/13 05:28:23 eighthave Exp $ + +PORT = /dev/tty.usbserial-* +TARGET := $(shell pwd | sed 's|.*/\(.*\)|\1|') +ARDUINO = /Applications/arduino +ARDUINO_SRC = $(ARDUINO)/hardware/cores/arduino +ARDUINO_LIB_SRC = $(ARDUINO)/hardware/libraries +INCLUDE = -I$(ARDUINO_SRC) -I$(ARDUINO)/hardware/tools/avr/avr/include \ + -I$(ARDUINO_LIB_SRC)/EEPROM \ + -I$(ARDUINO_LIB_SRC)/Firmata \ + -I$(ARDUINO_LIB_SRC)/Servo \ + -I$(ARDUINO_LIB_SRC) +SRC = $(wildcard $(ARDUINO_SRC)/*.c) +CXXSRC = applet/$(TARGET).cpp $(ARDUINO_SRC)/HardwareSerial.cpp \ + $(ARDUINO_LIB_SRC)/EEPROM/EEPROM.cpp \ + $(ARDUINO_LIB_SRC)/Firmata/Firmata.cpp \ + $(ARDUINO_LIB_SRC)/Servo/Servo.cpp \ + $(ARDUINO_SRC)/WMath.cpp +HEADERS = $(wildcard $(ARDUINO_SRC)/*.h) $(wildcard $(ARDUINO_LIB_SRC)/*/*.h) + +MCU = atmega168 +#MCU = atmega8 +F_CPU = 16000000 +FORMAT = ihex +UPLOAD_RATE = 19200 + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) + +CFLAGS = $(CDEBUG) $(CDEFS) $(INCLUDE) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEFS) $(INCLUDE) -O$(OPT) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = + + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PROGRAMMER = stk500 +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex +AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ + -b $(UPLOAD_RATE) -q -V + +# Program settings +CC = avr-gcc +CXX = avr-g++ +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: applet/$(TARGET).hex + +eep: applet/$(TARGET).eep +lss: applet/$(TARGET).lss +sym: applet/$(TARGET).sym + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +extcoff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym .pde + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + +# Compile: create object files from C++ source files. +.cpp.o: $(HEADERS) + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: $(HEADERS) + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +applet/$(TARGET).cpp: $(TARGET).pde + test -d applet || mkdir applet + echo '#include "WProgram.h"' > applet/$(TARGET).cpp + echo '#include "avr/interrupt.h"' >> applet/$(TARGET).cpp + sed -n 's|^\(void .*)\).*|\1;|p' $(TARGET).pde | grep -v 'setup()' | \ + grep -v 'loop()' >> applet/$(TARGET).cpp + cat $(TARGET).pde >> applet/$(TARGET).cpp + cat $(ARDUINO_SRC)/main.cxx >> applet/$(TARGET).cpp + +# Link: create ELF output file from object files. +applet/$(TARGET).elf: applet/$(TARGET).cpp $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + +pd_close_serial: + echo 'close;' | /Applications/Pd-extended.app/Contents/Resources/bin/pdsend 34567 || true + +# Program the device. +upload: applet/$(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + + +pd_test: build pd_close_serial upload + +# Target: clean project. +clean: + $(REMOVE) -- applet/$(TARGET).hex applet/$(TARGET).eep \ + applet/$(TARGET).cof applet/$(TARGET).elf $(TARGET).map \ + applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + rmdir -- applet + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(INCLUDE) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build eep lss sym coff extcoff clean depend pd_close_serial pd_test + +# for emacs +etags: + make etags_`uname -s` + etags *.pde \ + $(ARDUINO_SRC)/*.[ch] \ + $(ARDUINO_SRC)/*.cpp \ + $(ARDUINO_LIB_SRC)/*/*.[ch] \ + $(ARDUINO_LIB_SRC)/*/*.cpp \ + $(ARDUINO)/hardware/tools/avr/avr/include/avr/*.[ch] \ + $(ARDUINO)/hardware/tools/avr/avr/include/*.[ch] + +etags_Darwin: +# etags -a + +etags_Linux: +# etags -a /usr/include/*.h linux/input.h /usr/include/sys/*.h + +etags_MINGW: +# etags -a /usr/include/*.h /usr/include/sys/*.h + + + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/SimpleDigitalFirmata.pde b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/SimpleDigitalFirmata.pde new file mode 100644 index 0000000..9c4e05d --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/SimpleDigitalFirmata/SimpleDigitalFirmata.pde @@ -0,0 +1,58 @@ +/* Supports as many digital inputs and outputs as possible. + * + * This example code is in the public domain. + */ +#include + +byte previousPIN[2]; // PIN means PORT for input +byte previousPORT[2]; + +void outputPort(byte portNumber, byte portValue) +{ +// only send the data when it changes, otherwise you get too many messages! + if(previousPIN[portNumber] != portValue) { + Firmata.sendDigitalPort(portNumber, portValue); + previousPIN[portNumber] = portValue; + Firmata.sendDigitalPort(portNumber, portValue); + } +} + +void setPinModeCallback(byte pin, int mode) { + if(pin > 1) { // don't touch RxTx pins (0,1) + pinMode(pin, mode); + } +} + +void digitalWriteCallback(byte port, int value) +{ + byte i; + byte currentPinValue, previousPinValue; + + if(value != previousPORT[port]) { + for(i=0; i<8; i++) { + currentPinValue = (byte) value & (1 << i); + previousPinValue = previousPORT[port] & (1 << i); + if(currentPinValue != previousPinValue) { + digitalWrite(i + (port*8), currentPinValue); + } + } + previousPORT[port] = value; + } +} + +void setup() +{ + Firmata.setFirmwareVersion(0, 1); + Firmata.attach(DIGITAL_MESSAGE, digitalWriteCallback); + Firmata.attach(SET_PIN_MODE, setPinModeCallback); + Firmata.begin(57600); +} + +void loop() +{ + outputPort(0, PIND &~ B00000011); // pins 0-7, ignoring Rx/Tx pins (0/1) + outputPort(1, PINB); // pins 8-13 + while(Firmata.available()) { + Firmata.processInput(); + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/LICENSE.txt b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/LICENSE.txt new file mode 100644 index 0000000..77cec6d --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/LICENSE.txt @@ -0,0 +1,458 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/Makefile b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/Makefile new file mode 100644 index 0000000..835187a --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/Makefile @@ -0,0 +1,273 @@ +# Arduino makefile +# +# This makefile allows you to build sketches from the command line +# without the Arduino environment (or Java). +# +# The Arduino environment does preliminary processing on a sketch before +# compiling it. If you're using this makefile instead, you'll need to do +# a few things differently: +# +# - Give your program's file a .cpp extension (e.g. foo.cpp). +# +# - Put this line at top of your code: #include +# +# - Write prototypes for all your functions (or define them before you +# call them). A prototype declares the types of parameters a +# function will take and what type of value it will return. This +# means that you can have a call to a function before the definition +# of the function. A function prototype looks like the first line of +# the function, with a semi-colon at the end. For example: +# int digitalRead(int pin); +# +# Instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. +# +# 2. Below, modify the line containing "TARGET" to refer to the name of +# of your program's file without an extension (e.g. TARGET = foo). +# +# 3. Modify the line containg "ARDUINO" to point the directory that +# contains the Arduino core (for normal Arduino installations, this +# is the hardware/cores/arduino sub-directory). +# +# 4. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.USB*). +# +# 5. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 6. Type "make" and press enter to compile/verify your program. +# +# 7. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id: Makefile,v 1.7 2007/04/13 05:28:23 eighthave Exp $ + +PORT = /dev/tty.usbserial-* +TARGET := $(shell pwd | sed 's|.*/\(.*\)|\1|') +ARDUINO = /Applications/arduino +ARDUINO_SRC = $(ARDUINO)/hardware/cores/arduino +ARDUINO_LIB_SRC = $(ARDUINO)/hardware/libraries +ARDUINO_TOOLS = $(ARDUINO)/hardware/tools +INCLUDE = -I$(ARDUINO_SRC) -I$(ARDUINO)/hardware/tools/avr/avr/include \ + -I$(ARDUINO_LIB_SRC)/EEPROM \ + -I$(ARDUINO_LIB_SRC)/Firmata \ + -I$(ARDUINO_LIB_SRC)/Matrix \ + -I$(ARDUINO_LIB_SRC)/Servo \ + -I$(ARDUINO_LIB_SRC)/Wire \ + -I$(ARDUINO_LIB_SRC) +SRC = $(wildcard $(ARDUINO_SRC)/*.c) +CXXSRC = applet/$(TARGET).cpp $(ARDUINO_SRC)/HardwareSerial.cpp \ + $(ARDUINO_LIB_SRC)/EEPROM/EEPROM.cpp \ + $(ARDUINO_LIB_SRC)/Firmata/Firmata.cpp \ + $(ARDUINO_LIB_SRC)/Servo/Servo.cpp \ + $(ARDUINO_SRC)/Print.cpp \ + $(ARDUINO_SRC)/WMath.cpp +HEADERS = $(wildcard $(ARDUINO_SRC)/*.h) $(wildcard $(ARDUINO_LIB_SRC)/*/*.h) + +MCU = atmega168 +#MCU = atmega8 +F_CPU = 16000000 +FORMAT = ihex +UPLOAD_RATE = 19200 + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) + +CFLAGS = $(CDEBUG) $(CDEFS) $(INCLUDE) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEFS) $(INCLUDE) -O$(OPT) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = + + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PROGRAMMER = stk500 +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex +AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ + -b $(UPLOAD_RATE) -q -V + +# Program settings +ARDUINO_AVR_BIN = $(ARDUINO_TOOLS)/avr/bin +CC = $(ARDUINO_AVR_BIN)/avr-gcc +CXX = $(ARDUINO_AVR_BIN)/avr-g++ +OBJCOPY = $(ARDUINO_AVR_BIN)/avr-objcopy +OBJDUMP = $(ARDUINO_AVR_BIN)/avr-objdump +SIZE = $(ARDUINO_AVR_BIN)/avr-size +NM = $(ARDUINO_AVR_BIN)/avr-nm +#AVRDUDE = $(ARDUINO_AVR_BIN)/avrdude +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: applet/$(TARGET).hex + +eep: applet/$(TARGET).eep +lss: applet/$(TARGET).lss +sym: applet/$(TARGET).sym + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +extcoff: applet/$(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf applet/$(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym .pde + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + +# Compile: create object files from C++ source files. +.cpp.o: $(HEADERS) + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: $(HEADERS) + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +applet/$(TARGET).cpp: $(TARGET).pde + test -d applet || mkdir applet + echo '#include "WProgram.h"' > applet/$(TARGET).cpp + echo '#include "avr/interrupt.h"' >> applet/$(TARGET).cpp + sed -n 's|^\(void .*)\).*|\1;|p' $(TARGET).pde | grep -v 'setup()' | \ + grep -v 'loop()' >> applet/$(TARGET).cpp + cat $(TARGET).pde >> applet/$(TARGET).cpp + cat $(ARDUINO_SRC)/main.cxx >> applet/$(TARGET).cpp + +# Link: create ELF output file from object files. +applet/$(TARGET).elf: applet/$(TARGET).cpp $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) -lm --output $@ $(LDFLAGS) +# $(CC) $(ALL_CFLAGS) $(OBJ) $(ARDUINO_TOOLS)/avr/avr/lib/avr5/crtm168.o --output $@ $(LDFLAGS) + +pd_close_serial: + echo 'close;' | /Applications/Pd-extended.app/Contents/Resources/bin/pdsend 34567 || true + +# Program the device. +upload: applet/$(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + + +pd_test: build pd_close_serial upload + +# Target: clean project. +clean: + $(REMOVE) -- applet/$(TARGET).hex applet/$(TARGET).eep \ + applet/$(TARGET).cof applet/$(TARGET).elf $(TARGET).map \ + applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + rmdir -- applet + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(INCLUDE) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build eep lss sym coff extcoff clean depend pd_close_serial pd_test + +# for emacs +etags: + make etags_`uname -s` + etags *.pde \ + $(ARDUINO_SRC)/*.[ch] \ + $(ARDUINO_SRC)/*.cpp \ + $(ARDUINO_LIB_SRC)/*/*.[ch] \ + $(ARDUINO_LIB_SRC)/*/*.cpp \ + $(ARDUINO)/hardware/tools/avr/avr/include/avr/*.[ch] \ + $(ARDUINO)/hardware/tools/avr/avr/include/*.[ch] + +etags_Darwin: +# etags -a + +etags_Linux: +# etags -a /usr/include/*.h linux/input.h /usr/include/sys/*.h + +etags_MINGW: +# etags -a /usr/include/*.h /usr/include/sys/*.h + + +path: + echo $(PATH) + echo $$PATH + diff --git a/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/StandardFirmata.pde b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/StandardFirmata.pde new file mode 100644 index 0000000..16c8b87 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Firmata/examples/StandardFirmata/StandardFirmata.pde @@ -0,0 +1,293 @@ +/* + Copyright (C) 2006-2008 Hans-Christoph Steiner. All rights 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. + + See file LICENSE.txt for further informations on licensing terms. + + formatted using the GNU C formatting and indenting +*/ + + +/* + * TODO: add Servo support using setPinModeCallback(pin, SERVO); + * TODO: use Program Control to load stored profiles from EEPROM + */ + +#include +#include + +/*============================================================================== + * GLOBAL VARIABLES + *============================================================================*/ + +/* analog inputs */ +int analogInputsToReport = 0; // bitwise array to store pin reporting +int analogPin = 0; // counter for reading analog pins + +/* digital pins */ +byte reportPINs[TOTAL_PORTS]; // PIN == input port +byte previousPINs[TOTAL_PORTS]; // PIN == input port +byte pinStatus[TOTAL_DIGITAL_PINS]; // store pin status, default OUTPUT +byte portStatus[TOTAL_PORTS]; + +/* timer variables */ +unsigned long currentMillis; // store the current value from millis() +unsigned long nextExecuteMillis; // for comparison with currentMillis +int samplingInterval = 19; // how often to run the main loop (in ms) + +Servo servos[2]; // the servo library can control servos on pins 9 and 10 only + +/*============================================================================== + * FUNCTIONS + *============================================================================*/ + +void outputPort(byte portNumber, byte portValue) +{ + portValue = portValue &~ portStatus[portNumber]; + if(previousPINs[portNumber] != portValue) { + Firmata.sendDigitalPort(portNumber, portValue); + previousPINs[portNumber] = portValue; + Firmata.sendDigitalPort(portNumber, portValue); + } +} + +/* ----------------------------------------------------------------------------- + * check all the active digital inputs for change of state, then add any events + * to the Serial output queue using Serial.print() */ +void checkDigitalInputs(void) +{ + byte i, tmp; + for(i=0; i < TOTAL_PORTS; i++) { + if(reportPINs[i]) { + switch(i) { + case 0: + outputPort(0, PIND &~ B00000011); // ignore Rx/Tx 0/1 + break; + case 1: + outputPort(1, PINB); + break; + case ANALOG_PORT: + outputPort(ANALOG_PORT, PINC); + break; + } + } + } +} + +// ----------------------------------------------------------------------------- +/* sets the pin mode to the correct state and sets the relevant bits in the + * two bit-arrays that track Digital I/O and PWM status + */ +void setPinModeCallback(byte pin, int mode) { + byte port = 0; + byte offset = 0; + + // TODO: abstract for different boards + if (pin < 8) { + port = 0; + offset = 0; + } else if (pin < 14) { + port = 1; + offset = 8; + } else if (pin < 22) { + port = 2; + offset = 14; + } + + if(pin > 1) { // ignore RxTx (pins 0 and 1) + if(pin > 13) + reportAnalogCallback(pin - 14, mode == ANALOG ? 1 : 0); // turn on/off reporting + switch(mode) { + case ANALOG: + digitalWrite(pin, LOW); // disable internal pull-ups and fall thru to 'case INPUT:' + case INPUT: + pinStatus[pin] = mode; + pinMode(pin, INPUT); + portStatus[port] = portStatus[port] &~ (1 << (pin - offset)); + break; + case OUTPUT: + digitalWrite(pin, LOW); // disable PWM and fall thru to 'case PWM:' + case PWM: + pinStatus[pin] = mode; + pinMode(pin, OUTPUT); + portStatus[port] = portStatus[port] | (1 << (pin - offset)); + break; + case SERVO: + if((pin == 9 || pin == 10)) + pinStatus[pin] = mode; + else + Firmata.sendString("Servo only on pins 9 and 10"); + break; + case I2C: + pinStatus[pin] = mode; + Firmata.sendString("I2C mode not yet supported"); + break; + default: + Firmata.sendString("Unknown pin mode"); // TODO: put error msgs in EEPROM + } + // TODO: save status to EEPROM here, if changed + } +} + +void analogWriteCallback(byte pin, int value) +{ + switch(pinStatus[pin]) { + case SERVO: + if(pin == 9) servos[0].write(value); + if(pin == 10) servos[1].write(value); + break; + case PWM: + analogWrite(pin, value); + break; + } +} + +void digitalWriteCallback(byte port, int value) +{ + switch(port) { + case 0: // pins 2-7 (don't change Rx/Tx, pins 0 and 1) + // 0xFF03 == B1111111100000011 0x03 == B00000011 + PORTD = (value &~ 0xFF03) | (PORTD & 0x03); + break; + case 1: // pins 8-13 (14,15 are disabled for the crystal) + PORTB = (byte)value; + break; + case 2: // analog pins used as digital + byte pin; + byte pinModeMask; + for(pin=0; pin<8; pin++) + if(pinStatus[pin] == OUTPUT) + pinModeMask += 1 << pin; + PORTC = (byte)value & pinModeMask; + break; + } +} + +// ----------------------------------------------------------------------------- +/* sets bits in a bit array (int) to toggle the reporting of the analogIns + */ +//void FirmataClass::setAnalogPinReporting(byte pin, byte state) { +//} +void reportAnalogCallback(byte pin, int value) +{ + if(value == 0) { + analogInputsToReport = analogInputsToReport &~ (1 << pin); + } + else { // everything but 0 enables reporting of that pin + analogInputsToReport = analogInputsToReport | (1 << pin); + setPinModeCallback(pin, ANALOG); + } + // TODO: save status to EEPROM here, if changed +} + +void reportDigitalCallback(byte port, int value) +{ + reportPINs[port] = (byte)value; + if(port == ANALOG_PORT) // turn off analog reporting when used as digital + analogInputsToReport = 0; +} + +/*============================================================================== + * SYSEX-BASED commands + *============================================================================*/ + +void sysexCallback(byte command, byte argc, byte *argv) +{ + switch(command) { + case SERVO_CONFIG: + if(argc > 4) { + // these vars are here for clarity, they'll optimized away by the compiler + byte pin = argv[0] - 9; // servos are pins 9 and 10, so offset for array + int minPulse = argv[1] + (argv[2] << 7); + int maxPulse = argv[3] + (argv[4] << 7); + servos[pin].attach(argv[0], minPulse, maxPulse); + // TODO does the Servo have to be detach()ed before reconfiguring? + setPinModeCallback(pin, SERVO); + } + break; + case SAMPLING_INTERVAL: + if (argc > 1) + samplingInterval = argv[0] + (argv[1] << 7); + else + Firmata.sendString("Not enough data"); + break; + } +} + + +/*============================================================================== + * SETUP() + *============================================================================*/ +void setup() +{ + byte i; + + Firmata.setFirmwareVersion(2, 1); + + Firmata.attach(ANALOG_MESSAGE, analogWriteCallback); + Firmata.attach(DIGITAL_MESSAGE, digitalWriteCallback); + Firmata.attach(REPORT_ANALOG, reportAnalogCallback); + Firmata.attach(REPORT_DIGITAL, reportDigitalCallback); + Firmata.attach(SET_PIN_MODE, setPinModeCallback); + Firmata.attach(START_SYSEX, sysexCallback); + + portStatus[0] = B00000011; // ignore Tx/RX pins + portStatus[1] = B11000000; // ignore 14/15 pins + portStatus[2] = B00000000; + + for(i=0; i nextExecuteMillis) { + nextExecuteMillis = currentMillis + samplingInterval; + /* SERIALREAD - Serial.read() uses a 128 byte circular buffer, so handle + * all serialReads at once, i.e. empty the buffer */ + while(Firmata.available()) + Firmata.processInput(); + /* SEND FTDI WRITE BUFFER - make sure that the FTDI buffer doesn't go over + * 60 bytes. use a timer to sending an event character every 4 ms to + * trigger the buffer to dump. */ + + /* ANALOGREAD - right after the event character, do all of the + * analogReads(). These only need to be done every 4ms. */ + for(analogPin=0;analogPin //not needed yet + #include //needed for strlen() + #include + #include "WConstants.h" //all things wiring / arduino +} + +//command bytes for LCD +#define CMD_CLR 0x01 +#define CMD_RIGHT 0x1C +#define CMD_LEFT 0x18 +#define CMD_HOME 0x02 + +// --------- PINS ------------------------------------- +//is the RW pin of the LCD under our control? If we're only ever going to write to the LCD, we can use one less microcontroller pin, and just tie the LCD pin to the necessary signal, high or low. +//this stops us sending signals to the RW pin if it isn't being used. +int USING_RW = false; + +//RS, RW and Enable can be set to whatever you like +int RS = 2; +int RW = 127; // not used +int Enable = 3; +//DB should be an unseparated group of pins - because of lazy coding in pushNibble() +int DB[] = {4, 5, 6, 7}; //wire these to DB4~7 on LCD. + +//-------------------------------------------------------- + +//how many lines has the LCD? (don't change here - specify on calling constructor) +int g_num_lines = 2; + +//pulse the Enable pin high (for a microsecond). +//This clocks whatever command or data is in DB4~7 into the LCD controller. +void LCD4Bit::pulseEnablePin(){ + digitalWrite(Enable,LOW); + delayMicroseconds(1); + // send a pulse to enable + digitalWrite(Enable,HIGH); + delayMicroseconds(1); + digitalWrite(Enable,LOW); + delay(1); // pause 1 ms. TODO: what delay, if any, is necessary here? +} + +//push a nibble of data through the the LCD's DB4~7 pins, clocking with the Enable pin. +//We don't care what RS and RW are, here. +void LCD4Bit::pushNibble(int value){ + int val_nibble= value & 0x0F; //clean the value. (unnecessary) + + for (int i=DB[0]; i <= DB[3]; i++) { + digitalWrite(i,val_nibble & 01); + val_nibble >>= 1; + } + pulseEnablePin(); +} + +//push a byte of data through the LCD's DB4~7 pins, in two steps, clocking each with the enable pin. +void LCD4Bit::pushByte(int value){ + int val_lower = value & 0x0F; + int val_upper = value >> 4; + pushNibble(val_upper); + pushNibble(val_lower); +} + + +//stuff the library user might call--------------------------------- +//constructor. num_lines must be 1 or 2, currently. +LCD4Bit::LCD4Bit (int num_lines) { + g_num_lines = num_lines; + if (g_num_lines < 1 || g_num_lines > 2) + { + g_num_lines = 1; + } +} + +void LCD4Bit::commandWriteNibble(int nibble) { + digitalWrite(RS, LOW); + if (USING_RW) { digitalWrite(RW, LOW); } + pushNibble(nibble); +} + + +void LCD4Bit::commandWrite(int value) { + digitalWrite(RS, LOW); + if (USING_RW) { digitalWrite(RW, LOW); } + pushByte(value); + //TODO: perhaps better to add a delay after EVERY command, here. many need a delay, apparently. +} + + + + +//print the given character at the current cursor position. overwrites, doesn't insert. +void LCD4Bit::print(int value) { + //set the RS and RW pins to show we're writing data + digitalWrite(RS, HIGH); + if (USING_RW) { digitalWrite(RW, LOW); } + + //let pushByte worry about the intricacies of Enable, nibble order. + pushByte(value); +} + + +//print the given string to the LCD at the current cursor position. overwrites, doesn't insert. +//While I don't understand why this was named printIn (PRINT IN?) in the original LiquidCrystal library, I've preserved it here to maintain the interchangeability of the two libraries. +void LCD4Bit::printIn(char msg[]) { + uint8_t i; //fancy int. avoids compiler warning when comparing i with strlen()'s uint8_t + for (i=0;i < strlen(msg);i++){ + print(msg[i]); + } +} + + +//send the clear screen command to the LCD +void LCD4Bit::clear(){ + commandWrite(CMD_CLR); + delay(1); +} + + +// initiatize lcd after a short pause +//while there are hard-coded details here of lines, cursor and blink settings, you can override these original settings after calling .init() +void LCD4Bit::init () { + pinMode(Enable,OUTPUT); + pinMode(RS,OUTPUT); + if (USING_RW) { pinMode(RW,OUTPUT); } + pinMode(DB[0],OUTPUT); + pinMode(DB[1],OUTPUT); + pinMode(DB[2],OUTPUT); + pinMode(DB[3],OUTPUT); + + delay(50); + + //The first 4 nibbles and timings are not in my DEM16217 SYH datasheet, but apparently are HD44780 standard... + commandWriteNibble(0x03); + delay(5); + commandWriteNibble(0x03); + delayMicroseconds(100); + commandWriteNibble(0x03); + delay(5); + + // needed by the LCDs controller + //this being 2 sets up 4-bit mode. + commandWriteNibble(0x02); + commandWriteNibble(0x02); + //todo: make configurable by the user of this library. + //NFXX where + //N = num lines (0=1 line or 1=2 lines). + //F= format (number of dots (0=5x7 or 1=5x10)). + //X=don't care + + int num_lines_ptn = g_num_lines - 1 << 3; + int dot_format_ptn = 0x00; //5x7 dots. 0x04 is 5x10 + + commandWriteNibble(num_lines_ptn | dot_format_ptn); + delayMicroseconds(60); + + //The rest of the init is not specific to 4-bit mode. + //NOTE: we're writing full bytes now, not nibbles. + + // display control: + // turn display on, cursor off, no blinking + commandWrite(0x0C); + delayMicroseconds(60); + + //clear display + commandWrite(0x01); + delay(3); + + // entry mode set: 06 + // increment automatically, display shift, entire shift off + commandWrite(0x06); + + delay(1);//TODO: remove unnecessary delays +} + + +//non-core stuff -------------------------------------- +//move the cursor to the given absolute position. line numbers start at 1. +//if this is not a 2-line LCD4Bit instance, will always position on first line. +void LCD4Bit::cursorTo(int line_num, int x){ + //first, put cursor home + //commandWrite(CMD_HOME); + //delayMicroseconds(1520); // neingeist, http://www.arduino.cc/playground/Code/LCD4BitLibrary + + //if we are on a 1-line display, set line_num to 1st line, regardless of given + if (g_num_lines==1){ + line_num = 1; + } + //offset 40 chars in if second line requested + if (line_num == 2){ + x += 64; + } + //advance the cursor to the right according to position. (second line starts at position 40). + //for (int i=0; i + +class LCD4Bit { +public: + LCD4Bit(int num_lines); + void commandWrite(int value); + void init(); + void print(int value); + void printIn(char value[]); + void clear(); + //non-core--------------- + void cursorTo(int line_num, int x); + void leftScroll(int chars, int delay_time); + //end of non-core-------- + + //4bit only, therefore ideally private but may be needed by user + void commandWriteNibble(int nibble); + void pushByte(int value); +private: + void pulseEnablePin(); + void pushNibble(int nibble); +}; + +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/examples/LCD4BitExample/LCD4BitExample.pde b/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/examples/LCD4BitExample/LCD4BitExample.pde new file mode 100644 index 0000000..e50c011 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/examples/LCD4BitExample/LCD4BitExample.pde @@ -0,0 +1,47 @@ +//example use of LCD4Bit library + +#include +//create object to control an LCD. +//number of lines in display=1 +LCD4Bit lcd = LCD4Bit(1); + +//some messages to display on the LCD +char msgs[6][15] = {"apple", "banana", "pineapple", "mango", "watermelon", "pear"}; +int NUM_MSGS = 6; + +void setup() { + pinMode(13, OUTPUT); //we'll use the debug LED to output a heartbeat + + lcd.init(); + //optionally, now set up our application-specific display settings, overriding whatever the lcd did in lcd.init() + //lcd.commandWrite(0x0F);//cursor on, display on, blink on. (nasty!) +} + +void loop() { + digitalWrite(13, HIGH); //light the debug LED + + //pick a random message from the array + int pick = random(NUM_MSGS); + char* msg = msgs[pick]; + + lcd.clear(); + lcd.printIn(msg); + delay(1000); + digitalWrite(13, LOW); + + //print some dots individually + for (int i=0; i<3; i++){ + lcd.print('.'); + delay(100); + } + //print something on the display's second line. + //uncomment this if your display HAS two lines! + /* + lcd.cursorTo(2, 0); //line=2, x=0. + lcd.printIn("Score: 6/7"); + delay(1000); + */ + + //scroll entire display 20 chars to left, delaying 50ms each inc + lcd.leftScroll(20, 50); +} diff --git a/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/keywords.txt new file mode 100644 index 0000000..74b2d7c --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/keywords.txt @@ -0,0 +1,27 @@ +####################################### +# Syntax Coloring Map For Matrix +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +LCD4Bit KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +clear KEYWORD2 +commandWrite KEYWORD2 +cursorTo KEYWORD2 +init KEYWORD2 +leftScroll KEYWORD2 +print KEYWORD2 +printIn KEYWORD2 +commandWriteNibble KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/readme.txt b/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/readme.txt new file mode 100644 index 0000000..be63d33 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LCD4Bit/readme.txt @@ -0,0 +1,38 @@ +This is a C++ library for Arduino for controlling an HD74800-compatible LCD in 4-bit mode. +Tested on Arduino 0005 Alpha. + +Installation +-------------------------------------------------------------------------------- + +To install this library, just place this entire folder as a subfolder in your +Arduino/lib/targets/libraries folder. + +When installed, this library should look like: + +Arduino/lib/targets/libraries/LCD4Bit (this library's folder) +Arduino/lib/targets/libraries/LCD4Bit/LCD4Bit.cpp (the library implementation file) +Arduino/lib/targets/libraries/LCD4Bit/LCD4Bit.h (the library description file) +Arduino/lib/targets/libraries/LCD4Bit/keywords.txt (the syntax coloring file) +Arduino/lib/targets/libraries/LCD4Bit/examples (the examples in the "open" menu) +Arduino/lib/targets/libraries/LCD4Bit/readme.txt (this file) + +Building +-------------------------------------------------------------------------------- + +After this library is installed, you just have to start the Arduino application. +You may see a few warning messages as it's built. + +To use this library in a sketch, go to the Sketch | Import Library menu and +select LCD4Bit. This will add a corresponding line to the top of your sketch: +#include + +To stop using this library, delete that line from your sketch. + +Geeky information: +After a successful build of this library, a new file named "LCD4Bit.o" will appear +in "Arduino/lib/targets/libraries/LCD4Bit". This file is the built/compiled library +code. + +If you choose to modify the code for this library (i.e. "LCD4Bit.cpp" or "LCD4Bit.h"), +then you must first 'unbuild' this library by deleting the "LCD4Bit.o" file. The +new "LCD4Bit.o" with your code will appear after the next press of "verify" diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp new file mode 100755 index 0000000..b66f107 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp @@ -0,0 +1,309 @@ +#include "LiquidCrystal.h" + +#include +#include +#include +#include "WProgram.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 its 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, -1, 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, -1, 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 -1 instead of pin# + if (_rw_pin != -1) { + 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 != -1) { + 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 8-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 void LiquidCrystal::write(uint8_t value) { + send(value, HIGH); +} + +/************ 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 != -1) { + 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(); +} diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.h b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.h new file mode 100755 index 0000000..f66ec1b --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/LiquidCrystal.h @@ -0,0 +1,104 @@ +#ifndef LiquidCrystal_h +#define LiquidCrystal_h + +#include +#include "Print.h" + +// commands +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off control +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + +class LiquidCrystal : public Print { +public: + 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); + 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); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + + void 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); + + void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + void clear(); + void home(); + + void noDisplay(); + void display(); + void noBlink(); + void blink(); + void noCursor(); + void cursor(); + void scrollDisplayLeft(); + void scrollDisplayRight(); + void leftToRight(); + void rightToLeft(); + void autoscroll(); + void noAutoscroll(); + + void createChar(uint8_t, uint8_t[]); + void setCursor(uint8_t, uint8_t); + virtual void write(uint8_t); + void command(uint8_t); +private: + void send(uint8_t, uint8_t); + void write4bits(uint8_t); + void write8bits(uint8_t); + void pulseEnable(); + + uint8_t _rs_pin; // LOW: command. HIGH: character. + uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. + uint8_t _enable_pin; // activated by a HIGH pulse. + uint8_t _data_pins[8]; + + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + + uint8_t _initialized; + + uint8_t _numlines,_currline; +}; + +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Autoscroll/Autoscroll.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Autoscroll/Autoscroll.pde new file mode 100644 index 0000000..bf33743 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Autoscroll/Autoscroll.pde @@ -0,0 +1,70 @@ +/* + LiquidCrystal Library - Autoscroll + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch demonstrates the use of the autoscroll() + and noAutoscroll() functions to make new text scroll or not. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup() { + // set up the LCD's number of columns and rows: + lcd.begin(16,2); +} + +void loop() { + // set the cursor to (0,0): + lcd.setCursor(0, 0); + // print from 0 to 9: + for (int thisChar = 0; thisChar < 10; thisChar++) { + lcd.print(thisChar); + delay(500); + } + + // set the cursor to (16,1): + lcd.setCursor(16,1); + // set the display to automatically scroll: + lcd.autoscroll(); + // print from 0 to 9: + for (int thisChar = 0; thisChar < 10; thisChar++) { + lcd.print(thisChar); + delay(500); + } + // turn off automatic scrolling + lcd.noAutoscroll(); + + // clear screen for the next loop: + lcd.clear(); +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Blink/Blink.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Blink/Blink.pde new file mode 100644 index 0000000..83c79b4 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Blink/Blink.pde @@ -0,0 +1,58 @@ +/* + LiquidCrystal Library - Blink + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch prints "Hello World!" to the LCD and makes the + cursor block blink. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup() { + // set up the LCD's number of rows and columns: + lcd.begin(16, 2); + // Print a message to the LCD. + lcd.print("hello, world!"); +} + +void loop() { + // Turn off the blinking cursor: + lcd.noBlink(); + delay(3000); + // Turn on the blinking cursor: + lcd.blink(); + delay(3000); +} + + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Cursor/Cursor.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Cursor/Cursor.pde new file mode 100644 index 0000000..c0273f4 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Cursor/Cursor.pde @@ -0,0 +1,58 @@ +/* + LiquidCrystal Library - Cursor + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch prints "Hello World!" to the LCD and + uses the cursor() and noCursor() methods to turn + on and off the cursor. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup() { + // set up the LCD's number of rows and columns: + lcd.begin(16, 2); + // Print a message to the LCD. + lcd.print("hello, world!"); +} + +void loop() { + // Turn off the cursor: + lcd.noCursor(); + delay(500); + // Turn on the cursor: + lcd.cursor(); + delay(500); +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Display/Display.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Display/Display.pde new file mode 100644 index 0000000..b430539 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Display/Display.pde @@ -0,0 +1,58 @@ +/* + LiquidCrystal Library - display() and noDisplay() + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch prints "Hello World!" to the LCD and uses the + display() and noDisplay() functions to turn on and off + the display. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup() { + // set up the LCD's number of rows and columns: + lcd.begin(16, 2); + // Print a message to the LCD. + lcd.print("hello, world!"); +} + +void loop() { + // Turn off the display: + lcd.noDisplay(); + delay(500); + // Turn on the display: + lcd.display(); + delay(500); +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde new file mode 100644 index 0000000..76cd746 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde @@ -0,0 +1,56 @@ +/* + LiquidCrystal Library - Hello World + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch prints "Hello World!" to the LCD + and shows the time. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup() { + // set up the LCD's number of rows and columns: + lcd.begin(16, 2); + // Print a message to the LCD. + lcd.print("hello, world!"); +} + +void loop() { + // set the cursor to column 0, line 1 + // (note: line 1 is the second row, since counting begins with 0): + lcd.setCursor(0, 1); + // print the number of seconds since reset: + lcd.print(millis()/1000); +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Scroll/Scroll.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Scroll/Scroll.pde new file mode 100644 index 0000000..9276553 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/Scroll/Scroll.pde @@ -0,0 +1,83 @@ +/* + LiquidCrystal Library - scrollDisplayLeft() and scrollDisplayRight() + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch prints "Hello World!" to the LCD and uses the + scrollDisplayLeft() and scrollDisplayRight() methods to scroll + the text. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup() { + // set up the LCD's number of rows and columns: + lcd.begin(16, 2); + //lcd.setCursor(0,7); + // Print a message to the LCD. + lcd.print("hello, world!"); + delay(1000); +} + +void loop() { + // scroll 13 positions (string length) to the left + // to move it offscreen left: + for (int positionCounter = 0; positionCounter < 13; positionCounter++) { + // scroll one position left: + lcd.scrollDisplayLeft(); + // wait a bit: + delay(150); + } + + // scroll 29 positions (string length + display length) to the right + // to move it offscreen right: + for (int positionCounter = 0; positionCounter < 29; positionCounter++) { + // scroll one position right: + lcd.scrollDisplayRight(); + // wait a bit: + delay(150); + } + + // scroll 16 positions (display length + string length) to the left + // to move it back to center: + for (int positionCounter = 0; positionCounter < 16; positionCounter++) { + // scroll one position left: + lcd.scrollDisplayLeft(); + // wait a bit: + delay(150); + } + + // delay at the end of the full loop: + delay(1000); + +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde new file mode 100644 index 0000000..a094c24 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde @@ -0,0 +1,62 @@ +/* + LiquidCrystal Library - Serial Input + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch displays text sent over the serial port + (e.g. from the Serial Monitor) on an attached LCD. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe +modified 25 July 2009 + by David A. Mellis + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup(){ + // set up the LCD's number of rows and columns: + lcd.begin(16, 2); + // initialize the serial communications: + Serial.begin(9600); +} + +void loop() +{ + // when characters arrive over the serial port... + if (Serial.available()) { + // wait a bit for the entire message to arrive + delay(100); + // clear the screen + lcd.clear(); + // read all the available characters + while (Serial.available() > 0) { + // display each character to the LCD + lcd.write(Serial.read()); + } + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/TextDirection/TextDirection.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/TextDirection/TextDirection.pde new file mode 100644 index 0000000..725eb0d --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/TextDirection/TextDirection.pde @@ -0,0 +1,84 @@ + /* + LiquidCrystal Library - TextDirection + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch demonstrates how to use leftToRight() and rightToLeft() + to move the cursor. + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + + */ + +// include the library code: +#include + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +int thisChar = 'a'; + +void setup() { + // set up the LCD's number of rows and columns: + lcd.begin(16, 2); + // turn on the cursor: + lcd.cursor(); + Serial.begin(9600); +} + +void loop() { + // reverse directions at 'm': + if (thisChar == 'm') { + // go right for the next letter + lcd.rightToLeft(); + } + // reverse again at 's': + if (thisChar == 's') { + // go left for the next letter + lcd.leftToRight(); + } + // reset at 'z': + if (thisChar > 'z') { + // go to (0,0): + lcd.home(); + // start again at 0 + thisChar = 'a'; + } + // print the character + lcd.print(thisChar, BYTE); + // wait a second: + delay(1000); + // increment the letter: + thisChar++; +} + + + + + + + + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/setCursor/setCursor.pde b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/setCursor/setCursor.pde new file mode 100644 index 0000000..edd2e77 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/examples/setCursor/setCursor.pde @@ -0,0 +1,68 @@ +/* + LiquidCrystal Library - setCursor + + Demonstrates the use a 16x2 LCD display. The LiquidCrystal + library works with all LCD displays that are compatible with the + Hitachi HD44780 driver. There are many of them out there, and you + can usually tell them by the 16-pin interface. + + This sketch prints to all the positions of the LCD using the + setCursor(0 method: + + The circuit: + * LCD RS pin to digital pin 12 + * LCD Enable pin to digital pin 11 + * LCD D4 pin to digital pin 5 + * LCD D5 pin to digital pin 4 + * LCD D6 pin to digital pin 3 + * LCD D7 pin to digital pin 2 + * 10K resistor: + * ends to +5V and ground + * wiper to LCD VO pin (pin 3) + + Library originally added 18 Apr 2008 + by David A. Mellis + library modified 5 Jul 2009 + by Limor Fried (http://www.ladyada.net) + example added 9 Jul 2009 + by Tom Igoe + modified 25 July 2009 + by David A. Mellis + + http://www.arduino.cc/en/Tutorial/LiquidCrystal + */ + +// include the library code: +#include + +// these constants won't change. But you can change the size of +// your LCD using them: +const int numRows = 2; +const int numCols = 16; + +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +void setup() { + // set up the LCD's number of rows and columns: + lcd.begin(numRows, numCols); +} + +void loop() { + // loop from ASCII 'a' to ASCII 'z': + for (int thisLetter = 'a'; thisLetter <= 'z'; thisLetter++) { + // loop over the columns: + for (int thisCol = 0; thisCol < numRows; thisCol++) { + // loop over the rows: + for (int thisRow = 0; thisRow < numCols; thisRow++) { + // set the cursor position: + lcd.setCursor(thisRow,thisCol); + // print the letter: + lcd.print(thisLetter, BYTE); + delay(200); + } + } + } +} + + diff --git a/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/keywords.txt new file mode 100755 index 0000000..132845c --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/LiquidCrystal/keywords.txt @@ -0,0 +1,37 @@ +####################################### +# Syntax Coloring Map For LiquidCrystal +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +LiquidCrystal KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +clear KEYWORD2 +home KEYWORD2 +print KEYWORD2 +setCursor KEYWORD2 +cursor KEYWORD2 +noCursor KEYWORD2 +blink KEYWORD2 +noBlink KEYWORD2 +display KEYWORD2 +noDisplay KEYWORD2 +autoscroll KEYWORD2 +noAutoscroll KEYWORD2 +leftToRight KEYWORD2 +rightToLeft KEYWORD2 +scrollDisplayLeft KEYWORD2 +scrollDisplayRight KEYWORD2 +createChar KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.cpp b/arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.cpp new file mode 100755 index 0000000..2eb3e25 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.cpp @@ -0,0 +1,229 @@ +/* + Matrix.cpp - Max7219 LED Matrix library for Arduino & 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 +*/ + +// TODO: Support segment displays in api? +// TODO: Support varying vendor layouts? + +/****************************************************************************** + * Includes + ******************************************************************************/ + +extern "C" { + // AVR LibC Includes + #include + #include + + // Wiring Core Includes + #undef abs + #include "WConstants.h" + + // Wiring Core Prototypes + //void pinMode(uint8_t, uint8_t); + //void digitalWrite(int, uint8_t); +} + +#include "Sprite.h" +#include "Matrix.h" + +/****************************************************************************** + * Definitions + ******************************************************************************/ + +// Matrix registers +#define REG_NOOP 0x00 +#define REG_DIGIT0 0x01 +#define REG_DIGIT1 0x02 +#define REG_DIGIT2 0x03 +#define REG_DIGIT3 0x04 +#define REG_DIGIT4 0x05 +#define REG_DIGIT5 0x06 +#define REG_DIGIT6 0x07 +#define REG_DIGIT7 0x08 +#define REG_DECODEMODE 0x09 +#define REG_INTENSITY 0x0A +#define REG_SCANLIMIT 0x0B +#define REG_SHUTDOWN 0x0C +#define REG_DISPLAYTEST 0x0F + +/****************************************************************************** + * Constructors + ******************************************************************************/ + +Matrix::Matrix(uint8_t data, uint8_t clock, uint8_t load, uint8_t screens /* = 1 */) +{ + // record pins for sw spi + _pinData = data; + _pinClock = clock; + _pinLoad = load; + + // set ddr for sw spi pins + pinMode(_pinClock, OUTPUT); + pinMode(_pinData, OUTPUT); + pinMode(_pinLoad, OUTPUT); + + // allocate screenbuffers + _screens = screens; + _buffer = (uint8_t*)calloc(_screens, 64); + _maximumX = (_screens * 8); + + // initialize registers + clear(); // clear display + setScanLimit(0x07); // use all rows/digits + setBrightness(0x0F); // maximum brightness + setRegister(REG_SHUTDOWN, 0x01); // normal operation + setRegister(REG_DECODEMODE, 0x00); // pixels not integers + setRegister(REG_DISPLAYTEST, 0x00); // not in test mode +} + +/****************************************************************************** + * MAX7219 SPI + ******************************************************************************/ + +// sends a single byte by sw spi (no latching) +void Matrix::putByte(uint8_t data) +{ + uint8_t i = 8; + uint8_t mask; + while(i > 0) { + mask = 0x01 << (i - 1); // get bitmask + digitalWrite(_pinClock, LOW); // tick + if (data & mask){ // choose bit + digitalWrite(_pinData, HIGH); // set 1 + }else{ + digitalWrite(_pinData, LOW); // set 0 + } + digitalWrite(_pinClock, HIGH); // tock + --i; // move to lesser bit + } +} + +// sets register to a byte value for all screens +void Matrix::setRegister(uint8_t reg, uint8_t data) +{ + digitalWrite(_pinLoad, LOW); // begin + for(uint8_t i = 0; i < _screens; ++i){ + putByte(reg); // specify register + putByte(data); // send data + } + digitalWrite(_pinLoad, HIGH); // latch in data + digitalWrite(_pinLoad, LOW); // end +} + +// syncs row of display with buffer +void Matrix::syncRow(uint8_t row) +{ + if (!_buffer) return; + + // uint8_t's can't be negative, so don't test for negative row + if (row >= 8) return; + digitalWrite(_pinLoad, LOW); // begin + for(uint8_t i = 0; i < _screens; ++i){ + putByte(8 - row); // specify register + putByte(_buffer[row + (8 * i)]); // send data + } + digitalWrite(_pinLoad, HIGH); // latch in data + digitalWrite(_pinLoad, LOW); // end +} + +/****************************************************************************** + * MAX7219 Configuration + ******************************************************************************/ + +// sets how many digits are displayed +void Matrix::setScanLimit(uint8_t value) +{ + setRegister(REG_SCANLIMIT, value & 0x07); +} + +// sets brightness of the display +void Matrix::setBrightness(uint8_t value) +{ + setRegister(REG_INTENSITY, value & 0x0F); +} + +/****************************************************************************** + * Helper Functions + ******************************************************************************/ + +void Matrix::buffer(uint8_t x, uint8_t y, uint8_t value) +{ + if (!_buffer) return; + + // uint8_t's can't be negative, so don't test for negative x and y. + if (x >= _maximumX || y >= 8) return; + + uint8_t offset = x; // record x + x %= 8; // make x relative to a single matrix + offset -= x; // calculate buffer offset + + // wrap shift relative x for nexus module layout + if (x == 0){ + x = 8; + } + --x; + + // record value in buffer + if(value){ + _buffer[y + offset] |= 0x01 << x; + }else{ + _buffer[y + offset] &= ~(0x01 << x); + } +} + +/****************************************************************************** + * User API + ******************************************************************************/ + +// buffers and writes to screen +void Matrix::write(uint8_t x, uint8_t y, uint8_t value) +{ + buffer(x, y, value); + + // update affected row + syncRow(y); +} + +void Matrix::write(uint8_t x, uint8_t y, Sprite sprite) +{ + for (uint8_t i = 0; i < sprite.height(); i++){ + for (uint8_t j = 0; j < sprite.width(); j++) + buffer(x + j, y + i, sprite.read(j, i)); + + syncRow(y + i); + } +} + +// clears screens and buffers +void Matrix::clear(void) +{ + if (!_buffer) return; + + // clear buffer + for(uint8_t i = 0; i < 8; ++i){ + for(uint8_t j = 0; j < _screens; ++j){ + _buffer[i + (8 * j)] = 0x00; + } + } + + // clear registers + for(uint8_t i = 0; i < 8; ++i){ + syncRow(i); + } +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.h b/arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.h new file mode 100755 index 0000000..7c6be91 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Matrix/Matrix.h @@ -0,0 +1,54 @@ +/* + Matrix.h - Max7219 LED Matrix library for Arduino & 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 +*/ + +#ifndef Matrix_h +#define Matrix_h + +#include + +class Sprite; + +class Matrix +{ + private: + uint8_t _pinData; + uint8_t _pinClock; + uint8_t _pinLoad; + + uint8_t* _buffer; + uint8_t _screens; + uint8_t _maximumX; + + void putByte(uint8_t); + void setRegister(uint8_t, uint8_t); + void syncRow(uint8_t); + + void setScanLimit(uint8_t); + + void buffer(uint8_t, uint8_t, uint8_t); + public: + Matrix(uint8_t, uint8_t, uint8_t, uint8_t = 1); + void setBrightness(uint8_t); + void write(uint8_t, uint8_t, uint8_t); + void write(uint8_t, uint8_t, Sprite); + void clear(void); +}; + +#endif + diff --git a/arduino-0017-linux-x64/hardware/libraries/Matrix/examples/hello_matrix/hello_matrix.pde b/arduino-0017-linux-x64/hardware/libraries/Matrix/examples/hello_matrix/hello_matrix.pde new file mode 100644 index 0000000..127917f --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Matrix/examples/hello_matrix/hello_matrix.pde @@ -0,0 +1,42 @@ +#include +#include + +// Hello Matrix +// by Nicholas Zambetti + +// Demonstrates the use of the Matrix library +// For MAX7219 LED Matrix Controllers +// Blinks welcoming face on screen + +// Created 13 February 2006 + +/* create a new Matrix instance + pin 0: data (din) + pin 1: load (load) + pin 2: clock (clk) +*/ +Matrix myMatrix = Matrix(0, 2, 1); + +void setup() +{ +} + +void loop() +{ + myMatrix.clear(); // clear display + + delay(1000); + + // turn some pixels on + myMatrix.write(1, 5, HIGH); + myMatrix.write(2, 2, HIGH); + myMatrix.write(2, 6, HIGH); + myMatrix.write(3, 6, HIGH); + myMatrix.write(4, 6, HIGH); + myMatrix.write(5, 2, HIGH); + myMatrix.write(5, 6, HIGH); + myMatrix.write(6, 5, HIGH); + + delay(1000); +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/Matrix/examples/sprite_animation/sprite_animation.pde b/arduino-0017-linux-x64/hardware/libraries/Matrix/examples/sprite_animation/sprite_animation.pde new file mode 100644 index 0000000..bf7c6f5 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Matrix/examples/sprite_animation/sprite_animation.pde @@ -0,0 +1,48 @@ +#include +#include + +// Sprite Animation +// by Nicholas Zambetti + +// Demonstrates the use of the Matrix & Sprite libraries +// Displays animated waveform graphic on screen + +// Created 29 March 2006 + +/* create a new Matrix instance + pin 0: data (din) + pin 1: load (load) + pin 2: clock (clk) +*/ +Matrix myMatrix = Matrix(0, 2, 1); + +/* create a new Sprite instance + 8 pixels wide, 4 pixels tall +*/ +Sprite wave = Sprite( + 8, 4, + B00011000, + B00100100, + B01000010, + B10000001 +); + +void setup() +{ +} + +int x = 0; + +void loop() +{ + myMatrix.write(x, 2, wave); // place sprite on screen + myMatrix.write(x - 8, 2, wave); // place sprite again, elsewhere on screen + delay(75); // wait a little bit + myMatrix.clear(); // clear the screen for next animation frame + if(x == 8) // if reached end of animation sequence + { + x = 0; // start from beginning + } + x++; // advance x coordinate to the right +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/Matrix/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/Matrix/keywords.txt new file mode 100644 index 0000000..b784f87 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Matrix/keywords.txt @@ -0,0 +1,22 @@ +####################################### +# Syntax Coloring Map For Matrix +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +Matrix KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +setBrightness KEYWORD2 +write KEYWORD2 +clear KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/arduino-0017-linux-x64/hardware/libraries/Servo/Servo.cpp b/arduino-0017-linux-x64/hardware/libraries/Servo/Servo.cpp new file mode 100755 index 0000000..9f58d64 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Servo/Servo.cpp @@ -0,0 +1,268 @@ +/* + Servo.cpp - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2 + Copyright (c) 2009 Michael Margolis. 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 + */ + +/* + + A servo is activated by creating an instance of the Servo class passing the desired pin to the attach() method. + The servos are pulsed in the background using the value most recently written using the write() method + + Note that analogWrite of PWM on pins associated with the timer are disabled when the first servo is attached. + Timers are seized as needed in groups of 12 servos - 24 servos use two timers, 48 servos will use four. + + The methods are: + + Servo - Class for manipulating servo motors connected to Arduino pins. + + attach(pin ) - Attaches a servo motor to an i/o pin. + attach(pin, min, max ) - Attaches to a pin setting min and max values in microseconds + default min is 544, max is 2400 + + write() - Sets the servo angle in degrees. (invalid angle that is valid as pulse in microseconds is treated as microseconds) + writeMicroseconds() - Sets the servo pulse width in microseconds + read() - Gets the last written servo pulse width as an angle between 0 and 180. + readMicroseconds() - Gets the last written servo pulse width in microseconds. (was read_us() in first release) + attached() - Returns true if there is a servo attached. + detach() - Stops an attached servos from pulsing its i/o pin. + +*/ + +#include +#include + + +#include "Servo.h" + +#define TICKS_PER_uS (clockCyclesPerMicrosecond() / 8) // number of timer ticks per microsecond with prescale of 8 + +#define SERVOS_PER_TIMER 12 // the maximum number of servos controlled by one timer +#define TRIM_DURATION (SERVOS_PER_TIMER/2) // compensation ticks to trim adjust for digitalWrite delays + +#define NBR_TIMERS (MAX_SERVOS / SERVOS_PER_TIMER) + +static servo_t servos[MAX_SERVOS]; // static array of servo structures +static volatile int8_t Channel[NBR_TIMERS]; // counter for the servo being pulsed for each timer (or -1 if refresh interval) +#if defined(__AVR_ATmega1280__) +typedef enum { _timer5, _timer1, _timer3, _timer4 } servoTimer_t; // this is the sequence for timer utilization on mega +#else +typedef enum { _timer1 } servoTimer_t; // this is the sequence for timer utilization on other controllers +#endif + +uint8_t ServoCount = 0; // the total number of attached servos + +// convenience macros +#define SERVO_INDEX_TO_TIMER(_servo_nbr) ((servoTimer_t)(_servo_nbr / SERVOS_PER_TIMER)) // returns the timer controlling this servo +#define SERVO_INDEX_TO_CHANNEL(_servo_nbr) (_servo_nbr % SERVOS_PER_TIMER) // returns the index of the servo on this timer +#define SERVO_INDEX(_timer,_channel) ((_timer*SERVOS_PER_TIMER) + _channel) // macro to access servo index by timer and channel +#define SERVO(_timer,_channel) (servos[SERVO_INDEX(_timer,_channel)]) // macro to access servo class by timer and channel + +#define SERVO_MIN() (MIN_PULSE_WIDTH - this->min * 4) // minimum value in uS for this servo +#define SERVO_MAX() (MAX_PULSE_WIDTH - this->max * 4) // maximum value in uS for this servo + +/************ static functions common to all instances ***********************/ + +static inline void handle_interrupts(servoTimer_t timer, volatile uint16_t *TCNTn, volatile uint16_t* OCRnA) +{ + if( Channel[timer] < 0 ) + *TCNTn = 0; // channel set to -1 indicated that refresh interval completed so reset the timer + else{ + if( SERVO_INDEX(timer,Channel[timer]) < ServoCount && SERVO(timer,Channel[timer]).Pin.isActive == true ) + digitalWrite( SERVO(timer,Channel[timer]).Pin.nbr,LOW); // pulse this channel low if activated + } + + Channel[timer]++; // increment to the next channel + if( SERVO_INDEX(timer,Channel[timer]) < ServoCount && Channel[timer] < SERVOS_PER_TIMER) { + *OCRnA = *TCNTn + SERVO(timer,Channel[timer]).ticks; + if(SERVO(timer,Channel[timer]).Pin.isActive == true) // check if activated + digitalWrite( SERVO(timer,Channel[timer]).Pin.nbr,HIGH); // its an active channel so pulse it high + } + else { + // finished all channels so wait for the refresh period to expire before starting over + if( (unsigned)*TCNTn < (((unsigned int)REFRESH_INTERVAL * TICKS_PER_uS) + 4) ) // allow a few ticks to ensure the next OCR1A not missed + *OCRnA = (unsigned int)REFRESH_INTERVAL * TICKS_PER_uS; + else + *OCRnA = *TCNTn + 4; // at least REFRESH_INTERVAL has elapsed + Channel[timer] = -1; // this will get incremented at the end of the refresh period to start again at the first channel + } +} + +SIGNAL (TIMER1_COMPA_vect) +{ + handle_interrupts(_timer1, &TCNT1, &OCR1A); +} + +#if defined(__AVR_ATmega1280__) +SIGNAL (TIMER3_COMPA_vect) +{ + handle_interrupts(_timer3, &TCNT3, &OCR3A); +} +SIGNAL (TIMER4_COMPA_vect) +{ + handle_interrupts(_timer4, &TCNT4, &OCR4A); +} +SIGNAL (TIMER5_COMPA_vect) +{ + handle_interrupts(_timer5, &TCNT5, &OCR5A); +} +#endif + +static void initISR(servoTimer_t timer) +{ + if(timer == _timer1) { + TCCR1A = 0; // normal counting mode + TCCR1B = _BV(CS11); // set prescaler of 8 + TCNT1 = 0; // clear the timer count +#if defined(__AVR_ATmega8__) + TIFR |= _BV(OCF1A); // clear any pending interrupts; + TIMSK |= _BV(OCIE1A) ; // enable the output compare interrupt +#else + TIFR1 |= _BV(OCF1A); // clear any pending interrupts; + TIMSK1 |= _BV(OCIE1A) ; // enable the output compare interrupt +#endif + } +#if defined(__AVR_ATmega1280__) + else if(timer == _timer3) { + TCCR3A = 0; // normal counting mode + TCCR3B = _BV(CS31); // set prescaler of 8 + TCNT3 = 0; // clear the timer count + TIFR3 = _BV(OCF3A); // clear any pending interrupts; + TIMSK3 = _BV(OCIE3A) ; // enable the output compare interrupt + } + else if(timer == _timer4) { + TCCR4A = 0; // normal counting mode + TCCR4B = _BV(CS41); // set prescaler of 8 + TCNT4 = 0; // clear the timer count + TIFR4 = _BV(OCF4A); // clear any pending interrupts; + TIMSK4 = _BV(OCIE4A) ; // enable the output compare interrupt + } + else if(timer == _timer5) { + TCCR5A = 0; // normal counting mode + TCCR5B = _BV(CS51); // set prescaler of 8 + TCNT5 = 0; // clear the timer count + TIFR5 = _BV(OCF5A); // clear any pending interrupts; + TIMSK5 = _BV(OCIE5A) ; // enable the output compare interrupt + } +#endif +} + +static boolean isTimerActive(servoTimer_t timer) +{ + // returns true if any servo is active on this timer + for(uint8_t channel=0; channel < SERVOS_PER_TIMER; channel++) { + if(SERVO(timer,channel).Pin.isActive == true) + return true; + } + return false; +} + + +/****************** end of static functions ******************************/ + +Servo::Servo() +{ + if( ServoCount < MAX_SERVOS) { + this->servoIndex = ServoCount++; // assign a servo index to this instance + servos[this->servoIndex].ticks = DEFAULT_PULSE_WIDTH * TICKS_PER_uS; // store default values + } + else + this->servoIndex = INVALID_SERVO ; // too many servos +} + +uint8_t Servo::attach(int pin) +{ + return this->attach(pin, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); +} + +uint8_t Servo::attach(int pin, int min, int max) +{ + if(this->servoIndex < MAX_SERVOS ) { + pinMode( pin, OUTPUT) ; // set servo pin to output + servos[this->servoIndex].Pin.nbr = pin; + // todo min/max check: abs(min - MIN_PULSE_WIDTH) /4 < 128 + this->min = (MIN_PULSE_WIDTH - min)/4; //resolution of min/max is 4 uS + this->max = (MAX_PULSE_WIDTH - max)/4; + // initialize the timer if it has not already been initialized + servoTimer_t timer = SERVO_INDEX_TO_TIMER(servoIndex); + if(isTimerActive(timer) == false) + initISR(timer); + servos[this->servoIndex].Pin.isActive = true; // this must be set after the check for isTimerActive + } + return this->servoIndex ; +} + +void Servo::detach() +{ + servos[this->servoIndex].Pin.isActive = false; + +#ifdef FREE_TIMERS + if(isTimerActive(SERVO_INDEX_TO_TIMER(servoIndex)) == false) { + ;// call to unimplimented function in wiring.c to re-init timer (set timer back to PWM mode) TODO? + } +#endif +} + +void Servo::write(int value) +{ + if(value < MIN_PULSE_WIDTH) + { // treat values less than 544 as angles in degrees (valid values in microseconds are handled as microseconds) + if(value < 0) value = 0; + if(value > 180) value = 180; + value = map(value, 0, 180, SERVO_MIN(), SERVO_MAX()); + } + this->writeMicroseconds(value); +} + +void Servo::writeMicroseconds(int value) +{ + // calculate and store the values for the given channel + byte channel = this->servoIndex; + if( (channel >= 0) && (channel < MAX_SERVOS) ) // ensure channel is valid + { + if( value < SERVO_MIN() ) // ensure pulse width is valid + value = SERVO_MIN(); + else if( value > SERVO_MAX() ) + value = SERVO_MAX(); + + value = (value-TRIM_DURATION) * TICKS_PER_uS; // convert to ticks after compensating for interrupt overhead + uint8_t oldSREG = SREG; + cli(); + servos[channel].ticks = value; + SREG = oldSREG; + } +} + +int Servo::read() // return the value as degrees +{ + return map( this->readMicroseconds()+1, SERVO_MIN(), SERVO_MAX(), 0, 180); +} + +int Servo::readMicroseconds() +{ + unsigned int pulsewidth; + if( this->servoIndex != INVALID_SERVO ) + pulsewidth = (servos[this->servoIndex].ticks / TICKS_PER_uS) + TRIM_DURATION ; + else + pulsewidth = 0; + + return pulsewidth; +} + +bool Servo::attached() +{ + return servos[this->servoIndex].Pin.isActive ; +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Servo/Servo.h b/arduino-0017-linux-x64/hardware/libraries/Servo/Servo.h new file mode 100755 index 0000000..9a25c65 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Servo/Servo.h @@ -0,0 +1,92 @@ +/* + Servo.h - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2 + Copyright (c) 2009 Michael Margolis. 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 +*/ + +/* + + A servo is activated by creating an instance of the Servo class passing the desired pin to the attach() method. + The servos are pulsed in the background using the value most recently written using the write() method + + Note that analogWrite of PWM on pins associated with the timer are disabled when the first servo is attached. + Timers are siezed as needed in groups of 12 servos - 24 servos use two timers, 48 servos will use four. + + The methods are: + + Servo - Class for manipulating servo motors connected to Arduino pins. + + attach(pin ) - Attaches a servo motor to an i/o pin. + attach(pin, min, max ) - Attaches to a pin setting min and max values in microseconds + default min is 544, max is 2400 + + write() - Sets the servo angle in degrees. (invalid angle that is valid as pulse in microseconds is treated as microseconds) + writeMicroseconds() - Sets the servo pulse width in microseconds + read() - Gets the last written servo pulse width as an angle between 0 and 180. + readMicroseconds() - Gets the last written servo pulse width in microseconds. (was read_us() in first release) + attached() - Returns true if there is a servo attached. + detach() - Stops an attached servos from pulsing its i/o pin. + */ + +#ifndef Servo_h +#define Servo_h + +#include + +#define Servo_VERSION 2 // software version of this library + +#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo +#define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo +#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached +#define REFRESH_INTERVAL 20000 // minumim time to refresh servos in microseconds + +#if defined(__AVR_ATmega1280__) +#define MAX_SERVOS 48 // the maximum number of servos (valid range is from 1 to 48) +#else +#define MAX_SERVOS 12 // this library supports up to 12 on a standard Arduino +#endif + +#define INVALID_SERVO 255 // flag indicating an invalid servo index + +typedef struct { + uint8_t nbr :6 ; // a pin number from 0 to 63 + uint8_t isActive :1 ; // true if this channel is enabled, pin not pulsed if false +} ServoPin_t ; + +typedef struct { + ServoPin_t Pin; + unsigned int ticks; +} servo_t; + +class Servo +{ +public: + Servo(); + uint8_t attach(int pin); // attach the given pin to the next free channel, sets pinMode, returns channel number or 0 if failure + uint8_t attach(int pin, int min, int max); // as above but also sets min and max values for writes. + void detach(); + void write(int value); // if value is < 200 its treated as an angle, otherwise as pulse width in microseconds + void writeMicroseconds(int value); // Write pulse width in microseconds + int read(); // returns current pulse width as an angle between 0 and 180 degrees + int readMicroseconds(); // returns current pulse width in microseconds for this servo (was read_us() in first release) + bool attached(); // return true if this servo is attached, otherwise false +private: + uint8_t servoIndex; // index into the channel data for this servo + int8_t min; // minimum is this value times 4 added to MIN_PULSE_WIDTH + int8_t max; // maximum is this value times 4 added to MAX_PULSE_WIDTH +}; + +#endif \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/libraries/Servo/examples/Knob/Knob.pde b/arduino-0017-linux-x64/hardware/libraries/Servo/examples/Knob/Knob.pde new file mode 100644 index 0000000..886e107 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Servo/examples/Knob/Knob.pde @@ -0,0 +1,22 @@ +// Controlling a servo position using a potentiometer (variable resistor) +// by Michal Rinott + +#include + +Servo myservo; // create servo object to control a servo + +int potpin = 0; // analog pin used to connect the potentiometer +int val; // variable to read the value from the analog pin + +void setup() +{ + myservo.attach(9); // attaches the servo on pin 9 to the servo object +} + +void loop() +{ + val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) + val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) + myservo.write(val); // sets the servo position according to the scaled value + delay(15); // waits for the servo to get there +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Servo/examples/Sweep/Sweep.pde b/arduino-0017-linux-x64/hardware/libraries/Servo/examples/Sweep/Sweep.pde new file mode 100644 index 0000000..52e6056 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Servo/examples/Sweep/Sweep.pde @@ -0,0 +1,29 @@ +// Sweep +// by BARRAGAN + +#include + +Servo myservo; // create servo object to control a servo + // a maximum of eight servo objects can be created + +int pos = 0; // variable to store the servo position + +void setup() +{ + myservo.attach(9); // attaches the servo on pin 9 to the servo object +} + + +void loop() +{ + for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees + { // in steps of 1 degree + myservo.write(pos); // tell servo to go to position in variable 'pos' + delay(15); // waits 15ms for the servo to reach the position + } + for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees + { + myservo.write(pos); // tell servo to go to position in variable 'pos' + delay(15); // waits 15ms for the servo to reach the position + } +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Servo/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/Servo/keywords.txt new file mode 100755 index 0000000..ca5ba79 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Servo/keywords.txt @@ -0,0 +1,24 @@ +####################################### +# Syntax Coloring Map Servo +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +Servo KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +attach KEYWORD2 +detach KEYWORD2 +write KEYWORD2 +read KEYWORD2 +attached KEYWORD2 +writeMicroseconds KEYWORD2 +readMicroseconds KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.cpp b/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.cpp new file mode 100755 index 0000000..6df04d2 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.cpp @@ -0,0 +1,227 @@ +/* + SoftwareSerial.cpp - Software serial library + Copyright (c) 2006 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 +*/ + +/****************************************************************************** + * Includes + ******************************************************************************/ + +#include "WConstants.h" +#include "SoftwareSerial.h" + +/****************************************************************************** + * Definitions + ******************************************************************************/ + +/****************************************************************************** + * Constructors + ******************************************************************************/ + +SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin) +{ + _receivePin = receivePin; + _transmitPin = transmitPin; + _baudRate = 0; +} + +/****************************************************************************** + * User API + ******************************************************************************/ + +void SoftwareSerial::begin(long speed) +{ + _baudRate = speed; + _bitPeriod = 1000000 / _baudRate; + + digitalWrite(_transmitPin, HIGH); + delayMicroseconds( _bitPeriod); // if we were low this establishes the end +} + +int SoftwareSerial::read() +{ + int val = 0; + int bitDelay = _bitPeriod - clockCyclesToMicroseconds(50); + + // one byte of serial data (LSB first) + // ...--\ /--\/--\/--\/--\/--\/--\/--\/--\/--... + // \--/\--/\--/\--/\--/\--/\--/\--/\--/ + // start 0 1 2 3 4 5 6 7 stop + + while (digitalRead(_receivePin)); + + // confirm that this is a real start bit, not line noise + if (digitalRead(_receivePin) == LOW) { + // frame start indicated by a falling edge and low start bit + // jump to the middle of the low start bit + delayMicroseconds(bitDelay / 2 - clockCyclesToMicroseconds(50)); + + // offset of the bit in the byte: from 0 (LSB) to 7 (MSB) + for (int offset = 0; offset < 8; offset++) { + // jump to middle of next bit + delayMicroseconds(bitDelay); + + // read bit + val |= digitalRead(_receivePin) << offset; + } + + delayMicroseconds(_bitPeriod); + + return val; + } + + return -1; +} + +void SoftwareSerial::print(uint8_t b) +{ + if (_baudRate == 0) + return; + + int bitDelay = _bitPeriod - clockCyclesToMicroseconds(50); // a digitalWrite is about 50 cycles + byte mask; + + digitalWrite(_transmitPin, LOW); + delayMicroseconds(bitDelay); + + for (mask = 0x01; mask; mask <<= 1) { + if (b & mask){ // choose bit + digitalWrite(_transmitPin,HIGH); // send 1 + } + else{ + digitalWrite(_transmitPin,LOW); // send 1 + } + delayMicroseconds(bitDelay); + } + + digitalWrite(_transmitPin, HIGH); + delayMicroseconds(bitDelay); +} + +void SoftwareSerial::print(const char *s) +{ + while (*s) + print(*s++); +} + +void SoftwareSerial::print(char c) +{ + print((uint8_t) c); +} + +void SoftwareSerial::print(int n) +{ + print((long) n); +} + +void SoftwareSerial::print(unsigned int n) +{ + print((unsigned long) n); +} + +void SoftwareSerial::print(long n) +{ + if (n < 0) { + print('-'); + n = -n; + } + printNumber(n, 10); +} + +void SoftwareSerial::print(unsigned long n) +{ + printNumber(n, 10); +} + +void SoftwareSerial::print(long n, int base) +{ + if (base == 0) + print((char) n); + else if (base == 10) + print(n); + else + printNumber(n, base); +} + +void SoftwareSerial::println(void) +{ + print('\r'); + print('\n'); +} + +void SoftwareSerial::println(char c) +{ + print(c); + println(); +} + +void SoftwareSerial::println(const char c[]) +{ + print(c); + println(); +} + +void SoftwareSerial::println(uint8_t b) +{ + print(b); + println(); +} + +void SoftwareSerial::println(int n) +{ + print(n); + println(); +} + +void SoftwareSerial::println(long n) +{ + print(n); + println(); +} + +void SoftwareSerial::println(unsigned long n) +{ + print(n); + println(); +} + +void SoftwareSerial::println(long n, int base) +{ + print(n, base); + println(); +} + +// Private Methods ///////////////////////////////////////////////////////////// + +void SoftwareSerial::printNumber(unsigned long n, uint8_t base) +{ + unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. + unsigned long i = 0; + + if (n == 0) { + print('0'); + return; + } + + while (n > 0) { + buf[i++] = n % base; + n /= base; + } + + for (; i > 0; i--) + print((char) (buf[i - 1] < 10 ? '0' + buf[i - 1] : 'A' + buf[i - 1] - 10)); +} diff --git a/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.h b/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.h new file mode 100755 index 0000000..95753fc --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/SoftwareSerial.h @@ -0,0 +1,56 @@ +/* + SoftwareSerial.h - Software serial library + Copyright (c) 2006 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 SoftwareSerial_h +#define SoftwareSerial_h + +#include + +class SoftwareSerial +{ + private: + uint8_t _receivePin; + uint8_t _transmitPin; + long _baudRate; + int _bitPeriod; + void printNumber(unsigned long, uint8_t); + public: + SoftwareSerial(uint8_t, uint8_t); + void begin(long); + int read(); + void print(char); + void print(const char[]); + void print(uint8_t); + void print(int); + void print(unsigned int); + void print(long); + void print(unsigned long); + void print(long, int); + void println(void); + void println(char); + void println(const char[]); + void println(uint8_t); + void println(int); + void println(long); + void println(unsigned long); + void println(long, int); +}; + +#endif + diff --git a/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/keywords.txt new file mode 100644 index 0000000..de5a74c --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/SoftwareSerial/keywords.txt @@ -0,0 +1,18 @@ +####################################### +# Syntax Coloring Map For Ultrasound +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +SoftwareSerial KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.cpp b/arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.cpp new file mode 100644 index 0000000..6055876 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.cpp @@ -0,0 +1,95 @@ +/* + Sprite.cpp - 2D sprite buffer library for Arduino & Wiring + Copyright (c) 2006 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 +*/ + +#include +#include +//#include + +#include "Sprite.h" + +void Sprite::init(uint8_t width, uint8_t height) +{ + _width = width >= 8 ? 8 : width; + _height = height >= 8 ? 8 : height; + + // for now, do nothing if this allocation fails. methods that require it + // should silently fail if _buffer is null. + _buffer = (uint8_t *) calloc(_height, 1); +} + +Sprite::Sprite(uint8_t width, uint8_t height) +{ + init(width, height); +} + +Sprite::Sprite(uint8_t width, uint8_t height, uint8_t row, ...) +{ + init(width, height); + + if (!_buffer) return; + + va_list ap; + va_start(ap, row); + + int y = 0; + + for (y = 0; ; y++) { + for (int x = 0; x < width && x < 8; x++) + write(x, y, (row >> (width - x - 1)) & 0x01); + + if (y == height - 1) + break; + + row = va_arg(ap, int); // using '...' promotes uint8_t to int + } + + va_end(ap); +} + +uint8_t Sprite::width() const +{ + return _width; +} + +uint8_t Sprite::height() const +{ + return _height; +} + +void Sprite::write(uint8_t x, uint8_t y, uint8_t value) +{ + if (!_buffer) return; + + // uint8_t's can't be negative, so don't test for negative x and y. + if (x >= _width || y >= _height) return; + + // we need to bitwise-or the value of the other pixels in the byte with + // the new value, masked and shifted into the proper bits. + _buffer[y] = (_buffer[y] & ~(0x01 << x)) | ((value & 0x01) << x); +} + +uint8_t Sprite::read(uint8_t x, uint8_t y) const +{ + if (!_buffer) return 0; + + // uint8_t's can't be negative, so don't test for negative x and y. + if (x >= _width || y >= _height) return 0; + + return (_buffer[y] >> x) & 0x01; +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.h b/arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.h new file mode 100644 index 0000000..bdcfdb8 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Sprite/Sprite.h @@ -0,0 +1,48 @@ +/* + Sprite.cpp - 2D sprite buffers library for Arduino & Wiring + Copyright (c) 2006 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 Sprite_h +#define Sprite_h + +#include + +#include "binary.h" + +class Sprite +{ + private: + uint8_t _width; + uint8_t _height; + uint8_t _depth; + uint8_t _ppb; + uint8_t _bpr; + uint8_t _mask; + uint8_t *_buffer; + + void init(uint8_t width, uint8_t height); + public: + Sprite(uint8_t width, uint8_t height); + Sprite(uint8_t width, uint8_t height, uint8_t row, ...); + uint8_t width() const; + uint8_t height() const; + void write(uint8_t x, uint8_t y, uint8_t value); + uint8_t read(uint8_t x, uint8_t y) const; +}; + +#endif diff --git a/arduino-0017-linux-x64/hardware/libraries/Sprite/binary.h b/arduino-0017-linux-x64/hardware/libraries/Sprite/binary.h new file mode 100644 index 0000000..af14980 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Sprite/binary.h @@ -0,0 +1,515 @@ +#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 diff --git a/arduino-0017-linux-x64/hardware/libraries/Sprite/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/Sprite/keywords.txt new file mode 100644 index 0000000..73cd8d9 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Sprite/keywords.txt @@ -0,0 +1,534 @@ +####################################### +# Syntax Coloring Map For Sprite +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +Sprite KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +width KEYWORD2 +height KEYWORD2 +write KEYWORD2 +read KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + +B0 LITERAL1 +B00 LITERAL1 +B000 LITERAL1 +B0000 LITERAL1 +B00000 LITERAL1 +B000000 LITERAL1 +B0000000 LITERAL1 +B00000000 LITERAL1 +B1 LITERAL1 +B01 LITERAL1 +B001 LITERAL1 +B0001 LITERAL1 +B00001 LITERAL1 +B000001 LITERAL1 +B0000001 LITERAL1 +B00000001 LITERAL1 +B10 LITERAL1 +B010 LITERAL1 +B0010 LITERAL1 +B00010 LITERAL1 +B000010 LITERAL1 +B0000010 LITERAL1 +B00000010 LITERAL1 +B11 LITERAL1 +B011 LITERAL1 +B0011 LITERAL1 +B00011 LITERAL1 +B000011 LITERAL1 +B0000011 LITERAL1 +B00000011 LITERAL1 +B100 LITERAL1 +B0100 LITERAL1 +B00100 LITERAL1 +B000100 LITERAL1 +B0000100 LITERAL1 +B00000100 LITERAL1 +B101 LITERAL1 +B0101 LITERAL1 +B00101 LITERAL1 +B000101 LITERAL1 +B0000101 LITERAL1 +B00000101 LITERAL1 +B110 LITERAL1 +B0110 LITERAL1 +B00110 LITERAL1 +B000110 LITERAL1 +B0000110 LITERAL1 +B00000110 LITERAL1 +B111 LITERAL1 +B0111 LITERAL1 +B00111 LITERAL1 +B000111 LITERAL1 +B0000111 LITERAL1 +B00000111 LITERAL1 +B1000 LITERAL1 +B01000 LITERAL1 +B001000 LITERAL1 +B0001000 LITERAL1 +B00001000 LITERAL1 +B1001 LITERAL1 +B01001 LITERAL1 +B001001 LITERAL1 +B0001001 LITERAL1 +B00001001 LITERAL1 +B1010 LITERAL1 +B01010 LITERAL1 +B001010 LITERAL1 +B0001010 LITERAL1 +B00001010 LITERAL1 +B1011 LITERAL1 +B01011 LITERAL1 +B001011 LITERAL1 +B0001011 LITERAL1 +B00001011 LITERAL1 +B1100 LITERAL1 +B01100 LITERAL1 +B001100 LITERAL1 +B0001100 LITERAL1 +B00001100 LITERAL1 +B1101 LITERAL1 +B01101 LITERAL1 +B001101 LITERAL1 +B0001101 LITERAL1 +B00001101 LITERAL1 +B1110 LITERAL1 +B01110 LITERAL1 +B001110 LITERAL1 +B0001110 LITERAL1 +B00001110 LITERAL1 +B1111 LITERAL1 +B01111 LITERAL1 +B001111 LITERAL1 +B0001111 LITERAL1 +B00001111 LITERAL1 +B10000 LITERAL1 +B010000 LITERAL1 +B0010000 LITERAL1 +B00010000 LITERAL1 +B10001 LITERAL1 +B010001 LITERAL1 +B0010001 LITERAL1 +B00010001 LITERAL1 +B10010 LITERAL1 +B010010 LITERAL1 +B0010010 LITERAL1 +B00010010 LITERAL1 +B10011 LITERAL1 +B010011 LITERAL1 +B0010011 LITERAL1 +B00010011 LITERAL1 +B10100 LITERAL1 +B010100 LITERAL1 +B0010100 LITERAL1 +B00010100 LITERAL1 +B10101 LITERAL1 +B010101 LITERAL1 +B0010101 LITERAL1 +B00010101 LITERAL1 +B10110 LITERAL1 +B010110 LITERAL1 +B0010110 LITERAL1 +B00010110 LITERAL1 +B10111 LITERAL1 +B010111 LITERAL1 +B0010111 LITERAL1 +B00010111 LITERAL1 +B11000 LITERAL1 +B011000 LITERAL1 +B0011000 LITERAL1 +B00011000 LITERAL1 +B11001 LITERAL1 +B011001 LITERAL1 +B0011001 LITERAL1 +B00011001 LITERAL1 +B11010 LITERAL1 +B011010 LITERAL1 +B0011010 LITERAL1 +B00011010 LITERAL1 +B11011 LITERAL1 +B011011 LITERAL1 +B0011011 LITERAL1 +B00011011 LITERAL1 +B11100 LITERAL1 +B011100 LITERAL1 +B0011100 LITERAL1 +B00011100 LITERAL1 +B11101 LITERAL1 +B011101 LITERAL1 +B0011101 LITERAL1 +B00011101 LITERAL1 +B11110 LITERAL1 +B011110 LITERAL1 +B0011110 LITERAL1 +B00011110 LITERAL1 +B11111 LITERAL1 +B011111 LITERAL1 +B0011111 LITERAL1 +B00011111 LITERAL1 +B100000 LITERAL1 +B0100000 LITERAL1 +B00100000 LITERAL1 +B100001 LITERAL1 +B0100001 LITERAL1 +B00100001 LITERAL1 +B100010 LITERAL1 +B0100010 LITERAL1 +B00100010 LITERAL1 +B100011 LITERAL1 +B0100011 LITERAL1 +B00100011 LITERAL1 +B100100 LITERAL1 +B0100100 LITERAL1 +B00100100 LITERAL1 +B100101 LITERAL1 +B0100101 LITERAL1 +B00100101 LITERAL1 +B100110 LITERAL1 +B0100110 LITERAL1 +B00100110 LITERAL1 +B100111 LITERAL1 +B0100111 LITERAL1 +B00100111 LITERAL1 +B101000 LITERAL1 +B0101000 LITERAL1 +B00101000 LITERAL1 +B101001 LITERAL1 +B0101001 LITERAL1 +B00101001 LITERAL1 +B101010 LITERAL1 +B0101010 LITERAL1 +B00101010 LITERAL1 +B101011 LITERAL1 +B0101011 LITERAL1 +B00101011 LITERAL1 +B101100 LITERAL1 +B0101100 LITERAL1 +B00101100 LITERAL1 +B101101 LITERAL1 +B0101101 LITERAL1 +B00101101 LITERAL1 +B101110 LITERAL1 +B0101110 LITERAL1 +B00101110 LITERAL1 +B101111 LITERAL1 +B0101111 LITERAL1 +B00101111 LITERAL1 +B110000 LITERAL1 +B0110000 LITERAL1 +B00110000 LITERAL1 +B110001 LITERAL1 +B0110001 LITERAL1 +B00110001 LITERAL1 +B110010 LITERAL1 +B0110010 LITERAL1 +B00110010 LITERAL1 +B110011 LITERAL1 +B0110011 LITERAL1 +B00110011 LITERAL1 +B110100 LITERAL1 +B0110100 LITERAL1 +B00110100 LITERAL1 +B110101 LITERAL1 +B0110101 LITERAL1 +B00110101 LITERAL1 +B110110 LITERAL1 +B0110110 LITERAL1 +B00110110 LITERAL1 +B110111 LITERAL1 +B0110111 LITERAL1 +B00110111 LITERAL1 +B111000 LITERAL1 +B0111000 LITERAL1 +B00111000 LITERAL1 +B111001 LITERAL1 +B0111001 LITERAL1 +B00111001 LITERAL1 +B111010 LITERAL1 +B0111010 LITERAL1 +B00111010 LITERAL1 +B111011 LITERAL1 +B0111011 LITERAL1 +B00111011 LITERAL1 +B111100 LITERAL1 +B0111100 LITERAL1 +B00111100 LITERAL1 +B111101 LITERAL1 +B0111101 LITERAL1 +B00111101 LITERAL1 +B111110 LITERAL1 +B0111110 LITERAL1 +B00111110 LITERAL1 +B111111 LITERAL1 +B0111111 LITERAL1 +B00111111 LITERAL1 +B1000000 LITERAL1 +B01000000 LITERAL1 +B1000001 LITERAL1 +B01000001 LITERAL1 +B1000010 LITERAL1 +B01000010 LITERAL1 +B1000011 LITERAL1 +B01000011 LITERAL1 +B1000100 LITERAL1 +B01000100 LITERAL1 +B1000101 LITERAL1 +B01000101 LITERAL1 +B1000110 LITERAL1 +B01000110 LITERAL1 +B1000111 LITERAL1 +B01000111 LITERAL1 +B1001000 LITERAL1 +B01001000 LITERAL1 +B1001001 LITERAL1 +B01001001 LITERAL1 +B1001010 LITERAL1 +B01001010 LITERAL1 +B1001011 LITERAL1 +B01001011 LITERAL1 +B1001100 LITERAL1 +B01001100 LITERAL1 +B1001101 LITERAL1 +B01001101 LITERAL1 +B1001110 LITERAL1 +B01001110 LITERAL1 +B1001111 LITERAL1 +B01001111 LITERAL1 +B1010000 LITERAL1 +B01010000 LITERAL1 +B1010001 LITERAL1 +B01010001 LITERAL1 +B1010010 LITERAL1 +B01010010 LITERAL1 +B1010011 LITERAL1 +B01010011 LITERAL1 +B1010100 LITERAL1 +B01010100 LITERAL1 +B1010101 LITERAL1 +B01010101 LITERAL1 +B1010110 LITERAL1 +B01010110 LITERAL1 +B1010111 LITERAL1 +B01010111 LITERAL1 +B1011000 LITERAL1 +B01011000 LITERAL1 +B1011001 LITERAL1 +B01011001 LITERAL1 +B1011010 LITERAL1 +B01011010 LITERAL1 +B1011011 LITERAL1 +B01011011 LITERAL1 +B1011100 LITERAL1 +B01011100 LITERAL1 +B1011101 LITERAL1 +B01011101 LITERAL1 +B1011110 LITERAL1 +B01011110 LITERAL1 +B1011111 LITERAL1 +B01011111 LITERAL1 +B1100000 LITERAL1 +B01100000 LITERAL1 +B1100001 LITERAL1 +B01100001 LITERAL1 +B1100010 LITERAL1 +B01100010 LITERAL1 +B1100011 LITERAL1 +B01100011 LITERAL1 +B1100100 LITERAL1 +B01100100 LITERAL1 +B1100101 LITERAL1 +B01100101 LITERAL1 +B1100110 LITERAL1 +B01100110 LITERAL1 +B1100111 LITERAL1 +B01100111 LITERAL1 +B1101000 LITERAL1 +B01101000 LITERAL1 +B1101001 LITERAL1 +B01101001 LITERAL1 +B1101010 LITERAL1 +B01101010 LITERAL1 +B1101011 LITERAL1 +B01101011 LITERAL1 +B1101100 LITERAL1 +B01101100 LITERAL1 +B1101101 LITERAL1 +B01101101 LITERAL1 +B1101110 LITERAL1 +B01101110 LITERAL1 +B1101111 LITERAL1 +B01101111 LITERAL1 +B1110000 LITERAL1 +B01110000 LITERAL1 +B1110001 LITERAL1 +B01110001 LITERAL1 +B1110010 LITERAL1 +B01110010 LITERAL1 +B1110011 LITERAL1 +B01110011 LITERAL1 +B1110100 LITERAL1 +B01110100 LITERAL1 +B1110101 LITERAL1 +B01110101 LITERAL1 +B1110110 LITERAL1 +B01110110 LITERAL1 +B1110111 LITERAL1 +B01110111 LITERAL1 +B1111000 LITERAL1 +B01111000 LITERAL1 +B1111001 LITERAL1 +B01111001 LITERAL1 +B1111010 LITERAL1 +B01111010 LITERAL1 +B1111011 LITERAL1 +B01111011 LITERAL1 +B1111100 LITERAL1 +B01111100 LITERAL1 +B1111101 LITERAL1 +B01111101 LITERAL1 +B1111110 LITERAL1 +B01111110 LITERAL1 +B1111111 LITERAL1 +B01111111 LITERAL1 +B10000000 LITERAL1 +B10000001 LITERAL1 +B10000010 LITERAL1 +B10000011 LITERAL1 +B10000100 LITERAL1 +B10000101 LITERAL1 +B10000110 LITERAL1 +B10000111 LITERAL1 +B10001000 LITERAL1 +B10001001 LITERAL1 +B10001010 LITERAL1 +B10001011 LITERAL1 +B10001100 LITERAL1 +B10001101 LITERAL1 +B10001110 LITERAL1 +B10001111 LITERAL1 +B10010000 LITERAL1 +B10010001 LITERAL1 +B10010010 LITERAL1 +B10010011 LITERAL1 +B10010100 LITERAL1 +B10010101 LITERAL1 +B10010110 LITERAL1 +B10010111 LITERAL1 +B10011000 LITERAL1 +B10011001 LITERAL1 +B10011010 LITERAL1 +B10011011 LITERAL1 +B10011100 LITERAL1 +B10011101 LITERAL1 +B10011110 LITERAL1 +B10011111 LITERAL1 +B10100000 LITERAL1 +B10100001 LITERAL1 +B10100010 LITERAL1 +B10100011 LITERAL1 +B10100100 LITERAL1 +B10100101 LITERAL1 +B10100110 LITERAL1 +B10100111 LITERAL1 +B10101000 LITERAL1 +B10101001 LITERAL1 +B10101010 LITERAL1 +B10101011 LITERAL1 +B10101100 LITERAL1 +B10101101 LITERAL1 +B10101110 LITERAL1 +B10101111 LITERAL1 +B10110000 LITERAL1 +B10110001 LITERAL1 +B10110010 LITERAL1 +B10110011 LITERAL1 +B10110100 LITERAL1 +B10110101 LITERAL1 +B10110110 LITERAL1 +B10110111 LITERAL1 +B10111000 LITERAL1 +B10111001 LITERAL1 +B10111010 LITERAL1 +B10111011 LITERAL1 +B10111100 LITERAL1 +B10111101 LITERAL1 +B10111110 LITERAL1 +B10111111 LITERAL1 +B11000000 LITERAL1 +B11000001 LITERAL1 +B11000010 LITERAL1 +B11000011 LITERAL1 +B11000100 LITERAL1 +B11000101 LITERAL1 +B11000110 LITERAL1 +B11000111 LITERAL1 +B11001000 LITERAL1 +B11001001 LITERAL1 +B11001010 LITERAL1 +B11001011 LITERAL1 +B11001100 LITERAL1 +B11001101 LITERAL1 +B11001110 LITERAL1 +B11001111 LITERAL1 +B11010000 LITERAL1 +B11010001 LITERAL1 +B11010010 LITERAL1 +B11010011 LITERAL1 +B11010100 LITERAL1 +B11010101 LITERAL1 +B11010110 LITERAL1 +B11010111 LITERAL1 +B11011000 LITERAL1 +B11011001 LITERAL1 +B11011010 LITERAL1 +B11011011 LITERAL1 +B11011100 LITERAL1 +B11011101 LITERAL1 +B11011110 LITERAL1 +B11011111 LITERAL1 +B11100000 LITERAL1 +B11100001 LITERAL1 +B11100010 LITERAL1 +B11100011 LITERAL1 +B11100100 LITERAL1 +B11100101 LITERAL1 +B11100110 LITERAL1 +B11100111 LITERAL1 +B11101000 LITERAL1 +B11101001 LITERAL1 +B11101010 LITERAL1 +B11101011 LITERAL1 +B11101100 LITERAL1 +B11101101 LITERAL1 +B11101110 LITERAL1 +B11101111 LITERAL1 +B11110000 LITERAL1 +B11110001 LITERAL1 +B11110010 LITERAL1 +B11110011 LITERAL1 +B11110100 LITERAL1 +B11110101 LITERAL1 +B11110110 LITERAL1 +B11110111 LITERAL1 +B11111000 LITERAL1 +B11111001 LITERAL1 +B11111010 LITERAL1 +B11111011 LITERAL1 +B11111100 LITERAL1 +B11111101 LITERAL1 +B11111110 LITERAL1 +B11111111 LITERAL1 + diff --git a/arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.cpp b/arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.cpp new file mode 100644 index 0000000..d5c16a3 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.cpp @@ -0,0 +1,220 @@ +/* + Stepper.cpp - - Stepper library for Wiring/Arduino - Version 0.4 + + Original library (0.1) by Tom Igoe. + Two-wire modifications (0.2) by Sebastian Gassner + Combination version (0.3) by Tom Igoe and David Mellis + Bug fix for four-wire (0.4) by Tom Igoe, bug fix from Noah Shibley + + Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires + + When wiring multiple stepper motors to a microcontroller, + you quickly run out of output pins, with each motor requiring 4 connections. + + By making use of the fact that at any time two of the four motor + coils are the inverse of the other two, the number of + control connections can be reduced from 4 to 2. + + A slightly modified circuit around a Darlington transistor array or an L293 H-bridge + connects to only 2 microcontroler pins, inverts the signals received, + and delivers the 4 (2 plus 2 inverted ones) output signals required + for driving a stepper motor. + + The sequence of control signals for 4 control wires is as follows: + + Step C0 C1 C2 C3 + 1 1 0 1 0 + 2 0 1 1 0 + 3 0 1 0 1 + 4 1 0 0 1 + + The sequence of controls signals for 2 control wires is as follows + (columns C1 and C2 from above): + + Step C0 C1 + 1 0 1 + 2 1 1 + 3 1 0 + 4 0 0 + + The circuits can be found at + +http://www.arduino.cc/en/Tutorial/Stepper + + + */ + + +#include "WProgram.h" +#include "Stepper.h" + +/* + * two-wire constructor. + * Sets which wires should control the motor. + */ +Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2) +{ + this->step_number = 0; // which step the motor is on + this->speed = 0; // the motor speed, in revolutions per minute + this->direction = 0; // motor direction + this->last_step_time = 0; // time stamp in ms of the last step taken + this->number_of_steps = number_of_steps; // total number of steps for this motor + + // Arduino pins for the motor control connection: + this->motor_pin_1 = motor_pin_1; + this->motor_pin_2 = motor_pin_2; + + // setup the pins on the microcontroller: + pinMode(this->motor_pin_1, OUTPUT); + pinMode(this->motor_pin_2, OUTPUT); + + // When there are only 2 pins, set the other two to 0: + this->motor_pin_3 = 0; + this->motor_pin_4 = 0; + + // pin_count is used by the stepMotor() method: + this->pin_count = 2; +} + + +/* + * constructor for four-pin version + * Sets which wires should control the motor. + */ + +Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4) +{ + this->step_number = 0; // which step the motor is on + this->speed = 0; // the motor speed, in revolutions per minute + this->direction = 0; // motor direction + this->last_step_time = 0; // time stamp in ms of the last step taken + this->number_of_steps = number_of_steps; // total number of steps for this motor + + // Arduino pins for the motor control connection: + this->motor_pin_1 = motor_pin_1; + this->motor_pin_2 = motor_pin_2; + this->motor_pin_3 = motor_pin_3; + this->motor_pin_4 = motor_pin_4; + + // setup the pins on the microcontroller: + pinMode(this->motor_pin_1, OUTPUT); + pinMode(this->motor_pin_2, OUTPUT); + pinMode(this->motor_pin_3, OUTPUT); + pinMode(this->motor_pin_4, OUTPUT); + + // pin_count is used by the stepMotor() method: + this->pin_count = 4; +} + +/* + Sets the speed in revs per minute + +*/ +void Stepper::setSpeed(long whatSpeed) +{ + this->step_delay = 60L * 1000L / this->number_of_steps / whatSpeed; +} + +/* + Moves the motor steps_to_move steps. If the number is negative, + the motor moves in the reverse direction. + */ +void Stepper::step(int steps_to_move) +{ + int steps_left = abs(steps_to_move); // how many steps to take + + // determine direction based on whether steps_to_mode is + or -: + if (steps_to_move > 0) {this->direction = 1;} + if (steps_to_move < 0) {this->direction = 0;} + + + // decrement the number of steps, moving one step each time: + while(steps_left > 0) { + // move only if the appropriate delay has passed: + if (millis() - this->last_step_time >= this->step_delay) { + // get the timeStamp of when you stepped: + this->last_step_time = millis(); + // increment or decrement the step number, + // depending on direction: + if (this->direction == 1) { + this->step_number++; + if (this->step_number == this->number_of_steps) { + this->step_number = 0; + } + } + else { + if (this->step_number == 0) { + this->step_number = this->number_of_steps; + } + this->step_number--; + } + // decrement the steps left: + steps_left--; + // step the motor to step number 0, 1, 2, or 3: + stepMotor(this->step_number % 4); + } + } +} + +/* + * Moves the motor forward or backwards. + */ +void Stepper::stepMotor(int thisStep) +{ + if (this->pin_count == 2) { + switch (thisStep) { + case 0: /* 01 */ + digitalWrite(motor_pin_1, LOW); + digitalWrite(motor_pin_2, HIGH); + break; + case 1: /* 11 */ + digitalWrite(motor_pin_1, HIGH); + digitalWrite(motor_pin_2, HIGH); + break; + case 2: /* 10 */ + digitalWrite(motor_pin_1, HIGH); + digitalWrite(motor_pin_2, LOW); + break; + case 3: /* 00 */ + digitalWrite(motor_pin_1, LOW); + digitalWrite(motor_pin_2, LOW); + break; + } + } + if (this->pin_count == 4) { + switch (thisStep) { + case 0: // 1010 + digitalWrite(motor_pin_1, HIGH); + digitalWrite(motor_pin_2, LOW); + digitalWrite(motor_pin_3, HIGH); + digitalWrite(motor_pin_4, LOW); + break; + case 1: // 0110 + digitalWrite(motor_pin_1, LOW); + digitalWrite(motor_pin_2, HIGH); + digitalWrite(motor_pin_3, HIGH); + digitalWrite(motor_pin_4, LOW); + break; + case 2: //0101 + digitalWrite(motor_pin_1, LOW); + digitalWrite(motor_pin_2, HIGH); + digitalWrite(motor_pin_3, LOW); + digitalWrite(motor_pin_4, HIGH); + break; + case 3: //1001 + digitalWrite(motor_pin_1, HIGH); + digitalWrite(motor_pin_2, LOW); + digitalWrite(motor_pin_3, LOW); + digitalWrite(motor_pin_4, HIGH); + break; + } + } +} + +/* + version() returns the version of the library: +*/ +int Stepper::version(void) +{ + return 4; +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.h b/arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.h new file mode 100644 index 0000000..4094aee --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Stepper/Stepper.h @@ -0,0 +1,83 @@ +/* + Stepper.h - - Stepper library for Wiring/Arduino - Version 0.4 + + Original library (0.1) by Tom Igoe. + Two-wire modifications (0.2) by Sebastian Gassner + Combination version (0.3) by Tom Igoe and David Mellis + Bug fix for four-wire (0.4) by Tom Igoe, bug fix from Noah Shibley + + Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires + + When wiring multiple stepper motors to a microcontroller, + you quickly run out of output pins, with each motor requiring 4 connections. + + By making use of the fact that at any time two of the four motor + coils are the inverse of the other two, the number of + control connections can be reduced from 4 to 2. + + A slightly modified circuit around a Darlington transistor array or an L293 H-bridge + connects to only 2 microcontroler pins, inverts the signals received, + and delivers the 4 (2 plus 2 inverted ones) output signals required + for driving a stepper motor. + + The sequence of control signals for 4 control wires is as follows: + + Step C0 C1 C2 C3 + 1 1 0 1 0 + 2 0 1 1 0 + 3 0 1 0 1 + 4 1 0 0 1 + + The sequence of controls signals for 2 control wires is as follows + (columns C1 and C2 from above): + + Step C0 C1 + 1 0 1 + 2 1 1 + 3 1 0 + 4 0 0 + + The circuits can be found at + http://www.arduino.cc/en/Tutorial/Stepper +*/ + +// ensure this library description is only included once +#ifndef Stepper_h +#define Stepper_h + +// library interface description +class Stepper { + public: + // constructors: + Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2); + Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4); + + // speed setter method: + void setSpeed(long whatSpeed); + + // mover method: + void step(int number_of_steps); + + int version(void); + + private: + void stepMotor(int this_step); + + int direction; // Direction of rotation + int speed; // Speed in RPMs + unsigned long step_delay; // delay between steps, in ms, based on speed + int number_of_steps; // total number of steps this motor can take + int pin_count; // whether you're driving the motor with 2 or 4 pins + int step_number; // which step the motor is on + + // motor pin numbers: + int motor_pin_1; + int motor_pin_2; + int motor_pin_3; + int motor_pin_4; + + long last_step_time; // time stamp in ms of when the last step was taken +}; + +#endif + diff --git a/arduino-0017-linux-x64/hardware/libraries/Stepper/examples/MotorKnob/MotorKnob.pde b/arduino-0017-linux-x64/hardware/libraries/Stepper/examples/MotorKnob/MotorKnob.pde new file mode 100644 index 0000000..062cac9 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Stepper/examples/MotorKnob/MotorKnob.pde @@ -0,0 +1,40 @@ +/* + * MotorKnob + * + * A stepper motor follows the turns of a potentiometer + * (or other sensor) on analog input 0. + * + * http://www.arduino.cc/en/Reference/Stepper + */ + +#include + +// change this to the number of steps on your motor +#define STEPS 100 + +// create an instance of the stepper class, specifying +// the number of steps of the motor and the pins it's +// attached to +Stepper stepper(STEPS, 8, 9, 10, 11); + +// the previous reading from the analog input +int previous = 0; + +void setup() +{ + // set the speed of the motor to 30 RPMs + stepper.setSpeed(30); +} + +void loop() +{ + // get the sensor value + int val = analogRead(0); + + // move a number of steps equal to the change in the + // sensor reading + stepper.step(val - previous); + + // remember the previous value of the sensor + previous = val; +} \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/libraries/Stepper/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/Stepper/keywords.txt new file mode 100644 index 0000000..19a0fad --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Stepper/keywords.txt @@ -0,0 +1,28 @@ +####################################### +# Syntax Coloring Map For Test +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +Stepper KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +step KEYWORD2 +setSpeed KEYWORD2 +version KEYWORD2 + +###################################### +# Instances (KEYWORD2) +####################################### +direction KEYWORD2 +speed KEYWORD2 + + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/Wire.cpp b/arduino-0017-linux-x64/hardware/libraries/Wire/Wire.cpp new file mode 100755 index 0000000..0ee3012 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/Wire.cpp @@ -0,0 +1,265 @@ +/* + TwoWire.cpp - TWI/I2C library for Wiring & Arduino + 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 +*/ + +extern "C" { + #include + #include + #include + #include "twi.h" +} + +#include "Wire.h" + +// Initialize Class Variables ////////////////////////////////////////////////// + +uint8_t* TwoWire::rxBuffer = 0; +uint8_t TwoWire::rxBufferIndex = 0; +uint8_t TwoWire::rxBufferLength = 0; + +uint8_t TwoWire::txAddress = 0; +uint8_t* TwoWire::txBuffer = 0; +uint8_t TwoWire::txBufferIndex = 0; +uint8_t TwoWire::txBufferLength = 0; + +uint8_t TwoWire::transmitting = 0; +void (*TwoWire::user_onRequest)(void); +void (*TwoWire::user_onReceive)(int); + +// Constructors //////////////////////////////////////////////////////////////// + +TwoWire::TwoWire() +{ +} + +// Public Methods ////////////////////////////////////////////////////////////// + +void TwoWire::begin(void) +{ + // init buffer for reads + rxBuffer = (uint8_t*) calloc(BUFFER_LENGTH, sizeof(uint8_t)); + rxBufferIndex = 0; + rxBufferLength = 0; + + // init buffer for writes + txBuffer = (uint8_t*) calloc(BUFFER_LENGTH, sizeof(uint8_t)); + txBufferIndex = 0; + txBufferLength = 0; + + twi_init(); +} + +void TwoWire::begin(uint8_t address) +{ + twi_setAddress(address); + twi_attachSlaveTxEvent(onRequestService); + twi_attachSlaveRxEvent(onReceiveService); + begin(); +} + +void TwoWire::begin(int address) +{ + begin((uint8_t)address); +} + +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity) +{ + // clamp to buffer length + if(quantity > BUFFER_LENGTH){ + quantity = BUFFER_LENGTH; + } + // perform blocking read into buffer + uint8_t read = twi_readFrom(address, rxBuffer, quantity); + // set rx buffer iterator vars + rxBufferIndex = 0; + rxBufferLength = read; + + return read; +} + +uint8_t TwoWire::requestFrom(int address, int quantity) +{ + return requestFrom((uint8_t)address, (uint8_t)quantity); +} + +void TwoWire::beginTransmission(uint8_t address) +{ + // indicate that we are transmitting + transmitting = 1; + // set address of targeted slave + txAddress = address; + // reset tx buffer iterator vars + txBufferIndex = 0; + txBufferLength = 0; +} + +void TwoWire::beginTransmission(int address) +{ + beginTransmission((uint8_t)address); +} + +uint8_t TwoWire::endTransmission(void) +{ + // transmit buffer (blocking) + int8_t ret = twi_writeTo(txAddress, txBuffer, txBufferLength, 1); + // reset tx buffer iterator vars + txBufferIndex = 0; + txBufferLength = 0; + // indicate that we are done transmitting + transmitting = 0; + return ret; +} + +// must be called in: +// slave tx event callback +// or after beginTransmission(address) +void TwoWire::send(uint8_t data) +{ + if(transmitting){ + // in master transmitter mode + // don't bother if buffer is full + if(txBufferLength >= BUFFER_LENGTH){ + return; + } + // put byte in tx buffer + txBuffer[txBufferIndex] = data; + ++txBufferIndex; + // update amount in buffer + txBufferLength = txBufferIndex; + }else{ + // in slave send mode + // reply to master + twi_transmit(&data, 1); + } +} + +// must be called in: +// slave tx event callback +// or after beginTransmission(address) +void TwoWire::send(uint8_t* data, uint8_t quantity) +{ + if(transmitting){ + // in master transmitter mode + for(uint8_t i = 0; i < quantity; ++i){ + send(data[i]); + } + }else{ + // in slave send mode + // reply to master + twi_transmit(data, quantity); + } +} + +// must be called in: +// slave tx event callback +// or after beginTransmission(address) +void TwoWire::send(char* data) +{ + send((uint8_t*)data, strlen(data)); +} + +// must be called in: +// slave tx event callback +// or after beginTransmission(address) +void TwoWire::send(int data) +{ + send((uint8_t)data); +} + +// must be called in: +// slave rx event callback +// or after requestFrom(address, numBytes) +uint8_t TwoWire::available(void) +{ + return rxBufferLength - rxBufferIndex; +} + +// must be called in: +// slave rx event callback +// or after requestFrom(address, numBytes) +uint8_t TwoWire::receive(void) +{ + // default to returning null char + // for people using with char strings + uint8_t value = '\0'; + + // get each successive byte on each call + if(rxBufferIndex < rxBufferLength){ + value = rxBuffer[rxBufferIndex]; + ++rxBufferIndex; + } + + return value; +} + +// behind the scenes function that is called when data is received +void TwoWire::onReceiveService(uint8_t* inBytes, int numBytes) +{ + // don't bother if user hasn't registered a callback + if(!user_onReceive){ + return; + } + // don't bother if rx buffer is in use by a master requestFrom() op + // i know this drops data, but it allows for slight stupidity + // meaning, they may not have read all the master requestFrom() data yet + if(rxBufferIndex < rxBufferLength){ + return; + } + // copy twi rx buffer into local read buffer + // this enables new reads to happen in parallel + for(uint8_t i = 0; i < numBytes; ++i){ + rxBuffer[i] = inBytes[i]; + } + // set rx iterator vars + rxBufferIndex = 0; + rxBufferLength = numBytes; + // alert user program + user_onReceive(numBytes); +} + +// behind the scenes function that is called when data is requested +void TwoWire::onRequestService(void) +{ + // don't bother if user hasn't registered a callback + if(!user_onRequest){ + return; + } + // reset tx buffer iterator vars + // !!! this will kill any pending pre-master sendTo() activity + txBufferIndex = 0; + txBufferLength = 0; + // alert user program + user_onRequest(); +} + +// sets function called on slave write +void TwoWire::onReceive( void (*function)(int) ) +{ + user_onReceive = function; +} + +// sets function called on slave read +void TwoWire::onRequest( void (*function)(void) ) +{ + user_onRequest = function; +} + +// Preinstantiate Objects ////////////////////////////////////////////////////// + +TwoWire Wire = TwoWire(); + diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/Wire.h b/arduino-0017-linux-x64/hardware/libraries/Wire/Wire.h new file mode 100755 index 0000000..9e849d5 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/Wire.h @@ -0,0 +1,67 @@ +/* + TwoWire.h - TWI/I2C library for Arduino & 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 +*/ + +#ifndef TwoWire_h +#define TwoWire_h + +#include + +#define BUFFER_LENGTH 32 + +class TwoWire +{ + private: + static uint8_t* rxBuffer; + static uint8_t rxBufferIndex; + static uint8_t rxBufferLength; + + static uint8_t txAddress; + static uint8_t* txBuffer; + static uint8_t txBufferIndex; + static uint8_t txBufferLength; + + static uint8_t transmitting; + static void (*user_onRequest)(void); + static void (*user_onReceive)(int); + static void onRequestService(void); + static void onReceiveService(uint8_t*, int); + public: + TwoWire(); + void begin(); + void begin(uint8_t); + void begin(int); + void beginTransmission(uint8_t); + void beginTransmission(int); + uint8_t endTransmission(void); + uint8_t requestFrom(uint8_t, uint8_t); + uint8_t requestFrom(int, int); + void send(uint8_t); + void send(uint8_t*, uint8_t); + void send(int); + void send(char*); + uint8_t available(void); + uint8_t receive(void); + void onReceive( void (*)(int) ); + void onRequest( void (*)(void) ); +}; + +extern TwoWire Wire; + +#endif + diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/examples/SFRRanger_reader/SFRRanger_reader.pde b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/SFRRanger_reader/SFRRanger_reader.pde new file mode 100755 index 0000000..c89b0f0 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/SFRRanger_reader/SFRRanger_reader.pde @@ -0,0 +1,84 @@ +// I2C SRF10 or SRF08 Devantech Ultrasonic Ranger Finder +// by Nicholas Zambetti +// and James Tichenor + +// Demonstrates use of the Wire library reading data from the +// Devantech Utrasonic Rangers SFR08 and SFR10 + +// Created 29 April 2006 + +#include + +void setup() +{ + Wire.begin(); // join i2c bus (address optional for master) + Serial.begin(9600); // start serial communication at 9600bps +} + +int reading = 0; + +void loop() +{ + // step 1: instruct sensor to read echoes + Wire.beginTransmission(112); // transmit to device #112 (0x70) + // the address specified in the datasheet is 224 (0xE0) + // but i2c adressing uses the high 7 bits so it's 112 + Wire.send(0x00); // sets register pointer to the command register (0x00) + Wire.send(0x50); // command sensor to measure in "inches" (0x50) + // use 0x51 for centimeters + // use 0x52 for ping microseconds + Wire.endTransmission(); // stop transmitting + + // step 2: wait for readings to happen + delay(70); // datasheet suggests at least 65 milliseconds + + // step 3: instruct sensor to return a particular echo reading + Wire.beginTransmission(112); // transmit to device #112 + Wire.send(0x02); // sets register pointer to echo #1 register (0x02) + Wire.endTransmission(); // stop transmitting + + // step 4: request reading from sensor + Wire.requestFrom(112, 2); // request 2 bytes from slave device #112 + + // step 5: receive reading from sensor + if(2 <= Wire.available()) // if two bytes were received + { + reading = Wire.receive(); // receive high byte (overwrites previous reading) + reading = reading << 8; // shift high byte to be high 8 bits + reading |= Wire.receive(); // receive low byte as lower 8 bits + Serial.println(reading); // print the reading + } + + delay(250); // wait a bit since people have to read the output :) +} + + +/* + +// The following code changes the address of a Devantech Ultrasonic Range Finder (SRF10 or SRF08) +// usage: changeAddress(0x70, 0xE6); + +void changeAddress(byte oldAddress, byte newAddress) +{ + Wire.beginTransmission(oldAddress); + Wire.send(0x00); + Wire.send(0xA0); + Wire.endTransmission(); + + Wire.beginTransmission(oldAddress); + Wire.send(0x00); + Wire.send(0xAA); + Wire.endTransmission(); + + Wire.beginTransmission(oldAddress); + Wire.send(0x00); + Wire.send(0xA5); + Wire.endTransmission(); + + Wire.beginTransmission(oldAddress); + Wire.send(0x00); + Wire.send(newAddress); + Wire.endTransmission(); +} + +*/ diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/examples/digital_potentiometer/digital_potentiometer.pde b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/digital_potentiometer/digital_potentiometer.pde new file mode 100644 index 0000000..35ee5d6 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/digital_potentiometer/digital_potentiometer.pde @@ -0,0 +1,34 @@ +// I2C Digital Potentiometer +// by Nicholas Zambetti +// and Shawn Bonkowski + +// Demonstrates use of the Wire library +// Controls AD5171 digital potentiometer via I2C/TWI + +// Created 31 March 2006 + +#include + +void setup() +{ + Wire.begin(); // join i2c bus (address optional for master) +} + +byte val = 0; + +void loop() +{ + Wire.beginTransmission(44); // transmit to device #44 (0x2c) + // device address is specified in datasheet + Wire.send(0x00); // sends instruction byte + Wire.send(val); // sends potentiometer value byte + Wire.endTransmission(); // stop transmitting + + val++; // increment value + if(val == 64) // if reached 64th position (max) + { + val = 0; // start over from lowest value + } + delay(500); +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_reader/master_reader.pde b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_reader/master_reader.pde new file mode 100644 index 0000000..1b139de --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_reader/master_reader.pde @@ -0,0 +1,29 @@ +// Wire Master Reader +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Reads data from an I2C/TWI slave device +// Refer to the "Wire Slave Sender" example for use with this + +// Created 29 March 2006 + +#include + +void setup() +{ + Wire.begin(); // join i2c bus (address optional for master) + Serial.begin(9600); // start serial for output +} + +void loop() +{ + Wire.requestFrom(2, 6); // request 6 bytes from slave device #2 + + while(Wire.available()) // slave may send less than requested + { + char c = Wire.receive(); // receive a byte as character + Serial.print(c); // print the character + } + + delay(500); +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_writer/master_writer.pde b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_writer/master_writer.pde new file mode 100644 index 0000000..d0ff9fa --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/master_writer/master_writer.pde @@ -0,0 +1,28 @@ +// Wire Master Writer +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Writes data to an I2C/TWI slave device +// Refer to the "Wire Slave Receiver" example for use with this + +// Created 29 March 2006 + +#include + +void setup() +{ + Wire.begin(); // join i2c bus (address optional for master) +} + +byte x = 0; + +void loop() +{ + Wire.beginTransmission(4); // transmit to device #4 + Wire.send("x is "); // sends five bytes + Wire.send(x); // sends one byte + Wire.endTransmission(); // stop transmitting + + x++; + delay(500); +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_receiver/slave_receiver.pde b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_receiver/slave_receiver.pde new file mode 100644 index 0000000..53c86b5 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_receiver/slave_receiver.pde @@ -0,0 +1,35 @@ +// Wire Slave Receiver +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Receives data as an I2C/TWI slave device +// Refer to the "Wire Master Writer" example for use with this + +// Created 29 March 2006 + +#include + +void setup() +{ + Wire.begin(4); // join i2c bus with address #4 + Wire.onReceive(receiveEvent); // register event + Serial.begin(9600); // start serial for output +} + +void loop() +{ + delay(100); +} + +// function that executes whenever data is received from master +// this function is registered as an event, see setup() +void receiveEvent(int howMany) +{ + while(1 < Wire.available()) // loop through all but the last + { + char c = Wire.receive(); // receive byte as a character + Serial.print(c); // print the character + } + int x = Wire.receive(); // receive byte as an integer + Serial.println(x); // print the integer +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_sender/slave_sender.pde b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_sender/slave_sender.pde new file mode 100644 index 0000000..f500644 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/examples/slave_sender/slave_sender.pde @@ -0,0 +1,29 @@ +// Wire Slave Sender +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Sends data as an I2C/TWI slave device +// Refer to the "Wire Master Reader" example for use with this + +// Created 29 March 2006 + +#include + +void setup() +{ + Wire.begin(2); // join i2c bus with address #2 + Wire.onRequest(requestEvent); // register event +} + +void loop() +{ + delay(100); +} + +// function that executes whenever data is requested by master +// this function is registered as an event, see setup() +void requestEvent() +{ + Wire.send("hello "); // respond with message of 6 bytes + // as expected by master +} diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/keywords.txt b/arduino-0017-linux-x64/hardware/libraries/Wire/keywords.txt new file mode 100644 index 0000000..12f129b --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/keywords.txt @@ -0,0 +1,31 @@ +####################################### +# Syntax Coloring Map For Wire +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +beginTransmission KEYWORD2 +endTransmission KEYWORD2 +requestFrom KEYWORD2 +send KEYWORD2 +receive KEYWORD2 +onReceive KEYWORD2 +onRequest KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + +Wire KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.c b/arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.c new file mode 100644 index 0000000..2ad2a71 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.c @@ -0,0 +1,479 @@ +/* + twi.c - TWI/I2C library for Wiring & Arduino + 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 +*/ + +#include +#include +#include +#include +#include +#include + +#ifndef cbi +#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#endif + +#ifndef sbi +#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#endif + +#include "twi.h" + +static volatile uint8_t twi_state; +static uint8_t twi_slarw; + +static void (*twi_onSlaveTransmit)(void); +static void (*twi_onSlaveReceive)(uint8_t*, int); + +static uint8_t* twi_masterBuffer; +static volatile uint8_t twi_masterBufferIndex; +static uint8_t twi_masterBufferLength; + +static uint8_t* twi_txBuffer; +static volatile uint8_t twi_txBufferIndex; +static volatile uint8_t twi_txBufferLength; + +static uint8_t* twi_rxBuffer; +static volatile uint8_t twi_rxBufferIndex; + +static volatile uint8_t twi_error; + +/* + * Function twi_init + * Desc readys twi pins and sets twi bitrate + * Input none + * Output none + */ +void twi_init(void) +{ + // initialize state + twi_state = TWI_READY; + + #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega328P__) + // activate internal pull-ups for twi + // as per note from atmega8 manual pg167 + sbi(PORTC, 4); + sbi(PORTC, 5); + #else + // activate internal pull-ups for twi + // as per note from atmega128 manual pg204 + sbi(PORTD, 0); + sbi(PORTD, 1); + #endif + + // initialize twi prescaler and bit rate + cbi(TWSR, TWPS0); + cbi(TWSR, TWPS1); + TWBR = ((CPU_FREQ / TWI_FREQ) - 16) / 2; + + /* twi bit rate formula from atmega128 manual pg 204 + SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR)) + note: TWBR should be 10 or higher for master mode + It is 72 for a 16mhz Wiring board with 100kHz TWI */ + + // enable twi module, acks, and twi interrupt + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA); + + // allocate buffers + twi_masterBuffer = (uint8_t*) calloc(TWI_BUFFER_LENGTH, sizeof(uint8_t)); + twi_txBuffer = (uint8_t*) calloc(TWI_BUFFER_LENGTH, sizeof(uint8_t)); + twi_rxBuffer = (uint8_t*) calloc(TWI_BUFFER_LENGTH, sizeof(uint8_t)); +} + +/* + * Function twi_slaveInit + * Desc sets slave address and enables interrupt + * Input none + * Output none + */ +void twi_setAddress(uint8_t address) +{ + // set twi slave address (skip over TWGCE bit) + TWAR = address << 1; +} + +/* + * Function twi_readFrom + * Desc attempts to become twi bus master and read a + * series of bytes from a device on the bus + * Input address: 7bit i2c device address + * data: pointer to byte array + * length: number of bytes to read into array + * Output number of bytes read + */ +uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length) +{ + uint8_t i; + + // ensure data will fit into buffer + if(TWI_BUFFER_LENGTH < length){ + return 0; + } + + // wait until twi is ready, become master receiver + while(TWI_READY != twi_state){ + continue; + } + twi_state = TWI_MRX; + // reset error state (0xFF.. no error occured) + twi_error = 0xFF; + + // initialize buffer iteration vars + twi_masterBufferIndex = 0; + twi_masterBufferLength = length-1; // This is not intuitive, read on... + // On receive, the previously configured ACK/NACK setting is transmitted in + // response to the received byte before the interrupt is signalled. + // Therefor we must actually set NACK when the _next_ to last byte is + // received, causing that NACK to be sent in response to receiving the last + // expected byte of data. + + // build sla+w, slave device address + w bit + twi_slarw = TW_READ; + twi_slarw |= address << 1; + + // send start condition + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); + + // wait for read operation to complete + while(TWI_MRX == twi_state){ + continue; + } + + if (twi_masterBufferIndex < length) + length = twi_masterBufferIndex; + + // copy twi buffer to data + for(i = 0; i < length; ++i){ + data[i] = twi_masterBuffer[i]; + } + + return length; +} + +/* + * Function twi_writeTo + * Desc attempts to become twi bus master and write a + * series of bytes to a device on the bus + * Input address: 7bit i2c device address + * data: pointer to byte array + * length: number of bytes in array + * wait: boolean indicating to wait for write or not + * Output 0 .. success + * 1 .. length to long for buffer + * 2 .. address send, NACK received + * 3 .. data send, NACK received + * 4 .. other twi error (lost bus arbitration, bus error, ..) + */ +uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait) +{ + uint8_t i; + + // ensure data will fit into buffer + if(TWI_BUFFER_LENGTH < length){ + return 1; + } + + // wait until twi is ready, become master transmitter + while(TWI_READY != twi_state){ + continue; + } + twi_state = TWI_MTX; + // reset error state (0xFF.. no error occured) + twi_error = 0xFF; + + // initialize buffer iteration vars + twi_masterBufferIndex = 0; + twi_masterBufferLength = length; + + // copy data to twi buffer + for(i = 0; i < length; ++i){ + twi_masterBuffer[i] = data[i]; + } + + // build sla+w, slave device address + w bit + twi_slarw = TW_WRITE; + twi_slarw |= address << 1; + + // send start condition + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); + + // wait for write operation to complete + while(wait && (TWI_MTX == twi_state)){ + continue; + } + + if (twi_error == 0xFF) + return 0; // success + else if (twi_error == TW_MT_SLA_NACK) + return 2; // error: address send, nack received + else if (twi_error == TW_MT_DATA_NACK) + return 3; // error: data send, nack received + else + return 4; // other twi error +} + +/* + * Function twi_transmit + * Desc fills slave tx buffer with data + * must be called in slave tx event callback + * Input data: pointer to byte array + * length: number of bytes in array + * Output 1 length too long for buffer + * 2 not slave transmitter + * 0 ok + */ +uint8_t twi_transmit(uint8_t* data, uint8_t length) +{ + uint8_t i; + + // ensure data will fit into buffer + if(TWI_BUFFER_LENGTH < length){ + return 1; + } + + // ensure we are currently a slave transmitter + if(TWI_STX != twi_state){ + return 2; + } + + // set length and copy data into tx buffer + twi_txBufferLength = length; + for(i = 0; i < length; ++i){ + twi_txBuffer[i] = data[i]; + } + + return 0; +} + +/* + * Function twi_attachSlaveRxEvent + * Desc sets function called before a slave read operation + * Input function: callback function to use + * Output none + */ +void twi_attachSlaveRxEvent( void (*function)(uint8_t*, int) ) +{ + twi_onSlaveReceive = function; +} + +/* + * Function twi_attachSlaveTxEvent + * Desc sets function called before a slave write operation + * Input function: callback function to use + * Output none + */ +void twi_attachSlaveTxEvent( void (*function)(void) ) +{ + twi_onSlaveTransmit = function; +} + +/* + * Function twi_reply + * Desc sends byte or readys receive line + * Input ack: byte indicating to ack or to nack + * Output none + */ +void twi_reply(uint8_t ack) +{ + // transmit master read ready signal, with or without ack + if(ack){ + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT) | _BV(TWEA); + }else{ + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT); + } +} + +/* + * Function twi_stop + * Desc relinquishes bus master status + * Input none + * Output none + */ +void twi_stop(void) +{ + // send stop condition + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTO); + + // wait for stop condition to be exectued on bus + // TWINT is not set after a stop condition! + while(TWCR & _BV(TWSTO)){ + continue; + } + + // update twi state + twi_state = TWI_READY; +} + +/* + * Function twi_releaseBus + * Desc releases bus control + * Input none + * Output none + */ +void twi_releaseBus(void) +{ + // release bus + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT); + + // update twi state + twi_state = TWI_READY; +} + +SIGNAL(TWI_vect) +{ + switch(TW_STATUS){ + // All Master + case TW_START: // sent start condition + case TW_REP_START: // sent repeated start condition + // copy device address and r/w bit to output register and ack + TWDR = twi_slarw; + twi_reply(1); + break; + + // Master Transmitter + case TW_MT_SLA_ACK: // slave receiver acked address + case TW_MT_DATA_ACK: // slave receiver acked data + // if there is data to send, send it, otherwise stop + if(twi_masterBufferIndex < twi_masterBufferLength){ + // copy data to output register and ack + TWDR = twi_masterBuffer[twi_masterBufferIndex++]; + twi_reply(1); + }else{ + twi_stop(); + } + break; + case TW_MT_SLA_NACK: // address sent, nack received + twi_error = TW_MT_SLA_NACK; + twi_stop(); + break; + case TW_MT_DATA_NACK: // data sent, nack received + twi_error = TW_MT_DATA_NACK; + twi_stop(); + break; + case TW_MT_ARB_LOST: // lost bus arbitration + twi_error = TW_MT_ARB_LOST; + twi_releaseBus(); + break; + + // Master Receiver + case TW_MR_DATA_ACK: // data received, ack sent + // put byte into buffer + twi_masterBuffer[twi_masterBufferIndex++] = TWDR; + case TW_MR_SLA_ACK: // address sent, ack received + // ack if more bytes are expected, otherwise nack + if(twi_masterBufferIndex < twi_masterBufferLength){ + twi_reply(1); + }else{ + twi_reply(0); + } + break; + case TW_MR_DATA_NACK: // data received, nack sent + // put final byte into buffer + twi_masterBuffer[twi_masterBufferIndex++] = TWDR; + case TW_MR_SLA_NACK: // address sent, nack received + twi_stop(); + break; + // TW_MR_ARB_LOST handled by TW_MT_ARB_LOST case + + // Slave Receiver + case TW_SR_SLA_ACK: // addressed, returned ack + case TW_SR_GCALL_ACK: // addressed generally, returned ack + case TW_SR_ARB_LOST_SLA_ACK: // lost arbitration, returned ack + case TW_SR_ARB_LOST_GCALL_ACK: // lost arbitration, returned ack + // enter slave receiver mode + twi_state = TWI_SRX; + // indicate that rx buffer can be overwritten and ack + twi_rxBufferIndex = 0; + twi_reply(1); + break; + case TW_SR_DATA_ACK: // data received, returned ack + case TW_SR_GCALL_DATA_ACK: // data received generally, returned ack + // if there is still room in the rx buffer + if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){ + // put byte in buffer and ack + twi_rxBuffer[twi_rxBufferIndex++] = TWDR; + twi_reply(1); + }else{ + // otherwise nack + twi_reply(0); + } + break; + case TW_SR_STOP: // stop or repeated start condition received + // put a null char after data if there's room + if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){ + twi_rxBuffer[twi_rxBufferIndex] = '\0'; + } + // callback to user defined callback + twi_onSlaveReceive(twi_rxBuffer, twi_rxBufferIndex); + // ack future responses + twi_reply(1); + // leave slave receiver state + twi_state = TWI_READY; + break; + case TW_SR_DATA_NACK: // data received, returned nack + case TW_SR_GCALL_DATA_NACK: // data received generally, returned nack + // nack back at master + twi_reply(0); + break; + + // Slave Transmitter + case TW_ST_SLA_ACK: // addressed, returned ack + case TW_ST_ARB_LOST_SLA_ACK: // arbitration lost, returned ack + // enter slave transmitter mode + twi_state = TWI_STX; + // ready the tx buffer index for iteration + twi_txBufferIndex = 0; + // set tx buffer length to be zero, to verify if user changes it + twi_txBufferLength = 0; + // request for txBuffer to be filled and length to be set + // note: user must call twi_transmit(bytes, length) to do this + twi_onSlaveTransmit(); + // if they didn't change buffer & length, initialize it + if(0 == twi_txBufferLength){ + twi_txBufferLength = 1; + twi_txBuffer[0] = 0x00; + } + // transmit first byte from buffer, fall + case TW_ST_DATA_ACK: // byte sent, ack returned + // copy data to output register + TWDR = twi_txBuffer[twi_txBufferIndex++]; + // if there is more to send, ack, otherwise nack + if(twi_txBufferIndex < twi_txBufferLength){ + twi_reply(1); + }else{ + twi_reply(0); + } + break; + case TW_ST_DATA_NACK: // received nack, we are done + case TW_ST_LAST_DATA: // received ack, but we are done already! + // ack future responses + twi_reply(1); + // leave slave receiver state + twi_state = TWI_READY; + break; + + // All + case TW_NO_INFO: // no state information + break; + case TW_BUS_ERROR: // bus error, illegal stop/start + twi_error = TW_BUS_ERROR; + twi_stop(); + break; + } +} + diff --git a/arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.h b/arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.h new file mode 100755 index 0000000..1258d8d --- /dev/null +++ b/arduino-0017-linux-x64/hardware/libraries/Wire/utility/twi.h @@ -0,0 +1,57 @@ +/* + twi.h - TWI/I2C library for Wiring & Arduino + 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 +*/ + +#ifndef twi_h +#define twi_h + + #include + + //#define ATMEGA8 + + #ifndef CPU_FREQ + #define CPU_FREQ 16000000L + #endif + + #ifndef TWI_FREQ + #define TWI_FREQ 100000L + #endif + + #ifndef TWI_BUFFER_LENGTH + #define TWI_BUFFER_LENGTH 32 + #endif + + #define TWI_READY 0 + #define TWI_MRX 1 + #define TWI_MTX 2 + #define TWI_SRX 3 + #define TWI_STX 4 + + void twi_init(void); + void twi_setAddress(uint8_t); + uint8_t twi_readFrom(uint8_t, uint8_t*, uint8_t); + uint8_t twi_writeTo(uint8_t, uint8_t*, uint8_t, uint8_t); + uint8_t twi_transmit(uint8_t*, uint8_t); + void twi_attachSlaveRxEvent( void (*)(uint8_t*, int) ); + void twi_attachSlaveTxEvent( void (*)(void) ); + void twi_reply(uint8_t); + void twi_stop(void); + void twi_releaseBus(void); + +#endif + diff --git a/arduino-0017-linux-x64/hardware/programmers.txt b/arduino-0017-linux-x64/hardware/programmers.txt new file mode 100644 index 0000000..c3e4d9b --- /dev/null +++ b/arduino-0017-linux-x64/hardware/programmers.txt @@ -0,0 +1,15 @@ +avrisp.name=AVR ISP +avrisp.communication=serial +avrisp.protocol=stk500 + +avrispmkii.name=AVRISP mkII +avrispmkii.communication=usb +avrispmkii.protocol=stk500v2 + +usbtinyisp.name=USBtinyISP +usbtinyisp.protocol=usbtiny + +parallel.name=Parallel Programmer +parallel.protocol=dapa +parallel.force=true +# parallel.delay=200 diff --git a/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-ar b/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-ar new file mode 120000 index 0000000..ccdac78 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-ar @@ -0,0 +1 @@ +/usr/bin/avr-ar \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-g++ b/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-g++ new file mode 120000 index 0000000..47a1839 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-g++ @@ -0,0 +1 @@ +/usr/bin/avr-g++ \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-gcc b/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-gcc new file mode 120000 index 0000000..c01d40c --- /dev/null +++ b/arduino-0017-linux-x64/hardware/tools/avr/bin/avr-gcc @@ -0,0 +1 @@ +/usr/bin/avr-gcc \ No newline at end of file diff --git a/arduino-0017-linux-x64/hardware/tools/avrdude b/arduino-0017-linux-x64/hardware/tools/avrdude new file mode 100755 index 0000000000000000000000000000000000000000..7e702e5848009e029e14510acdd62ee3d1b4ee8c GIT binary patch literal 616454 zcmb@v34ByV);8W*8iIm1BEhIQL~KV;wm9GA0Yq6;aKD$Zi3$;g{+_4m-p&o0_kF+b|BpYp zw@#fp=hUfFr>aiXtzKFdygV}_!)554 zU%$)}q?j(@!{rzMc07eH0IT>sG?nj@_sN2j_mv7v`?;v6ENDONa=$`3Q9qgeKmKdW zIc(;P-(Eao*vzRzX3m%$UN~f7(Zxe99x-&@oS_#9`Ex;ux*L1tHG-zCkKRa;cOU#u zjWYk0`{yT)opae&M`tg7Q{Bml-zB9nAorAklt@~{Hs&;Y&mes3y&TlyPy2K3WR?u^GFx)^HG7H z!vAF#_}_r*PvO7X1)XRYbl&a)-m44vyIsI3OTkZQ;+!tvy8!FYnJG+4YybC%n zb%B3t7x3r1pfkG*{6BS3ujjgeAMb+xgI&;npbPx@UBJ6_0pHMtJVU$SyQm8~+q$50 zdlz*2cL8701)ZK<;6KxaJePI>zoZNLpLBtLZx?*~bb%l1f_|zCc(4olkuK=Bc0p%< z7xkL)j|83Gu9IDLc_kgf z;LR`Kr?~1}rJdkOi%!W2bX=H+%$+u6DrO-TSoHB3Tw0W*cGiJ{Sx$I)DNmWR@rc9kWX*$s6%)Ny~XIF;j0$0*R zIy7T;)tq#yl5ZEg=FO@6{j`v4UTAJ*^)0Sx3qf^W_1qb=LshOxfvYA}heMUFsyWru zW)o$0<*aHx=T=Ui3n}q7HC*kgo;G*xoVl*bIkRU^s}!VWlh(W$H_x6j(=~6}OhO^* z%$aj4QF`i(*{-QG=95ln&Q$sMy?o4c&6qbO6uQM#Sv7B3XvVziY15{x@JwAg#@Gk_t|qMf%cTpj5)Jip-O;3WUdS4=2VAVl{2SJnF}P4m^vpM za#hJX;oo^ALQ$(KXU>^7P0A3S>6&GWIu|qvt(-D%8mkV9(`L^H&&tp()zc>ZmRw!n zF=g(}q)sL?=2V7e5^?&Rd75xC)h= z4atON=Sa;?nzRr$7NQnr&6z(*-0Et_`IB$!X7WstL`paH97#=O~6l3u4gE#>?IKt?7eGJ$k6q@+P#cnULf(mK8?W=z zN%6-eoVl5<4E)E^{8zs7Ed;5!9^l_;GiLPS%>NVNFI=whnKOEj#$KfPXB0|5#5Kvu z0wVvh{SDV}od4T@wm%?zybZ+D_BVuAIN-KFBfQ)J&$&qQ<#Gwur;z^`+_xn{KgRyg2! zHW1I14tQS&{7DD=bO-!72Rz>auXn)DaKMue_?Zs)1_%5s2fWn*w__5_-sXUx?ZDsd zfd9+^HyrT(4){R_yubl(cfikaz+J!Su=4>9c#Z>pt^=OyfO{P9djkfdj5O;1@dJ6%P1d2YjLfKEwf^?0^q-z^6Ol!yNEx z2Yk2#zR&?LbiivI@QWPqS_k|W4tSjdKEeTC;ec~Au>V#%;1}CKJfC#Hf9Zff=YSVE z;Pno8u>+oTz(+aY8ys-1J?y_$2Yj>*#B-Yi?sdR-JK&c(;D!T!nFD^%0WWdD+Z}M9 z1MV8pVgIELc#Z=;#sSZDz&SUy|MDI1G8>3zfdhWI13u6JAM1b*cfeH#yvP9$IN&7? zIM*KbpBmYlV{E~QWBeAwi}B%}43`>Nm$NoCa$LW2U8(be_*dy)f;Xn8vzWO%g}?Jk zndXpZwu=Fn!Y6zKs>b4WAmMEXpoIh2_-BHf#54q;}s zNT0+shc0unNM|z5A7!>M&7sOH5$Qurb1GmC7wJ7rGn#1@i1a5+a|knYMS2I* z9J)-GNN;AELza2)H~{Cp&NPQAbGJyZVVXmf*(%ZvOmk>5lOp{*(;Sk_=S2Exra2Uu zD@FQIra1(ebt3&B(;Rxt8j-$-X%0DNwMgH|G=~~~G=~_oLZokHnnR0OBGPl2 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
  • m&(4|7{-nDG4=yU4msnC!lPf?D?>Hc)Y-ckKPj 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 P+S#nviyx&THShlbq7~Iu literal 0 HcmV?d00001 diff --git a/arduino-0017-linux-x64/hardware/tools/avrdude.conf b/arduino-0017-linux-x64/hardware/tools/avrdude.conf new file mode 100644 index 0000000..faf1ba3 --- /dev/null +++ b/arduino-0017-linux-x64/hardware/tools/avrdude.conf @@ -0,0 +1,11721 @@ +# $Id: avrdude.conf.in,v 1.122 2007/05/16 21:29:36 joerg_wunsch Exp $ +# +# AVRDUDE Configuration File +# +# This file contains configuration data used by AVRDUDE which describes +# the programming hardware pinouts and also provides part definitions. +# AVRDUDE's "-C" command line option specifies the location of the +# configuration file. The "-c" option names the programmer configuration +# which must match one of the entry's "id" parameter. The "-p" option +# identifies which part AVRDUDE is going to be programming and must match +# one of the parts' "id" parameter. +# +# Possible entry formats are: +# +# programmer +# id = [, [, ] ...] ; # are quoted strings +# desc = ; # quoted string +# type = par | stk500 | stk500v2 | stk500pp | stk500hvsp | stk500generic | +# avr910 | butterfly | usbasp | +# jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw | +# dragon_dw | dragon_jtag | dragon_isp | dragon_pp | +# dragon_hvsp; # programmer type +# baudrate = ; # baudrate for avr910-programmer +# vcc = [, ... ] ; # pin number(s) +# reset = ; # pin number +# sck = ; # pin number +# mosi = ; # pin number +# miso = ; # pin number +# errled = ; # pin number +# rdyled = ; # pin number +# pgmled = ; # pin number +# vfyled = ; # pin number +# ; +# +# part +# id = ; # quoted string +# desc = ; # quoted string +# has_jtag = ; # part has JTAG i/f +# has_debugwire = ; # part has debugWire i/f +# devicecode = ; # deprecated, use stk500_devcode +# stk500_devcode = ; # numeric +# avr910_devcode = ; # numeric +# signature = ; # signature bytes +# chip_erase_delay = ; # micro-seconds +# reset = dedicated | io; +# retry_pulse = reset | sck; +# pgm_enable = ; +# chip_erase = ; +# chip_erase_delay = ; # chip erase delay (us) +# # STK500 parameters (parallel programming IO lines) +# pagel = ; # pin name in hex, i.e., 0xD7 +# bs2 = ; # pin name in hex, i.e., 0xA0 +# serial = ; # can use serial downloading +# parallel = ; # can use par. programming +# # STK500v2 parameters, to be taken from Atmel's XML files +# timeout = ; +# stabdelay = ; +# cmdexedelay = ; +# synchloops = ; +# bytedelay = ; +# pollvalue = ; +# pollindex = ; +# predelay = ; +# postdelay = ; +# pollmethod = ; +# mode = ; +# delay = ; +# blocksize = ; +# readsize = ; +# hvspcmdexedelay = ; +# # STK500v2 HV programming parameters, from XML +# pp_controlstack = , , ...; # PP only +# hvsp_controlstack = , , ...; # HVSP only +# hventerstabdelay = ; +# progmodedelay = ; # PP only +# latchcycles = ; +# togglevtg = ; +# poweroffdelay = ; +# resetdelayms = ; +# resetdelayus = ; +# hvleavestabdelay = ; +# resetdelay = ; +# synchcycles = ; # HVSP only +# chiperasepulsewidth = ; # PP only +# chiperasepolltimeout = ; +# chiperasetime = ; # HVSP only +# programfusepulsewidth = ; # PP only +# programfusepolltimeout = ; +# programlockpulsewidth = ; # PP only +# programlockpolltimeout = ; +# # JTAG ICE mkII parameters, also from XML files +# allowfullpagebitstream = ; +# enablepageprogramming = ; +# idr = ; # IO addr of IDR (OCD) reg. +# rampz = ; # IO addr of RAMPZ reg. +# spmcr = ; # mem addr of SPMC[S]R reg. +# eecr = ; # mem addr of EECR reg. +# # (only when != 0x3c) +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# NOTES: +# * 'devicecode' is the device code used by the STK500 (see codes +# listed below) +# * Not all memory types will implement all instructions. +# * AVR Fuse bits and Lock bits are implemented as a type of memory. +# * Example memory types are: +# "flash", "eeprom", "fuse", "lfuse" (low fuse), "hfuse" (high +# fuse), "signature", "calibration", "lock" +# * The memory type specified on the avrdude command line must match +# one of the memory types defined for the specified chip. +# * The pwroff_after_write flag causes avrdude to attempt to +# power the device off and back on after an unsuccessful write to +# the affected memory area if VCC programmer pins are defined. If +# VCC pins are not defined for the programmer, a message +# indicating that the device needs a power-cycle is printed out. +# This flag was added to work around a problem with the +# at90s4433/2333's; see the at90s4433 errata at: +# +# http://www.atmel.com/atmel/acrobat/doc1280.pdf +# +# INSTRUCTION FORMATS +# +# Instruction formats are specified as a comma seperated list of +# string values containing information (bit specifiers) about each +# of the 32 bits of the instruction. Bit specifiers may be one of +# the following formats: +# +# '1' = the bit is always set on input as well as output +# +# '0' = the bit is always clear on input as well as output +# +# 'x' = the bit is ignored on input and output +# +# 'a' = the bit is an address bit, the bit-number matches this bit +# specifier's position within the current instruction byte +# +# 'aN' = the bit is the Nth address bit, bit-number = N, i.e., a12 +# is address bit 12 on input, a0 is address bit 0. +# +# 'i' = the bit is an input data bit +# +# 'o' = the bit is an output data bit +# +# Each instruction must be composed of 32 bit specifiers. The +# instruction specification closely follows the instruction data +# provided in Atmel's data sheets for their parts. +# +# See below for some examples. +# +# +# The following are STK500 part device codes to use for the +# "devicecode" field of the part. These came from Atmel's software +# section avr061.zip which accompanies the application note +# AVR061 available from: +# +# http://www.atmel.com/atmel/acrobat/doc2525.pdf +# + +#define ATTINY10 0x10 +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults +# +default_parallel = "/dev/parport0"; +default_serial = "/dev/ttyS0"; + + +# +# PROGRAMMER DEFINITIONS +# + +programmer + id = "avrisp"; + desc = "Atmel AVR ISP"; + type = stk500; +; + +programmer + id = "avrispv2"; + desc = "Atmel AVR ISP V2"; + type = stk500v2; +; + +programmer + id = "avrispmkII"; + desc = "Atmel AVR ISP mkII"; + type = stk500v2; +; + +programmer + id = "avrisp2"; + desc = "Atmel AVR ISP mkII"; + type = stk500v2; +; + +# This is supposed to be the "default" STK500 entry. +# Attempts to select the correct firmware version +# by probing for it. Better use one of the entries +# below instead. +programmer + id = "stk500"; + desc = "Atmel STK500"; + type = stk500generic; +; + +programmer + id = "stk500v1"; + desc = "Atmel STK500 Version 1.x firmware"; + type = stk500; +; + +programmer + id = "stk500v2"; + desc = "Atmel STK500 Version 2.x firmware"; + type = stk500v2; +; + +programmer + id = "stk500pp"; + desc = "Atmel STK500 V2 in parallel programming mode"; + type = stk500pp; +; + +programmer + id = "stk500hvsp"; + desc = "Atmel STK500 V2 in high-voltage serial programming mode"; + type = stk500hvsp; +; + +programmer + id = "avr910"; + desc = "Atmel Low Cost Serial Programmer"; + type = avr910; +; + +programmer + id = "usbasp"; + desc = "USBasp, http://www.fischl.de/usbasp/"; + type = usbasp; +; + +programmer + id = "butterfly"; + desc = "Atmel Butterfly Development Board"; + type = butterfly; +; + +programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = butterfly; +; + +programmer + id = "avr911"; + desc = "Atmel AppNote AVR911 AVROSP"; + type = butterfly; +; + +programmer + id = "jtagmkI"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = jtagmki; +; + +# easier to type +programmer + id = "jtag1"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = jtagmki; +; + +# easier to type +programmer + id = "jtag1slow"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 19200; + type = jtagmki; +; + +programmer + id = "jtagmkII"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# easier to type +programmer + id = "jtag2slow"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# JTAG ICE mkII @ 115200 Bd +programmer + id = "jtag2fast"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +# make the fast one the default, people will love that +programmer + id = "jtag2"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +# JTAG ICE mkII in ISP mode +programmer + id = "jtag2isp"; + desc = "Atmel JTAG ICE mkII in ISP mode"; + baudrate = 115200; + type = jtagmkii_isp; +; + +# JTAG ICE mkII in debugWire mode +programmer + id = "jtag2dw"; + desc = "Atmel JTAG ICE mkII in debugWire mode"; + baudrate = 115200; + type = jtagmkii_dw; +; + +# AVR Dragon in JTAG mode +programmer + id = "dragon_jtag"; + desc = "Atmel AVR Dragon in JTAG mode"; + baudrate = 115200; + type = dragon_jtag; +; + +# AVR Dragon in ISP mode +programmer + id = "dragon_isp"; + desc = "Atmel AVR Dragon in ISP mode"; + baudrate = 115200; + type = dragon_isp; +; + +# AVR Dragon in PP mode +programmer + id = "dragon_pp"; + desc = "Atmel AVR Dragon in PP mode"; + baudrate = 115200; + type = dragon_pp; +; + +# AVR Dragon in HVSP mode +programmer + id = "dragon_hvsp"; + desc = "Atmel AVR Dragon in HVSP mode"; + baudrate = 115200; + type = dragon_hvsp; +; + +# AVR Dragon in debugWire mode +programmer + id = "dragon_dw"; + desc = "Atmel AVR Dragon in debugWire mode"; + baudrate = 115200; + type = dragon_dw; +; + +programmer + id = "pavr"; + desc = "Jason Kyle's pAVR Serial Programmer"; + type = avr910; +; + +# Parallel port programmers. + +programmer + id = "bsd"; + desc = "Brian Dean's Programmer, http://www.bsdhome.com/avrdude/"; + type = par; + vcc = 2, 3, 4, 5; + reset = 7; + sck = 8; + mosi = 9; + miso = 10; +; + +programmer + id = "stk200"; + desc = "STK200"; + type = par; + buff = 4, 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; +; + +# The programming dongle used by the popular Ponyprog +# utility. It is almost similar to the STK200 one, +# except that there is a LED indicating that the +# programming is currently in progress. + +programmer + id = "pony-stk200"; + desc = "Pony Prog STK200"; + type = par; + buff = 4, 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; + pgmled = 8; +; + +programmer + id = "dt006"; + desc = "Dontronics DT006"; + type = par; + reset = 4; + sck = 5; + mosi = 2; + miso = 11; +; + +programmer + id = "bascom"; + desc = "Bascom SAMPLE programming cable"; + type = par; + reset = 4; + sck = 5; + mosi = 2; + miso = 11; +; + +programmer + id = "alf"; + desc = "Nightshade ALF-PgmAVR, http://nightshade.homeip.net/"; + type = par; + vcc = 2, 3, 4, 5; + buff = 6; + reset = 7; + sck = 8; + mosi = 9; + miso = 10; + errled = 1; + rdyled = 14; + pgmled = 16; + vfyled = 17; +; + +programmer + id = "sp12"; + desc = "Steve Bolt's Programmer"; + type = par; + vcc = 4,5,6,7,8; + reset = 3; + sck = 2; + mosi = 9; + miso = 11; +; + +programmer + id = "picoweb"; + desc = "Picoweb Programming Cable, http://www.picoweb.net/"; + type = par; + reset = 2; + sck = 3; + mosi = 4; + miso = 13; +; + +programmer + id = "abcmini"; + desc = "ABCmini Board, aka Dick Smith HOTCHIP"; + type = par; + reset = 4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "futurlec"; + desc = "Futurlec.com programming cable."; + type = par; + reset = 3; + sck = 2; + mosi = 1; + miso = 10; +; + + +# From the contributor of the "xil" jtag cable: +# The "vcc" definition isn't really vcc (the cable gets its power from +# the programming circuit) but is necessary to switch one of the +# buffer lines (trying to add it to the "buff" lines doesn't work). +# With this, TMS connects to RESET, TDI to MOSI, TDO to MISO and TCK +# to SCK (plus vcc/gnd of course) +programmer + id = "xil"; + desc = "Xilinx JTAG cable"; + type = par; + mosi = 2; + sck = 3; + reset = 4; + buff = 5; + miso = 13; + vcc = 6; +; + + +programmer + id = "dapa"; + desc = "Direct AVR Parallel Access cable"; + type = par; + vcc = 3; + reset = 16; + sck = 1; + mosi = 2; + miso = 11; +; + +programmer + id = "atisp"; + desc = "AT-ISP V1.1 programming cable for AVR-SDK1 from micro-research.co.th"; + type = par; + reset = ~6; + sck = ~8; + mosi = ~7; + miso = ~10; +; + +programmer + id = "ere-isp-avr"; + desc = "ERE ISP-AVR "; + type = par; + reset = ~4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "blaster"; + desc = "Altera ByteBlaster"; + type = par; + sck = 2; + miso = 11; + reset = 3; + mosi = 8; + buff = 14; +; + +# It is almost same as pony-stk200, except vcc on pin 5 to auto +# disconnect port (download on http://electropol.free.fr) +programmer + id = "frank-stk200"; + desc = "Frank STK200"; + type = par; + vcc = 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; + pgmled = 8; +; + + +# +# some ultra cheap programmers use bitbanging on the +# serialport. +# +# PC - DB9 - Pins for RS232: +# +# GND 5 -- |O +# | O| <- 9 RI +# DTR 4 <- |O | +# | O| <- 8 CTS +# TXD 3 <- |O | +# | O| -> 7 RTS +# RXD 2 -> |O | +# | O| <- 6 DSR +# DCD 1 -> |O +# +# Using RXD is currently not supported. +# Using RI is not supported under Win32 but is supported under Posix. + +# serial ponyprog design (dasa2 in uisp) +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "ponyser"; + desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts"; + type = serbb; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# Same as above, different name +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "siprog"; + desc = "Lancos SI-Prog "; + type = serbb; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# unknown (dasa in uisp) +# reset=rts sck=dtr mosi=txd miso=cts + +programmer + id = "dasa"; + desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; + type = serbb; + reset = 7; + sck = 4; + mosi = 3; + miso = 8; +; + +# unknown (dasa3 in uisp) +# reset=!dtr sck=rts mosi=txd miso=cts + +programmer + id = "dasa3"; + desc = "serial port banging, reset=!dtr sck=rts mosi=txd miso=cts"; + type = serbb; + reset = ~4; + sck = 7; + mosi = 3; + miso = 8; +; + +# +# PART DEFINITIONS +# + +#------------------------------------------------------------ +# ATtiny11 +#------------------------------------------------------------ + +# This is an HVSP-only device. + +part + id = "t11"; + desc = "ATtiny11"; + stk500_devcode = 0x11; + signature = 0x1e 0x90 0x04; + chip_erase_delay = 20000; + + timeout = 200; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + blocksize = 64; + readsize = 256; + delay = 5; + ; + + memory "flash" + size = 1024; + blocksize = 128; + readsize = 256; + delay = 3; + ; + + memory "signature" + size = 3; + ; + + memory "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + + memory "fuse" + size = 1; + ; +; + +#------------------------------------------------------------ +# ATtiny12 +#------------------------------------------------------------ + +part + id = "t12"; + desc = "ATtiny12"; + stk500_devcode = 0x12; + avr910_devcode = 0x55; + signature = 0x1e 0x90 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 8; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4500; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# ATtiny13 +#------------------------------------------------------------ + +part + id = "t13"; + desc = "ATtiny13"; + has_debugwire = yes; + flash_instr = 0xB4, 0x0E, 0x1E; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x0E, 0xB4, 0x0E, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; + signature = 0x1e 0x90 0x07; + chip_erase_delay = 4000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 90; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 1024; + page_size = 32; + num_pages = 32; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny15 +#------------------------------------------------------------ + +part + id = "t15"; + desc = "ATtiny15"; + stk500_devcode = 0x13; + avr910_devcode = 0x56; + signature = 0x1e 0x90 0x06; + chip_erase_delay = 8200; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 5; + synchcycles = 6; + latchcycles = 16; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 8200; + max_write_delay = 8200; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4100; + max_write_delay = 4100; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o x x o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i 1 1 i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# AT90s1200 +#------------------------------------------------------------ + +part + id = "1200"; + desc = "AT90S1200"; + stk500_devcode = 0x33; + avr910_devcode = 0x13; + signature = 0x1e 0x90 0x01; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 1; + bytedelay = 0; + pollindex = 0; + pollvalue = 0xFF; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 64; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 32; + readsize = 256; + ; + memory "flash" + size = 1024; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x02; + delay = 15; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4414 +#------------------------------------------------------------ + +part + id = "4414"; + desc = "AT90S4414"; + stk500_devcode = 0x50; + avr910_devcode = 0x28; + signature = 0x1e 0x92 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2313 +#------------------------------------------------------------ + +part + id = "2313"; + desc = "AT90S2313"; + stk500_devcode = 0x40; + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x i i x", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2333 +#------------------------------------------------------------ + +part + id = "2333"; +##### WARNING: No XML file for device 'AT90S2333'! ##### + desc = "AT90S2333"; + stk500_devcode = 0x42; + avr910_devcode = 0x34; + signature = 0x1e 0x91 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATMEGA103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATMEGA64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega128 +#------------------------------------------------------------ + +part + id = "m128"; + desc = "ATMEGA128"; + has_jtag = yes; + stk500_devcode = 0xB2; + avr910_devcode = 0x43; + signature = 0x1e 0x97 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + rampz = 0x3b; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN128 +#------------------------------------------------------------ + +part + id = "c128"; + desc = "AT90CAN128"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x97 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATMEGA16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "calibration" + size = 4; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega164P +#------------------------------------------------------------ + +# close to ATmega16 + +part + id = "m164p"; + desc = "ATMEGA164P"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x0a; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega324P +#------------------------------------------------------------ + +# similar to ATmega164P + +part + id = "m324p"; + desc = "ATMEGA324P"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x95 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega644 +#------------------------------------------------------------ + +# similar to ATmega164 + +part + id = "m644"; + desc = "ATMEGA644"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x09; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega644P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m644p"; + desc = "ATMEGA644P"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x0a; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATMEGA162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATMEGA163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o x x o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x 1 o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x 0 x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATMEGA169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega329 +#------------------------------------------------------------ + +part + id = "m329"; + desc = "ATMEGA329"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega3290 +#------------------------------------------------------------ + +# identical to ATmega329 + +part + id = "m3290"; + desc = "ATMEGA3290"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x04; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a3 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega649 +#------------------------------------------------------------ + +part + id = "m649"; + desc = "ATMEGA649"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega6490 +#------------------------------------------------------------ + +# identical to ATmega649 + +part + id = "m6490"; + desc = "ATMEGA6490"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 0x04; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega32 +#------------------------------------------------------------ + +part + id = "m32"; + desc = "ATMEGA32"; + has_jtag = yes; + stk500_devcode = 0x91; + avr910_devcode = 0x72; + signature = 0x1e 0x95 0x02; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega161 +#------------------------------------------------------------ + +part + id = "m161"; + desc = "ATMEGA161"; + stk500_devcode = 0x80; + avr910_devcode = 0x60; + signature = 0x1e 0x94 0x01; + chip_erase_delay = 28000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + memory "eeprom" + size = 512; + min_write_delay = 3400; + max_write_delay = 3400; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 14000; + max_write_delay = 14000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 16; + blocksize = 128; + readsize = 256; + ; + + memory "fuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x o x o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x 1 i 1 i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega8 +#------------------------------------------------------------ + +part + id = "m8"; + desc = "ATMEGA8"; + stk500_devcode = 0x70; + avr910_devcode = 0x76; + signature = 0x1e 0x93 0x07; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 10000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega8515 +#------------------------------------------------------------ + +part + id = "m8515"; + desc = "ATMEGA8515"; + stk500_devcode = 0x63; + avr910_devcode = 0x3A; + signature = 0x1e 0x93 0x06; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega8535 +#------------------------------------------------------------ + +part + id = "m8535"; + desc = "ATMEGA8535"; + stk500_devcode = 0x64; + avr910_devcode = 0x69; + signature = 0x1e 0x93 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATtiny26 +#------------------------------------------------------------ + +part + id = "t26"; + desc = "ATTINY26"; + stk500_devcode = 0x21; + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x09; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 16; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x x x x i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny261 +#------------------------------------------------------------ +# Close to ATtiny26 + +part + id = "t261"; + desc = "ATTINY261"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0c; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + size = 128; + page_size = 4; + num_pages = 32; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny461 +#------------------------------------------------------------ +# Close to ATtiny261 + +part + id = "t461"; + desc = "ATTINY461"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x08; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + size = 256; + page_size = 4; + num_pages = 64; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny861 +#------------------------------------------------------------ +# Close to ATtiny461 + +part + id = "t861"; + desc = "ATTINY861"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x93 0x0d; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + size = 512; + num_pages = 128; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATmega48 +#------------------------------------------------------------ + +part + id = "m48"; + desc = "ATMEGA48"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x59; +# avr910_devcode = 0x; + signature = 0x1e 0x92 0x05; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 45000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega88 +#------------------------------------------------------------ + +part + id = "m88"; + desc = "ATMEGA88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x0a; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega168 +#------------------------------------------------------------ + +part + id = "m168"; + desc = "ATMEGA168"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x94 0x06; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATtiny2313 +#------------------------------------------------------------ + +part + id = "t2313"; + desc = "ATtiny2313"; + has_debugwire = yes; + flash_instr = 0xB2, 0x0F, 0x1F; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x23; +## Use the ATtiny26 devcode: + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0a; + pagel = 0xD4; + bs2 = 0xD6; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny2313 has Signature Bytes: 0x1E 0x91 0x0A. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +# The Tiny2313 has calibration data for both 4 MHz and 8 MHz. +# The information in the data sheet of April/2004 is wrong, this works: + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2 +#------------------------------------------------------------ + +part + id = "pwm2"; + desc = "AT90PWM2"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x81; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; +# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3 +#------------------------------------------------------------ + +# Completely identical to AT90PWM2 (including the signature!) + +part + id = "pwm3"; + desc = "AT90PWM3"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x81; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; +# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2B +#------------------------------------------------------------ +# Same as AT90PWM2 but different signature. + +part + id = "pwm2b"; + desc = "AT90PWM2B"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x83; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3B +#------------------------------------------------------------ + +# Completely identical to AT90PWM2B (including the signature!) + +part + id = "pwm3b"; + desc = "AT90PWM3B"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x83; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny25 +#------------------------------------------------------------ + +part + id = "t25"; + desc = "ATtiny25"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x08; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny25 has Signature Bytes: 0x1E 0x91 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny45 +#------------------------------------------------------------ + +part + id = "t45"; + desc = "ATtiny45"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x06; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 256; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!) + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny85 +#------------------------------------------------------------ + +part + id = "t85"; + desc = "ATtiny85"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0b; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a8 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega640 +#------------------------------------------------------------ +# Almost same as ATmega1280, except for different memory sizes + +part + id = "m640"; + desc = "ATMEGA640"; + signature = 0x1e 0x96 0x08; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1280 +#------------------------------------------------------------ + +part + id = "m1280"; + desc = "ATMEGA1280"; + signature = 0x1e 0x97 0x03; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1281 +#------------------------------------------------------------ +# Identical to ATmega1280 + +part + id = "m1281"; + desc = "ATMEGA1281"; + signature = 0x1e 0x97 0x04; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega2560 +#------------------------------------------------------------ + +part + id = "m2560"; + desc = "ATMEGA2560"; + signature = 0x1e 0x98 0x01; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 262144; + page_size = 256; + num_pages = 1024; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + load_ext_addr = " 0 1 0 0 1 1 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 a16", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega2561 +#------------------------------------------------------------ + +part + id = "m2561"; + desc = "ATMEGA2561"; + signature = 0x1e 0x98 0x02; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 262144; + page_size = 256; + num_pages = 1024; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + load_ext_addr = " 0 1 0 0 1 1 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 a16", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny24 +#------------------------------------------------------------ + +part + id = "t24"; + desc = "ATtiny24"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x0b; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny24 has Signature Bytes: 0x1E 0x91 0x0B. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny44 +#------------------------------------------------------------ + +part + id = "t44"; + desc = "ATtiny44"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x07; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 256; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny44 has Signature Bytes: 0x1E 0x92 0x07. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny84 +#------------------------------------------------------------ + +part + id = "t84"; + desc = "ATtiny84"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0c; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a8 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; +# signature = 0x1e 0x96 0x82; ? + signature = 0x1e 0x97 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB647 +#------------------------------------------------------------ +# identical to AT90USB646 + +part + id = "usb647"; + desc = "AT90USB647"; +# signature = 0x1e 0x96 0x82; ? + signature = 0x1e 0x97 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1286 +#------------------------------------------------------------ + +part + id = "usb1286"; + desc = "AT90USB1286"; + signature = 0x1e 0x97 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1287 +#------------------------------------------------------------ +# identical to AT90USB1286 + +part + id = "usb1287"; + desc = "AT90USB1287"; + signature = 0x1e 0x97 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega325 +#------------------------------------------------------------ + +part + id = "m325"; + desc = "ATMEGA325"; + signature = 0x1e 0x95 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega645 +#------------------------------------------------------------ + +part + id = "m645"; + desc = "ATMEGA645"; + signature = 0x1E 0x96 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega3250 +#------------------------------------------------------------ + +part + id = "m3250"; + desc = "ATMEGA3250"; + signature = 0x1E 0x95 0x06; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega6450 +#------------------------------------------------------------ + +part + id = "m6450"; + desc = "ATMEGA6450"; + signature = 0x1E 0x96 0x06; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; diff --git a/arduino-0017-linux-x64/lib/RXTXcomm.jar b/arduino-0017-linux-x64/lib/RXTXcomm.jar new file mode 100644 index 0000000000000000000000000000000000000000..afb4b164d13d0e49a7a78e9d222b777e1c90b7aa GIT binary patch literal 60866 zcmc$`bx>s6l0DqGySuwr@#C_eFFU?EuthqCoUt(@HX=46UZky zNeIZ_D}eu8Cig#n81-Yte|%V4Kt^0tL{W)eTJ&0aY*b2;j(!?Wl8$;}Y_e8?agJqc z-+^92npRwT+W7}4RPr%a9}YIP8EDc0)q@E+#y*BBdQ$!YIt}1}?9}|q;nD%|)7h(Ksk&vymwXlP^i?IW}p_RU) zqjZD-bPpq{@S&x3y>@X@w2LA9Q~@z0Sb*=dn&4M+6i9On{P6&Y3poSd;E99Y=iao# z)3;Au(PV0*U!hV^ZA_outjb8Nu72#3nBpzQ&QDO&jT*{}^Dr7OHL4;j6eK9NDSj46 zKIreyTY+srf|z%!gI#Y|&Z}D0BQ1L;&4SRs#o^M{oNh|yPbM@%c4H#$+Qc%Dg%saP z?gaXMKPK0TS2I5LKk#w=&k>^i=LqF&9i09VUxcEjEQ$asFN`&YMGh(@7%EyN9p$YT zNH;%W3HzK{Utgm&7p;(sY1$dB&d&R#GIHJk1cB#;7*^-9P2*W21cA%M^0~*M2aD;% z%j5Gk1`^t_daP4RTz;#QEZx1cJEH`Yd+{tu2EHXKO5iwaDlGxlpy)KSzj~QO5{#pA z9>8y&Tao0fT+~oA(o9@v$g}rqiP0iXG=z=5No&!JLw8B6oUX`6xuSx}pQ*(T#APm0zPw-XWlrVCAlq-NVg_$&z_l zcIkyMg@6uDX?>U7ksE7W6VkOGm=bl=$yo4C>U)e(QawB#%$}BTJxY}v! zo$WSi?Q~l}rwhLOAkk||&h7DYLE!I(i`WLY#KUjfrJ#d>Vt#I z!Tt{N^#6jqvW=s&o!tlKjg5ZSx2&D9gT9lwt&Ir4(Ae(xi+|KYK-9PlFcWIP zC@RV>NSAMT@)E>U6Hybkolh0Rl$1rXi-Ku*<$h>i0K%3K)-N(ql+P~qzs`68a*}~=|shgTOS2J(RS2q0A%3qH2nzks_ zt~gMxqVJ61XTEnc8Z-l{t$t2kX{jjTNGH@{MuL2dII}iC z;(luzYxnl-O@QIa`p8v-O_(x@eO)n`(9|HtHHGuppJc(GiEwx5#@n^y66o0hIikYF z>}4NAihfxfei8Tl588+f+2T0*O&LIcmqUVo1#21AYxqt=rEeAV?2qs*0GPgD{07=8Mx8}~O;0kbUU#Q;Jf3g{j>o`zs#6KO4)oi8@1 z^4`jQ($+TJ$iV zzjaY#7%NOt89iL}DY+ueQZj$;b>~#Y`zWJC8sy`mR@z^9mI%JJjJf&mkHaGr=ZC@MU~@;IqrVyii7lvlXe= zm?ISD%3)c@R@N=@shyg$dU+N5ffChWhWLbp#3KqhCtMztt`L=-0D_Gk5Cdf zGPZFtH!=U`SsS40rl)v|_x>_N%FxDLTsIX9tPnaETd0Ht3X@y!tulkY>Y!wgxuW{S zDs2%tQzOmZZy1+xl756+TqY&QDU>r?lba1VEfiYYK3EHA>D7ie&f1hr4P@^kIKO|z z+kC#~@j4$me9i)rqh?mpioEUJ>iWEQA$-QL4R&Abe?PL#+kDN#xyBH5 zP6OcYhb&9#1?S|ZY$Q;)1mUK={9de=7dow0sTUWj6_Ok#h6_;YH(a6(BA_~QFyL+& ziX)%_cwjadr1?@Pp?n}WTyr{NdxE(Y39h?5`oZ(P1j9i zZ{O)EMeaE0I(4{)13Ju2U3o%tzP6+pZ3oU(&;y7tB1S#{$B^-USDMVu0{bjoC$e9^ zuXFBExmE|sF*ZJ8j^>a-l%0CI(sEpDGK6QzCu;qu(A+TW%!pcYSAPPmzJcR;)}heJ zQ1zpZ9+?@q)C2~W#`Ye|Yg2*`sjnWmA$1;zN4RA`&(add98A<*6)d+vw5rZmGZt@n zZpHX^^dKPIB_u5)6mc`%S_4h25|;HC57-c*w!~@%1SxNsvAP_nog`MSv7Wnh9zvRF%`Dg@fpJ;GZD&sw`A=wuh(`6)FO{DqG! zB7C-bjNaA)`$E=JPJ`UeW*WeO8jym;+ElEN$$7x~go2g30G5{{s=Y!N&2w!3(KUWzIUM;2RKNS65n=f+GG zY#3Tw`8I|_5sKx}vw!%Bo_1Zeh=jN(h9^_kDYb4>!N_9aHsuBqru2^zQM(_sHXu+X zTgid0my&RuJ(b3F2oq{>oiQq%L7U9>5cH)TWT;wnFh0JU<^Y0Dj3F$K1Xba*G%`Pg z3y91EF;a2D@6Iso>E{Sfsll-fvhT&)vXC?nwSk>mO@RpZgK}bb5P;}=?RXANTu8B1 zqpf3Uxw?oxaSyQXix&tUx!YMKU;1EP zcd9abIQ*;HxXZ4^jNC&Om9GHr5G5cw0Rb)|2G9zCU1e>Lcf{y!{ON(%a#i$-jo3*ZT zs7_T~=J5Geg@tT}n2u8{$EZyRFIcEt;>qaDl%(>ze>k0`%TGevc?@neyw^Jt(m11)NL3};A1>;c;>uz zupWOiYYGtG#5{+&6)n{NDrU6Dsb$cM^{M$s9LX z6pC(B9TFzc5fxErede%i?Md^ZEpN6o7Q4s+37=dce0}k4hp?w*|MY5kcrSy zw6riUu`vYm{cW#GWjO0*H4MQwwPMuwML}O!ws12hF?DY z+HDY6Hk0^j>$~?|2k77QTw4LTKN)o^KHJk0x^AJXnJ+Sy?Pv9>MvuF5fHz)E?yyVs zoUPsGu@Mzux(o%`njql9*)T2CV)VA;z%we9fZH)(tq*cO8~a|M|I&nF*nl$iYqX`P z>y=w?&34wO#Zb;%uOjeO^!-s0mjzf;YIxAYz@6`hkaTyAUWr83;)loBB1Re5M^oU@ zLy;v22pm^>vw!oj?r#S8ny!{y$c%N-8#Hbo_|wm`3RtKgZA5GbG4-tbA;Eo%X@=UVWHvq^I)sWJMG~d0I9S}fWN_EBLL*qfJ0?8i+3i9{p{%LQZ+dnbgYY!B1`EvM}^*~$zpw8Kjar^>15;q1MZ&& zz)CSuxJ*cgp}?pi;upc!jLN7Pxk$POmy(F5m@v#>8%fx7KTied$s#UOiQFLb!my&T zGBLFzQDPo*^u|o~oeiyEcj5IsoQHWO45H1ARpd<^)e*J>4U!U+n4~y9iKVRfH+75| zZ^EUmHCXqtCTUNgk{fuKn3lC#1#LSmkNeAMvnMs1GSoUF4QrUhu8fvxQ+#&LDR!qI zzsvRxm7xyVZYvvRLN(d958i&k37nU1?pju*-Vfl$K#2V3!YH$NzLmB_#a^K34m2ij9 zuaq4K35ppH%5m#RESSn~jIRPWafZIdF`wtMWvA^P$8D{Y3Bs}O7BtXTjcFVQ1szM^}*6DCjHTuM=vbNlR8ZL6N8gN zq%B6UVt;yNXg#{jjV|1*Y7C6~*e-WW!!`fVGMbr?XGRu~8n}y}h$cXWj;Sk|v$#89uBMF@%j-1Wg?PjzM)x*1O zW1%dUN-BB-l6zrvM{hOCShi1Jg507mcoKP`&IcVmz6li*tL`Bkgg_zhaBNOf#3tP_ zP8>RsSQ((8yd#0184jVRF^M|m$XWSlaz~mQ;FyF`sOM%1Ml6LG=i)4etT*ZOO;O%m z5!mqgH9`nnvJ&rLIfa5WDc)?`T+;r+m}CJ&=_LW6p8IKz&?n1)ypz@wA^+GeFaOYvv?d}rqJq`NJL z14^0-mVzC6r!=%i7%&)!lWZ<&yfNzY0W=slg%~!5z{kXhp&^Z_2pZSuW(#*>zMSMV z%g028=86m57sf`=hVR-0G#9;a_v{obq~Mw*YCd_F3E>>78KY|pWM*@ zuD>AvudS-AtBtXPqnWv#l)0mm@yF|bwE51_-7-D=h=K1p3Dlw4_;X>G#TfTQ77^00 z<#byyWkw*9BNgV24>tH7p9n@c%De5D;=~W$57VSfIy(4xfgsbtFu^&X>?Do~#Mv{+ z81jxX`I&MEG!!|_*ObufuK?bVVsva+^;)~mkQm?N)ZZ|RYH8gwg&!Xp&ym3I){AR2 zP8#i~#s!gH(jHt!XdE?@9B;E>?kWUZb&49Ch7-MJ5)`#I%lAZ)D=-StS3aoCox919BL7_XuKx{5inbH`1(s2+4~OQy5(_yedI^!Z<~F>e`Qd{R?*qe?2mT;KU*YRx3-JC;Nak%;6U`?=-~K> z-J=s-gA-koLtQ3uDM{)EgF}Qrw&N1i5{t9ql9MV3v=rh~l5EPc28OzJ(z9YmhPuu_ z)}5%Prp0TZ#wN#upz1Gt5_beUOhP9sYBBcpCw;l{lZ;~lz6z7jqKQ?6kzl^QzTq#t zVyt4W@`02Q1uwa2Q+OTo@T9fC!tzJ5@eX6AWM%}(fCZM~hh+`%iSfZ3QUJaZAhyz2 zS;fNq46Ggwi_0GiLwf?GbPRZ)TFQth8h=KceR>YlO66X*n_ew^FDkKK@GuRR3Iq zlR>r!Nwt#J8uF9PD>-QV7oayvd-h`A60^50Yk5)YpaL^3-LubP!a3BJri;+Tn<5!q1^|HNoP9tn2l z(XZ0j&FYVix_(sK8DtN~epybqj+XCfHvD2=1KK|f91*3lvAq;9c$o^PfG(S|Pxgi# zR8O`wCFK1oDUu#=GFA-~4Xw3BAcRCGD>aYwUY4K8?OeXgG)B@A~$Gt)Mq# zjCll91%?f!WOu9o!JC+*>QUAwX9U*1fPcA>`SY8tU+aL;L5MzchQ#>5;)@JmfQ`9i z=5h<+%`I|JI;c6_sJ{tg9`1{+)jgOcH!GG%{H5#Nb5pmju3?e$hBOz=DYi=jfFZB@ z9IeCpa@Az*7e=tnIg12=K1JO~^$3OC*d_OU^6oiH%h;j&IqJSC*Z2rkqD<2hiiEB_ zPpNfo&m~^sMP@T^b^uC6o7_cZ^%oPPd_~HhkC6)mek$9lsFH?U=+8cd{D!R5F91 zs^bZ$J}JsGJ}QaKls3ZJZ^x`*eL1Y4x7P#D;0M`0)(|wsTvhhNJ&}IeP3T|Xxt-{K zayA8drdrCoJ_CVZrXNa#&?aASV{k4jnWfmFJu^TI63@WmyvJjVXu$|F$7_=~yuJ$| zTGHN}`w>bbSD5`wT!lJpcmEPc&C8eo!;Gc!V22ql;&jF8X-QhqjNv0H@Ou7@aMK~@ znK>!o67Al(D2nb$J<<4e;k@kdbz4`AZ);bK z=j+8>%CDC|0?3}C)xCM+BM(j0wJ}gSPs(xjA{Q8k&U4o2Abuw#B7k}hL9`TkE^QK; zE~G9+^w<53j<1?an@b<)c>cemgXN#-_+x_gR@mxvT;o8s1y%x}s-YWkxSSA?Ovo3{ zBWL5@nr(nJuF7C*Rh)DE9uU=WVdXCoybbZN$DlBYIsODM9B$8c{1VcE5FAX8(Ux22I*;+L^*!a_V)!sBcVPjnO9F@uR7JP23&$sSJ#go~*j5{PTHs;VPB zs3<&cfr*|PKW+!5o8#OWM_4^OXoV|A-RrzyvAN#FsZ@s2jj${9O3J`FzIqIid=3$2 z%!&%Vy>~Q)1!`3>e%|6mPjMbB2bO+#Rq+5pl|$JJ0)5urV)@9(SN+C|$toXsmFQ5_ z`iftTUYM7@2LvvY;KtAzizS7OebmOt_bn_{FXWYNR1oK@wBP;u1Pc=4D*>fQmY~Ac zT~3QmmhQ4P2-0bpWuafETBaiJr+%@d3&D!>=w3bNd>7}rx}y_)7l57iOm2f}!7+NS z+3c!``xb0$d)EB`%rkTCG%yUTd)($7HYgA)C{;5WC!MSj+UeE$pk;Yt{2+R+X{I$Ho0IfMPB2_l$M*=JY5cTN8s1BE3|Qe1Nox ztEb8>Qigu}Ll_vXHuW2Rfb`*SUGD#u##sLWRBO3W2@ob!o@2|O9G+@)9Upq#K%?7! zTLvkg5;ZhULR)rqNwg3vMO^b)onF{}8zMMcmvjSEUJhiq`Tk(-o6ObK#tvPBC$q( z=~|TcMqBuMPRN--4Nnf{(MQq0*zhN;DGhmXScB@*?s@CaT5CU}Y+e_Q?4r;oxSB&2 zePPf0>B14|{vvgB_tH3)Y2z5(|HBWK7RC~OL7wQk6HXZcvulgBU{9XpVmEmZHsQOm z?9*Gs4wBH!{ECPWvZLCuNH?jdF;j>W$KkM;dmcc4 zb4NC`+b`)4?%4lZb@9XX%%kI_gRQ*j>rRaB$+=om)Ll)5a#fJ3Eoi9k%=;zeCC^j|vaQNA%g!FNy`6e1J@|Aqk|{CRI<%Zb!Uv$ zXt_io-b%Kh%KCHBE+~DoWQQJ4a(^N9LKzKWZzqGgqi`2?jgErUOM4J{jYPU#wcqoL z%8u7EZu~eA8iE->ZcrWh8y0*i<kTny7C6~|~>Xr+bDG2Xw!%SN)RY^TUR*Vx#oESP z4X)%dfpn|#c7gy+V}W%E(xy?xBzo$UK)>_mZjv~0)JDACc=Y* zTBz!U#MKl|szvH)xO_cDtw>G9UsZCK={|>-z+^0mNfzTF;R*HJpCu3GIN&ITrjQU$(Ld7k#X^S|9LVlNzwDIa%}OT{LU+Hq0!gjI3$So)^3B zFLQmToLmT$^JfhNw;&#f=3Ujq6_KT|#=)q)jJC*NX_8ORz2Rf;Y=^$3v<+rJTB`l> z8E5wx>l%Hi_Q~23L94`kpo+wN!1A)$!kGCyDE-OF_6S=#INY=qHj2r*p{r}qKGR2c zM;WYkGqGi6LYE5ihWUK~3jo)t65l_2Hf*#WKIGmoltM*g`lZ4Y9&$Tbd^^OSBDTC` zBMVtwe!lJB4}#^T>DC*^)5iVJ8zdJ*R03EOq84i zm-c->GX4@jBQMbokDTB?58wH zXSZ#NUIvc)(OW}4ra8+6*GuN0336%gIJpSBMMSgPWEa83laq*7K+4c3aSjSg3JN2< zw(d~7pT}GYY|zX+xMD_Jvnuoy_uJl7S&7FS3HYxDbDF)v@oRk84=5Xq7p5=9EpNqa zgtw<&I`=b2!BSbB3TN_^mew&c63Ly)D{`%SZRT6&4-h#EFfmM{36=}-7+0ATwJj%g zi4usTY6kfd#-J5raZ0k_WAh+g1DIbeO)Nv?CPD)Z>l2#r3^UtIEPA9@zhEYvscTli z`!_ldeIttg+R8a$S!=MA5R;CQ>9W|;i?ygP{7Pe_)AX!OTX|4ls5j5m@`BkWA*{m% zC8GxZwC>u3;g+-5d#eV|a9L(6N~op5)ClZ_ zB}Jw-)*;*h#Bn0AqH}yw0cD%;^I(Mjht&*J!ra&R05qGEqiM47&2y_SF4BT3Gn8R% zc6-NPj91|MAkpga=$M-AU}&0KU)Ry`>EzwzrjEv4CJM(HA7L$bW{VTQZ-htlZCG0! z?s#Z*jhGAvp@4J9N~KXOU-jJYtCuf>f8Ag8MaHNh%#5;_i+OUdIw4ZJ2etI|36fjI zQS!rn{wiG+x%V~uQQ(N}c}l4-{DC8!3~VmQVhPk#Ceoyu>H-V!DXhRrk3c4!950<` zm>r%7le@xu7r~(_*%K+^vVWI@C|8AH5xahQshXfPgsDj0l0okmof$od^o$^=B^8jU zg^)#YgEtCHa-*ao{L8uh1W19~S312npgA$6k}J}ZSQFh)5)b~isJt+<2e;&27alyE zeyJO~g|Ij~dUSmfs>Y9Y8Tq z*1JoGE*3_R(-tL%mzTuot~}Fz=>8=AhLaU~cpzN$oyaRIwqOnSW)ko7^2()d*FS5R#$E&gj-2*gg*O zgh_pI6#Hl|`bD+Ax+fh)XxPr8X5MN8oRMaWf zN!+5?6LdWWYkm~Y+0E0iognNs2P;ApX&uD}(#t=_tSk$%|0#K|5d-NK?FMy9l2ts` zJL1-7?&?V!TW}x@e-s>dGWf$%{3_jFuP>zP$qd z&M^o0&?QpO`etuBI__wK3}`PPI;%=yxCLgQNIi6y9S*I2rOkfZ#nNib#VseTAeKj_ zwSdz{Hvou1Q;gUyIe9O>mTwwWbJE(X9gWQ(p447zH9-)EJFe@M&=!5+%jXB*RtVc2 zofnMzZMwBeOpbioZjccR?!vO&HUinI4ek=H;G+1j%R1&z(|A09N;CQ-)whebnk3!N zu9sW~ggOe)+)~bVZov{_rbMOa1a^8CJ5DbPbczSZMnIMPyAZwuvq}3}^f44#^iWeY zBk_Q8S?)9lY_EWu7xu|lkfJFu8o4LuglDtnO{J5!Ka9%#j1rMZs862)5dY3A`2BF{ zpU-rPGYkDT;QkcYN~;Pe0*GfsKKzgv&7q;W0H|VNIeO^aVH;l>qBIF~VVzv(cOvI40FEBVx`jw6T#Ns}fh?w>%H1B;AFZ%Pw*`&eg`cqIrd zr4U6kYxkhDwyMAm4(sRJ@YIU74K6hVsLaWPdbaA*m_G=iR_xsqO9MVJ04W8b=z^k zk+oQr(sX9|$n48LtEppW?~gTW=OsjDr}{@QA1Es&v!=~U|K>w>_&xU>^JUYWmsGXR zvr`q32F~tRz2^MOn-EGQTrtvF)&O_qzL-;F>Odvqh3Lt2_X)!r9GjGd(?@nk!1Nub zW3reYkv6xhZ}^$X9BoBkV^Sot9&+-H+N^c$*R#4^hv(6N<6tVI)j1m{axS-$G$30r z?oF!@CRp7c4%6D?NgK{TmL{6F=gzSAZJPW#h=Voij8N=o&#B*;hNkPyi@3Q7m+Z%J zvrEB4$gA;{kO20QXm1#iKr|Ej5@|1wh&RxKyD#8fI9QfA3;NQ0kA;Xg?8PMCi+<-j z&5kP-%-EFn8u?r}s;|?Pe~3v!E%ca#0B2|4tBA z1bYcZZLSu3zEaau1f50Y0Z$VX8Xnr_tsG)`p|C>}a4NAW*HmIBxosI>JEgwG{?q?U zn}{*SXHw$x_}y;->H(Yqse;=2I{E_JnLP-=)2q=!&kqE@yC$pT^eJe1m+ z21|I14-H3W9VO>H9ScQ5i~zFw3Po)bDH}umR|cAD+L#yt>@X-svT#^nLXjuV5Vzx} zH*xinVSdT}ZovYw6wW8g&}B?4Osr(@WUM12QFPIdIfM#gm=D}nW~QotJfl9cw*Dpl zBY^Rb>wmT!vHtrI|KyTbZChjk)WA*sNBTMy&~kLkdTOis(%YIss4OTbI#Bdj1vq+R zztt@RyOK*jH$!5k%N~NQDCQ0pvKsdGC6;r?i4>N@v59j&zVASc7u1oAnf-`8j^=my zOvC`BZb_echi=*%n03K&9m)k7;9T-(TIn^}%zbxlOYT}W6(ryi(LpPhF|TUHauto& z5&2o}m>h3!73Nh1i}-yP$&qaSY~?s=VP$Gbv_cD|{7^Zzgir5{m!dJXXI8)pq>U9`4(I6Aag~%)B z@fLYAJu#OQXR*VN#lx*CYs&KXuhPE-Ozex_+|qlFn(UknTe+L4;;9>Y+9&_0b+yq} zgR(N@^P&AkQAIWm!l`%izM<5@uVKSzlF7mzU&O@GIGN97Z2xcp&!@IMGMnEwnPEZ-U=;7hl_G>q7FFwjPW|ns%+V=SY-mQ1gRs7zgZ8++h zroCRx4dzOm(G&;4oFE4N7{Px0sFjcK<|i%?4_>;^?B_#BuQ*$HF6N3F8MANcxACu? z`rmD_Ji{r%G}J2udD&jMe0ATg;b;!IR*HtS<9=vMU`I~hLEp;C*y>;Bka6s~&4*tdV2blOa4H{ep8z^u!47&(j$Ys^ zDThM-i<(5RuL z#xfdhgYs~7*oMWjO>_3v%WAc*2T>gQ^}b|ye))xt}*8c=hY{u)-$4!74j?! zhkXUC&v*)m`?EX1g<$P-nJ8;wlJ%qe&lLP_C}f;jGGyfI(G(oHxFOp(CDzeGL_<&k zM@|ezC!s^P%{%(RIRsRmB}dwZR=rTh)afFQFBI9-By@#gK4V;U>542ZE6@y^vWIv$&d443|wy`haNB$y%opL?vG;GW z^_NNZU$OPS=HCt9zTCd_^f}x=Nm%`#B>eiRSojYXp82mV3@;QRYho{Mp<@xFqhg>= zOyUPjU#oY5i3Q3}ed~yPJ#+gSSECT;V}l3*laOe1aFj=BVrZmiqz7zZlKmM|9TQ6p zQ%!&toSksEuM7SU$Mmj4iY@hnW4Hg7h4KHz!v7`OKdD$=TN3zV1ekX!)?logn4q!{ zW;6BnNr+M&QrKD%3d(9;fW2Y8YCZRTPBI#l=LY0SemX;*xi5&v^;h#@X0zk{^Wim& zcVr%B&sRD^|2l6Tpl2jp;b?uiQ&Z8Rxs!OlXGgOY_Qum+ zQ=__dtIgQ>B%2@N@VAe*CxLYu2pi#Exq`#d1_OP@V} zNJ&N^P9cv#3ed6nUXgpDu?uVepofBMISp;Y{+ca54>~`fV;(9sR@g4&_G$?yd6jAh zGt4=&Rdy3-_pO4Jk*1w&EhcL973?>dtDth)<35No^KU0Nf6?j+`mX=tNb5Lj*;zT% z!AWDoerCN;@8Tg;0(K?pVzXSP6zwF|$c;ie5YJjv7ek8%m*d{PsC^m~-3Oo-xdBH@ z<0PD?gS&UGsQc}gx9e++Pi9q>f>17KONv{ZK=tca8t2lJXPu<{Qou0osN^LCg*@Mr ztC0i8LUo?gm4vTCQA9{9Ia5d&Z5wfCpO+eojqN~>ln7UB90dzyL?^2_Qd4sM60d#o zkbNwCv|0-en@5sIZ;LZ9)|CH zlG+J4QEkmMR2a{@QE+}@)!b$0ihTNt*Uu>Au{p-eUHKpOE+Yfx-WY{lFiv+6Acj3X zbvUF{FzQm-8%JL7EOfzj#G_!(X(qBj+~xbp5xG!t2FjmDb`%$&03`FoUWZ|Pm!(x; z_fWJtQW38h{86HL-}B|8dl`oZ427+_BAmtyvOartfBvd*HsGW#FCSngnELuP@cLjF7?&nZ>KyWn`0Bu74ejwYTIxYsLa+u zyTLxeQFv*Ie=m$bPc-VJ>$m;-=9=%GHsf^?+d*^m4WQ9w3pWh%vf7n!vAppHwD*lS z72#3uu*$FZ783hmb1yFNls$IvLYPoC=BM5l{E~gL%zq$m%W6f6@dIrJpnoUp{-Rv} zMBM+HIU}?C9RB}Ru2KcwYyT(Z`qvQuPPv{A8cU<_q9AKP(vlWnYmI<6cK2`147~3} zg!J{neD~%Xd6U@8B0qg2I<>&#R3qej6EXNH5Z;601fT@gv z)lM-u!PL9ws8vD+r}EdZ+Vg!&JasO=99vKmfy~Fot6gS#?w6_8Fu$b}k`Q`M8hb{1CDGWy6P`T$P}ir8fnW?lkv9xjz4!a!vKb{eLM}i+?FslMGELt6gPa z^)*>N$y5l3uDSR25+|R!HN7!zQ!7eYLpzf!iSHE^#D=4ISV*zsq0iSecgc2cKZzw;k0a{{}6;Rq_Uoj`ga-^6t>(lW-Iz2i8Adj3B8w!!p- zDT`iTqZQy`@#G5H`L>F!GI3ug8`Daz+?x6&e_S^WyD9a_M@6;w?ClRi){k9A|9>mj zzl_5a6j?dg{zA!0nu@dhAO8v(-~jRAo)815ij|_%e9hA8FsY;|;DXy2VYE}s(wt(Y z6SDT>Sa=^mUgRT98zmvJo~~}6Cpb5kd0Lk{-@V>}ylIu5vQh44BoCXu%a`Jaa3gz4(Z&V!;^}q8{rS1Dhe~ODY zI%$y`QdZcml0#P*OsLDMz4MHQ-M}?Bal?NyMl?o07#^ zYo%!-P9NAMtX1>#M_`I*O4lA-i<=$=u$al?5G}fK|C}_C`b_&-6Z|I8REjzWY4l7R zHVLDagO&3>L`u+=|MJ-Eg*Mzrk2=tEKM~ zfXqO)FbDGXh=xK%nQM52m9mj`leAl6A=Mz=I!(0G4Oec%U*B#$n{$;!@343}i5B)j zTdarK2b)M}lUNft(aC&wqm5Dv0p@28#vph zVUwWW;mqrdrC>1T#P8kjDH-k;xf6U3N5iX5$}wY<)HM%-@1o`IlP50k#BeY_dH(*0zO&crPu@OlM?`pf42wW>MwVqrp`qjT5??*|)27^b~(W}V_M|IRA z+p6i&7A?AgvfDoNY|uvV$RCbCOb~jhzemDE{~~7S0s9CDmnF;!zogo0M7f=Xdgp@b zYz=v67k-r@e)r1V^s{_U5$JOiFou60Cq%vsrhfyzQta@#-T_P4q3!^-psD;qFah|284~k z+k6$?pc=e~c7(o$W(#QP@$Jd&(GDO0&21zKy1V52t$M!iMjo}6iJ6g^5r~Op>NuP>9F`Wgj1V0JC)&tB58@B$ejU`VnD7z9{NGA< zoc}4xe;!1uzuVwIQ^P~GA}~P-7`Osl6by?W1wYWN02XOcPmXVR6eZKj<^Bplpl))iBcTino1_l2PFg0_-Dm{r= zzTm7#a01e9e59P$9bAvOZ|U<+R`+VB_brAb2ij1{?0#Hk6IbPV+$4|73fE=KkT*e( zbbbs!3E8N9abLkC{-~izLU8^>s~~#?u3|(DmC@Q_u zaqNp}BthyXuTarOQwI({;|e7X3g65c|LL7hhu1t*;kMUk4K;|U105!b^SGVoA>|XR zLt!D$)fOcRg%z!Z_&&5u2e4x`2KVWjW?kGV*z`@Gc}tt5J6*MlanZeBy6j)vRP=2*FXs9^yah(!Yq7X{DyB$-D*^hkhJJ5Wnlha(_Yj@uNGi z{o7XeuLx38Qv3HWUr69|11O1HDZg%vIgum8awF?`^Mm$Ba}oI?BEoHl?h(iF1Bb%K zB^l{4qa1h>0?Love^pdq6nkfbFT%*jQ9|R>w6vVIZ$MrxtN)IT}~8Iy~Ds#NQ6RFQM()oyQ~oSlb4_rM%zvhnMeLw51F4#pkuIn zMD%y#!v`#FJ}78d_Z70(e2ZRtCM$WnXI7(mvJRIC$`lF?CA&HaAkKmvUZ1Y zWszVg51YDt&~P!nQIrg2v6G^OsEPI3)%15Sg*c>eN+rtd9aN6uQMeM5MP96Z@2OT*x2QM*jCl8x4 zcENBN_8uf7G3?utcgb)W_5oOfqnvM{yOo@8fxBq9m3t4Gk*fA>sk>~rmHPm^K|EYn zhqlaJI9%Jkrm$U`$Zs4QefA84p18IL0GL5dP8Y|u$xHUg&Rqc4AQ#8R@Fjhut0Q;U zC4M9X=f>zIZ%oiL-qNmrkciB;3_Ibi4$zTh5E&0d1bdI*-QL^^ct>txhsR(Pg8o5J zz?x4d20H%X1L$BLyvK}>EawFRWCOaPb{!m$DpB|kNbnvcS;Cs0-6(A6vro~$X|Q~P z3WQBPkO7|E{MM{9SP_Upq8>ViISfVslI|&V&~}S<(>RLFbEvxgRuUrJY-@U79?XhM zCrsh7YcP+PM@Wf-a5P8@k*a_uapewgd6Y9XQ-5sk)0e(!A<;AjTqeO$;O=ps7ClO2 z^5d})tUZHJ23kyKqP+P<5t}Cs#2M!A+~v{xNF=x=pSekyT|kk{Wo=oAVS*S)*c=DG z!id8Ih&!YQkVy={d`ZQ%-I=!H1tv^PD)74tkN}XWjq4XSb`YJ zDRFYRbIQ8YF3^q5nuy>w{O<7{>H;UX2*e@Z^S5gs(!mM3g5W)LdND3U;Bc!f0<=3ly?_hd^UjSbpu*K!R}y4e+(w~|K7y}w}G}L`2el&R75e8iNXGb zhX_HL%zBEM=oQFUasn^n;bmbBt{YC&y9OH>=0&bID*EL;Os!A%5@lsxkazMZbg%wF zaBuiX1$tL+bT?mMBr@36*!zxsnT;E-PD(;ElOY-7B-Cl&InXyllyZlqhj?XEK^>Mu z;WJ}k*3KsD3+#Kv_TfVS$a~Iq(nA7B=fXu+PqpoZCfqw2IvO|305aqk|dx?0K73R2ULK^QunX58OIi8gmnX-?(;W9*%SYw5N& z-W_Mhwr$(CZQC|>Y}>Z&WXHB`+sTe@-gC}(&$%Dox>c)d&0c@3s_q^W{mkEZ25NFz z>qs9XwU*VcItoqQjTK}Hf(m#<<5$K=c{}LZVt`HG(m|mrk~6wlk$DIEh@e5Ukeb1e-}y*T z!+Wv%RCW>0ZUs0oWr{XF>LVDMfBkKM(avn z1C^G+?kWmR(+yUI3k0NrkbWdtI6R}FkbPt-GNA+&0mgjzP-8xQm6;UfU(F_y;m|oW z{C9h?01*3fIvM1_vNZd0HkrwAMFW2(jvG#HOj#&Xs)wdm0vz99bd#o~uGZKYz=Gtb z7;dTELmL(3&wm!fG7U%MS&=Jy;n zr$sR`i6j>Ln>tm-M#lLaWw)?$$;dR*qTr94ssKNc8kBa6PlD>=LjDq4GNLQL_oTx| z<|JmxF$RXf67=NRNEqGLe#F~mPDGi|+(X-R}H1R2^Lb@XSqAt6m# zDz$;X05QoEFtHQ+Y9qO;Sn>I+I;bV#05i-V^uu zwG%S!l-x?`RgXrRjkvAonp>gk;DaZ`D%(`Tu7poVs8t}eLRpuHPBzp3xEeH>8WuFIrfJAkqjSL zZVyYmh{EwyUzdWo?u^+_xWan6Gp%n+(6GR!d+#5#yaBA}0CWOVLVeP3YN0-*wril? zih&g77OExRg9k>51h2vUZRb@v^ogv-&p5$J=hrbs337#Hjn&1KZ*U@H;a#Tpm+zsUn5kdF4r1&NQGF^d;ceM| zt$b8PkIlph770t#+2eVP)K>G!MLnP@5yDAW@>+>7>Nm2^Bu6Bjh>%xxgW^?(P>#$5 z6H1DPjtlNsxjnd9ntd7>T=VEIz3bp}Ew0H~peYfA?E)9Rk)$1h zr;{v!!I5^@crg*#D?g-WFcMtAt~S&mIL;=pxxmLp95l`36=)b#T1lk6KWt@LM5nhx zik}TyVW(X?XTeGd`L*m}aJ_3b1^#3y#`0`%Rm_Rjxfn{N5SKHs1#vQDp)8tn2RqvZWfl zaJDfnk!(d;*(7sjz!0xVm(3HT+Hn;Y-4U(dN@Gc%1pdf~p}5`2>;THHMjzaQ0pZAk z$Q)>h@xd1AVY;uwpq~)hE(_9lPY?W1gIv9Z~grpd( zO<7Kw$sX_&yZ?-bt!`+nG+SJ<#OjPuimJXG$G_6VQmZw-*ffK%D^}5j6S$2jmK0)2 zxG3kk{+Zv8th)~^7d&rb*MW-)` zI`$ZKM9@55`1ri&K*8}bflfF_P|2A!a&eq0xp>MeMuf6Q;q7qZTPn1mMHK2?)MY-J>4Fzl9;QER*S4bY;| z%&9ID;hbw5mB)n5NtO>J*9L7`S60pkkSmjF)z*xJ%Rd7CFy7ztUkb|8Yb@5%sby7l)CQfPO;STSPwVYxd*!J=4;-hp^UtiZR zR2t4ndL1;l67aOrQDUI{lM2Ud;76P`4tY3>$6O1$w8pzSr&1A)MDw5qmB0p>K*u(4 z(=PCmb!w_5rwW&{89Zbd5?KajjG!TiygG+iP~u#1l3aBXJ!Jms8j{r99Fdu_92q)! zT|v3|X*@OwT}ivfEBw^L8p6~{&!5F7)WFW0cx)oJ#HkdSQZn=F;L(fgKcnZpfrlYe z614w#_#-|*1CyTlj5`~vQ$1pvoGB{Lzwt@oNmf&nExSlK__ME(FEz_oQWGtqpjbwP zHVGfDv5YoZCtIG^L)ASO=26edDc+II&xq)sNa>qZ&^1bO*{KfPaaA>*5F2Aj!W}h4v{k zK&XzBX%QCKRYmqWGeB?}A-Rl^Y0*j^f~r%njw!4XOB%OOC2`j)*~Ayst0s@}eE&SI z&?cNbR#mUmZd`VeQsj_9m9!0?S-34jr`;2^dpHebmMAfd@YIO<2!ENY6u9?~jlkPH34n$HmE-#i}+Iq8hIm<1mRg z9g7-wDT!e~h(Q2Iztk{r@(^%5(yD=k#^~5+k>qaPOIDcc>?7n0f!PbgM8B#&PdDh{ z3kTIOYu?XoK-z8~Q+OWSm|o)-o~+N|9h!GIm>p3&S|6zCS|PV=^BV+AkeXT|w;1C7 z5-N~xll>h}kthg9eS%#i768RnA*^ANeI^zV(^{wreZ{(8(!&BQK$2=GOLebq7@Qz2 z^~7#0n&HQF5}lcgwFoGBj%u-!hFO*2K`Rm{#uY0hE*$FviOd%+#J{gpSn7c! z0IKKFFYpgxT+~htV@fqw-p*K_{5)XZ|aOWaPh>4;j*mSk3kl`PTmVt8+=>&FEuJnsp5QESjVB zN#v`|gA&!&Z3=ppauC*(Nd%f13RaNh4c78S3rj^4O<7eF4O!okwY4gRRSE?pxutGD zZ`IJLOuM?U=XIJ93v>nOCITY0$7^l3GAA%BtLby!E|5Rk+Q5(}2ECh*7`H<%<^l%S zk3HFb0}D)?AoW_UJ&$ym9sa76IpBmu<=BEum zor~so0XJyUZ!dg^$B8MLz*rKAR-cqx89Mwt;I!qB+vl<)Q&taMc1phWu-Rt;yj14_ zB^B*{iiFR@<&{=#>7GVIh{EvK8QFw;=(nG17_6@J-nmgWnR z`FxUSN zPRCl=(s5k~smmg>)gIwahFmVUu}A`vnfd{MoVwXaQGS>qey{ilp5{31z2qwT=- zHVmET2Ixf|%2gFpGdT=%tUl}NI!=7?^@^LoT z0$&4@8Y3WzW1m|F6hiwi{0Q|LQ33TaikKjU2@2Uj2lap?mBG5sWm4%5bwq^Rgm|lY zq;MAd@+M1ZeC>3x5ai>cSQI8T<@oh-GzL`w$F}Uvc#vz;QJ{xxwSgvljFpxuVQ! zwl9$^3A^M`Tn-$3#+=0)MRBsARd{>U2yyzA{PHa~vcSm}zE0*N-kFl{?JL;Y-NAAWYWe1=#0ll=qjeCnOFKW9{F!TLnaFJ?8su2W{k6{KC#yGaWk?B z$DM8@&}hv0uS4N_>m=tU<;>dqqBjzE)D)6*#_5f_EQCg{*^uVW7ex|pgK-_l%nEy< zyJk(rS7FBzT%_8tE?OdH`lE%N&?3!fyi!0mcsX0r%!G`E-u=$5gKS8-q};60!euJ8 zO7AudNo0Aa4qhs4>$10rxkgmz#E@Q@7|2Vst9z$f`$9$J`z+*%Him=duPB`_w1)W& zeTc8MN9uV|_6Zb6=Ie|Q(0byCvPPti2(oUGI8aCNs)A+g7TlXoG{U+d{N*UOP3m>61ePOs$2(H1?oxEW_ur+?+ zxQl{9eQjaz!hDqpz9!fnzo8u2o*LAh9PCMm@MTr~>e6~|(t3Yu^T3tbJf`s(w%`4V zk!uSs4O^be>fw7+>{hl3b&W@o_M+Vg)O`6cyp8AUj0%T&yNj|H-PI1tA$v!$jQ`bid(WCT&Y=YwULzWS_TjUU3M@%idB66FolB|+~2`L@I z65<@9NBKn{4`loB>J9;e{m^cxgni#okg~)JRz}9YS8)sh=8Od^Z)s@iuu0YNJ^J{i zYp7aU^<;wVo9<>mEHTG@f2Tq{KJfi(&|o1Q5xM!+r0>6tjQ?*m6!G6X8yfE4-XYfi z+|h_q(Y8WTM*6gIZDGuU`9PO2mzSiJlhD*44;AAFZXaA~R?;XJ_Q`CXH`ecHn3z)d z%_}6-s|$xKBo!KFE(QKGwhK`Ik%i*$REmKS~RhZfG&3t&+kC;mQ;$6>0?r zRlzC{>=}@+~XB6^-mul~BK~3RbLGi}-0svHbYHBVoMB{xlvj&~!n@SF$-9>Wma${?j zM79C;!h4P&j5te^8ngk54D;OQuA(vS#|_~uhYb-B7biGbY+jCxs4LATFExs@JY!tzW?we3~1oGSk z7tmWSgtf;f8xmU$cMY~-a~<1;4u0DK)!NV{lT9^mTNd(r%+>)= zb1dnzE7B(j_H*=^8S})smE&8m4qS)@BntQ9V~5xa_3m?I|4x9&p1Wm=hM>wM*gxL3 z;3O>07}d!Q@5U%_*?)4ArNAfG5bOq3_l(q$eHf!zui8M1SS?tJEnF%$$f#yGO?!zNw7fcas_Z>3-wh2tJWzkP=qB50Z&gYE}oT5GTQT zNTOgP^bz#aO%TD)ymjqr_4 z03#|Pg*K*MW(w1W`i#mHopl70!nQC?Ozjrm@6VSqau1=KmhW$6jbW@ZN-pkvi|A>{T-G_i-!NY9uHd0tvr`ICU1Kofm^;c#G@v09S>YJBYj>2t16E! zumrM+-2h&jv}&;W1q2=e1pv%x_m%()&M>YH_VRZIe-BDsJ?F*lvm)JSLOfxQ-Eg0N z{2F|TYxLPu{!CLnLDgx{ZTn&!d*$S~0sE5p7^QiQ(7_>kGS88ix0#&Lxt^aQy|kyA zGU#&SucXj znv#?wDX-&O(5q96)|d_Tr~{-NlyC~~n5Dep&uK;N5N5lB3e^1i2e|`0TMMQ14HT$D{@tWR^zTXO-z(Yw-&DcX-a`Jwz<)8p=KqBi zeCXBM{evqQ`=3lOsC3YO0}HTR9QDfo0t?Rm6D(-{-@t;`{}n6TGDEE z)nEt=kVvi|>sFBFh4Ap_Ibh}?=1GF*G|e6c z!ad}m1pZm5CeF*SAlxpGDRR1gbr_%W=G{E#(6VwY5K`f=URVL!n^3VK)@=&GIU=bD z?`v16R;);LqJ2xElCYi}DOoqedzd348dDO`wC5IReZze{CgA@K`JxE)3ad_dg-|`v zM9=n%=T)FpKMEa4A$nrU?H<+FXuBscU>BfC(r4Ix&@+52;CD0gy%}qmjxvZHl^o6 zRjW##n5$i&Wlk@0XduDE06ZNVcstO{-fr1QtEvl!Q?q@XaGAzR_I&iHVyx`4$ryH^ zAj(yqs7}N%Zd#9Hpn^MN`p#rgE>{pP(_k($P_i!CQ*tgsP%>^JAcwPUE3t57VZy^% z%Rx=8owlB4?eQv%?sniB=7k$UPB*kQVM8pil*JymmM#ADF{C4V0_jT{C3jp-k2b}f z;)%Q{Gmp~ZD66|%P9AI&h!fS#Yukw2+Ue7LO1O|QnMdrn8o|IE|4=IHVm#lF(8r`z z7}>Xh&}7(17@qiC&eOn;jkAnQyKW73&?sPh6Z#WWoNiBTYo(R?HppWs`oinScQ>_eRRc>Cxpu0Max+&cz7NV&mCZ)Xy|OY`t>#okk#hu%U@drW+SU0hR} z;_l7nt7I3%+RA)I-z@t|7L0ifzn}$CDm0Ck5f1GomF10>U86fYw{G_Qwd$p>8^L}4 z4jzZUr7`})yhP!f#!&e-&-;J9@vY^?W%}gcxKmW~lzv0-@bAMg&5fuSNJ%*f{szal zg4|$ANnFx`@aws&n`ylPdMDd&H2;B{;hvev?r6f(v&H)ZjZGmBFGm0{h^SflLXS0! z8{`cF1}%{$1#y=H%EQoTN~)g)d)&-Zfo%yyFrNl%SDQg-Jc&l|Vh!6N*h-MClO6lH z?IP7X18#9|OMzUs`n@E{QA&2==4H`Aeip4_LWL{WsHM~T2SF>5z@xdDGxajCp&{sh^utWIw>;2!9p&<~wiKG4-z z4JbMUH<5!|)P`Y&5qQK#BS&%{44J~m6HEh-caXTnaHxEwjL-sMpDXaivKYN{%)cH? z-}d^G;`f7r|67P2@83Q9JK>e+`;c{ZvU7G)baF7(|JS>Tb^PRCwAJv}Ih*|+Rb#9| zF0PzLN_&{lh7LbgC||wOtRP%UwpIgEghEOEvR5Y%pda52h8P|JjQ0;52ztXJam3og zw9VD8X~u?*Z}yi1WJY8@DBzq~srJACozhBWb;HhXzPFuk@WJT_1kmA{Y;@gY2F8`s z6~tnbHSCnUz;JG3K8)oVsMwl7;|VgLO_u1Ge&pGSDCM!|Yy-Dia3 zdG}l`3yoWh0SvS80+(y2Rgi}Y>G1f2>-=ZpyTCT~fq5m4`KM}9{igf3cMQ>)T4HJb z(eH$n0qZd87lid#K*@wPu0KzXj`11Q;>u1^$e)OD`thZW^D*^O#(#2(;AV-zL^9fU`%v%07`0{+L1NUG<8+bO%=yws8n@3!{9C zlVWCrT83^Dsh48_B^j()v~&vhMD+#Wd}|-9i*~Dt)X?_sudDt6`}wo_g)2z6cMts8 zOawb`>;>*n{RtB5_7Tf+mm-QFeTOI1LFquujpW-fRUZ~jtd%CpVjOkjIY1ahiSGee-^k^P9`t1cDoG3>Rd> z`4x;v;W0y*oIsIL5{RN=k6{|PL|Pj<^Jfs@5&x+F2fw{ar2!lNj7iF+!p7LJq97w; z;O`CYb#;1d%5nOHWNY^MK)phq(k~4D^ikThi_|8odkb^tS*i(B6vs$05XJ_f8<9VX zz>jmAm2F3A?j0wBnRuc$T5zo~#uUVjd`B`vW6BDPZC+)u%(R+)H;yHK>lceN;eo*> zz}{#JbbF1s-H=NdR8wp##hE~DbY=XG^;h5cbFE{Cg6INEtS-)p^Lukb)(QFiC!$syz+kZ z>Gv{^qlAhc)g;l=^sR}zy?`v7(2!xQ2OlS8I0mW)5ug05;aFpr7|1ac&lh-L=GtQD zTny$DjBs1r-kAwLJ{;Oe3Elf0d&Hd;j+g4}Z&&W&vLC`XsZV&qM)#nJ|^ zbi7(6csh3TcTT$&`LQd#woV8Ex`PuKKtCy09gQ}PAoF{B4@)mw1N7R#tuCGz?X2i} zYCg7Bq4vZa=EOYbMj>pgFz)UQ=|;)48=vk?Xg7=0rut!L2z75;PklylfR%T}_{7;eh-N?eAApzkf_uK(g~Q72hMG+21C5{72^4UvV#OYh(Uhl|;$xdrUO?=ZeQW zas4~&;X-^%g0|Fv+fZU7egT4*t6!nWoAXB;B1m|htShj{1!&IMhhBm3wP7 znd{@CQ1<@>p!U>L-XB!pDkzBu+}%JN=V7`u@Uut`SDDp8F~dlT7{ZxzDVysS$2E#b zZd3Q}G);Dm>LT>mqgAEeBSRIA6zHv-A^*uyVqYMXku=s3Vm!Z6;>eh6oUAA+Qe>b4 z>~TmKOuIlbe0S_AeXC;{MngL9z(7da;J`pidhbw=M;hS}FLnaxje~te+gv(MedZ9+ zzL8JU@*m9+@oFV%)QKj7uNV9?tGhUR1GCV*`d}Fmu!5}FAv5Dfx^(o-NE#8`V5Wy1 z3AhZ5W;!A`Wp7zw2GO{Ci*}KtF!R+_g;O*jC&!GFE7sq`qH|-z$IAv4 zi0hdvR|7DlE*$h{12m*A%Lb4wknNm1s$gAjGqSHgsVJ>N17MBeF`?nIC&)SUWZil~UW0)z!Q{8t zj(cG7N|bb=_$3+o;r<3>Pk?KZOxf31yEKEez=O7dr8a>MEFRbe*^wg+UxxrbWLq4% z?1A#C_?0L_T0yZIp=}WSO>|cjzzcnW6>>EwHmwlO7W#9_Hx)sx6+4QMKUMilgUH(z zzXE+;ELoY+&PQ`RCOtIr+@w53^4umoRlZwZGT*K5)B-mtZ~pI=xBPeOvsmCZ)mtHt ztmL|1A*#g=`yCeV1lIw3`PV->1Zr+5!{B#^Ao*L>^4m1yKYTI%C0VNebW>VH=3z~v zOBjs}45WfX=p*T`4N+#nhop=BK>{Fd=V_$V_xoUy?H(btD%@K+@*v3mDjMdt*YH3MDv!Z!zO{Hq{%klVdGJ};d`5@zK%ki%aOV6pcHW;G5u5-gQe?l_KPjV){Q2TovPkA47Q}9~g z2q3ZICU@+@uxv#6lI+^cR9ev-&^Msmp>TrZpkARspn{+Za+Q(Th3hg<<}zsLF{;S) z$&ASy!yQk#ATd^vmi#@~*4hcnDFFC!dWy?t z+hY+T%INuDKhrsSP)=txog!T!DSj9l#@Or{IUA(kKstaL%r4>=K`M3RUf9LZm}wcN zEHQGTWk;DOSSzL&*vKI&=_k}xg2iR32`Sh4Q|6vXSj&aTSEu4c4|EU`NHCQ?`z@nG zTwlR}DXrvzbtt!aR7YzMx&#WQ=8!HfJvq6Q%UdzpjL@mi)R*O{E z&P!?s=`@rPBua((Nxxw&udjWP?x&9bIbg3EhmSg4@`Od~JkXq7q32H&X_V5-ed{Fa z*bdpqW*AaaW3Pb)OQ=*2(!pWON)rr*s<1|!UFHod#tkhJ_Z*TAs{QtYxfPA{N}@Wi zH0#9yu{vRCe@>FR3%Yr&R6`5)Lh8FfBT^_YWfON} z+bWiV9!DY?C5oEPP)umg-6o*pjRHJ>0mNY~3ld+*hXU0&rZqudu8)qje{I$5G@DH!K=f`8@_RP{U|X@`Gfp)HF#dOU%L zTxF=KJ20VMLJZsSD)no(bA28P#ZXq8NF46!!mm{Q-fw@#fyLh8-V%3ZA0)66pgMYv zU5e0xP{NFXDPdbDOs>7acFG9h5q*=F4>6udKh6uNB$uF%QKLw9A8-gphB~IJG*TOs z8kPD&OxW+iX|?wElo0wu=Gcx9qCXqPLv z3d$Pl5^5c73T#I8)Dq_pM?YhxUJ1L~)CrC^?9y#0(cN2b7Mak`{2_^n288>n0YJ*S840R-govtvRVkwanLR)y0ypM8zA3S1D=GcK zd#JaX-;R{`rIN72?4@g4O6+2ZYqS+bpDylo%3gigD74Z;(rVdH?Fr5-q{Wn29~*jm zEMmaGMJ;EDfOFYcaTu0D7M1X2bs~jB82_IWcsTdGS_CsFn;42&p7em}1s5+VR0Wh} zwg;`u8?%U3|1p#x1Z$LKiPbB*wcOb&rZsI5Oong9ZZVR@s*wz!Uf4Xoism({Z}J$L zyEh2#o#z3U2+Tuh-AnM`DJ!>=#fb}u3E{)*3KdE&&vqfP3y5h<^#miAAjj}mxc4d$ zQ+i%tULt-*Z?D`CUEgsAkI*3yQ?V|MJGmVQ@{jd8BUCJeKGP4LbfM)LruJ-;yqoEQ zb#wa1d51qZJO$gu%nvXVII_ocEE60#JVC24Cx048_B4UG69Tr88&O9x%7rLrj$UvI z;$l+AV`3+;e^b`km7C>hH)6UWYg@Nka3AjEn03||Xc>nYh7SFqSfSisAy2wUL})c} zGUzbO3*Ncadf~*yp$$%Vh*avm(C@FPMb`36u2R}{g}#(E+%6?#d8-E0$xvw=p&1ic zE<&bmj@bIq$y0S=)^RfV8}md&un|6bOoVeym0k=vguKOk2v7N`Aw}ZPzC`TDJ`}X_ z0q_>U7J%J#V9Hf~oD(aTGc1=gZ6Qy_QYbyz3>$(~~1J|@4& zUncQ2x#SBMHjCL2>!6cycE@oFfBwwaaPSnoIiRpA-^V*rby=!Q$%Q&Fb>BZof536<2{VJ5Q-7-Bg6?FM-T^f) z*M2~{$u+l5(7!}d)9hU`dDAm9FYn!A0{wzZ$O-AC#e1TiGxGRZkRyBDYVI=J1qEI6 z%aP2wy=dS}dB?k$wiqp+Q2hap9Xn(+j^U7b2X!K_ek!)i{y<7~IeoW7kNW7+Y1XkSz9@BNZ;b zch@zxZJT$LQ6RxaWZv#*=l7>wS4f|b1Nou4oeo=IuR~6edDxlIey3VqnaS7%X;5ZG z1y5*;#@Q2|v%GSCf?s?jHA<@>iz zfttKtge#B1XC1(6D^a<~wXKBB+7jF+z-DA9D`6EZ9 zFGa!o5Yp>rDd9Al@_u6)%cICz;{9daXbQK`F#&GIt>tdW720}$tX6PkTjs_d#2Bh) znV6Qiu>tPft-4~tGFb7~=At{sY!l->QR(a(*kUeD#O;UQ4G> zH*G~mgwHQedY%>xLYSl1;+P67g5|V{Pk5Vedu(QUp()0+KY$-AZ0q|`!zuHsv(anj zJ%;Z`i8(W}^Oea79Qe*nsPxR|U%E+QO+Lvk0%J{CsW%88TwR0>Qv=;8^ET3%qYJ7N znQ7$4H#1~wUXjgM1^4y1MO9&H2jeNOh+|8jQjmI{J$Ro_p2#`UnW?KUxfcDVNRrL7 zAZGV7I${sJf9YO2S_N%&-xXgjvHxzrgZ$sGJ5q8Af90_g{g;Ex|CC3aJ#AR{TniijZ-HRnW=nyQlK^Tas1P;9_-*JvG+$b%}uJk*&CQ@zP0Q!?BHUljAnIFNG#=#;QLqCYm}H7vaR zul^HY6W#%T-l0~n85FsNuK?xvf;ZmC>cL8DtrN*g6r`nN50To0>x8N&M4B0@?iJ1E z7ea(K1+y+?>SxWkp}AHU=*AJJz-fxRO!&ZYTk^w@)%N9UyE{-ApJ%^jMn<;cl? z_K~$pbo*Pbh%rT0mx$~S|D*DR_2Lr4&9{8&^tbXU+5a6z|3gQOO3?hP8p-fi!>Uoo zI(=1?N|baJy#Mi3p3`+^|xCu*~9fnVY z@85BeIiCHRHBQ&#z6W#bBWs$HhcXAi4X_#hZ8;LK9{6yCcP?isINRz>jI*waIp zfNDTW6q6-3YdE50$rJGWB8Ugu7+#Qwuj$=jo(Utq&6-XL69n;fb>D8!`||+N7>Y;2 z*)oQJ?XGpG4*Y6|Lll{rV(guc`E`1Tob8Ovj;VIc9tb4(&S^6#T1*ISY$gWgPkTk# zj5opLqXTcaQ9W`vQ_`tX`zYR797$Zxlt5M}UaYxB+or{277lZ_UT`D(%tE>4f~YtF zDAS~vnKRk2VlQY`xoF8mt-&8scZj3Wxs+jq)$zh4{aHx2N5fi=eagz|e(sX*paS+} zCqg0{8`#Dd*Fieh)$9C`opkiW6F5=vx8v9LO&^ssytS>r$u8F^ z3QaCUWS(Pzq%+9NKOj@Se({^D?-&aC+ZZDFpE2~m$dN$_{~CkrVPv#e$(gV;PyCP& zL<#&T3khgS`2-+J^Ob2Gj!D*slIDqm$O9EE)IM!s)`xz_ZucFV1M6RhY1==CjXs^=`Ai&mCeX>Bd`srKzy z&6xBgx;Gg$>^t&3+1hp!1-G3pY_8D}Ay}I(4I$kndXNu3HsqH=X2#_~(Pr{uBK|2y zSgF$-8KW}PD4NG(^F^aPh3K_pk?%Cee3U517O`OV%elJ`LDvx`T5M+o9{Hjs9P|ch zMDd^{oOr6n?jf)P>#1pn(ShGG-0Rz~WPlB~RYqz&kSpX`jwApg%OK6LTXUhFocd|N z2mdAXofN4%mo0#j>SyBbA|xDXwFBmjgCfAK(cgdpQ*XRt^5INVNGW#bIX@=BYz&Ek zmVB_mcR(q-PK`&-u#BpyLIy*-A}}wwKacKeoUmVh{xx4kz&H~veg}!&-v-HlSYiEZ zzWSF$r}ong=@8wAv}5#2CK%Ykj(Ff#?sz^)ZWV+9C3)j4p8~i-?Q$)8-^kSk2WP}U zGsT+V`kJ7pIdaTeu~~UOk&yf>&f3~r_jNgURaI42=a#L>Q@T|+*YxKX@3z;MYv=FyKn8cw-uP~P%57tl_CKI3Fh*9U_RI|xt&@#NRM|3ZR19Y#3hJC$ z=nSn66OFrn!q}x~S{M`ZpNIVXnmVAzPZ=Gfd!>-6D9~uokj{}gm@p+xD*=VDd&Ma5 z3hUR#O%-L+Q0XJ(yiVI7&Zg+dITiUWJFmUGTegzss&;8atTp;8gzz`^K{r=SHHLz{ zJUaAY&(;+aOD&&?qACp$roep!2Bns2i|Yi9FhihA?v##(Qas8d*?w37B~ik-$fVi) zP%W=^6*LlfKpaKR?!VPhBF#&GG$gt8W|k{bZV z>eoq_j-spFyVqEsx(PKw2FZv_jB|?2b6CZjb{}C@wLOh)TR#yuc5qV5csN4oM<8Rx z5D%bTUiC=VbH9aqS;A*jy?n%CR3+Cq*T_3o5s-him<(kcoYu?x0|*m-7Z0SX#G3Qp6dkj30vc;5=MlODww1E;RJS@%LgR^wtdV#lM1HcNc3eR#3VXT6W?ZZCj z+{|x&A+YWQ#ZTj(Q%|)q{B7l93Lvz1Ty^R!TjDaZboj*TK{`Iiq`1`;I%a(TD`vFb zffACzq}7!zVU!`{K!&i5lFzvgD`KJRQpXkpwqwa)CObj9tD_0|@yX7d3D7mVn% zgDJ*%@*J%N>9o!)rlmB%*dtpuahk^9zzf1rUv5*1w(A(!a4U5}B8PguynH9*| zw9-`GzATk6J_*gHMv|3rr6SWu>#aKB!98~jb$|_i! zq%DE#8=G2DKMexNu3tw?Di0XpFB^sLPEe$+rM4U-1THIuw%yEVn6({p+|4p(I&m7- zG_rB#IA`eiVYCNfpnx($dxf@cE^XIpu>_ih<`8%+ollV}y#=Nc+{vT?G}YDL<}0!?6^b*)TZD z9?aPFAcNH~x!9f)!W)Z4P}?z=aU2|vs_;)=+aXOh2`fl8%1lc{uAdXzu#a!!J0e&knyoNEIDh;^OjT!0HY3E#qj#0W zZm@ZXa>DDoH5j8Qct9v^MS@I_YuiBb#Sj8d1DMl_@0FK-WV z1j%oWkKaAh)F`)d=WWp{BAXK#zp*Yn@Vdw^_fO<4`B=R>j^tbxd)}`On)~5h0@OV( zLr|g>a|4hpO6l8xh!_}pm?vd$1$>lbaC`GYWY~s-VS@+rHshZ`2g|yTwjn@`$&Py= z9H>E{3R_@rIsYzb#)-g|IScWgX`pql#r+8b%yMy@YRZwl=JmB>DbTCf6SaS3;3rk% z$~g>)UR%=Qzbo-u+WO6nR1N;D)Kz&w;k&T&2bSI)7ukm3X|}-%HczIrA9psbz{I&? zsCO9dJd{Aql^_vU_)X%C+YhQ83+HN3Wm2~8s?^a@ACgJyUCl0~Gh*bn^IoN^VJI%X zEBDyB7FF>ghnV9F@L^Y_s0tpmWkD=j8WZnK+h%?xbdASGT$5RyKCMDG+9J%f=Reaa zuhS_Vj;X42sxH`D!lNCx*}o1TSgRaHlWcAdq6(sMArae*m7TQ<_^VD!SH?0!ssV22^ppZ31S}&IlFRw8YS7jz|QlOX? zu%Fa6NO+lFV;PR@o2;9Dj}VULI^8ha;29peCOKp}o<|NTSK-8`$T3?bcd#?)TO25bwrfTz3i;vi^v>vJ<5wZ2laPc`uW6gIh@k4uKd-7vEZDBa#bl_ub z;Q()x*63j#h+3E(`Eks=@J@C|1NY{xq7t~~kVETO#W3+**REl~yT5s{(E*`?#9ky; zXNpAS*iI6cTkAUc3fis7lMjC@d(kb)(ua8$jJQHw!0jI^$_ihVKsbmWKdO=cP65ID z_iM+u4-g!vxUiuf`%E@_6b&)+Jl|ZTe{x|FY;t}`W%&sFT5N45`2XO- z61xRJ0R7gU`2gV`XTWyy;2KoYnE*7iSF=8RvePy{K8`Q2_z;~@VQiG;`Z^;(s4yCg zCal3+u`1yt+6xqD@j|m&?3a|fj{YCY-Z9A1X3hTYvTfV8ZQHhO+qP}nwv8^ET{gS= zt>-ysX3o4b{}VBH#Ll>Pe%W6#Gj^`)x7PJ=YabM=1T4CUQXs z@$7ojaukAtGG(^@l`E|q?4=Wn42M**zUe!4wnc_V=#j5NCyTRnX!2*p2+3`&%~9k| zhE0kqI56*Gvxhq3NXg_&<-{6pC*(#bfYKCXvYh=ESk*yKAEvjT6WG94Icsd!wiJ$W zdo=?3rDM>Kun=X8as4{ff>LQPT0;NULFI~YYXhgX|2Rewq0#_(g87Lx(Er83(>m^c zH8c>0s5}OOb_36nHR#8bw>~T${(h%LY7f){@>`YQ?I&cMs{S2R`;%V2=OJ134Tn>T zO$5(b`W14ihRI_UkWa}M(5fI_NWvBi)FXn)d$1LE+ru(wEsTDi(RWO}Ei&e*&sx%_ znezD*Fdx(2Pj=I+dnaFqbG}!#_D37&zJPUr>$_+!!Sy{KWU_T6c4yCs7Wy$GC^iSS zpSL6@THoz|{szXA%LUOF{x4wIKbOb<5H$W5Fiihn!7v*_VWBPdWQ5Uv{_lm2NIcaG71V zEs?1fCu}BDu2wDq@G)4>Cv76}B&r8gu2So<&c~yz3rldv92_9lC=u#9{&QqRRvRx)nMdP`ic1-I+MT?o2iLm+e zLVcml(S;VZ1UC-p`(bll2xc8(YedQs;Y zV~uKLXfxirQ^=Sjz6d)g%L7fP4n2UFXe>*x3TCH|tG#(Q*y4YYF)KTq!RW!FOP72R zz2)=Kd_L*!k}PS6>#}Z(*mhWR1ujXuFbDys)eso4sHA+2`EZ!BryNuj+=T#whk^X0 z#=^(V=o1}n2e;C>y@M*hT4g-Nv4)rpD%oCMX?(ik&xNz8{+OR7BZ&?4 z1DNFl`p3Gjp>XH>KY?L?t^5B)iSbEZ|BHtV^J@#Sg^sEQF-DNj$EO*xMMyzKrj{bV zE3gyF;D?cw;2L>7!8?kIFh2;YBfYkItYgSk0_z}lDwFtb>-XsWlKZ^%xSjXY?#FNg zjwnzndK-Ehh8y}+G&0eQxM{#80OJzmg@QsFieH|0Q?&a^WLFe`U?#6EfUW{k?IN~ z`3nsDNj*hf5*zKfP7U=qE(WbrE)#n)`;vLoGmEGrTY6-yDQkLUtSWnQWUMQTdPJNs z58}zgIjv)@kfybKjOx-MqGS6nuL()k4T_UlRUlt?Ld)yJLWjfi@FOHJIMJ@6SVbud zgXX5p44vpX(Ynx_lAq)Cum@&wgr_UcG1Ev(jZ7m44DaVB ztc%-qL2+@#DRFakqo`!9oDDM(SF)G(hRYE-vX_;krnYF#ZvAzxo-c)Q_r97uC6st0 zBWqO4BcrkfBcEm941v)DO7rhkB8{sLuL1pfhsE$96!7?%DGhG7?_{x>iT;V&>uROdgzu#>;Q zu=XnXD%9F8NESSndA_4Ex>?{{@C=jUeQ5O_ zekFOZa=hTge)2T8$%QhRkZBzQCdfopp~yC_PY{8lK+=qHT8 z(Y6!N>w;F=*-&3G@c{MlEc$$8d%p zJJ;sces#Ff`kLR@z6M~Nhv9Rb1zL(j7sB90Mm zXW^As=6lu7)lP&_YRq7{;TJqp8~m$8Y^%F@3M($&J>4oi+bXJ`_{C$e64F!cqmJRD zM^xOGSKzZ_{gYqHMNP*?nWg1we;DBukO$d|_FGvuW)NUx$ipnrU?J@jo;8?9;gVo$^q-NN+le9M?2+ zDu{c$V~kcF#Y<#lGPziLtRpRGrWsmtCTKnIDLozOsgNqTXZN0u4p2o9t2(*%$)^)= z)P`I=M%m4}x~2naWhvGN|Dwd89x2zIK}pmi(}f{(swF9#Rv5dg5 z%6RsWU`p9j1}D~-xd}5})Sz)RX{;cTr_bk7+CMu&kw}sUbJ_gb8XXmN-@ZODVH_pV z0m^I;V<9BSy46Olorae^4kkg;&$x%qh`#fP3Ah9aVhwoXKwcX|yKNVtna)Q&W|-&o zW0-PJ4J$nHIl78`IwxqMAw)t~GHvSfW)=_gW|kiFK`zqajbwsmsLS($TL8f0;fH%a zL&teu_<_@plJN(lA93zOykxr^%|j26_g4WAZ{#hY7sfM#Foq`vbLfLbnpX8~1ksJ=GVJ@=p>s-HZPCzLpG!eao2_gfdlHQ`ecDbj$@_srHVMlX;>DE?o|;R@2(^dy z`Guiq56Q^0-d@qBdtF|M)>a`z7Qzg;viybEPRPZ~OSo3^>o8?%PloN|g4r2-rJdwx zWgIW(U?%jhhX~b$6C^W+YEy8=Y6JDD`Pun_`d9;=AyD1+jf|BFGg*ziR=KFFpTA5h zG=3priI54U$vH1EX)88WL9~*wzKN4{)3bgIqc)(prD*5Rg$tiLj~U`bvc^-=KxAc& z9(kd>4YL-9ug%sAT|P!MVayt^r|olth8Um;g%eEY1D=ul%!s)$a8FRYAcNW6E$h2m z_)rR%J^!4`;c;`-f8G*#Vt0x%W1-Dpar5=TuV=0|KJOlV?}^;OtFYsNugi-Btj42< z)i0I1Jej{dJ%Uk4w+b=g?TcmPPMTFN4csUVw%mLzZ~oK4{#1X#<6cg>jF0x1UB~TP zJF+0sNmbyp-HAAufMt<{jFq@}l2!ff70ODYEUKTd%5~6K{)Ktpr~c-0 zD3jLDj8KpCa5?PF)zB|X-Ha4?4Ug-i7ltz?q^C%XVQ?E5%c@!0Ykdq zve9rNHa6^OP6u_n&Q4tmo?{AWRh|by+=R!)q@r#zJ@Ra9qWHU_q!;dr&tRCluUF{> zkn2yd%UZZK9lZK3UVS&8{_A)D?I(b)3xQ-&BguB2Mk%#N0Lx*vM_KQMxMINCf-{d- z{`{IfLK>}Q!)6feSd*@w)-M@0%hp~qs!W^d>!UNz-c2Gd2{e_t)*mE&K)YA$ac2;< z4SRawU-TXGM38S`6Bm3EC7bhiFpJ=iQ|)@Z;zYlTN^!7@6}}R31uAd5Kr0sY*u{%5 zD$y%3AThL|S)fP0FvcvV@nfDo@CqA-m~E#RIvz#(P1}Rap;A>BHl+^F@ns6)7MwdX zO_x}h<7&%BobhV-6)a1Co>O}UZHVC56xTGv{OL01(t(DdJ?j!izU>Ll9T~V`?8F|& zsurS}M;(Ypc+nz7mO8QBLs4hfaxPYK#=Dj5oOIsQq#Wd15ca!z?WFukzw&OiE_Apq z;BuKy*>2(NIdzyH3ZH;DTnvp+Axu4rkBI~ymAsGCfU;HFS|dGtW67C3)T{8qe%S^6 z8j)RyBD+8pkT*@Cd5&ySVC5JY>l&#G)tw5PRd{8uOt7)=wLyUCmn_L?3cC<&bXihq zBtgOs;Zhn3aRj>aV`pY>2b^wOn8>~?Z68KnqK*HT5=TtABc=n@9;b!yWC*n{5Bo&B zOsGQk^-dDAgO;7C#HrX6$5$LD>2@S{AZyvk7^WI3a_3A}v|Cau zw727H)IdEZeMsMpaa1}23YRLAS!3&s=CR?|+r9nY+o zLki{3KL-OsUOPg~Clx4t{7Y4(u?m+KJ1hSt(ZUcCzDYDT3&fnkv#V9#r3LiDr5r5} z-aMx5M#Cq>Tc}jJ(u_hP^+)gy9kGcNmSdDXw3=@c4dgEp?YQ}bM*V@6 zU2oDNW~$;HXD`jEs@9>>7p-y^=#+{>9Pif-P3!I&+}DsR$}40*Qzd-p-nVIg8$hgI;vBYI+ z2^`jn^+Zl{MJM8tEajr&LDFvqElY+HzhZ@yMNUyl#{#&^!qfyjRk>Vs@zmXnTZnn-g)o#3o#uJCc@fvJWv3YM zxo$(MY`7~Y#p(i*ArB7)>ta=5lI{@O;)h|VeGSpk1O$5OdHAuW(K55S^=H2YZ%ilvBBGwp3ZvLp8Jc;0;0*G;@ZDezjh` zA-PxfWD@6QI?GT6yRZnM^s8l|r1xetf)~9fWJaFHT6cBfGkZ?Uh=WXcPru!9ie3&0 z9tdxy8gDvD9Y9}>ny*Z%H}q>x_q|oq(P97C{bZZjL>}Cyt?pYawFl0tyY8Ed#y!N| z%l%~CTq2vl+)>JIJjret=RL9BP=0RXV(E$`))p?-?~tM82=B`cz_Syz8}+d$IqmS~ zj_~dS!=qyo@f@iHPOyZy-8N;}MxCfEY!gjw3EBa;!LoCVEOsqj<%SNQ(ciFlX%+I_ zfoRK3?Vpe(ufdNr^wK1=ZBkiR8IM95pgfO6?+qMnxJ0xkZ)VYTSfq1e8Nac4>}F+m z$%c-;$d&Z+^U_813*RK2KCIe`#yRPVSgj_b+N+z?s3vpcdp73iTlW6!R-Cu!PI3@j z_{zz>a`a?xCV=3L^r|`9%6KPN^wm3Br6vzV6&p@DY~1o*o= zdD`?!rvr?Yq)Z(Xr)JR0ufYIP&%kjw6*CpkWOqV*BOg@;D*R$Jsp`)_wl?VMHGh*; zI}JrA&?JCy5pcyqC|dls)YGf@?a%U4Xuof31?UplRBYb$!v%8F(>)AdpFPMI3hf7L;GBMIoY!(ur2MKo+z9sv4lEazAcbH@%&?@{12VhM)5xkyh~&B zij}aFQUF!Ssumv3{JP(b4oJnPr?i;d=Gzdw-9-%ad39qiM9waE- z9q!2>e7ja<%79GPJX@z;lAaN#BM~PXo9`CGl3#={PTjcjkKA) zZk(oG(tP5CX^bHQGdCt40k-u~jE5#)<*Msdk~Uf|*A$W2WX)&IrTvBC z0vKSHiXkNrfImPHJD*?Y`JLTh&+OMsz|89nlefPbg+2==R-AdkmX2WDiFIPFhw8jW z^32;v(+bXbXWIA%i0!Z*6UY2Qe)Np~=oy0U8S~f}hHDxzbUmT|5R$rKsx20asDaP(zY)I7Mehi@ZPfa16$flZcs$neF^lYhm-QY zo&jA;J@$PIwPNl65NhSTdcEe3q`A!ec6x#0`%Qsc+G*N}+Ns*f)Deq;Ee0C(MeO+^ zIl1FkERo^v$b+T9t%CI}xuo)ObW57Fg8Nq~iBe3hshLY zF>-8b((!D!KyIE~BlsawCtIJ?Ba6)R@KlYHk-SxBws6~}(OKi6Qak0rYqi)^#d9)7 ziByT7^>~l(mHY}x$cfq}HE#P8Q9znx$yh?VWXV`W+GNRCM*3ixD2*A+yNl~a%Vtq7 zgK3!*x=~!f`Y*2(60CZZml{+Y82rs!o3BU@!_fseFbvHQnjkcRrUFU%3i5Pk$j;!N z^zcGxwZZkcL!hAGIqz1a%TpW?L`%Hl*>I{gr&^Po4c25yb9hB@H;0^GB+5kiWA~K! zJjq5$SXtX^2cxQNtsM>9F*vrD)MKI+7{RvVRVlkXXUE^w>bVZeeg}px(3QIdrQw4C zrC<;Ofs}kjc>-`qKtM!ckc6~Lq*_LpVfQyA1Wq9uAATesVJ;s*HXl(wp8!RNw4|)<@Qv^Q_mY2zwpp9~eNcPwdDV5Jd9p(zk(-Cur`0I*$LKdTu zzUID@Jrb(-Dhb`y<|y@P$XO!iS;$!+=XuCkA?HQRnIq?A%ze*Q%ze*w%ze*I>@Jh@ zHtBtH@8@9k>L)bXVV^*^L>YJw|1|LuJBEXgeQyfpe{16X4mAA_6Yt-D8vawQ^+rBM z@zZln;$b8vAOJhU*Y2bi!`BYL7o=4e$0ywvzdftxf&j|OaB)QpcjKv4wYn>h)V!qF zflLG*sH~|ew5jQ7Zhc-b=4H%G_cR`bqWttat$(xB>UQ3FCEN0_LUK*CQ}ef|AzaH>(PU@dLuM8_dOebOuQUW+11FNB#6aBj~>}uh3eEe7L_x^26Ty#J*O%E*#z?mBRm#dEg3xj0@Pqw~eM1O; z-PbSY2$18USs;cH>J-|x6B*xXR{JBZ*oU^G3vN>G zj=$t#Ur7*Kv@jT+vw%_eFh$>~c4d@G%Q5ym0G1ZvglbI{UoRP^nd!J0f@)1ErVyvm zxm9OkQ#4daIFga2$f2Oq(OBFf-icfa-J*(~%4{QUvBHelhRQnIJ<$@3G&ZlFMzY4uNFYKc!;m9==xY~S z=^z#^6t6u+OiDo4rhC8(P8bM^2;@okKv^RcO3g;lATubqZ zm}P+=g|NX~z^Bwih&5pZBV~;wH9lB`My4Rugk`z5AfULLYDnRM^WLpWNK@T1=}l#b zY^Dr~-+ye+5_0q`zEaNM{;XQA-3-~qB zRtP)N-r;y!u?tV-79nL(L=$3Lr{&~JIii5?6oC3B@J{u%eot^#Bx`~-$@-Z5wEQ@I zu7P#%TbFh*e=msKB4aKAfJY0jryg&TfE*!R+(H5b*S(}UTQF6bQ`S30Mh)SRVS3z9!mJ=M`^{HQ%9b6`oY3YsR?3O~QOG$JQH73OZlCT)X_)Lw z1_?W8zeZ(}2v4qtaarnCB&o|`MXrWvS?0BfW8wDt!~+tF(OZ`YFlXD+QxnXoagIlR z65ff%I8T?AJ$)Ux;whFzES4)lE9j@Yi@Nt>Hl0HA47ZbHYBZv{kq!r)V(#0C2`?fH zOzOE7G8h>>OY2`(4Ha!;r8~G;o?id`OZ<3TrD3toPC>*5ICVeVHt#1kT_AR)_u9iE zK!0nxC6!%+w_%nLN^%?5j4JDE&K%08KdzF(f*Td4=5N^?Z z_$R_8-w)eM0Bg9|AU=2Od#?tf=t1C1H2FSz#^V%n%9S z5?~WxT0k}d4gp2DKVsO2&;V><}S$DK%28+-FA4hE`^^W)M3|%mm1igI*@4ui=~wfCTl04as9z! zHOCL^N`jxv+PMPF;}o4xcaZIi&MTnfBYyrB1Cy1%6kph-AygC9D#s~Sj*=CfXNr$p z%knY%(O>BSLC!u9AALdIdqI2h=(|DN0@Dg?s90Vi%WUqa)@q~7AYhjd>zU! zX>q$?Tjn{Mx08*$eb7sfHYRmof5CE)Zbi8hZP~L=`QQZVXMha@wBjTJ5 z=6OMv;st*W(HFU&pifKwqCBMFjb(~66vh=p;|5sTlfdp7+OT89G_uchqLL%p$sn*d zvhP%S#2D_Pw&IeuGAn3FF|MHs4^1t>!XDSZb#u6XS=d8kc;*YtxJAPLZD=|+E3o6rBQkYjL7o?_eH?IOvVG|PHI(jA`{yd#&+?l`2?r=MCZtx zqlm?}?AHr?U!sOfhtktW`8&{&H%rkk$Fg5=3=n;$q(r^f?q2b29FOydk3J`_zfC{< z*Llrb;WDm<%n85kGEdorV11I<*+bml3aZhTKG&%@CRm@3B75@isEHf$Qo3E5P864u z(M44^-q}sCNAK@ftx-7WJsF@+&ec0Nj<4tan;&1}Tw`a~Q$l(maf8{v0$u@)6sZ=K3x6 zpjn_7>&|Qarh}}kP@WnY3azFhI^u8R_W4JUQ zln*wvvepb+KHgs!<3k8_ntFiu}zYrZdd2CVITC+n+LU+Y_;1cwIl5 zP6Th8qVoN9phqqd$<5LXIeG0Ypwms%_@zh>O9CL)4#`(9CCAOw_J__ux;M4GRb?96 zHgZQSdCvcP* z?p9&6jmnz*nybmq7&EyoQ0RUmx8{J<(uo^rHKvAqo$}&It%3Q3VgmC8c)WVS%$`A7 z3c*wEsn3ym9^_a%G4i7A{{!%s7Dg!^RonG#=%xF&s_DNtG5^Y+{M*s{k0jIoshqZ` ze%SpL#a_zukvmy*+#pzzT)1g#5v4MmViqvD%InW6ZY9mRopUX_J-fWUE{G5W5ik$m z8~_|5E*Kb)k5JKyOmR-SDpm*~X*e$|^GK%mC+KcVN~;xaL~mn7J}j^}0CZMLIJ z@5{vrnx7=IhrHhs?*6VEEskJszd#w<#1I@(rvrVpU4B0VtSUsFB9szswezkW&7=JJ z0D_w$`C|As8R|mET{K`R7ONtW5(Mg(k!j~*J>|=#)q2~Mz00c zXpe+|fPSjUxh_caOyn=flNGGeo%HML`6L=mu|SsC-x5Qn#r*1P9&Xs-XFRP285G|o zF?ph7+R=J#S7*}2iuS-Qe`ed(#fflTD{wK7q*E1Vi=NEL5^~iB@F<qsd`eziP&%Jevt@F2LBk-#>&|T%6Al z6iBWmh<1ixe}AwH)wU$kIP@qq#pvoFi#8>QKbnX%s|p__q$n(rRSqG5w@pM#ZLbcg3cE8ma2Y<;hc)(Jh7UQF8(+OiW86F!o2D1) zZc1hV%1N>nae2Bd<$^cDh-^iIY-LV|mGg~~z~h1ON$s1x8RVi6h4uNjSp!RI*rRg< zInFWS=0xYCd1%K9wi?1K);RGgagzZz~ z^+CHCy}f2e%j<<*?6|&gyo&By-~_1AQfJw_;Pi4}i;!V^2r2Vkmra`}2V*C>5}Y~< z^(E2x5TF(9rrdEc24TNQDi>rH)s1pS=$s7^j0(BS9C$V#q90ml50i{axyv0eV5hx% zbuTj%<)eEej~V_NM3mGgaVZLvt}es1E=@xyMRrxfyjl*U8g_&k@Q_|BDZSujf@L_FUtZi&zBk_w1!KcwG}yLJyCpUze1%+k|m@nKTcR zG|%Gl)Y*&ar)@?wsxZPKS_}b!gQ<&__IBaLm_3#o`psVLuz+{)N85mIuLyq{J4RZ9 zoSMA2nu0VQzPQku_|TdJk@gc_QHZTzk%BsNsP5z*dyLbF-z3T(jM~Lh?WaR@qc^Hl zzhb&l60?%-IAO=!5sO#H$Xnpy+dlKH5gzp#~8^>?BX?Y_m2eUsfl- zv4GFCY=gVDz;_*pyys$Wf!GG;&hqu*^Yt=bc3)fHaLCT#pzFPJkKHtIOZb{zX9p;A zPxFBZ?x6ZRy}y>8m~YwsI<2FzXpPlDzPo=z{JR?0zl3!E|4!@wQN3vS?wf(Vg2D4M z*UQY+72Ajl%gu<(0g-Ec=3tG~1cx;?%NlVg&<~LHD6I5pm@8&XXRfoWsX-@1wYi*M zH{RTWz&{_wQqnj+9+3+$Atk&}5~a@PJKC*6Q6)L;xj@B_u+rCUwQFbFdZo8M_0;=e zren856j=^Df3tpf@cGEov?tywL#ZQ;X zk&wY0Ckr!2(NR~{{dQH-q%60Z;z$UfB=^OBC3f3AU|CFd5;HH%ZO~45!!>1UWmXmP zY9?zMUi7IF#j(ZKYR!qYgBnH?PBSkn2lP(KmYm`i_FSj2J`}mrY~$9(+1Mw}KPl#W z7wAm(nA?=S276iQjQWJed(eZ>o0XUwECwdlOeyv!PS?RwjnfHymPgUShw2$a6iity zjmM2?N#%FOaif(K=$|K#%_%dkPcJV|E3POR`bt-$^z}+6D7f(`nS%R<5lT`TKQoDd z*p!LUo1g>e%(Ge$TE6!jiTwy1g?2Q!rG|S+gmAxD1 zl)^XRAWyM7$&y@I>h5T(h4hrQ^JO7PZFN{_2eeMFmS9jh1zcpG@G0SfYRx|1r<^!K zktE_kVh}Lu9@{jYu?d z-`E4meL;}@U*67k@^4>>aBPx4StNg=z+k+&5P0YjtP4+^cz;}&U%KObJ;zpzKe<5$ zrve%fAppL`Mm2)qDCm}VpA)(w58K8>`nQAUAs(mc1H1EU52+b%A(K1y2+yddV!8an zElRZs68G}2!$(&ElzjYismxD3=1o$mE3(209)Ss;20i)R-%Z59oW=kO4FAVcSQE84~ zAnlg@5ARhp-r}r#K&BUf#Fx?ZT^|0B-T>hrjNIco#iHHOsZTWbq(6vucY6DberQ#n zjJEeLw-kPOd3SL3QFVI6A5)8s$+{qhtPOGUOwHYVOjT80} zMQssAZIMQO22kINHIC7vrO zD>Wa`APk!{U{n>tu#KR4Q??$w7;@Q0<+KyI?%xm&GdCoG4AZvi1XEHsc0JN|*1 z5yu1g`a1}O<<3K?|GP&=#rHMl{|$cpYdQZvt}y>gRWl^jN@e;Y>+zsJQ z5#?72iFUU?8zi|Vh=s^yG*c)hiL3;@Opnh!*xLxk0tVkJ(5FJ|X)-`R5ZvawGTqpl8z2PEz5RIsT7dgkhL)spqP|hwdqdt z1C>=ui^--#8A#%>Txyp=yJ-ySYW-)^c}-C+@`wjRsHJ982pVa z9+}?Jd!lhg*@~hZk{QO?XVFDjW024zixNkbay3L$^~oRaK{(&Ky>;4lj@-&RpJmqZ zTyqPi17d(Zzr%3H7_g#Jt=MIqrdZ5_itl#nw-Rma_K|<%1Mmw;uL&Y%b%K}{X`9EjZdV z2{3G;(TOI*>4Awx#C?hKaGeT6nep}TDf04#YV)O17wD+a6XhI4YYzgwL!}&HjP5x~ zjZv2FNixh5o+>HiX#x$+uDKSQUAV^Z&epgJfD||lfFLXgi7vwTvDXt)dFC}m@_LRF z$&R?P%N(Ld(c=5TX*~gVkx@6!(wBb%DNc0hL1;rFCtB`1=EuuJsR4$xYmS3KD$*bW zhOoBKqmmCV2cnV-uME29!z(}`1q8}NC8gg78+cm3GQ^#NR&5&e^j69XcKXN^1V4Us z3PPN}!h|3$K3IGYPZ;0BOBN(a@k1N3r1*^;6|%_-QTx(?&JlU(Sr_zgI1G@lzXb!T z4=#J0Z*XSg-_}aM&9VPkEB)tg`)9e7(O1nER_&=8KiWv7aSLO7%0&svqx$C2@igz-A zXB``wc=lGwPvP0q`aNh}d%+slK!UZ;40j*+YeTh#_dbAq`S%O~)8JnT0`L%C83Lpr zv`+-=Ii70m8>o2bb(b7ao@z@QtiXRmJo)}IrG7xnKI!&fNjyA5V|-!zc0=ky5fOFh|I5^%0#Q`wV(IME;z?KAbnXRLZ2(XAKY9MUUL z03YHjQUDrwxA-0jAl-%M8X9t++ScV<@u>=69fEsKKNj*8Tg3}0#}(c32US2Dc(=?R z4&V)YDjze;;?L93x$SVM&x+UbyY_n@9D z677lHfrl(MsNW=j1*+-L$2u5U4xY{NYYPc5OP{LTIK_x#de=sOt6A(Vjs)Ew|Wg zRK6dUhuewTO2F(*U$S3{0ETyU8ZD#<;MFQZzKmcc;ScNI zBe=`timW!P3zKkdZ}+y>5%5E~jUDWVugb)|&a(lDZ(>8+-N3jV9%$e3*HKnagdY|f zX$=Y_&mmi4y|db>7M)4XrPceE96%6BM#5bZw zZ6-Z=W4ljHAbv7Z9Bd#3U>g zjn-s&YR@>wp!~FivSek{k`;-F_=&lk9ZwgF)u0hmw{l4Kvw1%FFghRwU5=ai&YZnn zle!eYbTnyzpF@xCJ0M2}>T4lWie=&X&p-$m15%9j?UPI0!w8F8t9di2ksHFQt#y5L zZgI>T16b3zeKt?um;p5wh`HW73t^BTi?D-w*}Dp}3khaeuIS5Qu6A84r$s^|WDeF*-MfC;q zIEh#`+uXpaVO8SMBT1`95)lX~i-e_x;|B0Tdb*+IB=prm^6?8hyv3i4rcl`{hr&`2 zLm8Zlc?EJJPDhzE_V)0)3-g~~8$TgtMG519_Zbgl3N?NbmIv|>m4HVxMjR60V8 zJPSsKZxM<)Kpk>QLZ5>_Bx8XW3vEx)9NGu(q>CT7qmmZ>gSyf;MyHK7T zca3`T_HUZ+cvy zi|i|0lm@%4gQ!TX!U27AH~n}k%yATw&`6Ym>(&{)_oM2dkl=bafLfhI3%Y?oFf;Oy6 zP_epWdhu6EtLA%q!x`qY8RgU2nJeiw(66shX7h^@F?We+FxIovc}gW}jhUs4#CR1X zryX^r&BH)YHd&cWcZPG*EvhhuVo*g3m?IKog`!)XeB*{-3%i&?#MwM1eIrU1853H4 z-#TG!%H$VJ1`SVM$s}1}9)_g_ULMoqtJ7H~HF#9H*-{Z#w{npcTX#_prSo>{Mh%rt zrgM3+TAO2|0& zaQ@DV`~HmpF_heZDC3gm#Se+~ynPi=md?F*`D!{u0g09@!ZlQdB3{o+^g7&VeyMUi zy3T7#hsN8%n8e-O!6v&o<%lr@lfmo}Sh{%35HEL90Fd1g74(^N6$O?ZG?)U=5VHo- z5VIyvkez@wdK`?o0@fkokkfu7^j(&H_Y{L3K))b4dR~bv%|L;c?w3+rU>@ky_$ay8f@>Q+P= zRK)B1g5#>X)6OZm^9BF{h5$!`BO{R$(8uyq1Tf~F9vnl~?WLq+e+X_0?q3y9DhSfn zI^Nwu=HUw-Xg@8a3fD$J<_(h_Mg}Ln9|Y*@h_QEXpkazD`!OV?otUBdurgqT5A^CC;RejFeGyhsvq7rwM8@jYgOHC`xTWC2k~j z1*I@JFGKSx?KgohBc#jd!v=T)Izdbm(dYF80zyd`)ffbjKU8*#1Vrp_9bMEGb}OzF zkA5!j1H)wi>J70$dPn)k6fv>>e~q09Je1w{z$e*v5klGb>}B6IWN&PRqQO|R#2`Cm zD_gRb$YhD4mnc$X$r6feSt8UF$&zGwP5ke?zhXw?Uw1xt-1(UMopa7T&vWOQ=iYPn z=a>v0`P@%`DzY{8AoQ$M1V6Fs5Ovf`hYBVOowKqL0o5ZzL`2^xI=Lk?>NSbj6hY?%D^bp-}Kxb*T`mG7~T z&>G3_GtkqvDJB;1^%GENreMH({^URz={ND6GQ8hjwh_rZ=#D=u&8x#;S5q?lJzVcX zeVK@C9d~JedSRHBh!@xUEc23E%COH1&Zm2N_;dW;Z?5>5m~kDst!CJfw6wuwUB5qe z`j$Dm6h50B!tvTrRPU*O1t#RRP&>buTg16w(N1!{TW&7pxp%cY;U#ivu}SnT;%*!> zFVC0AwU&=@vd`Uee%pIa1;sT}sSz=^Twgx-{}j)zoSZ^@yu98Ct@pquA}_45DXH zq*V>d)Gx{xxQ{etl-)Rgs`bIdF$-G33iv{K*I5}Q>XFq0^vUhH#^O=gUIM4dof?|G zXirmqnj}@Ct7=%QhKtvahtcf~ky4JUXm@U!ALJ8}DR(-tu%e9F!>!0#+BBK4p%p#T z_P9e*=?uN6)~e2G%3im+?C)H|KZu^j9;1~2mtGTy3s5RvkA@?;o2cem^!_yHBDuj3 ziDll2(d%ly#DxbJ)9sx_dROeIg_SRjFI$|*6cILnPW9h@5|N}y17Z%U2G%?ZW_A3~ z_1p-0+w}Sr(~G{Ws9Jatd-RZ?fIY|&4XO4fVKI*%NYBeY>O5;uS$W9)OeDWAwT+yz zd4gL5&&Y=-u9(_rj$+#6l_3sq)(Q5+5)!`wPlmebHY;cQW|_uuiNq49-+*0YSX32q zAVq55QdbqFgV-p^;#HOqc_(^li!Rpa$68DgliVMCwU|HLmNPhHZ(1J}bv3JBlR0be z<8uNZ$`ys|Do~mIS_)Z7Z#|XR%+JYvb|#)D&)X+nP&@{`@(3n?N=A;U*!gtky@dCc z4eX0wk+gU2O{Y}F&!Kx3}4#ZBjzi)uKY)FORCsy8H_*||J9rA95mXMco9XNctjRbv-N zqXKo@Y)Pd(E&KAL>189WppF+dj<)`dANY*~I5kr^wNp4FD3|385UE9~avX{j<|zj+ z?4fSz$uEg1bdbp1YkRDnC2{2H&}``52{jr|vzZdh=QU)f7rEMm;bEK;87(F()9aOG zn7|NSo!)ECulaRH7GHDM*R}YD>>X;esdq6AMmyVIcGt|gykNU|i=uT%-~*KFo88Sa zYQdY~yqkVEy>5myx>T2M^2#2`BTIJP6tyz)qRmjzjjRVsi^yxedoohKj~M zqY2brj9u7sxZ#~NMy%DAapT5Ue~t}{_nu-K!(?y_S1Mg&wT2K|Bu1m{05OT_5?4Om zMZP{&_Z|h?H@%6^3|E!*hJBit_r}aNaGHm#q?nV9XP(KoJ289*)k?WEOk8t1H-oR6 zG-A#mH-Tt0T|J99(3|KCcXvMpvOqn9zuPflfWO?V8I1f7MV6}XUwi6c z&a=-&;8mg2qS|M_v(3KJeB*k*(5L3yM~ze9YcscG_Sh3RY0DRHp~;h)6wgQp7Du~Z zt$@56GRQ^i35QU@n=SKEh8V6QjK*LiXS3Z51^HLCdP58e>!d`Z3I=f@_8C#q!pRAR z4L0Sjcj0oYSqm&1Cs!k%k=$DJA7|eX5AJy9bRDxdy;;o;fw8w}P=oiby|WbCB(r|5 zW*@iqsU$nBVc=U>Ib<^$%6Araxnhs5Ba7Z4zta4&(S37v7M*%a?B~^u@9Ma@b#g?> zE`gA;W(ne2R{wfrN;|@Cbkf@lE1Ddw&Ud-WYZ#;Xf(qS3P2Fyg$^G);W0Ql2QyrU3 zTyoB*4tM9C*X9Y;?>YuU9pvSmkJ?w#wP>8{+R@=0NZb)!nP+})=z#~z4PMF_24_JN zZX|V6v_{)G6$pC_%12087vX>1;!6tg^jwdK0%_d&4!New|GLVmGu(F+o=ZXG9&go5 zuH~-8-5UeH8cdQ{V|m%1T|8Zf^GoBVouLJ?jPu z_e)|X^slZ4O2ISOX3iwuEBMZg>PI{QNu!JuA$O=lR|00n{cl~<6^BV@yBan0KonOG zw_SUsO?E5pKoNCEK)d?>Or4_--Il72^oWb&#r1W?IU{=8)X-$(ON>#1*BV5dI`{S@ zc|Fe1j7A<{I(||;3dwJfdS7!i&3@WQW_np+rtXmMyYQNo+_~DK^-o3XEJZ<>Q#HMY zHF63wV=*%~XnJ-8E(%^o2-=>l)FWs1xbACh72NH>2C{wVKUI3De1oc4?y(ij-N> zKA{$a&1}MBkRrheyfjnLsCu7 zD2%!HY3aASaW)HnxiPHcbciR#BmA%)yp|^l_ML4}kC(o%?{XE#4NmS3QJrz>&IH(O z5NXH-*2cT?jNfz_3Y8ADG@U-;K%{!AIGeTts>H&{=97T-h4a&RlZgLADUEh*%Wy*- z&!KEyL>67GmDI?g=|w9@>feunE-K4w+d%Gpi0TGO8QeZJcZ+kgR-_sW3W7dk?#&eo)jO1(rmu&J@ zhu*nOk6h2VEBF!R`K9pUeKuj4p~LJ2;!)B{QPMH}BSJo=Lf=e;zL^S9nFvvt3dJ3M zXBF#hMu|92iMX85IQ@)7wq4pUKEeAOW!EB84r!KL_{Qkj_m&M7!$L39y|aYwnOv|k zxsb?+et6wGn6jYXV`xK`~PyIjv~ZT^O9@?3qjYtQ@d|MHE- z9q_yp@~VKj`1>mpr{RKOF%$Ni1+O0HyFWah9qYu~FYGiD_39zHJCaGURUG*cTGR`h zI{lwNd(dFVl&AXs75;=D+uFoZr(I!GAb1phT)Gw$bvId{3%znNGv_CTy3gaOFK-w^vMyfvuC|k zEk!*t8%1Rn%W#ujlyf~y>ly~uO7Vr0&yYweuU*k*bJ9|k^5jIy=I5Yrx{JZV8%N2; z1 zf>a(^4vs+^TxoDW1DmUNyAXr>i95uDdic6y zv7Wo=s=rz*!w7Cc1^^ephZ%!gB|Bic4hRpVi=)eKhMQ}Eam)d6%z$(P+hT#%Kfnie zz>NJpKtgb57cT=BA0z^_30pFvjxA~w5RL#Q7asE~7@MC=BTrLbduQx${K0m;K6SEt z0O>ra`08>1clk-fa&$e+eGq?ut?{r1*8xx!@D*&X^X=jaUT&%D;ppPz>y6-(BCOzX z>%n)}eckK7Q9RfPP^1Y{97d{}?EzsGI0e2e@f-vwGK49)lmT;wKo&Hp_>`l-TEA&@ zgfIo2T?|bGYrUdC0#V>rIHis2cM4&~xy+$gJV2K;;L`Z#j~gOe43MUG_d~G#?WkfZ z`0SUUa^uJVfozEFBtZRuWB>nt*j?mK^c|SR1qgKj4>ti0@SmpnDbRm7!g}Qx1*Pr> zbn35k6L7;h%g)2Fno$@C&)o_8wBo*|7ix56>QU90MdK|a|r%4+-kN3 z`rlIg-R(sDx{TTk*x8Z_0%62c3v+4&B-?HQwx#$B zOP}wvP{JN^n!wtEc*LNyTSRjY(_hoNfv1xb!ut=?h*WtS=L!IN1A~EcHBKpqZ$Wp6 zNm${=cO%QDfW!cfJXRbI1hQzqMZzwwwE#0O_@Y6WA}>N~+zlw~KprkUN*rQ~g3XW) z>hBvVc79vI&ApC4;}$#Zr2V$gcP9)tZ#DiY3gwCiBd|tlCkr<)|A z$s=q&+<@a;coOBsZ4t1+mO=fqkKu-K#`m$tgq^fM8VffBF20Y|T*ZU^g`sexJK_6S zM+z>Bu#s>h{@|a#lu_Hgx1;?0*-*G~RCw{s?wCi2_(x;m#-P9-N4vruz`rmT?zS#$ z+=}huUyM&9Y%tu72KYyh_oMCpzt&OiwiRsWF^RiU6aS>o^>jDt9}S1QAPs*cjyC-c l{R`XSUdQ8KwC1(^2K;3{5-`0&AadX_PX~e2Vz09x{|9lFYjOYp literal 0 HcmV?d00001 diff --git a/arduino-0017-linux-x64/lib/about.jpg b/arduino-0017-linux-x64/lib/about.jpg new file mode 100755 index 0000000000000000000000000000000000000000..90afdb08b193f4f77b8233fd1b4ac01e5b68d6b7 GIT binary patch literal 115730 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 z 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 W11DM5O4u2^wDCT)ddTu~>i+;6c+36( literal 0 HcmV?d00001 diff --git a/arduino-0017-linux-x64/lib/antlr.jar b/arduino-0017-linux-x64/lib/antlr.jar new file mode 100644 index 0000000000000000000000000000000000000000..42f25e5407012bc8fe5a18fda9fa5b2e326833fc GIT binary patch literal 443876 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

    6tEy?3fjmFQaJAyv=>fNhY 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 literal 0 HcmV?d00001 diff --git a/arduino-0017-linux-x64/lib/core.jar b/arduino-0017-linux-x64/lib/core.jar new file mode 100644 index 0000000000000000000000000000000000000000..2db7c3b72defdd2c19d9d132d4d0a2c06a0edbf6 GIT binary patch literal 229715 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

    }PeeXcc|NmWiAem+SaXK{aya8>;aMU@QJNpF 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 z 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%0DcNIuR~i#KcW#q4Vza%$)f}rRN=xh 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

    @32dV4B|wON<~`P(zZ&qV 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