001    /*
002     * Copyright (c) 2011, Willem Cazander
003     * All rights reserved.
004     *
005     * Redistribution and use in source and binary forms, with or without modification, are permitted provided
006     * that the following conditions are met:
007     * 
008     * * Redistributions of source code must retain the above copyright notice, this list of conditions and the
009     *   following disclaimer.
010     * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
011     *   the following disclaimer in the documentation and/or other materials provided with the distribution.
012     * 
013     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
014     * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
015     * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
016     * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
018     * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
019     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
020     * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
021     * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
022     */
023    
024    package org.nongnu.pulsefire.device.flash.avr;
025    
026    /**
027     * Stk500v2Command lists all tokes used in stk500v2 protocol definition.
028     * 
029     * @author Willem Cazander
030     */
031    public enum Stk500v2Command implements FlashCommandToken {
032    
033            MESSAGE_START                       (0x1B),//= ESC = 27 decimal
034            TOKEN                               (0x0E),
035            
036            // *****************[ STK general command constants ]**************************
037            
038            CMD_SIGN_ON                         (0x01),
039            CMD_SET_PARAMETER                   (0x02),
040            CMD_GET_PARAMETER                   (0x03),
041            CMD_SET_DEVICE_PARAMETERS           (0x04),
042            CMD_OSCCAL                          (0x05),
043            CMD_LOAD_ADDRESS                    (0x06),
044            CMD_FIRMWARE_UPGRADE                (0x07),
045            
046            
047            // *****************[ STK ISP command constants ]******************************
048            
049            CMD_ENTER_PROGMODE_ISP              (0x10),
050            CMD_LEAVE_PROGMODE_ISP              (0x11),
051            CMD_CHIP_ERASE_ISP                  (0x12),
052            CMD_PROGRAM_FLASH_ISP               (0x13),
053            CMD_READ_FLASH_ISP                  (0x14),
054            CMD_PROGRAM_EEPROM_ISP              (0x15),
055            CMD_READ_EEPROM_ISP                 (0x16),
056            CMD_PROGRAM_FUSE_ISP                (0x17),
057            CMD_READ_FUSE_ISP                   (0x18),
058            CMD_PROGRAM_LOCK_ISP                (0x19),
059            CMD_READ_LOCK_ISP                   (0x1A),
060            CMD_READ_SIGNATURE_ISP              (0x1B),
061            CMD_READ_OSCCAL_ISP                 (0x1C),
062            CMD_SPI_MULTI                       (0x1D),
063            
064            // *****************[ STK PP command constants ]*******************************
065            
066            CMD_ENTER_PROGMODE_PP               (0x20),
067            CMD_LEAVE_PROGMODE_PP               (0x21),
068            CMD_CHIP_ERASE_PP                   (0x22),
069            CMD_PROGRAM_FLASH_PP                (0x23),
070            CMD_READ_FLASH_PP                   (0x24),
071            CMD_PROGRAM_EEPROM_PP               (0x25),
072            CMD_READ_EEPROM_PP                  (0x26),
073            CMD_PROGRAM_FUSE_PP                 (0x27),
074            CMD_READ_FUSE_PP                    (0x28),
075            CMD_PROGRAM_LOCK_PP                 (0x29),
076            CMD_READ_LOCK_PP                    (0x2A),
077            CMD_READ_SIGNATURE_PP               (0x2B),
078            CMD_READ_OSCCAL_PP                  (0x2C),
079            CMD_SET_CONTROL_STACK               (0x2D),
080            
081            // *****************[ STK HVSP command constants ]*****************************
082            
083            CMD_ENTER_PROGMODE_HVSP             (0x30),
084            CMD_LEAVE_PROGMODE_HVSP             (0x31),
085            CMD_CHIP_ERASE_HVSP                 (0x32),
086            CMD_PROGRAM_FLASH_HVSP              (0x33),
087            CMD_READ_FLASH_HVSP                 (0x34),
088            CMD_PROGRAM_EEPROM_HVSP             (0x35),
089            CMD_READ_EEPROM_HVSP                (0x36),
090            CMD_PROGRAM_FUSE_HVSP               (0x37),
091            CMD_READ_FUSE_HVSP                  (0x38),
092            CMD_PROGRAM_LOCK_HVSP               (0x39),
093            CMD_READ_LOCK_HVSP                  (0x3A),
094            CMD_READ_SIGNATURE_HVSP             (0x3B),
095            CMD_READ_OSCCAL_HVSP                (0x3C),
096            
097            // *****************[ STK status constants ]***************************
098            
099            // Success
100            STATUS_CMD_OK                       (0x00),
101            
102            // Warnings
103            STATUS_CMD_TOUT                     (0x80),
104            STATUS_RDY_BSY_TOUT                 (0x81),
105            STATUS_SET_PARAM_MISSING            (0x82),
106            
107            // Errors
108            STATUS_CMD_FAILED                   (0xC0),
109            STATUS_CKSUM_ERROR                  (0xC1),
110            STATUS_CMD_UNKNOWN                  (0xC9),
111            
112            // *****************[ STK parameter constants ]***************************
113            PARAM_BUILD_NUMBER_LOW              (0x80),
114            PARAM_BUILD_NUMBER_HIGH             (0x81),
115            PARAM_HW_VER                        (0x90),
116            PARAM_SW_MAJOR                      (0x91),
117            PARAM_SW_MINOR                      (0x92),
118            PARAM_VTARGET                       (0x94),
119            PARAM_VADJUST                       (0x95),
120            PARAM_OSC_PSCALE                    (0x96),
121            PARAM_OSC_CMATCH                    (0x97),
122            PARAM_SCK_DURATION                  (0x98),
123            PARAM_TOPCARD_DETECT                (0x9A),
124            PARAM_STATUS                        (0x9C),
125            PARAM_DATA                          (0x9D),
126            PARAM_RESET_POLARITY                (0x9E),
127            PARAM_CONTROLLER_INIT               (0x9F),
128            
129            // *****************[ STK answer constants ]***************************
130            
131            ANSWER_CKSUM_ERROR                  (0xB0);
132    
133            private final Integer token;
134            private Stk500v2Command(Integer token) {
135                    this.token = token;
136            }
137    
138            public Integer getToken() {
139                    return token;
140            }
141            
142            static public Stk500v2Command valueOfToken(Integer token) {
143                    for (Stk500v2Command c:values()) {
144                            if (c.getToken().equals(token)) {
145                                    return c;
146                            }
147                    }
148                    return null;
149            }
150    }