Die Methode write()

Die Implementierung der write-Methode gestaltet sich ähnlich zu jener von read. Im Wesentlichen muss der I2C-Lese- in einen Schreibzugriff umgeschrieben werden. Außerdem kommt nun der im Konstruktor berechnete Parameter maxburst zum Einsatz, der die Anzahl der pro Seite beschreibbaren Bytes bestimmt.

83    /** Writes a byte array to the serial EEPROM.
84     * @param data the byte array to write
85     * @param startindex the index in data to start transmitting
86     * @param length number of bytes to read
87     * @param wordaddr the word address of the EEprom to start writing
88     * @return the number of bytes written (could be less than array
89     *         stop-startindex)
90     * @throws IOException on communication error (maybe data is partially
91     *         transmitted)
92     */
93    public int write(byte[] data,
94                     int startindex,
95                     int length,
96                     int wordaddr) throws IOException {
97      int written=0,stopindex=startindex+length;
98      int i = size-wordaddr+startindex;
99    
100      // check stopindex is inside param boundaries
101      if (stopindex > i) stopindex = i;
102      while (startindex < stopindex) {
103        int count = stopindex-startindex; // transfer length
104        int devaddr = address+((wordaddr>>7)&14); // write address
105        i = 256-(wordaddr&255);
106        if (count > i) count=i; // page boundry
107        if (count > maxburst) count = maxburst; // maximum burst transfer
108    
109        // create write buffer
110        byte[] buf = new byte[count+1];
111        buf[0] = (byte)(wordaddr&255);
112        for (i = 0; i < count; i++) // copy data to write buffer
113          buf[i+1] = data[i+startindex];
114    
115        // I2C access
116        I2C i2c = new I2C(devaddr);
117        i2c.write(buf, 0, count+1);
118    
119        // update variables
120        startindex += count;
121        wordaddr += count;
122        written += count;
123      }
124      // return number of bytes written
125      return written;
126    }
Listing 3: Auszug aus SerialEEPROM.java